matlab如何添加自定义信噪比的噪声信号? 20

clc%清屏N=7;%N为总长,包括数据位和汉明码位msg=randint(100,4)[m,n]=size(msg);%返回矩阵的行数m(即几组信号),列数n(即数据的... clc %清屏
N=7;%N为总长,包括数据位和汉明码位
msg=randint(100,4)
[m,n]=size(msg);%返回矩阵的行数m(即几组信号),列数n(即数据的位数)
code=encode(msg,N,n,'hamming/binary'); %N=7 n=4信息位 %直接调用matlab库函数进行汉明编码
SNR=1:20 %定义信噪比的范围为1~20
for SNR=1:20
code_noise=rem(code+randn(m,N)>0.95,2); %%%加高斯白噪声
rcv=decode(code_noise,N,n,'hamming'); %汉明译码
[number,ratio]=symerr(rcv,msg); %%symerr用来求误码率
disp(['The bit error rate is:',num2str(ratio)]);
%计算译码后的误码率(即整个系统的误码率)
%symerr比较两个数据集计算出两者的不同符号的个数和误符号率。
%[number,ratio]=symerr(x,y),其中number为符号不同的数目,ratio等于%number/min(x,y)。
%num2str函数将数字转化为字符串
semilogy(x,ratio,'-p'); %semilogy函数对误符号率ratio求对数画图,点显示为星形
end
xlabel('高斯信道中的信噪比/dB');%写x坐标
ylabel('误码率');%写y坐标
grid on;%画网格表

code_noise那部分是对的吧?但是产生的误码率曲线和信噪比的变化没有关系啊?
怎么产生随信噪比变化的误码率呢?
QQ:843332361 请帮忙~
展开
 我来答
爱教育爱学习
高粉答主

2019-10-20 · 学而不思则罔,思而不学则殆
爱教育爱学习
采纳数:384 获赞数:112734

向TA提问 私信TA
展开全部

clear all;

close all;

x=0:0.2:10;

data1=sin(x);

plot(x,data1);

hold on;

data2=awgn(data1,10*log10(0.05));

plot(x,data2,'r-');

hold off;

扩展资料

matlab添加白噪声叠加到信号:

function [Y,NOISE] = noisegen(X,SNR)

% noisegen add white Gaussian noise to a signal.

% [Y, NOISE] = NOISEGEN(X,SNR) adds white Gaussian NOISE to X.  The SNR is in dB.

NOISE=randn(size(X));

NOISE=NOISE-mean(NOISE);

signal_power = 1/length(X)*sum(X.*X);

noise_variance = signal_power / ( 10^(SNR/10) );

NOISE=sqrt(noise_variance)/std(NOISE)*NOISE;

Y=X+NOISE;

其中X是纯信号,SNR是要求的信噪比,Y是带噪信号,NOISE是叠加在信号上的噪声。

杨好巨蟹座
推荐于2017-09-27 · TA获得超过5万个赞
知道大有可为答主
回答量:6197
采纳率:80%
帮助的人:1309万
展开全部
以高斯噪声为例:若有用信号s(n)的最大幅度am,要求得到的信噪比为p,则p=10log10[(am^2)/b^2],用这个公式反推出高斯噪声的方差b^2,若s(n)单通道实信号,则Matlab程序就是x=s+b*randn(size(s));若s(n)是正交双通道信号,则Matlab程序就是x=s+b/sqrt(2)*randn(size(s))。

如果s(n)是一个N行、2列的复信号,前后两列各表示实部和虚部,则b/sqrt(2)*randn(size(s))产生的也是N×2的高斯分布噪声,实部和虚部的方差均为b/sqrt(2)。实部和虚部分别产生也可以,但不能用b*randn(size(s))。第一,如果这样产生噪声,那么最终信号的信噪比应该用p=10log10[(am^2)/(2*b^2)];第二,不能用size(s),应该用size(c),c为s(n)的实(虚)部列矢量的长度。

Matlab中计算信噪比方式:

%===========================Happy===================================%
function snr=SNR(I,In)
% 计算信号噪声比函数
% by Qulei
% I :original signal
% In:noisy signal(ie. Original signal + noise signal)
% snr=10*log10(sigma2(I2)/sigma2(I2-I1))

[row,col,nchannel]=size(I);

snr=0;
if nchannel==1%gray image
Ps=sum(sum((I-mean(mean(I))).^2));%signal power
Pn=sum(sum((I-In).^2));%noise power
snr=10*log10(Ps/Pn);
elseif nchannel==3%color image
for i=1:3
Ps=sum(sum((I(:,:,i)-mean(mean(I(:,:,i)))).^2));%signal power
Pn=sum(sum((I(:,:,i)-In(:,:,i)).^2));%noise power
snr=snr+10*log10(Ps/Pn);
end
snr=snr/3;
end
%===================================================================%

转:

符号的平均功率 每比特信号能量/符号周期
SNR信噪比 = ------------------------- = ----------------------------------------- =
噪声的平均功率 噪声单边功率普密度*符号带宽

Eb/T 在限带情况下 T*B=1 Eb
= ---------- ================== ---------
N0*B N0
实际系统中噪声的单边功率普密度N0受温度和常数K决定的,在一定条件下为固定值;信噪比与信号能量的强弱成正比。在仿真中,为了简化模型,通常采用固定输入信号幅度,改变N0来起到SNR的变化。
其中的Eb是在相干接收条件下解调后信号能量,而系统接收的信噪比通常是加在接收输入端,也就是解调前。为了令Eb在解调前后的能量统一,在发送端必须采用能量的归一化。
归一化方法:
_ x(n)
x(n) =-------------------------- n属于(1,N) N为1bit内采样点数
sqrt(Sum(x(n)^2))
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
renardyu
2012-06-09 · TA获得超过159个赞
知道答主
回答量:46
采纳率:0%
帮助的人:63.5万
展开全部
对汉明编码不太了解,不过你的代码里for循环中没有地方体现了信噪比snr,从计算到画图全都是一样的过程。我的理解是code+randn(m,N)*f(SNR)---这里落下了跟snr有关的幅度?
另外code+randn(m,N)>0.95得到的是一个0-1矩阵,rem(*,2)似乎也没有特别的意义吧?
追问
是的,所以就是加噪声这一块比较头大,不知道怎么加好,一种是加高斯噪声awgn(code,SNR(x),'measured','dB') 但是加了之后不是二进制序列了 所以解码的时候会有问题  请问怎么加噪声比较好呢?
如果必须用decode解码而不是自己编程解码的话?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
1170761807
2012-06-08 · 超过11用户采纳过TA的回答
知道答主
回答量:54
采纳率:0%
帮助的人:30.6万
展开全部
matlab我接触不多,不好意思。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式