1,确知信号的信噪比计算
这里的“确知信号”仅指信号的确知,噪声可以是随机的。某些随机信号,例如幅度和相位随机的正弦波,如果能够准确估计出它的相位和幅度等参数也可以认为是“确知信号”。
接收到的确知信号通过减去确知信号的方法得到噪声电压或电流,高斯噪声的数学期望为0,方差除以或乘上电阻得到噪声功率。确知信号的大小的平方的积分除以或乘上电阻得到信号功率。信噪比等于这两个功率相除,因此可以不用考虑电阻的大小。
clear all;
clc;
SIMU_OPTION = 3
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1, deterministic signal snr calc %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if (SIMU_OPTION==1)
SAM_LEN = 1e6;
PERIOD = 1e3;
SNR_DB = 30
signal = sin((1:SAM_LEN)*2*pi/PERIOD);
signal_wgn = awgn(signal,SNR_DB,'measured');
wgn = signal_wgn - signal;
snr_db_calc = 10*log10(var(signal)/var(wgn))
end
2,随机信号的信噪比计算
2.1,窄带信号加宽带噪声的信噪比计算
可以使用周期图FFT方法,即得到信号加噪声的功率谱,利用信号和噪声的频率特性,通过积分的方法将信号和噪声的功率计算出来,这样就得到信噪比。窄带信号是相对整个信号频率带而言。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2, sin signal + white gauss noise %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if (SIMU_OPTION==2)
SAM_LEN = 1e6;
PERIOD = 1e3;
SNR_DB = 30
signal = sin((1:SAM_LEN)*2*pi/PERIOD);
signal_wgn = awgn(signal,SNR_DB,'measured');
signal_wgn_fft = fft(signal_wgn);
signal_wgn_psd = (abs(signal_wgn_fft)).^2 / SAM_LEN;
signal_wgn_psd_db = 10*log10(signal_wgn_psd);
signal_wgn_psd = signal_wgn_psd(1:SAM_LEN/2);
snr_db_calc =
10*log10(max(signal_wgn_psd)/(sum(signal_wgn_psd)-max(signal_wgn_psd) ))
end
2.2,窄带信号加窄带噪声的信噪比计算
由于这种信号的有用信号和噪声所占频带相同,因此不能使用上面周期图FFT方法。必须使用其他方法,书中讲述了两种方法,通过包络和相位来计算,这种方法也适用于宽带噪声。
对于调频波由于用相位来携带有用信息,相位是变化的,因此只能通过包络来计算其信噪比;对于调幅波由于用幅度来携带有用信息,包络是变化的,因此只能通过相位来计算其信噪比;对于幅度一定,频率一定的正弦波,可以同时通过包络和相位来计算。
计算包络时可以一路信号或两路正交的信号,计算相位时只能是两路正交的信号。如果模拟电路只提供一路信号,那么需要通过数字混频来得到两路信号,但实际不允许,因为要求ADC的采样率很高导致功耗高,对模拟电路要求也高。
另外,数字使用两路信号求包络--两路2
2Q
I 再开方然后低通,有一好处,利用非线性让强信号变强,弱信号变弱,见2009.4.21笔记。RF电路提供给数字Q
I,两路信号,可以让数字去除镜像干扰。
提供两路信号给数字,模拟电路由于工艺原因会出现不理想情况出现:两路幅度不同,两路相位相差不是90度,每路会有直流偏移。
2.2.1,FM 波加窄带高斯噪声的信噪比计算
计算包络的信噪比,包络的信噪比就是信号的信噪比,理论依据是【1】。注意【2】认为包络分布是瑞利分布,【3】中幅度A 比较大时瑞利分布接近高斯分布,对应上面的高信噪比。有三种方法计算包络,三种方法的比较和数学原理参见2014.07.25的笔记。
(1),一路I 路全波整流加低通滤波。 (2),包络为两路22Q I +后再开方; (3),用一路2
I 后滤掉二倍频再开方; 包络的信噪比计算具体步骤如下:
A ,利用上述公式得到1A ,2A ,3A ,……n A
B ,
n A A A A A n
avg ++++=
……321 C ,n
A A A A A A A A A SNR
avg n avg avg avg avg envelope
2
2322212
)( ……)()()(-++-+-+-=
D ,2/envelope SNR SNR =
参考: 【1】:通信原理(第6版)-- P102 式5.2-34 【2】:通信原理(第6版)-- P50 【3】:通信原理(第6版)-- P56 图3-5
2.2.2,AM 波加窄带高斯噪声
通过先计算相位的信噪比,再根据其计算信号的信噪比,理论依据是【1】。注意【2】认为相位分布是均匀分布,对应【3】中0=A 的情况,因为【2】中的窄带随机过程中,正弦波的幅度为零,因此可看做【3】中正弦波加窄带高斯噪声的一种特例。A 比较大时相位分布接近数学期望为0,方差为22
/A n σ的高斯
分布,因此信噪比2
2/)2/(n A SNR σ=,等于相位方差倒数的1/2。步骤如下:
A ,利用公式)/arctan(I Q 得到1θ,2θ,3θ,……1+n θ
B ,121θθθ-=?,232θθθ-=?,343θθθ-=?,……n n n θθθ-=?+1
C ,n
n ava θθθθθ?++?+?+?=? …
…321 D ,n
avg n avg avg avg 2
2322212
)( ……)()()(θθθθθθθθσθ?-?++?-?+?-?+?-?=
E ,2
2/1θ
σ=SNR 参考: 【1】:通信原理(第6版)-- P117式5.4-9 【2】:通信原理(第6版)-- P50 【3】:通信原理(第6版)-- P56 图3-5
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%
% 3, sin signal + narrowband gauss noise %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%
if (SIMU_OPTION==3)
SAM_LEN = 1e5;
F_IF = 1/10;
SNR_DB = 30
% 3.1 low pass white gauss noise
[b_lp,a_lp] = butter(2,3e-2,'low'); %freqz(b_lp,a_lp,1e4);
nc = wgn(1,SAM_LEN,0);
ns = wgn(1,SAM_LEN,0);
nc_lp =
filter(b_lp,a_lp,filter(b_lp,a_lp,filter(b_lp,a_lp,nc))); %freqz(nc_l p,1,SAM_LEN);
ns_lp = filter(b_lp,a_lp,filter(b_lp,a_lp,filter(b_lp,a_lp,ns)));
nc_lp = (0.5/(10^(SNR_DB/10))/var(nc_lp))^0.5*nc_lp;
ns_lp = (0.5/(10^(SNR_DB/10))/var(ns_lp))^0.5*ns_lp;
% 3.2 sin signal + narrowband gauss noise
RF_OPTION = 0
if (RF_OPTION==0)
iii = cos((1:1:SAM_LEN)*2*pi*F_IF).*(1+nc_lp) -
sin((1:1:SAM_LEN)*2*pi*F_IF).*ns_lp; %freqz(I,1,SAM_LEN);
qqq = sin((1:1:SAM_LEN)*2*pi*F_IF).*(1+nc_lp) +
cos((1:1:SAM_LEN)*2*pi*F_IF).*ns_lp;
else
F_MIX = 1/10;
F_RF = F_IF + F_MIX;
% RF signal
bpgn = cos((1:1:SAM_LEN)*2*pi*F_RF).*nc_lp -
sin((1:1:SAM_LEN)*2*pi*F_RF).*ns_lp; %freqz(bpgn,1,SAM_LEN);
rf = cos((1:1:SAM_LEN)*2*pi*F_RF) + bpgn; %freqz(RF,1,SAM_LEN); snr_db_rf = 10*log10(0.5/var(bpgn));
% mixer
iii = rf.*cos((1:1:SAM_LEN)*2*pi*F_MIX); %freqz(I,1,SAM_LEN);
qqq = rf.*-sin((1:1:SAM_LEN)*2*pi*F_MIX);
% low pass
[b_lp,a_lp] = butter(10,2e-1,'low');
iii = filter(b_lp,a_lp,filter(b_lp,a_lp,iii)); %freqz(I,1,SAM_LEN);
qqq = filter(b_lp,a_lp,filter(b_lp,a_lp,qqq)); %plot(I,'b'); hold on; plot(filter(b_lp,a_lp,0.5*cos((1:1:SAM_LEN)*2*pi*F_IF)),'r');
if_noise = iii -
filter(b_lp,a_lp,filter(b_lp,a_lp,0.5*cos((1:1:SAM_LEN)*2*pi*F_IF)));
%-filter(b_lp,a_lp,filter(b_lp,a_lp,0.5*cos((1:1:SAM_LEN)*2*pi*3/20)) );
snr_db_if = 10*log10((0.5*1/4)/var(if_noise(1e3:SAM_LEN)))
end
% 3.3 snr calc
% snr calc--abs(I), then lowpass to calc the envelope
envelope = abs(iii); %freqz(envelope,1,SAM_LEN);
[b_lp,a_lp] = butter(2,6e-2,'low');
envelope = filter(b_lp,a_lp,envelope);
envelope = filter(b_lp,a_lp,envelope);
envelope = filter(b_lp,a_lp,envelope);%freqz(envelope,1,SAM_LEN); envelope = envelope(1e3+1:SAM_LEN);
snr_db11 = 10*log10( (mean(envelope))^2 / var(envelope) /2 )
% snr calc--I.^2, then lowpass and envelope.^0.5 to calc the envelope envelope = iii.^2; %freqz(envelope,1,SAM_LEN);
[b_lp,a_lp] = butter(2,6e-2,'low');
envelope = filter(b_lp,a_lp,envelope);
envelope = filter(b_lp,a_lp,envelope);
envelope = filter(b_lp,a_lp,envelope);%freqz(envelope,1,SAM_LEN); envelope = envelope(1e3+1:SAM_LEN);
envelope = abs(envelope);
envelope = envelope.^0.5;
snr_db12 = 10*log10( (mean(envelope))^2 / var(envelope) /2 )
% snr calc--(I.^2+Q.^2).^0.5 to calc the envelope `
envelope = (iii.^2+qqq.^2).^0.5; %freqz(envelope,1,SAM_LEN);
envelope = envelope(1e3+1:SAM_LEN);
snr_db13 = 10*log10( (mean(envelope))^2 / var(envelope) /2 )
% snr calc 2 `
phase = atan(qqq./iii);
phi = phase - atan(tan((0.5:1:SAM_LEN)*2*pi*F_IF));
phi = phi(1e3+1:SAM_LEN);
for i = 1:length(phi)
if (phi(i)>2) phi(i) = pi-phi(i);
elseif(phi(i)<-2) phi(i) = pi+phi(i);
end
end
phi = phi - mean(phi);
snr_db2 = 10*log10( (1/2) / var(phi)) end