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.5∗Pn)∗(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(Pn⋅N2Pt⋅N1)
而如果采用功率进行计算应该是:
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(Pn⋅N2/N2Pt⋅N1/N2)=10log10(Pn⋅N2Pt⋅N1)
可以看出,与采用能量进行计算完全相同。
假设已经求得发射信号功率
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=N1⋅Pt