BPSK调制和SNR:Matlab

时间:2017-07-28 05:37:23

标签: matlab signal-processing digital modulation

考虑加性高斯白噪声(AWGN)通信信道,其中正在发送从BPSK调制获取值的信号。然后,接收的噪声信号是:y[k] = s[k] + w[k]其中s[k]是+ 1,-1符号,w[k]是零均值白高斯噪声。

- 我想估计信号s并通过将SNR从0:40 dB变化来评估性能。设,估计信号为hat_s

因此,此图表将在X轴上具有SNR范围,在Y轴上具有在已知信号值与估计值之间获得的均方误差,即s[k] - hat_s[k]

问题1:如何定义信噪比? SNR的公式是sigma^2/sigma^2_w。我对分子中的术语感到困惑:信号的方差是什么,sigma ^ 2,通常被认为是什么?

问题2:但是,我不知道噪声方差的值是什么,那么如何增加噪声呢?

这就是我所做的。

N = 100; %number of samples
s = 2*round(rand(N,1))-1;
 %bpsk modulation
y = awgn(s,10,'measured'); %adding noise but I don't know
the variance of the signal and noise 

%estimation using least squares

hat_s = y./s;


 mse_s = ((s-hat_s).^2)/N;

请纠正我哪里错了。谢谢。

1 个答案:

答案 0 :(得分:4)

首先,我认为了解我们拥有BPSK系统的内容非常重要:

在这种情况下,BPSK系统的星座为[-A,A] [-1,1] SNR将在0 db到40 db之间变化

我认为答案在于这个功能:

y = awgn(...);来自matlab中心:

  

y = awgn(x,snr)将白高斯噪声添加到矢量信号x。该   标量snr指定每个样本的信噪比,以dB为单位。如果是x   很复杂,awgn增加了复杂的噪音。此语法假定为   x的功率为0 dBW。

     

y = awgn(x,snr,sigpower)与上面的语法相同,除了   sigpower是x的功率,单位为dBW。

     

y = awgn(x,snr,'测量')与y = awgn(x,snr)相同,除了   awgn在添加噪声之前测量x的功率。

你使用y = awgn(x,snr,'测量'),所以你不必担心,因为matlab随身携带所有,测量信号的功率,然后应用于通道具有获得该SNR比率所需的方差的噪声。

让我们看看这怎么可能发生

SNRbit = Eb/No = A^2/No = dmin^2 /4N0

the constelation [A,-A] in this case is [-1,1] so

10 log10(A^2/N0) = 10 log10(1/N0) = SNRbitdb

SNRlineal = 10^(0.1*SNRdb)

所以:

noise_var=0.5/(EbN0_lin); % s^2=N0/2

并且信号将是这样的

y = s + sqrt(noise_var)*randn(1,size);

所以在你的情况下,我会像你一样生成信号:

>> N = 100; %number of samples
>> s = 2*round(rand(N,1))-1; %bpsk modulation

然后准备SNR从0到40 db

>> SNR_DB = 0:1:40;

之后计算所有可能的信号:

>> y = zeros(100,length(SNR_DB));

>> for i = 1:41
y(:,i) = awgn(s,SNR_DB(i),'measured');
end

此时查看信号的最佳方法是使用这样的星座图:

>> scatterplot(y(:,1));
>> scatterplot(y(:,41));

scatter plot 40 db

scatter plot 0 db

你可以看到一个坏信号0 db噪声等于功率信号和一个非常好的信号信号大于40 DB噪声。 Eb / No =功率信号 - 功率噪声db,所以0表示功率噪声等于信号功率,40 db表示信号功率大于噪声功率

然后为你绘制计算mse,matlab有一个函数用于此

  

err = immse(X,Y)说明

     

例如

     

err = immse(X,Y)计算之间的均方误差(MSE)   数组X和Y.X和Y可以是任何维度的数组,但必须是   相同的规模和等级。

所以用这个:

>> for i = 1:41
err(i) = immse(s,y(:,i));
end
>> stem(SNR_DB,err)

enter image description here

对于绘图,由于我们在db中工作,因此应该使用对数轴