BPSK 调制和信噪比: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]
问题一:如何定义信噪比?信噪比的公式是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;
不对的地方请指正。谢谢。
首先我认为了解我们拥有 BPSK 系统的东西是什么很重要:
BPSK 系统的星座是 [-A , A] 在这种情况下 [-1,1]
SNR 将从 0 db 到 40 db
我认为答案在这个函数中:
y = awgn( ... );来自 matlab 中心:
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都给你带好了,测量信号的功率,然后应用到通道a具有获得该 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));
您可以看到一个坏信号 0 分贝噪声等于信号功率和一个非常好的信号信号大于 40 分贝噪声。 Eb/No = Power signal - Power noise 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.
因此:
>> for i = 1:41
err(i) = immse(s,y(:,i));
end
>> stem(SNR_DB,err)
对于绘图,由于我们在 db 中工作,所以使用对数轴应该更好
考虑加性高斯白噪声 (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]
问题一:如何定义信噪比?信噪比的公式是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;
不对的地方请指正。谢谢。
首先我认为了解我们拥有 BPSK 系统的东西是什么很重要:
BPSK 系统的星座是 [-A , A] 在这种情况下 [-1,1] SNR 将从 0 db 到 40 db
我认为答案在这个函数中:
y = awgn( ... );来自 matlab 中心:
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都给你带好了,测量信号的功率,然后应用到通道a具有获得该 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));
您可以看到一个坏信号 0 分贝噪声等于信号功率和一个非常好的信号信号大于 40 分贝噪声。 Eb/No = Power signal - Power noise 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.
因此:
>> for i = 1:41
err(i) = immse(s,y(:,i));
end
>> stem(SNR_DB,err)
对于绘图,由于我们在 db 中工作,所以使用对数轴应该更好