关于信号处理:BPSK调制和SNR:Matlab

BPSK modulation and SNR : Matlab

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

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

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

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

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

这就是我所做的。

1
2
3
4
5
6
7
8
9
10
11
12
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;

请在错误的地方纠正我。谢谢。


首先,我认为了解BPSK系统的功能很重要:

在这种情况下,BPSK系统的星座为[-A,A] [-1,1]
SNR从0 db到40 db不等

我认为答案在此功能中:

y = awgn(...);从Matlab Central:

y = awgn(x,snr) adds white Gaussian noise to the vector signal x. The
scalar snr specifies the signal-to-noise ratio per sample, in dB. If x
is complex, awgn adds complex noise. This syntax assumes that the
power of x is 0 dBW.

y = awgn(x,snr,sigpower) is the same as the syntax above, except that
sigpower is the power of x in dBW.

y = awgn(x,snr,'measured') is the same as y = awgn(x,snr), except that
awgn measures the power of x before adding noise.

您使用y = awgn(x,snr,'measured'),因此您无需担心,因为matlab为您提供了所有功能,测量了信号的功率,然后应用具有获得信噪比。

让我们看看这怎么发生

1
2
3
4
5
6
7
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)

因此:

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

信号将是这样的

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

因此,在您的情况下,我将像您一样生成信号:

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

然后准备SNR在0到40 db之间变化

1
>> SNR_DB = 0:1:40;

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

1
2
3
4
5
>> y = zeros(100,length(SNR_DB));

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

此时,查看信号的最佳方法是使用星座图,如下所示:

1
2
>> 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) Description

example

err = immse(X,Y) calculates the mean-squared error (MSE) between the
arrays X and Y. X and Y can be arrays of any dimension, but must be of
the same size and class.

所以这样:

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

enter image description here

对于绘图,并且由于我们在db中工作,因此最好使用对数轴