matlab如何添加自定义信噪比的噪声信号? 20
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 请帮忙~ 展开
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是叠加在信号上的噪声。
如果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))
另外code+randn(m,N)>0.95得到的是一个0-1矩阵,rem(*,2)似乎也没有特别的意义吧?
是的,所以就是加噪声这一块比较头大,不知道怎么加好,一种是加高斯噪声awgn(code,SNR(x),'measured','dB') 但是加了之后不是二进制序列了 所以解码的时候会有问题 请问怎么加噪声比较好呢?
如果必须用decode解码而不是自己编程解码的话?