[英]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:但是,我不知道噪聲方差的值是多少,那么一個噪聲如何增加?
這就是我所做的。
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)將白高斯噪聲添加到矢量信號x。 標量snr指定每個樣本的信噪比,以dB為單位。 如果x為復數,則awgn會添加復數噪聲。 此語法假定x的功率為0 dBW。
y = awgn(x,snr,sigpower)與上面的語法相同,除了sigpower是x的功率(以dBW為單位)。
y = awgn(x,snr,'measured')與y = awgn(x,snr)相同,除了awgn在添加噪聲之前測量x的冪。
您使用y = awgn(x,snr,'measured'),因此您無需擔心,因為matlab為您提供了所有功能,測量了信號的功率,然后將其用於獲得噪聲所需的方差信噪比。
讓我們看看這怎么發生
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 db噪聲等於信號功率,而非常好的信號大於40 DB噪聲。 Eb / No =功率信號-功率噪聲db,因此0表示功率噪聲等於信號功率,40 db表示信號功率大於或大於噪聲功率
然后為您繪圖計算mse,matlab為此提供了一個功能
err = immse(X,Y)說明
例
err = immse(X,Y)計算數組X和Y之間的均方誤差(MSE)。X和Y可以是任何維度的數組,但必須具有相同的大小和類。
所以這樣:
>> for i = 1:41
err(i) = immse(s,y(:,i));
end
>> stem(SNR_DB,err)
對於繪圖,由於我們在db中工作,因此最好使用對數軸
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.