DOA估计中信噪比问题
在某次做项目仿真时,产生了一个想法,我算了一下在所设定信噪比下,信号和噪声的信噪比是不是和设定值一致,惊奇的发现,设定值和计算值差了3dB,正好2022.11.01做论文仿真,再次验证信噪比时,出了点差错,次日,趁程序跑大循环,把之前笔记本上的记录搬到博客上,以此留念。
无论是采用何种阵列、何种算法,经典的干涉仪测向算法也好,子空间类算法、稀疏重构类算法也罢,均匀阵列、稀疏阵列、MIMO等等各种阵列,仿真实验中,信噪比是影响算法性能的重要因素。本博客就不同信号产生模式,讨论不同信号产生方式中信噪比的使用,为后学者做参考。
信噪比的计算方式
对于有限长的信号,若均值为0,其方差即是功率,因此在程序中,若信号噪声的均值为0,只需要验证方差的比值即可得到信噪比
总功率=均值*均值+方差
不同分布的方差
正态分布1
S = sqrt(a)*randn(1,10000)+b 方差为a,均值为b
正态分布2
S = sqrt(-2* m*m *lnU1)cos(2 pi U2)+n 方差为m *m,均值为n
U1和U2为0到1的均匀分布
DOA估计中信号的产生
在上篇博客中,对DOA估计中信号的几种产生方式进行简要的讨论,本博客再次简要重述和补充
方式1
首先给出噪声部分程序
1 | snr = 10.^(SNR/20); |
信号的程序在噪声幅度上加上信噪比
1 | for m=1:1 %注意此处m仅到1 |
信噪比计算结果为SNR = 10log(2snr*snr/2)
snr = 10.^(SNR/20)
计算结果与设定值一致
方式2
1 | Amp = 10.^(SNR/20); |
方式3
awgn函数,产生加性高斯白噪声
X = awgn(A*S,snr,’measured’)
其中snr代表的是信号与噪声的功率之比
使用这个函数需要注意,加measured,表示噪声功率是根据信号的功率计算的,若不加measured,噪声的功率计算时,假定信号功率为1
例如:
awgn(100ones(1,1000),10,’measured’) 信号功率为10000,噪声功率为998.98,信噪比10dB
awgn(10ones(1,1000),10) 信号功率为100,噪声功率为0.1,噪声功率假定信号功率为1,10dB算出噪声功率为0.1
很明显,第二种方式产生的噪声的信噪比与我们的期望值差距甚远
方式3不太建议使用,在标量阵列中这样产生一定信噪比的信号貌似没有问题,但在矢量阵列中,这样方式产生的信噪比是AS和N的比值,但信噪比的定义是S和N的比值,标量阵列的A 的模一般为1,但矢量阵列A的模还与信号和天线的极化形式有关,这样产生方式在极化不匹配情况下影响较大
方式4
Noise = sqrt(0.5)randn(SN,Snap)+1jsqrt(0.5)randn(SN,Snap)
Signal = sqrt(0.5snr)randn(SN,Snap)+1jsqrt(0.5snr)randn(SN,Snap)
snr = 10^(SNR/10)为功率之比
根据正态分布1,噪声实部功率为0.5,虚部功率0.5,信号实部功率0.5*snr,虚部功率0.5 *snr
信噪比计算结果
SNR = 10*log(snr)
snr = 10^(SNR/10)
计算结果与设定值一致
信噪比计算程序
Data_Power=sum(abs(S1.^2))/length(S1);
Data_Power2=sum(S1.*conj(S1))/length(S1);
Data_Power1=sum(abs(w(1,:)).^2)/length(w);
Pow = 10*log10(Data_Power/Data_Power1);
总结
3dB,仅仅是信噪比是功率比值和幅度比值的微小差别
而且虽然说信噪比3dB的问题很小,甚至如果信噪比产生方式相同,在对比算法性能时,信噪比都相差3dB,问题也不大。但深究内部原因,还是信号产生部分存在缺陷,排除信噪3
dB这颗“雷”,总能避免掉一些未知的问题。
参考文献
无
后记
思考一下,为什么差的是3dB呢,而不是4dB或5dB?3dB在别的地方是不是还有其他的含义。
还记得,在本科上《雷达原理》这门实验课,Zhangchunjie老师,提出了这个简单的问题,3dB到底有什么含义,在不同的应用领域,3dB带宽,3dB波束宽度等等