matlab 产生已知功率的复高斯白噪声及信噪比计算

假定已知噪声功率 P n P_n Pn,那么产生一个长度为 N N N的复高斯白噪声代码为:
n = s q r t ( 0.5 ∗ P n ) ∗ ( r a n d n ( 1 , N ) + 1 j r a n d n ( 1 , N ) ) n=sqrt(0.5*P_n) * (randn(1,N)+1jrandn(1,N)) n=sqrt(0.5Pn)(randn(1,N)+1jrandn(1,N))
可以通过计算信号总能量除以信号长度验证该噪声的功率是否为 P n P_n Pn,即
P n = n × n ′ / N P_n=n \times n'/N Pn=n×n/N
信噪比SNR可通过能量、功率或幅度进行计算。采用能量和功率进行计算时用 10 l o g 10 10log_{10} 10log10,而采用幅度计算时用 20 l o g 10 20log_{10} 20log10。考虑脉冲雷达,发射功率为 P t P_t Pt(平均功率是 P t × N 1 / N 2 P_t\times N_1 / N_2 Pt×N1/N2?),采样点数为 N 1 N_1 N1,而噪声在一个脉冲重复周期内持续存在,平均功率(方差)为 P n P_n Pn,采样点数为 N 2 N_2 N2,于是采用能量计算SNR为:
S N R = 10 l o g 10 ( P t ⋅ N 1 P n ⋅ N 2 ) SNR = 10log_{10}(\frac{{P_t \cdot N_1}}{{P_n \cdot N_2}}) SNR=10log10(PnN2PtN1)
而如果采用功率进行计算应该是:
S N R = 10 l o g 10 ( P t ⋅ N 1 / N 2 P n ⋅ N 2 / N 2 ) = 10 l o g 10 ( P t ⋅ N 1 P n ⋅ N 2 ) SNR= 10log_{10}(\frac{{P_t \cdot N_1/N_2}}{{P_n \cdot N_2/N_2}}) = 10log_{10}(\frac{{P_t \cdot N_1}}{{P_n \cdot N_2}}) SNR=10log10(PnN2/N2PtN1/N2)=10log10(PnN2PtN1)
可以看出,与采用能量进行计算完全相同。
假设已经求得发射信号功率 P t P_t Pt,应该如何计算幅度呢? A m = P t A_m=\sqrt{{P_t}} Am=Pt 吗?也对也不对,因为这是在默认将发射信号幅度归一化的情况下才能用。如果是对能量进行的归一化,则幅度应为 A m = N 1 ⋅ P t A_m=\sqrt{{N_1 \cdot P_t}} Am=N1Pt