模拟幅度调制相干解调系统抗噪声性能仿真分析
目录
- 1. 引言
- 2. 系统模型
- 3. 抗干扰性能理论分析
- 4. 仿真实现与仿真结果
- 4.1 常规调幅调制解调仿真`(AM)`
- 4.1.1 基带信号 m ( t ) m(t) m(t), 载波信号 c ( t ) c(t) c(t) 与 AM调制信号 s ( t ) s(t) s(t) 时域波形
- 4.1.2 基带信号 m ( t ) m(t) m(t) 频域波形
- 4.1.3 载波信号 c ( t ) c(t) c(t) 频域波形
- 4.1.4 AM调制信号 s ( t ) s(t) s(t) 频域波形
- 4.1.5 AM调制信号 s ( t ) s(t) s(t), 同步载波信号 c ( t ) c(t) c(t) 与 移频信号 s d ( t ) s_d(t) sd(t) 时域波形
- 4.1.6 移频信号 s d ( t ) s_d(t) sd(t) 频域波形
- 4.1.7 解调信号 m o ( t ) m_o(t) mo(t) 时域波形
- 4.1.8 解调信号 m o ( t ) m_o(t) mo(t) 频域波形
- 4.1.9 AWGN噪声 n i ( t ) n_i(t) ni(t), 带通AWGN噪声 n ( t ) n(t) n(t), 移频带通AWGN噪声 n d ( t ) n_d(t) nd(t) 与输出AWGN噪声 n o ( t ) n_o(t) no(t) 时域波形
- 4.1.10 AWGN噪声 n i ( t ) n_i(t) ni(t), 带通AWGN噪声 n ( t ) n(t) n(t), 移频带通AWGN噪声 n d ( t ) n_d(t) nd(t) 与输出AWGN噪声 n o ( t ) n_o(t) no(t) 功率谱密度波形
- 4.1.11 功率, 信噪比与信噪比增益计算与分析
- 4.2 抑制载波双边带调制解调仿真`(DSB-SC)`
- 4.2.1 基带信号 m ( t ) m(t) m(t), 载波信号 c ( t ) c(t) c(t) 与 AM调制信号 s ( t ) s(t) s(t) 时域波形
- 4.2.2 基带信号 m ( t ) m(t) m(t) 频域波形
- 4.2.3 载波信号 c ( t ) c(t) c(t) 频域波形
- 4.2.4 DSB-SC调制信号 s ( t ) s(t) s(t) 频域波形
- 4.2.5 DSB-SC调制信号 s ( t ) s(t) s(t), 同步载波信号 c ( t ) c(t) c(t) 与 移频信号 s d ( t ) s_d(t) sd(t) 时域波形
- 4.2.6 移频信号 s d ( t ) s_d(t) sd(t) 频域波形
- 4.2.7 解调信号 m o ( t ) m_o(t) mo(t) 时域波形
- 4.2.8 解调信号 m o ( t ) m_o(t) mo(t) 频域波形
- 4.2.9 AWGN噪声 n i ( t ) n_i(t) ni(t), 带通AWGN噪声 n ( t ) n(t) n(t), 移频带通AWGN噪声 n d ( t ) n_d(t) nd(t) 与输出AWGN噪声 n o ( t ) n_o(t) no(t) 时域波形
- 4.2.10 AWGN噪声 n i ( t ) n_i(t) ni(t), 带通AWGN噪声 n ( t ) n(t) n(t), 移频带通AWGN噪声 n d ( t ) n_d(t) nd(t) 与输出AWGN噪声 n o ( t ) n_o(t) no(t) 功率谱密度波形
- 4.2.11 功率, 信噪比与信噪比增益计算与分析
- 4.3 上边带调制解调仿真`(USSB)`
- 4.3.1 基带信号 m ( t ) m(t) m(t), 载波信号 c ( t ) c(t) c(t) 与 AM调制信号 s ( t ) s(t) s(t) 时域波形
- 4.3.2 基带信号 m ( t ) m(t) m(t) 频域波形
- 4.3.3 载波信号 c ( t ) c(t) c(t) 频域波形
- 4.3.4 USSB调制信号 s ( t ) s(t) s(t) 频域波形
- 4.3.5 USSB调制信号 s ( t ) s(t) s(t), 同步载波信号 c ( t ) c(t) c(t) 与 移频信号 s d ( t ) s_d(t) sd(t) 时域波形
- 4.3.6 移频信号 s d ( t ) s_d(t) sd(t) 频域波形
- 4.3.7 解调信号 m o ( t ) m_o(t) mo(t) 时域波形
- 4.3.8 解调信号 m o ( t ) m_o(t) mo(t) 频域波形
- 4.3.9 AWGN噪声 n i ( t ) n_i(t) ni(t), 带通AWGN噪声 n ( t ) n(t) n(t), 移频带通AWGN噪声 n d ( t ) n_d(t) nd(t) 与输出AWGN噪声 n o ( t ) n_o(t) no(t) 时域波形
- 4.3.10 AWGN噪声 n i ( t ) n_i(t) ni(t), 带通AWGN噪声 n ( t ) n(t) n(t), 移频带通AWGN噪声 n d ( t ) n_d(t) nd(t) 与输出AWGN噪声 n o ( t ) n_o(t) no(t) 功率谱密度波形
- 4.3.11 功率, 信噪比与信噪比增益计算与误差分析
- 4.4 下边带调制解调仿真`(LSSB)`
- 4.4.1 基带信号 m ( t ) m(t) m(t), 载波信号 c ( t ) c(t) c(t) 与 AM调制信号 s ( t ) s(t) s(t) 时域波形
- 4.4.2 基带信号 m ( t ) m(t) m(t) 频域波形
- 4.4.3 载波信号 c ( t ) c(t) c(t) 频域波形
- 4.4.4 LSSB调制信号 s ( t ) s(t) s(t) 频域波形
- 4.4.5 LSSB调制信号 s ( t ) s(t) s(t), 同步载波信号 c ( t ) c(t) c(t) 与 移频信号 s d ( t ) s_d(t) sd(t) 时域波形
- 4.4.6 移频信号 s d ( t ) s_d(t) sd(t) 频域波形
- 4.4.7 解调信号 m o ( t ) m_o(t) mo(t) 时域波形
- 4.4.8 解调信号 m o ( t ) m_o(t) mo(t) 频域波形
- 4.4.9 AWGN噪声 n i ( t ) n_i(t) ni(t), 带通AWGN噪声 n ( t ) n(t) n(t), 移频带通AWGN噪声 n d ( t ) n_d(t) nd(t) 与输出AWGN噪声 n o ( t ) n_o(t) no(t) 时域波形
- 4.4.10 AWGN噪声 n i ( t ) n_i(t) ni(t), 带通AWGN噪声 n ( t ) n(t) n(t), 移频带通AWGN噪声 n d ( t ) n_d(t) nd(t) 与输出AWGN噪声 n o ( t ) n_o(t) no(t) 功率谱密度波形
- 4.4.11 功率, 信噪比与信噪比增益计算与误差分析
- 5. 小结
- 6. 参考资料
- 7. 附录
1. 引言
1.1 研究目的
- 理解通信系统模型, 掌握信号时域与频域特性分析方法, 能够分析模拟/数字基带/频带等各种通信系统对信号时域以及频域特性的变换关系;
- 理解加性高斯白噪声与频带受限信道, 理解匹配滤波器接收机与相干接收机的工作原理, 掌握带宽无限与频带受限信道条件下传输波形的设计方法;
- 理解模拟通信系统接收机输入与输出信噪比计算方法, 能够用信噪比对模拟通信系统性能进行分析;
- 能够根据系统模型实现链路级仿真, 掌握仿真参数设置原则, 分析信号的时域以及频域特性, 获得误码性能仿真结果;
1.2 研究方法
- 理论分析
- 软件仿真
1.3 主要内容
- 使用理论分析与软件仿真两种方法, 分析比较
AM
,DSB-SC
与SSC
三种系统的抗噪声性能- 对原理及模型进行必要的介绍
- 给出必要的系统框图以及分析结果
- 完成仿真报告
2. 系统模型
2.1 常规调幅调制(AM)
2.1.1 AM 调制
时域表示:
{ s A M ( t ) = A c [ 1 + m ( t ) ] cos ( 2 π f c t ) β A M = m a x { ∣ m ( t ) ∣ } (2.1.1) \begin{cases} s_{AM}(t) &= A_c[1 + m(t)]\cos(2\pi f_c t) \\ \beta_{AM} &= max\{ |m(t)|\} \\ \end{cases} \tag{2.1.1} {sAM(t)βAM=Ac[1+m(t)]cos(2πfct)=max{∣m(t)∣}(2.1.1)
- m ( t ) m(t) m(t) 为基带信号
- A c A_c Ac 为载波信号的幅值
- f c f_c fc 为载波信号的频率
- s A M ( t ) s_{AM}(t) sAM(t) 为已调AM信号
-
β
A
M
\beta_{AM}
βAM 为调幅指数
- β A M < 1 \beta_{AM} < 1 βAM<1 时为欠调制
- β A M = 1 \beta_{AM} = 1 βAM=1 时为临界调制
- β A M > 1 \beta_{AM} > 1 βAM>1 时为过调制
- 为避免包络检波时出错, 调制时应确保 β A M ≤ 1 \beta_{AM} \leq 1 βAM≤1
频域表示:
S A M ( f ) = A c 2 [ δ ( f − f c ) + δ ( f + f c ) ] + A c 2 [ M ( f − f c ) + M ( f + f c ) ] (2.1.2) S_{AM}(f) = \cfrac{A_c}{2}\bigg[\delta(f - f_c) + \delta(f + f_c)\bigg] + \cfrac{A_c}{2}\bigg[M(f - f_c) + M(f + f_c)\bigg] \tag{2.1.2} SAM(f)=2Ac[δ(f−fc)+δ(f+fc)]+2Ac[M(f−fc)+M(f+fc)](2.1.2)
- S A M ( f ) S_{AM}(f) SAM(f) 为已调AM信号的傅里叶变换
2.1.2 AM 解调
解调器输入的已调AM信号 s ( t ) s(t) s(t):
时域表示:
s ( t ) = A c [ 1 + m ( t ) ] cos ( 2 π f c t ) (2.1.3) s(t) = A_c[1 + m(t)]\cos(2\pi f_c t) \tag{2.1.3} s(t)=Ac[1+m(t)]cos(2πfct)(2.1.3)
频域表示:
S ( f ) = A c 2 [ δ ( f − f c ) + δ ( f + f c ) ] + A c 2 [ M ( f − f c ) + M ( f + f c ) ] (2.1.4) S(f) = \cfrac{A_c}{2}\bigg[\delta(f - f_c) + \delta(f + f_c)\bigg] + \cfrac{A_c}{2}\bigg[M(f - f_c) + M(f + f_c)\bigg] \tag{2.1.4} S(f)=2Ac[δ(f−fc)+δ(f+fc)]+2Ac[M(f−fc)+M(f+fc)](2.1.4)
通过带通滤波器(BPF)
并移频的AM信号
s
d
(
t
)
s_d(t)
sd(t):
时域表示:
s d ( t ) = A c 2 [ 1 + m ( t ) ] ⋅ [ 1 + cos ( 2 ⋅ 2 π f c t ) ] (2.1.5) s_d(t) = \cfrac{A_c}{2}\bigg[1 + m(t)\bigg]\cdot\bigg[1 + \cos(2 \cdot 2\pi f_c t)\bigg] \tag{2.1.5} sd(t)=2Ac[1+m(t)]⋅[1+cos(2⋅2πfct)](2.1.5)
频域表示:
S d ( f ) = A c 2 [ M ( f ) + δ ( f ) ] + A c 4 [ M ( f − 2 f c ) + M ( f + 2 f c ) + δ ( f − 2 f c ) + δ ( f + 2 f c ) ] (2.1.6) S_d(f) = \cfrac{A_c}{2}\bigg[M(f) + \delta(f)\bigg] + \cfrac{A_c}{4}\bigg[M(f - 2f_c) + M(f + 2f_c) + \delta(f - 2f_c) + \delta(f + 2f_c)\bigg] \tag{2.1.6} Sd(f)=2Ac[M(f)+δ(f)]+4Ac[M(f−2fc)+M(f+2fc)+δ(f−2fc)+δ(f+2fc)](2.1.6)
通过低通滤波器(LPF)
滤除高频成分的解调信号
s
o
(
t
)
s_o(t)
so(t):
时域表示:
s o ( t ) = A c 2 + A c 2 m ( t ) (2.1.7) s_o(t) = \cfrac{A_c}{2} + \cfrac{A_c}{2}m(t) \tag{2.1.7} so(t)=2Ac+2Acm(t)(2.1.7)
频域表示:
S o ( f ) = A c 2 δ ( f ) + A c 2 M ( f ) (2.1.8) S_o(f) = \cfrac{A_c}{2}\delta(f) + \cfrac{A_c}{2}M(f) \tag{2.1.8} So(f)=2Acδ(f)+2AcM(f)(2.1.8)
所滤除的高频成分 s h ( t ) s_h(t) sh(t):
时域表示:
s h ( t ) = A c 2 [ 1 + m ( t ) ] ⋅ cos ( 2 ⋅ 2 π f c t ) (2.1.9) s_h(t) = \cfrac{A_c}{2}\bigg[1 + m(t)\bigg] \cdot \cos(2 \cdot 2\pi f_c t) \tag{2.1.9} sh(t)=2Ac[1+m(t)]⋅cos(2⋅2πfct)(2.1.9)
频域表示:
S h ( f ) = A c 4 [ M ( f − 2 f c ) + M ( f + 2 f c ) + δ ( f − 2 f c ) + δ ( f + 2 f c ) ] (2.1.10) S_h(f) = \cfrac{A_c}{4}\bigg[M(f - 2f_c) + M(f + 2f_c) + \delta(f - 2f_c) + \delta(f + 2f_c)\bigg] \tag{2.1.10} Sh(f)=4Ac[M(f−2fc)+M(f+2fc)+δ(f−2fc)+δ(f+2fc)](2.1.10)
2.2 抑制载波双边带调制(DSB-SC)
2.2.1 DSB_SC 调制
时域表示:
s D S B ( t ) = A c m ( t ) cos ( 2 π f c t ) (2.2.1) s_{DSB}(t) = A_cm(t)\cos(2\pi f_c t) \tag{2.2.1} sDSB(t)=Acm(t)cos(2πfct)(2.2.1)
- m ( t ) m(t) m(t) 为基带信号
- A c A_c Ac 为载波信号的幅值
- f c f_c fc 为载波信号的频率
- s D S B ( t ) s_{DSB}(t) sDSB(t) 为双边带(DSB)信号
频域表示:
S D S B ( f ) = A c 2 [ M ( f − f c ) + M ( f + f c ) ] (2.2.2) S_{DSB}(f) = \cfrac{A_c}{2}\bigg[M(f - f_c) + M(f + f_c)\bigg] \tag{2.2.2} SDSB(f)=2Ac[M(f−fc)+M(f+fc)](2.2.2)
- S D S B ( f ) S_{DSB}(f) SDSB(f) 为双边带(DSB)信号的傅里叶变换
2.2.2 DSB_SC 解调
解调器输入的DSB信号 s ( t ) s(t) s(t):
时域表示:
s ( t ) = A c m ( t ) cos ( 2 π f c t ) (2.2.3) s(t) = A_cm(t)\cos(2\pi f_c t) \tag{2.2.3} s(t)=Acm(t)cos(2πfct)(2.2.3)
频域表示:
S ( f ) = A c 2 [ M ( f − f c ) + M ( f + f c ) ] (2.2.4) S(f) = \cfrac{A_c}{2}\bigg[M(f - f_c) + M(f + f_c)\bigg] \tag{2.2.4} S(f)=2Ac[M(f−fc)+M(f+fc)](2.2.4)
通过带通滤波器(BPF)
的并移频的DSB信号
s
d
(
t
)
s_d(t)
sd(t):
时域表示:
s d ( t ) = A c 2 m ( t ) ⋅ [ 1 + cos ( 2 ⋅ 2 π f c t ) ] (2.2.5) s_d(t) = \cfrac{A_c}{2}m(t) \cdot \bigg[1 + \cos(2 \cdot 2\pi f_c t)\bigg] \tag{2.2.5} sd(t)=2Acm(t)⋅[1+cos(2⋅2πfct)](2.2.5)
频域表示:
S d ( f ) = A c 2 M ( f ) + A c 4 [ M ( f − 2 f c ) + M ( f + 2 f c ) ] (2.2.6) S_d(f) = \cfrac{A_c}{2}M(f) + \cfrac{A_c}{4}\bigg[M(f - 2f_c) + M(f + 2f_c)\bigg] \tag{2.2.6} Sd(f)=2AcM(f)+4Ac[M(f−2fc)+M(f+2fc)](2.2.6)
通过低通滤波器(LPF)
滤除高频成分的解调信号
s
o
(
t
)
s_o(t)
so(t):
时域表示:
s o ( t ) = A c 2 m ( t ) (2.2.7) s_o(t) = \cfrac{A_c}{2} m(t) \tag{2.2.7} so(t)=2Acm(t)(2.2.7)
频域表示:
S o ( f ) = A c 2 M ( f ) (2.2.8) S_o(f) = \cfrac{A_c}{2}M(f) \tag{2.2.8} So(f)=2AcM(f)(2.2.8)
所滤除的高频成分 s h ( t ) s_h(t) sh(t):
时域表示:
s h ( t ) = A c 2 m ( t ) ⋅ cos ( 2 ⋅ 2 π f c t ) (2.2.9) s_h(t) = \cfrac{A_c}{2}m(t) \cdot \cos(2 \cdot 2\pi f_c t) \tag{2.2.9} sh(t)=2Acm(t)⋅cos(2⋅2πfct)(2.2.9)
频域表示:
S h ( f ) = A c 4 [ M ( f − 2 f c ) + M ( f + 2 f c ) ] (2.2.10) S_h(f) = \cfrac{A_c}{4}\bigg[M(f - 2f_c) + M(f + 2f_c)\bigg] \tag{2.2.10} Sh(f)=4Ac[M(f−2fc)+M(f+2fc)](2.2.10)
2.3 单边带调制(SSB)
2.3.1 SSB 调制
2.3.1.1 滤波法调制
时域表示:
s S S B ( t ) = A c m ( t ) cos ( 2 π f c t ) ∗ h S S B ( t ) (2.3.1) s_{SSB}(t) = A_cm(t)\cos(2\pi f_c t) * h_{SSB}(t) \tag{2.3.1} sSSB(t)=Acm(t)cos(2πfct)∗hSSB(t)(2.3.1)
-
m ( t ) m(t) m(t) 为基带信号
-
A c A_c Ac 为载波信号的幅值
-
f c f_c fc 为载波信号的频率
-
s S S B ( t ) s_{SSB}(t) sSSB(t) 为已调SSB信号
-
h S S B ( t ) h_{SSB}(t) hSSB(t) 为滤波器冲激响应
- 若为下边带调制
(LSSB)
, 则滤波器为低通滤波器(LPF)
, 其上限截止频率为 f c f_c fc - 若为上边带调制
(USSB)
, 则滤波器为高通滤波器(HPF)
, 其下限截止频率为 f c f_c fc
- 若为下边带调制
-
s S S B ( t ) s_{SSB}(t) sSSB(t) 为单边带(SSB)信号
频域表示:
S S S B ( f ) = A c 2 [ M ( f − f c ) + M ( f + f c ) ] ⋅ H S S B (2.3.2) S_{SSB}(f) = \cfrac{A_c}{2}\bigg[M(f - f_c) + M(f + f_c)\bigg] \cdot H_{SSB} \tag{2.3.2} SSSB(f)=2Ac[M(f−fc)+M(f+fc)]⋅HSSB(2.3.2)
- M ( f ) M(f) M(f) 为基带信号的傅里叶变换
- S S S B ( f ) S_{SSB}(f) SSSB(f) 为已调SSB信号的傅里叶变换
-
H
S
S
B
(
f
)
H_{SSB}(f)
HSSB(f) 为滤波器的频域表示
- 下边带滤波器的频域表示:
H L S S B ( f ) = 1 2 [ s g n ( f + f c ) − s g n ( f − f c ) ] (2.3.3) H_{LSSB}(f) = \cfrac{1}{2}\bigg[sgn(f + f_c) - sgn(f - f_c)\bigg] \tag{2.3.3} HLSSB(f)=21[sgn(f+fc)−sgn(f−fc)](2.3.3) - 上边带滤波器的频域表示:
H U S S B ( f ) = 1 − H L S S B ( f ) = 1 2 [ s g n ( f − f c ) − s g n ( f + f c ) ] (2.3.4) \begin{aligned} H_{USSB}(f) &= 1 - H_{LSSB}(f) \\ &= \cfrac{1}{2}\bigg[sgn(f - f_c) - sgn(f + f_c)\bigg] \tag{2.3.4} \end{aligned} HUSSB(f)=1−HLSSB(f)=21[sgn(f−fc)−sgn(f+fc)](2.3.4)
- 下边带滤波器的频域表示:
2.3.1.2 相移法调制
时域表示:
s L S S B ( t ) = A c [ m ( t ) cos ( 2 π f c t ) + m ^ ( t ) sin ( 2 π f c t ) ] (2.3.5) s_{LSSB}(t) = A_c\bigg[m(t)\cos(2\pi f_ct) + \hat{m}(t)\sin(2\pi f_c t)\bigg] \tag{2.3.5} sLSSB(t)=Ac[m(t)cos(2πfct)+m^(t)sin(2πfct)](2.3.5)
s U S S B ( t ) = s D S B ( t ) − s L S S B ( t ) = A c m ( t ) cos ( 2 π f c t ) − A c [ m ( t ) cos ( 2 π f c t ) + m ^ ( t ) sin ( 2 π f c t ) ] = A c [ m ( t ) cos ( 2 π f c t ) − m ^ ( t ) sin ( 2 π f c t ) ] (2.3.6) \begin{aligned} s_{USSB}(t) &= s_{DSB}(t) - s_{LSSB}(t) \\ &= A_c m(t) \cos(2\pi f_c t) - A_c\bigg[m(t)\cos(2\pi f_ct) + \hat{m}(t)\sin(2\pi f_c t)\bigg] \\ &= A_c \bigg[m(t)\cos(2\pi f_c t) - \hat{m}(t)\sin(2\pi f_c t)\bigg] \\ \end{aligned} \tag{2.3.6} sUSSB(t)=sDSB(t)−sLSSB(t)=Acm(t)cos(2πfct)−Ac[m(t)cos(2πfct)+m^(t)sin(2πfct)]=Ac[m(t)cos(2πfct)−m^(t)sin(2πfct)](2.3.6)
- m ( t ) m(t) m(t) 为基带信号
-
m
^
(
t
)
\hat{m}(t)
m^(t) 为基带信号的希尔伯特变换
m ^ ( t ) = m ( t ) ∗ 1 π t (2.3.7) \hat{m}(t) = m(t) * \cfrac{1}{\pi t} \tag{2.3.7} m^(t)=m(t)∗πt1(2.3.7) - A c A_c Ac 为载波信号的幅值
- f c f_c fc 为载波信号的频率
- s D S B ( t ) s_{DSB}(t) sDSB(t) 为双边带(DSB)信号
- s L S S B ( t ) s_{LSSB}(t) sLSSB(t) 为上边带(LSSB)信号
- s U S S B ( t ) s_{USSB}(t) sUSSB(t) 为下边带(USSB)信号
频域表示:
S L S S B ( f ) = A c 2 [ M ( f − f c ) + M ( f + f c ) ] + A c 2 [ M ( f + f c ) ⋅ s g n ( f + f c ) − M ( f + f c ) ⋅ s g n ( f − f c ) ] (2.3.8) S_{LSSB}(f) = \cfrac{A_c}{2}\bigg[M(f - f_c) + M(f + f_c)\bigg] + \cfrac{A_c}{2}\bigg[M(f + f_c) \cdot sgn(f + f_c) - M(f + f_c) \cdot sgn(f - f_c)\bigg] \tag{2.3.8} SLSSB(f)=2Ac[M(f−fc)+M(f+fc)]+2Ac[M(f+fc)⋅sgn(f+fc)−M(f+fc)⋅sgn(f−fc)](2.3.8)
S U S S B = S D S B ( f ) − S L S S B ( f ) = A c 2 [ M ( f − f c ) + M ( f + f c ) ] − A c 2 [ M ( f + f c ) ⋅ s g n ( f + f c ) − M ( f + f c ) ⋅ s g n ( f − f c ) ] (2.3.9) \begin{aligned} S_{USSB} &= S_{DSB}(f) - S_{LSSB}(f) \\ &= \cfrac{A_c}{2}\bigg[M(f - f_c) + M(f + f_c)\bigg] - \cfrac{A_c}{2}\bigg[M(f + f_c) \cdot sgn(f + f_c) - M(f + f_c) \cdot sgn(f - f_c)\bigg] \\ \end{aligned} \tag{2.3.9} SUSSB=SDSB(f)−SLSSB(f)=2Ac[M(f−fc)+M(f+fc)]−2Ac[M(f+fc)⋅sgn(f+fc)−M(f+fc)⋅sgn(f−fc)](2.3.9)
- S D S B ( f ) S_{DSB}(f) SDSB(f) 为DSB信号的傅里叶变换
- S L S S B ( f ) S_{LSSB}(f) SLSSB(f) 为LSSB信号的傅里叶变换
- S U S S B ( f ) S_{USSB}(f) SUSSB(f) 为USSB信号的傅里叶变换
2.3.2 SSB 解调
解调器输入的SSB信号 s ( t ) s(t) s(t):
时域表示:
s ( t ) = A c [ m ( t ) cos ( 2 π f c t ) ± m ^ ( t ) sin ( 2 π f c t ) ] (2.3.10) s(t) = A_c\bigg[m(t)\cos(2\pi f_ct) \pm \hat{m}(t)\sin(2\pi f_c t)\bigg] \tag{2.3.10} s(t)=Ac[m(t)cos(2πfct)±m^(t)sin(2πfct)](2.3.10)
频域表示:
S ( f ) = A c 2 [ M ( f − f c ) + M ( f + f c ) ] ± A c 2 [ M ( f + f c ) ⋅ s g n ( f + f c ) − M ( f + f c ) ⋅ s g n ( f − f c ) ] (2.3.11) S(f) = \cfrac{A_c}{2}\bigg[M(f - f_c) + M(f + f_c)\bigg] \pm \cfrac{A_c}{2}\bigg[M(f + f_c) \cdot sgn(f + f_c) - M(f + f_c) \cdot sgn(f - f_c)\bigg] \tag{2.3.11} S(f)=2Ac[M(f−fc)+M(f+fc)]±2Ac[M(f+fc)⋅sgn(f+fc)−M(f+fc)⋅sgn(f−fc)](2.3.11)
通过带通滤波器(BPF)
的并移频的SSB信号
s
d
(
t
)
s_d(t)
sd(t):
时域表示:
s d ( t ) = A c 2 m ( t ) + A c 2 [ m ( t ) cos ( 2 ⋅ 2 π f c t ) ± m ^ ( t ) sin ( 2 ⋅ 2 π f c t ) ] (2.3.12) s_d(t) = \cfrac{A_c}{2}m(t) + \cfrac{A_c}{2}\bigg[m(t)\cos(2 \cdot 2\pi f_ct) \pm \hat{m}(t)\sin(2 \cdot 2\pi f_c t)\bigg] \tag{2.3.12} sd(t)=2Acm(t)+2Ac[m(t)cos(2⋅2πfct)±m^(t)sin(2⋅2πfct)](2.3.12)
频域表示:
S d ( f ) = A c 2 M ( f ) + A c 4 [ M ( f − 2 f c ) + M ( f + 2 f c ) ] ± A c 4 [ M ( f + 2 f c ) ⋅ s g n ( f + 2 f c ) − M ( f + 2 f c ) ⋅ s g n ( f − 2 f c ) ] (2.2.13) S_d(f) = \cfrac{A_c}{2}M(f) + \cfrac{A_c}{4}\bigg[M(f - 2 f_c) + M(f + 2 f_c)\bigg] \pm \cfrac{A_c}{4}\bigg[M(f + 2 f_c) \cdot sgn(f + 2 f_c) - M(f + 2 f_c) \cdot sgn(f - 2 f_c)\bigg] \tag{2.2.13} Sd(f)=2AcM(f)+4Ac[M(f−2fc)+M(f+2fc)]±4Ac[M(f+2fc)⋅sgn(f+2fc)−M(f+2fc)⋅sgn(f−2fc)](2.2.13)
通过低通滤波器(LPF)
滤除高频成分的解调信号
s
o
(
t
)
s_o(t)
so(t):
时域表示:
s o ( t ) = A c 2 m ( t ) (2.2.14) s_o(t) = \cfrac{A_c}{2} m(t) \tag{2.2.14} so(t)=2Acm(t)(2.2.14)
频域表示:
S o ( f ) = A c 2 M ( f ) (2.2.15) S_o(f) = \cfrac{A_c}{2}M(f) \tag{2.2.15} So(f)=2AcM(f)(2.2.15)
所滤除的高频成分 s h ( t ) s_h(t) sh(t):
时域表示:
s h ( t ) = A c 2 [ m ( t ) cos ( 2 ⋅ 2 π f c t ) ± m ^ ( t ) sin ( 2 ⋅ 2 π f c t ) ] (2.2.16) s_h(t) = \cfrac{A_c}{2}\bigg[m(t)\cos(2 \cdot 2\pi f_ct) \pm \hat{m}(t)\sin(2 \cdot 2\pi f_c t)\bigg] \tag{2.2.16} sh(t)=2Ac[m(t)cos(2⋅2πfct)±m^(t)sin(2⋅2πfct)](2.2.16)
频域表示:
S h ( f ) = A c 4 [ M ( f − 2 f c ) + M ( f + 2 f c ) ] ± A c 4 [ M ( f + 2 f c ) ⋅ s g n ( f + 2 f c ) − M ( f + 2 f c ) ⋅ s g n ( f − 2 f c ) ] (2.2.17) S_h(f) = \cfrac{A_c}{4}\bigg[M(f - 2 f_c) + M(f + 2 f_c)\bigg] \pm \cfrac{A_c}{4}\bigg[M(f + 2 f_c) \cdot sgn(f + 2 f_c) - M(f + 2 f_c) \cdot sgn(f - 2 f_c)\bigg] \tag{2.2.17} Sh(f)=4Ac[M(f−2fc)+M(f+2fc)]±4Ac[M(f+2fc)⋅sgn(f+2fc)−M(f+2fc)⋅sgn(f−2fc)](2.2.17)
3. 抗干扰性能理论分析
3.1 加性高斯白噪声(AWGN)
通过相干解调器
由带通AWGN的解析信号
n
~
(
t
)
=
n
c
(
t
)
+
j
n
s
(
t
)
(3.1.1)
\tilde{n}(t) = n_c(t) + j n_s(t) \tag{3.1.1}
n~(t)=nc(t)+jns(t)(3.1.1)
可得带通AWGN的同相-正交形式:
n
(
t
)
=
R
e
{
n
~
(
t
)
e
j
2
π
f
c
t
}
=
R
e
{
[
n
c
(
t
)
+
j
n
s
(
t
)
]
⋅
[
cos
(
2
π
f
c
t
)
+
j
sin
(
2
π
f
c
t
)
]
}
=
n
c
(
t
)
cos
(
2
π
f
c
t
)
−
n
s
(
t
)
sin
(
2
π
f
c
t
)
(3.1.2)
\begin{aligned} n(t) &= Re\{\tilde{n}(t) e^{j 2\pi f_c t}\} \\ &= Re\{[n_c(t) + j n_s(t)] \cdot [\cos(2\pi f_c t) + j\sin(2\pi f_c t)]\} \\ &= n_c(t)\cos(2\pi f_c t) - n_s(t)\sin(2\pi f_c t) \\ \end{aligned} \tag{3.1.2}
n(t)=Re{n~(t)ej2πfct}=Re{[nc(t)+jns(t)]⋅[cos(2πfct)+jsin(2πfct)]}=nc(t)cos(2πfct)−ns(t)sin(2πfct)(3.1.2)
带通AWGN通过乘法器移频后
n
d
(
t
)
=
n
(
t
)
⋅
A
c
cos
(
2
π
f
c
t
)
=
n
c
(
t
)
cos
2
(
2
π
f
c
t
)
−
n
s
(
t
)
sin
(
2
π
f
c
t
)
cos
(
2
π
f
c
t
)
=
1
2
n
c
(
t
)
+
1
2
[
n
c
(
t
)
cos
(
2
⋅
2
π
f
c
t
)
−
n
s
(
t
)
sin
(
2
⋅
2
π
f
c
t
)
]
(3.1.3)
\begin{aligned} n_d(t) &= n(t) \cdot A_c \cos(2\pi f_c t) \\ &= n_c(t)\cos^2(2\pi f_c t) - n_s(t)\sin(2\pi f_c t)\cos(2\pi f_c t) \\ &= \cfrac{1}{2}n_c(t) + \cfrac{1}{2}\bigg[n_c(t)\cos(2 \cdot 2\pi f_c t) - n_s(t)\sin(2 \cdot 2\pi f_c t)\bigg] \\ \end{aligned} \tag{3.1.3}
nd(t)=n(t)⋅Accos(2πfct)=nc(t)cos2(2πfct)−ns(t)sin(2πfct)cos(2πfct)=21nc(t)+21[nc(t)cos(2⋅2πfct)−ns(t)sin(2⋅2πfct)](3.1.3)
相干解调器输出的AWGN成分:
n
o
(
t
)
=
1
2
n
c
(
t
)
(3.1.4)
n_o(t) = \cfrac{1}{2}n_c(t) \tag{3.1.4}
no(t)=21nc(t)(3.1.4)
为方便分析, 假设单边带信号带通滤波器的通带带宽为 B B B, 双边带信号带通滤波器的通带带宽为 2 B 2B 2B, AWGN的单边功率谱密度 P N 单 ( f ) = n 0 P_{N单}(f) = n_0 PN单(f)=n0, AWGN的双边功率谱密度 P N 双 = n 0 2 P_{N双} = \cfrac{n_0}{2} PN双=2n0
双边带调制时输入相干解调器的带通AWGN的功率
N i n 双 = E [ n 2 ( t ) ] = n 0 2 ⋅ 2 ⋅ 2 B = 2 n 0 B (3.1.5) N_{in双} = E[n^2(t)] = \cfrac{n_0}{2} \cdot 2 \cdot 2B = 2 n_0 B \tag{3.1.5} Nin双=E[n2(t)]=2n0⋅2⋅2B=2n0B(3.1.5)
单边带调制时输入相干解调器的带通AWGN的功率
N i n 单 = E [ n 2 ( t ) ] = n 0 2 ⋅ 2 B = n 0 B (3.1.6) N_{in单} = E[n^2(t)] = \cfrac{n_0}{2} \cdot 2 B = n_0 B \tag{3.1.6} Nin单=E[n2(t)]=2n0⋅2B=n0B(3.1.6)
又因为
n
(
t
)
∼
n
c
(
t
)
∼
n
s
(
t
)
∼
N
(
m
0
,
σ
0
2
)
(3.1.7)
n(t) \sim n_c(t) \sim n_s(t) \sim N(m_0, \sigma_0^2) \tag{3.1.7}
n(t)∼nc(t)∼ns(t)∼N(m0,σ02)(3.1.7)
综合AWGN的特性后可得
{
E
[
n
(
t
)
]
=
E
[
n
c
(
t
)
]
=
E
[
n
s
(
t
)
]
=
m
0
=
0
E
[
n
2
(
t
)
]
=
E
[
n
c
2
(
t
)
]
=
E
[
n
s
2
(
t
)
]
=
σ
0
2
(3.1.8)
\begin{cases} E[n(t)] &= E[n_c(t)] &= E[n_s(t)] &= m_0 &= 0 \\ E[n^2(t)] &= E[n_c^2(t)] &= E[n_s^2(t)] &= \sigma_0^2 \\ \end{cases} \tag{3.1.8}
{E[n(t)]E[n2(t)]=E[nc(t)]=E[nc2(t)]=E[ns(t)]=E[ns2(t)]=m0=σ02=0(3.1.8)
再结合公式 (3.1.4)
可得输出相干解调器得带通AWGN功率
双边带调制时输出相干解调器的带通AWGN的功率:
N o u t 双 = E [ n o 2 ( t ) ] = 1 4 E [ n c 2 ( t ) ] = 1 4 E [ n 2 ( t ) ] = 1 4 N i n 双 = 1 2 n 0 B (3.1.9) N_{out双} = E[n_o^2(t)] = \cfrac{1}{4}E[n_c^2(t)] = \cfrac{1}{4}E[n^2(t)] = \cfrac{1}{4}N_{in双} = \cfrac{1}{2}n_0 B \tag{3.1.9} Nout双=E[no2(t)]=41E[nc2(t)]=41E[n2(t)]=41Nin双=21n0B(3.1.9)
单边带调制时输出相干解调器的带通AWGN的功率:
N o u t 单 = E [ n o 2 ( t ) ] = 1 4 E [ n c 2 ( t ) ] = 1 4 E [ n 2 ( t ) ] = 1 4 N i n 单 = 1 4 n 0 B (3.1.10) N_{out单} = E[n_o^2(t)] = \cfrac{1}{4}E[n_c^2(t)] = \cfrac{1}{4}E[n^2(t)] = \cfrac{1}{4}N_{in单} = \cfrac{1}{4}n_0 B \tag{3.1.10} Nout单=E[no2(t)]=41E[nc2(t)]=41E[n2(t)]=41Nin单=41n0B(3.1.10)
3.2 常规调幅调制解调(AM)
由 (2.1.3)
与归一化功率的定义
P
=
<
w
2
(
t
)
>
(3.2.1)
P = \big<w^2(t)\big> \tag{3.2.1}
P=⟨w2(t)⟩(3.2.1)
可得输入相干解调器的AM信号的功率
S i n = < s 2 ( t ) > = A c 2 ( 1 + P m ) 2 (3.2.2) S_{in} = \big<s^2(t)\big> = \cfrac{A_c^2 (1 + P_m)}{2} \tag{3.2.2} Sin=⟨s2(t)⟩=2Ac2(1+Pm)(3.2.2)
其中
P
m
P_m
Pm 为基带信号
m
(
t
)
m(t)
m(t) 的归一化平均功率
P
m
=
<
m
2
(
t
)
>
(3.2.3)
P_m = \big<m^2(t)\big> \tag{3.2.3}
Pm=⟨m2(t)⟩(3.2.3)
再结合公式 (2.1.7)
可得输出相干解调器的AM信号的功率
S o u t = < s o 2 ( t ) > = A c 2 4 < ( 1 + m ( t ) ) 2 > = A c 2 ⋅ ( 1 + P m ) 4 (3.2.4) S_{out} = \big<s_o^2(t)\big> = \cfrac{A_c^2}{4}\bigg<\big(1 + m(t)\big)^2\bigg> = \cfrac{A_c^2 \cdot(1 + P_m)}{4} \tag{3.2.4} Sout=⟨so2(t)⟩=4Ac2⟨(1+m(t))2⟩=4Ac2⋅(1+Pm)(3.2.4)
结合公式 (3.2.2)
与公式 (3.1.5)
可得到相干解调器输入信号的信噪比
S N R i n = S i n N i n 双 = A c 2 2 ( 1 + P m ) 2 n 0 B = A c 2 ( 1 + P m ) 4 n 0 B (3.2.5) SNR_{in} = \cfrac{S_{in}}{N_{in双}} = \cfrac{\cfrac{A_c^2}{2}(1 + P_m)}{2 n_0 B} = \cfrac{A_c^2(1 + P_m)}{4 n_0 B} \tag{3.2.5} SNRin=Nin双Sin=2n0B2Ac2(1+Pm)=4n0BAc2(1+Pm)(3.2.5)
结合公式 (3.2.4)
与公式 (3.1.10)
可得到相干解调器输出信号的信噪比
S N R o u t = S o u t N o u t = A c 2 ⋅ ( 1 + P m ) 4 1 2 n 0 B = A c 2 ⋅ ( 1 + P m ) 2 n 0 B (3.2.6) SNR_{out} = \cfrac{S_{out}}{N_{out}} = \cfrac{\cfrac{A_c^2 \cdot(1 + P_m)}{4}}{\cfrac{1}{2}n_0 B} = \cfrac{A_c^2 \cdot(1 + P_m)}{2 n_0 B} \tag{3.2.6} SNRout=NoutSout=21n0B4Ac2⋅(1+Pm)=2n0BAc2⋅(1+Pm)(3.2.6)
结合公式 (3.2.5)
与公式 (3.2.6)
可得到相干解调器关于AM信号的信噪比增益
G A M = S N R o u t S N R i n = 2 ⋅ ( 1 + P m ) 1 + P m = 2 (3.2.7) G_{AM} = \cfrac{SNR_{out}}{SNR_{in}} = \cfrac{2 \cdot(1 + P_m)}{1 + P_m} = 2 \tag{3.2.7} GAM=SNRinSNRout=1+Pm2⋅(1+Pm)=2(3.2.7)
3.3 抑制载波双边带调制解调(DSB-SC)
由 (2.2.1)
与归一化功率的定义
P
=
<
w
2
(
t
)
>
(3.3.1)
P = \big<w^2(t)\big> \tag{3.3.1}
P=⟨w2(t)⟩(3.3.1)
可得输入相干解调器的DSB-SC信号的功率
S i n = < s 2 ( t ) > = A c 2 P m 2 (3.3.2) S_{in} = \big<s^2(t)\big> = \cfrac{A_c^2 P_m}{2} \tag{3.3.2} Sin=⟨s2(t)⟩=2Ac2Pm(3.3.2)
其中
P
m
P_m
Pm 为基带信号
m
(
t
)
m(t)
m(t) 的归一化平均功率
P
m
=
<
m
2
(
t
)
>
(3.3.3)
P_m = \big<m^2(t)\big> \tag{3.3.3}
Pm=⟨m2(t)⟩(3.3.3)
再结合公式 (2.2.7)
可得输出相干解调器的DSB-SC信号的功率
S o u t = < s o 2 ( t ) > = A c 2 4 < m 2 ( t ) > = A c 2 P m 4 (3.3.4) S_{out} = \big<s_o^2(t)\big> = \cfrac{A_c^2}{4}\big<m^2(t)\big> = \cfrac{A_c^2 P _m}{4} \tag{3.3.4} Sout=⟨so2(t)⟩=4Ac2⟨m2(t)⟩=4Ac2Pm(3.3.4)
结合公式 (3.3.2)
与公式 (3.1.5)
可得到相干解调器输入信号的信噪比
S N R i n = S i n N i n = A c 2 2 P m 2 n 0 B = A c 2 P m 4 n 0 B (3.3.5) SNR_{in} = \cfrac{S_{in}}{N_{in}} = \cfrac{\cfrac{A_c^2}{2}P_m}{2 n_0 B} = \cfrac{A_c^2 P_m}{4 n_0 B} \tag{3.3.5} SNRin=NinSin=2n0B2Ac2Pm=4n0BAc2Pm(3.3.5)
结合公式 (3.3.4)
与公式 (3.1.10)
可得到相干解调器输出信号的信噪比
S N R o u t = S o u t N o u t = A c 2 P m 4 1 2 n 0 B = A c 2 P m 2 n 0 B (3.3.6) SNR_{out} = \cfrac{S_{out}}{N_{out}} = \cfrac{\cfrac{A_c^2 P _m}{4}}{\cfrac{1}{2}n_0 B} = \cfrac{A_c^2 P_m}{2 n_0 B} \tag{3.3.6} SNRout=NoutSout=21n0B4Ac2Pm=2n0BAc2Pm(3.3.6)
结合公式 (3.3.5)
与公式 (3.3.6)
可得到相干解调器关于DSB-SC信号的信噪比增益
G D S B = S N R o u t S N R i n = 2 (3.3.7) G_{DSB} = \cfrac{SNR_{out}}{SNR_{in}} = 2 \tag{3.3.7} GDSB=SNRinSNRout=2(3.3.7)
3.4 单边带调制解调(SSB)
由 (2.3.10)
与归一化功率的定义
P
=
<
w
2
(
t
)
>
(3.4.1)
P = \big<w^2(t)\big> \tag{3.4.1}
P=⟨w2(t)⟩(3.4.1)
可得输入相干解调器的DSB-SC信号的功率
S i n = < s 2 ( t ) > = A c 2 P m (3.4.2) S_{in} = \big<s^2(t)\big> = A_c^2 P_m \tag{3.4.2} Sin=⟨s2(t)⟩=Ac2Pm(3.4.2)
其中
P
m
P_m
Pm 为基带信号
m
(
t
)
m(t)
m(t) 的归一化平均功率
P
m
=
<
m
2
(
t
)
>
(3.4.3)
P_m = \big<m^2(t)\big> \tag{3.4.3}
Pm=⟨m2(t)⟩(3.4.3)
再结合公式 (2.3.14)
可得输出相干解调器的DSB-SC信号的功率
S o u t = < s o 2 ( t ) > = A c 2 4 < m 2 ( t ) > = A c 2 P m 4 (3.4.4) S_{out} = \big<s_o^2(t)\big> = \cfrac{A_c^2}{4}\big<m^2(t)\big> = \cfrac{A_c^2 P _m}{4} \tag{3.4.4} Sout=⟨so2(t)⟩=4Ac2⟨m2(t)⟩=4Ac2Pm(3.4.4)
结合公式 (3.4.2)
与公式 (3.1.6)
可得到相干解调器输入信号的信噪比
S N R i n = S i n N i n = A c 2 P m n 0 B = A c 2 P m n 0 B (3.4.5) SNR_{in} = \cfrac{S_{in}}{N_{in}} = \cfrac{A_c^2 P_m}{n_0 B} = \cfrac{A_c^2 P_m}{n_0 B} \tag{3.4.5} SNRin=NinSin=n0BAc2Pm=n0BAc2Pm(3.4.5)
结合公式 (3.4.4)
与公式 (3.1.11)
可得到相干解调器输出信号的信噪比
S N R o u t = S o u t N o u t = A c 2 P m 4 1 4 n 0 B = A c 2 P m n 0 B (3.4.6) SNR_{out} = \cfrac{S_{out}}{N_{out}} = \cfrac{\cfrac{A_c^2 P _m}{4}}{\cfrac{1}{4}n_0 B} = \cfrac{A_c^2 P_m}{n_0 B} \tag{3.4.6} SNRout=NoutSout=41n0B4Ac2Pm=n0BAc2Pm(3.4.6)
结合公式 (3.4.5)
与公式 (3.4.6)
可得到相干解调器关于DSB-SC信号的信噪比增益
G D S B = S N R o u t S N R i n = 1 (3.4.7) G_{DSB} = \cfrac{SNR_{out}}{SNR_{in}} = 1 \tag{3.4.7} GDSB=SNRinSNRout=1(3.4.7)
4. 仿真实现与仿真结果
4.1 常规调幅调制解调仿真(AM)
仿真程序见 附录7.2 AM调制解调仿真程序 (AM.py)
4.1.1 基带信号 m ( t ) m(t) m(t), 载波信号 c ( t ) c(t) c(t) 与 AM调制信号 s ( t ) s(t) s(t) 时域波形
4.1.2 基带信号 m ( t ) m(t) m(t) 频域波形
4.1.3 载波信号 c ( t ) c(t) c(t) 频域波形
4.1.4 AM调制信号 s ( t ) s(t) s(t) 频域波形
4.1.5 AM调制信号 s ( t ) s(t) s(t), 同步载波信号 c ( t ) c(t) c(t) 与 移频信号 s d ( t ) s_d(t) sd(t) 时域波形
4.1.6 移频信号 s d ( t ) s_d(t) sd(t) 频域波形
4.1.7 解调信号 m o ( t ) m_o(t) mo(t) 时域波形
4.1.8 解调信号 m o ( t ) m_o(t) mo(t) 频域波形
4.1.9 AWGN噪声 n i ( t ) n_i(t) ni(t), 带通AWGN噪声 n ( t ) n(t) n(t), 移频带通AWGN噪声 n d ( t ) n_d(t) nd(t) 与输出AWGN噪声 n o ( t ) n_o(t) no(t) 时域波形
4.1.10 AWGN噪声 n i ( t ) n_i(t) ni(t), 带通AWGN噪声 n ( t ) n(t) n(t), 移频带通AWGN噪声 n d ( t ) n_d(t) nd(t) 与输出AWGN噪声 n o ( t ) n_o(t) no(t) 功率谱密度波形
4.1.11 功率, 信噪比与信噪比增益计算与分析
信号特征 | 理论值 | 仿真值 | 相对误差 |
---|---|---|---|
输入信号功率 S i n S_{in} Sin | 5.625000e-01 | 5.641479e-01 | 2.92E-03 |
输入噪声功率 N i n N_{in} Nin | 1.103856e-02 | 1.200238e-02 | 8.03E-02 |
输入信噪比 S N R i n SNR_{in} SNRin | 5.095772e+01 | 4.700301e+01 | 8.41E-02 |
输出信号功率 S o u t S_{out} Sout | 2.812500e-01 | 2.901258e-01 | 3.06E-02 |
输出噪声功率 N o u t N_{out} Nout | 2.759640e-03 | 3.321398e-03 | 1.69E-01 |
输出信噪比 S N R o u t SNR_{out} SNRout | 1.019154e+02 | 8.735052e+01 | 1.67E-01 |
信噪比增益 G G G | 2.000000e+00 | 1.858403e+00 | 7.62E-02 |
- 注: 通过BPF前信号的信噪比为6dB.
在误差允许范围内可以认为理论分析符合实际情况.
误差产生原因分析:
- 相干解调器中的滤波器(BPF, LPF)并非理想滤波器, 因此有一部分通带外的频率成分通过, 其主要导致输入与输出噪声功率仿真值的功率仿真值偏大, 该误差可以通过提高滤波器的阶数减小.
- 由于抽样信号的频率较低, 因此产生的AWGN并不完全符合随机分布, 且高度依赖随机种子, 不同的随机种子产生的带通AWGN功率有一个较大的散布范围, 其主要影响输入与输出的噪声功率, 间接影响输入与输出的信噪比.
- 由于AM调制信号仅使用相干解调器解调的结果还保留了直流分量, 因此我使用了修正后的理论值计算公式
(3.2.2)
,(3.2.4)
,(3.2.5)
,(3.2.6)
和(3.2.7)
, 现实中对AM调制信号的解调还会使用包络检波器获取其包络, 使用耦合电路过滤其直流分量, 因此在仿真中直流分量对仿真结果又一定的影响.
4.2 抑制载波双边带调制解调仿真(DSB-SC)
仿真程序见 附录7.3 DSB-SC调制解调仿真程序 (DSB-SC.py)
4.2.1 基带信号 m ( t ) m(t) m(t), 载波信号 c ( t ) c(t) c(t) 与 AM调制信号 s ( t ) s(t) s(t) 时域波形
4.2.2 基带信号 m ( t ) m(t) m(t) 频域波形
4.2.3 载波信号 c ( t ) c(t) c(t) 频域波形
4.2.4 DSB-SC调制信号 s ( t ) s(t) s(t) 频域波形
4.2.5 DSB-SC调制信号 s ( t ) s(t) s(t), 同步载波信号 c ( t ) c(t) c(t) 与 移频信号 s d ( t ) s_d(t) sd(t) 时域波形
4.2.6 移频信号 s d ( t ) s_d(t) sd(t) 频域波形
4.2.7 解调信号 m o ( t ) m_o(t) mo(t) 时域波形
4.2.8 解调信号 m o ( t ) m_o(t) mo(t) 频域波形
4.2.9 AWGN噪声 n i ( t ) n_i(t) ni(t), 带通AWGN噪声 n ( t ) n(t) n(t), 移频带通AWGN噪声 n d ( t ) n_d(t) nd(t) 与输出AWGN噪声 n o ( t ) n_o(t) no(t) 时域波形
4.2.10 AWGN噪声 n i ( t ) n_i(t) ni(t), 带通AWGN噪声 n ( t ) n(t) n(t), 移频带通AWGN噪声 n d ( t ) n_d(t) nd(t) 与输出AWGN噪声 n o ( t ) n_o(t) no(t) 功率谱密度波形
4.2.11 功率, 信噪比与信噪比增益计算与分析
信号特征 | 理论值 | 仿真值 | 相对误差 |
---|---|---|---|
输入信号功率 S i n S_{in} Sin | 2.500000e-01 | 2.507324e-01 | 2.92E-03 |
输入噪声功率 N i n N_{in} Nin | 4.906028e-03 | 5.334388e-03 | 8.03E-02 |
输入信噪比 S N R i n SNR_{in} SNRin | 5.095772e+01 | 4.700304e+01 | 8.41E-02 |
输出信号功率 S o u t S_{out} Sout | 1.250000e-01 | 1.269980e-01 | 1.57E-02 |
输出噪声功率 N o u t N_{out} Nout | 1.226507e-03 | 1.476175e-03 | 1.69E-01 |
输出信噪比 S N R o u t SNR_{out} SNRout | 1.019153e+02 | 8.603178e+01 | 1.85E-01 |
信噪比增益 G G G | 2.000000e+00 | 1.830345e+00 | 9.27E-02 |
- 注: 通过BPF前信号的信噪比为6dB.
在误差允许范围内可以认为理论分析符合实际情况.
误差产生原因分析:
- 相干解调器中的滤波器(BPF, LPF)并非理想滤波器, 因此有一部分通带外的频率成分通过, 其主要导致输入与输出噪声功率仿真值的功率仿真值偏大, 该误差可以通过提高滤波器的阶数减小.
- 由于抽样信号的频率较低, 因此产生的AWGN并不完全符合随机分布, 且高度依赖随机种子, 不同的随机种子产生的带通AWGN功率有一个较大的散布范围, 其主要影响输入与输出的噪声功率, 间接影响输入与输出的信噪比.
4.3 上边带调制解调仿真(USSB)
仿真程序见 附录7.4 SSB调制解调仿真程序 (SSB.py)
4.3.1 基带信号 m ( t ) m(t) m(t), 载波信号 c ( t ) c(t) c(t) 与 AM调制信号 s ( t ) s(t) s(t) 时域波形
4.3.2 基带信号 m ( t ) m(t) m(t) 频域波形
4.3.3 载波信号 c ( t ) c(t) c(t) 频域波形
4.3.4 USSB调制信号 s ( t ) s(t) s(t) 频域波形
4.3.5 USSB调制信号 s ( t ) s(t) s(t), 同步载波信号 c ( t ) c(t) c(t) 与 移频信号 s d ( t ) s_d(t) sd(t) 时域波形
4.3.6 移频信号 s d ( t ) s_d(t) sd(t) 频域波形
4.3.7 解调信号 m o ( t ) m_o(t) mo(t) 时域波形
4.3.8 解调信号 m o ( t ) m_o(t) mo(t) 频域波形
4.3.9 AWGN噪声 n i ( t ) n_i(t) ni(t), 带通AWGN噪声 n ( t ) n(t) n(t), 移频带通AWGN噪声 n d ( t ) n_d(t) nd(t) 与输出AWGN噪声 n o ( t ) n_o(t) no(t) 时域波形
4.3.10 AWGN噪声 n i ( t ) n_i(t) ni(t), 带通AWGN噪声 n ( t ) n(t) n(t), 移频带通AWGN噪声 n d ( t ) n_d(t) nd(t) 与输出AWGN噪声 n o ( t ) n_o(t) no(t) 功率谱密度波形
4.3.11 功率, 信噪比与信噪比增益计算与误差分析
信号特征 | 理论值 | 仿真值 | 相对误差 |
---|---|---|---|
输入信号功率 S i n S_{in} Sin | 5.000000e-01 | 5.009397e-01 | 1.88E-03 |
输入噪声功率 N i n N_{in} Nin | 4.906028e-03 | 4.968031e-03 | 1.25E-02 |
输入信噪比 S N R i n SNR_{in} SNRin | 1.019154e+02 | 1.008327e+02 | 1.07E-02 |
输出信号功率 S o u t S_{out} Sout | 1.250000e-01 | 1.265897e-01 | 1.26E-02 |
输出噪声功率 N o u t N_{out} Nout | 1.226507e-03 | 1.134983e-03 | 8.06E-02 |
输出信噪比 S N R o u t SNR_{out} SNRout | 1.019153e+02 | 1.115344e+02 | 8.62E-02 |
信噪比增益 G G G | 1.000000e+00 | 1.106134e+00 | 9.60E-02 |
- 注: 通过BPF前信号的信噪比为6dB.
在误差允许范围内可以认为理论分析符合实际情况.
误差产生原因分析:
- 相干解调器中的滤波器(BPF, LPF)并非理想滤波器, 因此有一部分通带外的频率成分通过, 其主要导致输入与输出噪声功率仿真值的功率仿真值偏大, 该误差可以通过提高滤波器的阶数减小.
- 由于抽样信号的频率较低, 因此产生的AWGN并不完全符合随机分布, 且高度依赖随机种子, 不同的随机种子产生的带通AWGN功率有一个较大的散布范围, 其主要影响输入与输出的噪声功率, 间接影响输入与输出的信噪比.
- 还是由于产生的AWGN并不完全符合随机分布, 因此相同的AWGN通过USSB的带通滤波器与通过LSSB的带通滤波器后的功率并不相同, 且其同样高度依赖随机种子, 不同的随机种子对USSB与LSSB的噪声功率之差也有决定性影响.
4.4 下边带调制解调仿真(LSSB)
仿真程序见 附录7.4 SSB调制解调仿真程序 (SSB.py)
4.4.1 基带信号 m ( t ) m(t) m(t), 载波信号 c ( t ) c(t) c(t) 与 AM调制信号 s ( t ) s(t) s(t) 时域波形
4.4.2 基带信号 m ( t ) m(t) m(t) 频域波形
4.4.3 载波信号 c ( t ) c(t) c(t) 频域波形
4.4.4 LSSB调制信号 s ( t ) s(t) s(t) 频域波形
4.4.5 LSSB调制信号 s ( t ) s(t) s(t), 同步载波信号 c ( t ) c(t) c(t) 与 移频信号 s d ( t ) s_d(t) sd(t) 时域波形
4.4.6 移频信号 s d ( t ) s_d(t) sd(t) 频域波形
4.4.7 解调信号 m o ( t ) m_o(t) mo(t) 时域波形
4.4.8 解调信号 m o ( t ) m_o(t) mo(t) 频域波形
4.4.9 AWGN噪声 n i ( t ) n_i(t) ni(t), 带通AWGN噪声 n ( t ) n(t) n(t), 移频带通AWGN噪声 n d ( t ) n_d(t) nd(t) 与输出AWGN噪声 n o ( t ) n_o(t) no(t) 时域波形
4.4.10 AWGN噪声 n i ( t ) n_i(t) ni(t), 带通AWGN噪声 n ( t ) n(t) n(t), 移频带通AWGN噪声 n d ( t ) n_d(t) nd(t) 与输出AWGN噪声 n o ( t ) n_o(t) no(t) 功率谱密度波形
4.4.11 功率, 信噪比与信噪比增益计算与误差分析
信号特征 | 理论值 | 仿真值 | 相对误差 |
---|---|---|---|
输入信号功率 S i n S_{in} Sin | 5.000000e-01 | 5.010163e-01 | 2.03E-03 |
输入噪声功率 N i n N_{in} Nin | 4.906028e-03 | 5.601459e-03 | 1.24E-01 |
输入信噪比 S N R i n SNR_{in} SNRin | 1.019154e+02 | 8.944388e+01 | 1.39E-01 |
输出信号功率 S o u t S_{out} Sout | 1.250000e-01 | 1.274379e-01 | 1.91E-02 |
输出噪声功率 N o u t N_{out} Nout | 1.226507e-03 | 1.353658e-03 | 9.39E-02 |
输出信噪比 S N R o u t SNR_{out} SNRout | 1.019153e+02 | 9.414334e+01 | 8.26E-02 |
信噪比增益 G G G | 1.000000e+00 | 1.052541e+00 | 4.99E-02 |
- 注: 通过BPF前信号的信噪比为6dB.
在误差允许范围内可以认为理论分析符合实际情况.
误差产生原因分析:
- 相干解调器中的滤波器(BPF, LPF)并非理想滤波器, 因此有一部分通带外的频率成分通过, 其主要导致输入与输出噪声功率仿真值的功率仿真值偏大, 该误差可以通过提高滤波器的阶数减小.
- 由于抽样信号的频率较低, 因此产生的AWGN并不完全符合随机分布, 且高度依赖随机种子, 不同的随机种子产生的带通AWGN功率有一个较大的散布范围, 其主要影响输入与输出的噪声功率, 间接影响输入与输出的信噪比.
- 还是由于产生的AWGN并不完全符合随机分布, 因此相同的AWGN通过USSB的带通滤波器与通过LSSB的带通滤波器后的功率并不相同, 且其同样高度依赖随机种子, 不同的随机种子对USSB与LSSB的噪声功率之差也有决定性影响.
5. 小结
信号时域表达式 | AM | DSB-SC | USSB | LSSB |
---|---|---|---|---|
基带信号 m ( t ) m(t) m(t) | m ( t ) m(t) m(t) | m ( t ) m(t) m(t) | m ( t ) m(t) m(t) | m ( t ) m(t) m(t) |
调制信号 s ( t ) s(t) s(t) | A c [ 1 + m ( t ) ] cos ( 2 π f c t ) A_c[1 + m(t)]\cos(2\pi f_c t) Ac[1+m(t)]cos(2πfct) | A c m ( t ) cos ( 2 π f c t ) A_cm(t)\cos(2\pi f_c t) Acm(t)cos(2πfct) | A c [ m ( t ) cos ( 2 π f c t ) − m ^ ( t ) sin ( 2 π f c t ) ] A_c\bigg[m(t)\cos(2\pi f_ct) - \hat{m}(t)\sin(2\pi f_c t)\bigg] Ac[m(t)cos(2πfct)−m^(t)sin(2πfct)] | A c [ m ( t ) cos ( 2 π f c t ) + m ^ ( t ) sin ( 2 π f c t ) ] A_c\bigg[m(t)\cos(2\pi f_ct) + \hat{m}(t)\sin(2\pi f_c t)\bigg] Ac[m(t)cos(2πfct)+m^(t)sin(2πfct)] |
移频后调制信号 s d ( t ) s_d(t) sd(t) | A c 2 [ 1 + m ( t ) ] ⋅ [ 1 + cos ( 2 ⋅ 2 π f c t ) ] \cfrac{A_c}{2}\bigg[1 + m(t)\bigg]\cdot\bigg[1 + \cos(2 \cdot 2\pi f_c t)\bigg] 2Ac[1+m(t)]⋅[1+cos(2⋅2πfct)] | A c 2 m ( t ) ⋅ [ 1 + cos ( 2 ⋅ 2 π f c t ) ] \cfrac{A_c}{2}m(t) \cdot \bigg[1 + \cos(2 \cdot 2\pi f_c t)\bigg] 2Acm(t)⋅[1+cos(2⋅2πfct)] | A c 2 m ( t ) + A c 2 [ m ( t ) cos ( 2 ⋅ 2 π f c t ) − m ^ ( t ) sin ( 2 ⋅ 2 π f c t ) ] \cfrac{A_c}{2}m(t) + \cfrac{A_c}{2}\bigg[m(t)\cos(2 \cdot 2\pi f_ct) - \hat{m}(t)\sin(2 \cdot 2\pi f_c t)\bigg] 2Acm(t)+2Ac[m(t)cos(2⋅2πfct)−m^(t)sin(2⋅2πfct)] | A c 2 m ( t ) + A c 2 [ m ( t ) cos ( 2 ⋅ 2 π f c t ) + m ^ ( t ) sin ( 2 ⋅ 2 π f c t ) ] \cfrac{A_c}{2}m(t) + \cfrac{A_c}{2}\bigg[m(t)\cos(2 \cdot 2\pi f_ct) + \hat{m}(t)\sin(2 \cdot 2\pi f_c t)\bigg] 2Acm(t)+2Ac[m(t)cos(2⋅2πfct)+m^(t)sin(2⋅2πfct)] |
解调信号 m o ( t ) m_o(t) mo(t) | A c 2 m ( t ) \cfrac{A_c}{2}m(t) 2Acm(t) | A c 2 m ( t ) \cfrac{A_c}{2} m(t) 2Acm(t) | A c 2 m ( t ) \cfrac{A_c}{2} m(t) 2Acm(t) | A c 2 m ( t ) \cfrac{A_c}{2} m(t) 2Acm(t) |
- 注: AM调制信号解调后未消除直流分量
信号频域表达式 | AM | DSB-SC | USSB | LSSB |
---|---|---|---|---|
基带信号频域表达式 M ( f ) M(f) M(f) | M ( f ) M(f) M(f) | M ( f ) M(f) M(f) | M ( f ) M(f) M(f) | M ( f ) M(f) M(f) |
调制信号频域表达式 S ( f ) S(f) S(f) | A c 2 [ δ ( f − f c ) + δ ( f + f c ) ] + A c 2 [ M ( f − f c ) + M ( f + f c ) ] \cfrac{A_c}{2}\bigg[\delta(f - f_c) + \delta(f + f_c)\bigg] + \cfrac{A_c}{2}\bigg[M(f - f_c) + M(f + f_c)\bigg] 2Ac[δ(f−fc)+δ(f+fc)]+2Ac[M(f−fc)+M(f+fc)] | A c 2 [ M ( f − f c ) + M ( f + f c ) ] \cfrac{A_c}{2}\bigg[M(f - f_c) + M(f + f_c)\bigg] 2Ac[M(f−fc)+M(f+fc)] | A c 2 [ M ( f − f c ) + M ( f + f c ) ] − A c 2 [ M ( f + f c ) ⋅ s g n ( f + f c ) − M ( f + f c ) ⋅ s g n ( f − f c ) ] \cfrac{A_c}{2}\bigg[M(f - f_c) + M(f + f_c)\bigg] - \cfrac{A_c}{2}\bigg[M(f + f_c) \cdot sgn(f + f_c) - M(f + f_c) \cdot sgn(f - f_c)\bigg] 2Ac[M(f−fc)+M(f+fc)]−2Ac[M(f+fc)⋅sgn(f+fc)−M(f+fc)⋅sgn(f−fc)] | A c 2 [ M ( f − f c ) + M ( f + f c ) ] + A c 2 [ M ( f + f c ) ⋅ s g n ( f + f c ) − M ( f + f c ) ⋅ s g n ( f − f c ) ] \cfrac{A_c}{2}\bigg[M(f - f_c) + M(f + f_c)\bigg] + \cfrac{A_c}{2}\bigg[M(f + f_c) \cdot sgn(f + f_c) - M(f + f_c) \cdot sgn(f - f_c)\bigg] 2Ac[M(f−fc)+M(f+fc)]+2Ac[M(f+fc)⋅sgn(f+fc)−M(f+fc)⋅sgn(f−fc)] |
移频后调制信号频域表达式 S d ( f ) S_d(f) Sd(f) | A c 2 [ M ( f ) + δ ( f ) ] + A c 4 [ M ( f − 2 f c ) + M ( f + 2 f c ) + δ ( f − 2 f c ) + δ ( f + 2 f c ) ] \cfrac{A_c}{2}\bigg[M(f) + \delta(f)\bigg] + \cfrac{A_c}{4}\bigg[M(f - 2f_c) + M(f + 2f_c) + \delta(f - 2f_c) + \delta(f + 2f_c)\bigg] 2Ac[M(f)+δ(f)]+4Ac[M(f−2fc)+M(f+2fc)+δ(f−2fc)+δ(f+2fc)] | A c 2 M ( f ) + A c 4 [ M ( f − 2 f c ) + M ( f + 2 f c ) ] \cfrac{A_c}{2}M(f) + \cfrac{A_c}{4}\bigg[M(f - 2f_c) + M(f + 2f_c)\bigg] 2AcM(f)+4Ac[M(f−2fc)+M(f+2fc)] | A c 2 M ( f ) + A c 4 [ M ( f − 2 f c ) + M ( f + 2 f c ) ] − A c 4 [ M ( f + 2 f c ) ⋅ s g n ( f + 2 f c ) − M ( f + 2 f c ) ⋅ s g n ( f − 2 f c ) ] \cfrac{A_c}{2}M(f) + \cfrac{A_c}{4}\bigg[M(f - 2 f_c) + M(f + 2 f_c)\bigg] - \cfrac{A_c}{4}\bigg[M(f + 2 f_c) \cdot sgn(f + 2 f_c) - M(f + 2 f_c) \cdot sgn(f - 2 f_c)\bigg] 2AcM(f)+4Ac[M(f−2fc)+M(f+2fc)]−4Ac[M(f+2fc)⋅sgn(f+2fc)−M(f+2fc)⋅sgn(f−2fc)] | A c 2 M ( f ) + A c 4 [ M ( f − 2 f c ) + M ( f + 2 f c ) ] + A c 4 [ M ( f + 2 f c ) ⋅ s g n ( f + 2 f c ) − M ( f + 2 f c ) ⋅ s g n ( f − 2 f c ) ] \cfrac{A_c}{2}M(f) + \cfrac{A_c}{4}\bigg[M(f - 2 f_c) + M(f + 2 f_c)\bigg] + \cfrac{A_c}{4}\bigg[M(f + 2 f_c) \cdot sgn(f + 2 f_c) - M(f + 2 f_c) \cdot sgn(f - 2 f_c)\bigg] 2AcM(f)+4Ac[M(f−2fc)+M(f+2fc)]+4Ac[M(f+2fc)⋅sgn(f+2fc)−M(f+2fc)⋅sgn(f−2fc)] |
解调信号频域表达式 M o ( f ) M_o(f) Mo(f) | A c 2 δ ( f ) + A c 2 M ( f ) \cfrac{A_c}{2}\delta(f) + \cfrac{A_c}{2}M(f) 2Acδ(f)+2AcM(f) | A c 2 M ( f ) \cfrac{A_c}{2}M(f) 2AcM(f) | A c 2 M ( f ) \cfrac{A_c}{2}M(f) 2AcM(f) | A c 2 M ( f ) \cfrac{A_c}{2}M(f) 2AcM(f) |
- 注: AM调制信号解调后未消除直流分量
信号特征 | AM | DSB-SC | SSB |
---|---|---|---|
带宽 B W BW BW | 2 B 2B 2B | 2 B 2B 2B | B B B |
输入信号功率 S i n S_{in} Sin | A c 2 ( 1 + P m ) 2 \cfrac{A_c^2 (1 + P_m)}{2} 2Ac2(1+Pm) | A c 2 P m 2 \cfrac{A_c^2 P_m}{2} 2Ac2Pm | A c 2 P m A_c^2 P_m Ac2Pm |
输入噪声功率 N i n N_{in} Nin | 2 n 0 B 2 n_0 B 2n0B | 2 n 0 B 2 n_0 B 2n0B | n 0 B n_0 B n0B |
输入信噪比 S N R i n SNR_{in} SNRin | A c 2 ( 1 + P m ) 4 n 0 B \cfrac{A_c^2(1 + P_m)}{4 n_0 B} 4n0BAc2(1+Pm) | A c 2 P m 4 n 0 B \cfrac{A_c^2 P_m}{4 n_0 B} 4n0BAc2Pm | A c 2 P m n 0 B \cfrac{A_c^2 P_m}{n_0 B} n0BAc2Pm |
输出信号功率 S o u t S_{out} Sout | A c 2 ⋅ ( 1 + P m ) 4 \cfrac{A_c^2 \cdot(1 + P_m)}{4} 4Ac2⋅(1+Pm) | A c 2 P m 4 \cfrac{A_c^2 P_m}{4} 4Ac2Pm | A c 2 P m 4 \cfrac{A_c^2 P_m}{4} 4Ac2Pm |
输出噪声功率 N o u t N_{out} Nout | 1 2 n 0 B \cfrac{1}{2}n_0 B 21n0B | 1 2 n 0 B \cfrac{1}{2}n_0 B 21n0B | 1 4 n 0 B \cfrac{1}{4}n_0 B 41n0B |
输出信噪比 S N R o u t SNR_{out} SNRout | A c 2 ⋅ ( 1 + P m ) 2 n 0 B \cfrac{A_c^2 \cdot(1 + P_m)}{2 n_0 B} 2n0BAc2⋅(1+Pm) | A c 2 P m 2 n 0 B \cfrac{A_c^2 P_m}{2 n_0 B} 2n0BAc2Pm | A c 2 P m n 0 B \cfrac{A_c^2 P_m}{n_0 B} n0BAc2Pm |
信噪比增益 G G G | 2 2 2 | 2 2 2 | 1 1 1 |
- 注: AM调制信号解调后未消除直流分量
6. 参考资料
[1] Markdown 公式编号.
[2] markdown让文字居中和带颜色.
[3] LaTeX公式手册(全网最全).
[4] python signal滤波器使用说明.
[5] Python基于scipy实现信号滤波功能.
[7] Python 加性高斯白噪声 AWGN.
[8] 高斯白噪声 python.
[9] 频域特征提取的Python实现(频谱、功率谱、倒频谱).
[10] Python求均值,方差,标准差.
[11] python基础_格式化输出.
[12] 现代通信原理6.1 常规调幅调制(AM)与抑制载波双边带(DSB-SC)调制.
[13] 现代通信原理6.2:单边带(SSB)调制.
[14] 仿真作业3:噪声通过DSB-SC解调器.
[15] MATLAB通信仿真实例1:无噪声信道下DSB-SC调制解调器.
[16] 现代通信原理A.3:随机信号的功率谱估计.
[17] 现代通信原理4.3:白噪声.
[18] 模拟幅度调制相干解调系统抗噪声性能仿真分析.
[19] 模拟幅度调制相干解调系统抗噪声性能仿真分析.
[20] 现代通信原理 - 仿真2 - DSB-SC(双边带抑制载波)调制解调器的仿真.
7. 附录
7.1 实用程序 utils.py
# -*- coding: utf-8 -*-
# utils.py
# %% 导入库
import numpy as np
import matplotlib.pyplot as plt
# help(plt.psd)s
# %% 加性高斯白噪声生成函数
def wgn(x, snr, seed=7):
'''
加入高斯白噪声 Additive White Gaussian Noise
:param x: 原始信号
:param snr: 信噪比
:param seed: 随机种子
:return: 加入噪声后的信号
'''
np.random.seed(seed) # 设置随机种子
snr = 10 ** (snr / 10.0)
xpower = np.sum(x ** 2) / len(x)
npower = xpower / snr
return np.random.randn(len(x)) * np.sqrt(npower)
# %% 波形绘制函数
def drawWave(
figure_i,
row_i,
column_j,
label_x,
axis_xs,
axis_ys,
formats,
labels,
label_locs,
limit_ys,
linewidths):
"""
param:
figure_i: 图窗编号
row_i: 图表的行数
column_j: 图表的列数
label_x: 横轴标签
axis_xs: 横轴
axis_ys: 纵轴
formats: 曲线格式(颜色 风格 标记)
颜色:
'b' 蓝色(blue)(默认)
'g' 绿色(green)
'r' 红色(red)
'y' 黄色(yellow)
'k' 黑色(black)
'w' 白色(white)
'c' 青绿色(cyan)
'm' 洋红色(magenta)
'#xxxxxx' RGB颜色
'0.xxx' 灰度
风格:
'-' 实线(默认)
':' 虚线
' ' 无线条
'--' 破折线
'-.' 点划线
标记:
'.' 点(默认)
',' 极小点
'o' 实心圆
'^' 正三角
'v' 倒三角
'>' 右三角
'<' 左三角
'1' 下花三角
'2' 上花三角
'3' 左花三角
'4' 右花三角
's' 实心方形(square)
'p' 实心五边形(pentagon)
'*' 星形
'h' 竖六边形(hexagon)
'H' 横六边形
'+' 十字
'x' 叉形
'D' 菱形(diamond)
'd' 瘦菱形
'|' 垂直线
labels: 曲线标签内容
label_locs: 曲线标签位置
0 "best 最佳位置(默认)
1 "upper right" 右上
2 "upper left" 左上
3 "lower right" 右下
4 "lower left" 左下
limit_ys: 坐标轴下限与上限
linewidths: 线宽
"""
fig = plt.figure(figure_i)
chart_formate = row_i * 100 + column_j * 10
for i in range(row_i * column_j):
ax = fig.add_subplot(chart_formate + 1 + i)
ax.plot(
axis_xs[i],
axis_ys[i],
formats[i],
label=labels[i],
linewidth=linewidths[i]
) # 横轴, 纵轴, 标签
ax.legend(loc=label_locs[i]) # 标签位置
if limit_ys[i] is not None:
ax.set_ylim(limit_ys[i]) # 纵轴刻度范围
ax.grid() # 显示网格线
ax.set_xlabel(label_x)
# %% 功率密度谱绘制函数
def drawPSD(
figure_i,
row_i,
column_j,
label_x,
axis_ys,
F_samples,
limit_ys):
"""
param:
figure_i: 图窗编号
row_i: 图表的行数
column_j: 图表的列数
label_x: 横轴标签
axis_ys: 纵轴
Fs_s:
limit_ys: 坐标轴下限与上限
"""
fig = plt.figure(figure_i)
chart_formate = row_i * 100 + column_j * 10
for i in range(row_i * column_j):
ax = fig.add_subplot(chart_formate + 1 + i)
ax.psd(axis_ys[i], Fs=F_samples[i])
if limit_ys[i] is not None:
ax.set_ylim(limit_ys[i]) # 纵轴刻度范围
ax.grid() # 显示网格线
ax.set_xlabel(label_x)
# %% 显示所有图窗
def show():
plt.show()
7.2 AM调制解调仿真程序 AM.py
# -*- coding: utf-8 -*-
# AM.PY
# %% 配置导入
from scipy import signal
from scipy import fft
import numpy as np
import utils
# %% 参数设置
time_begin = 0 # 起始时间
time_end = 1 # 终止时间
points = 1024 # 栅网采样点数(采样频率)
f_sample = points / (time_end - time_begin) # 采样频率
T = (time_end - time_begin) / (points - 1) # 栅网采样时间间距
frequency = [10, 100] # 频率
amplitude = [0.5, 1] # 调幅系数/振幅
phase = [0, 0] # 相位(cos(t)相位为0)
zoom = 4 # 频谱缩放倍数
display_interval = 1.25 # 显示区间的系数
tick_max = max(amplitude) * 2 # 波形纵轴刻度最大值
tick_min = -tick_max # 波形纵轴刻度最小值
snr = 6 # AWGN生成时的信噪比, 单位(dB)
seed = 3 # AWGN发生器随机种子
filter_order = 8 # 滤波器的阶数
f_H_LPF = frequency[0] * 2 # 低通滤波器的上限截止频率
f_H_BPF_DSB = frequency[1] + frequency[0] * 2 # 带通滤波器的上限截止频率
f_L_BPF_DSB = frequency[1] - frequency[0] * 2 # 带通滤波器的下限截止频率
# %% 生成时域波形
t = np.linspace(time_begin, time_end, points) # 生成时域栅网
waves = []
for i in range(len(frequency)):
waves.append(
signal.chirp(
t,
f0=frequency[i],
t1=time_end,
f1=frequency[i],
phi=phase[i],
method='linear'
) * amplitude[i]
)
s = None
for wave in waves:
if s is None:
s = 1 + wave.copy()
else:
s *= wave
s_d = s * waves[1]
# %% 获得频域波形
f = np.linspace(0, 1 / T, points) # 生成频域栅网
# 输入信号 M(f)
M = fft.fft(waves[0]) # 快速傅里叶变换
M_nor = M / points # 归一化
M_mod = np.abs(M_nor) # 获取幅度频谱
M_pha = np.angle(M) # 获取相位频谱
# 移频信号 C(f)
C = fft.fft(waves[1]) # 快速傅里叶变换
C_nor = C / points # 归一化
C_mod = np.abs(C_nor) # 获取幅度频谱
C_pha = np.angle(C) # 获取相位频谱
# 第一次移频 -> S(f)
S = fft.fft(s) # 快速傅里叶变换
S_nor = S / points # 归一化
S_mod = np.abs(S_nor) # 获取幅度频谱
S_pha = np.angle(S) # 获取相位频谱
# 第二次移频 -> S_d(f)
S_d = fft.fft(s_d)
S_d_nor = S_d / points # 归一化
S_d_mod = np.abs(S_d_nor) # 获取幅度频谱
S_d_pha = np.angle(S_d) # 获取相位频谱
# %% 滤波器参数
"""
滤波器构造函数(仅介绍Butterworth滤波器)
scipy.signal.butter(N, Wn, btype='low', analog=False, output='ba')
输入参数:
N:滤波器的阶数
Wn:归一化截止频率。计算公式Wn=2*截止频率/采样频率。(注意:根据采样定理,采样频率要大于两倍的信号本身最大的频率,才能还原信号。截止频率一定小于信号本身最大的频率,所以Wn一定在0和1之间)。当构造带通滤波器或者带阻滤波器时,Wn为长度为2的列表。
btype : 滤波器类型{‘lowpass’, ‘highpass’, ‘bandpass’, ‘bandstop’},
output : 输出类型{‘ba’, ‘zpk’, ‘sos’},
输出参数:
b,a: IIR滤波器的分子(b)和分母(a)多项式系数向量。output='ba'
z,p,k: IIR滤波器传递函数的零点、极点和系统增益. output= 'zpk'
sos: IIR滤波器的二阶截面表示。output= 'sos'
函数的使用
信号滤波中最常用的无非低通滤波、高通滤波和带通滤波。下面简单介绍这三种滤波的使用过程:
(1).高通滤波
# 这里假设采样频率为1000hz,信号本身最大的频率为500hz,要滤除10hz以下频率成分,即截至频率为10hz,则wn=2*10/1000=0.02
# from scipy import signal
# b, a = signal.butter(8, 0.02, 'highpass')
# filtedData = signal.filtfilt(b, a, data)#data为要过滤的信号
(2).低通滤波
# 这里假设采样频率为1000hz,信号本身最大的频率为500hz,要滤除10hz以上频率成分,即截至频率为10hz,则wn=2*10/1000=0.02
# from scipy import signal
# b, a = signal.butter(8, 0.02, 'lowpass')
# filtedData = signal.filtfilt(b, a, data) #data为要过滤的信号
(3).带通滤波
# 这里假设采样频率为1000hz,信号本身最大的频率为500hz,要滤除10hz以下和400hz以上频率成分,即截至频率为10hz和400hz,则wn1=2*10/1000=0.02,wn2=2*400/1000=0.8。Wn=[0.02,0.8]
# from scipy import signal
# b, a = signal.butter(8, [0.02,0.8], 'bandpass')
# filtedData = signal.filtfilt(b, a, data) #data为要过滤的信号
"""
wn_LPF = 2 * f_H_LPF / f_sample
b_LPF, a_LPF = signal.butter(filter_order, wn_LPF, 'lowpass') # 配置滤波器
wn_BPF_DSB = [2 * f_L_BPF_DSB / f_sample, 2 * f_H_BPF_DSB / f_sample]
b_BPF_DSB, a_BPF_DSB = signal.butter(filter_order, wn_BPF_DSB, 'bandpass') # 配置滤波器
# %% 进行滤波, 获得 m_o(t) 的时域波形
"""
滤波函数
scipy.signal.filtfilt(b, a, x, axis=-1, padtype='odd', padlen=None, method='pad', irlen=None)
输入参数:
b: 滤波器的分子系数向量
a: 滤波器的分母系数向量
x: 要过滤的数据数组。(array型)
axis: 指定要过滤的数据数组x的轴
padtype: 必须是“奇数”、“偶数”、“常数”或“无”。这决定了用于过滤器应用的填充信号的扩展类型。{‘odd’, ‘even’, ‘constant’, None}
padlen:在应用滤波器之前在轴两端延伸X的元素数目。此值必须小于要滤波元素个数 - 1。(int型或None)
method:确定处理信号边缘的方法。当method为“pad”时,填充信号;填充类型padtype和padlen决定,irlen被忽略。当method为“gust”时,使用古斯塔夫森方法,而忽略padtype和padlen。{“pad” ,“gust”}
irlen:当method为“gust”时,irlen指定滤波器的脉冲响应的长度。如果irlen是None,则脉冲响应的任何部分都被忽略。对于长信号,指定irlen可以显著改善滤波器的性能。(int型或None)
输出参数:
y: 滤波后的数据数组
"""
m_o = signal.filtfilt(b_LPF, a_LPF, s_d) # 为要过滤的信号
t_m_original = np.linspace(time_begin, T * (len(m_o) - 1), len(m_o)) # m_o(t) 信号的栅网
# %% 获得 m_o(t) 的频域波形
M_o = fft.fft(m_o)
M_o_nor = M_o / points # 归一化
M_o_mod = np.abs(M_o_nor) # 获取幅度频谱
M_o_pha = np.angle(M_o) # 获取相位频谱
# %% AWGN生成与处理
n_i = utils.wgn(s, snr, seed) # 生成AWGN
n = signal.filtfilt(b_BPF_DSB, a_BPF_DSB, n_i) # 获得带通AWGN
n_d = n * waves[1] # 获得移频后的带通AWGN
n_o = signal.filtfilt(b_LPF, a_LPF, n_d) # 获得通过低通滤波器的带通AWGN
# %% 绘制 m(t) c(t) s(t) 时域波形
utils.drawWave(
figure_i=1,
row_i=3,
column_j=1,
label_x=r"t / s",
axis_xs=[t] * 3,
axis_ys=waves + [s],
formats=['b-,', 'g-,', 'r-,'],
labels=[r"m(t) = 0.5cos(20πt)",
r"c(t) = cos(200πt)",
r"s(t) = [1 + m(t)]c(t)"],
label_locs=[r"upper right"] * 3,
limit_ys=[(tick_min, tick_max)] * 3,
linewidths=[1] * 3
)
# %% 绘制 m(t) 频域波形
utils.drawWave(
figure_i=2,
row_i=4,
column_j=1,
label_x=r"f / Hz",
axis_xs=[np.hstack((-f[-1:0:-1], f))] * 2 + [f[0:points//zoom]] * 2,
axis_ys=[np.hstack((M_mod[-1:0:-1], M_mod)),
np.hstack((-M_pha[-1:0:-1], M_pha)),
M_mod[0: points // zoom],
M_pha[0: points // zoom]],
formats=['b-,', 'g-,'] * 2,
labels=[r"|M(f)|", r"θᴍ(f)"] * 2,
label_locs=[r"upper right"] * 4,
limit_ys=[(0, max(M_mod) * display_interval), None] * 2,
linewidths=[1] * 4
)
# %% 绘制 c(t) 频域波形
utils.drawWave(
figure_i=3,
row_i=4,
column_j=1,
label_x=r"f / Hz",
axis_xs=[np.hstack((-f[-1:0:-1], f))] * 2 + [f[0:points//zoom]] * 2,
axis_ys=[np.hstack((C_mod[-1:0:-1], C_mod)),
np.hstack((-C_pha[-1:0:-1], C_pha)),
C_mod[0: points // zoom],
C_pha[0: points // zoom]],
formats=['b-,', 'g-,'] * 2,
labels=[r"|C(f)|", r"θᴄ(f)"] * 2,
label_locs=[r"upper right"] * 4,
limit_ys=[(0, max(C_mod) * display_interval), None] * 2,
linewidths=[1] * 4
)
# %% 绘制 s(t) 频域波形
utils.drawWave(
figure_i=4,
row_i=4,
column_j=1,
label_x=r"f / Hz",
axis_xs=[np.hstack((-f[-1:0:-1], f))] * 2 + [f[0:points//zoom]] * 2,
axis_ys=[np.hstack((S_mod[-1:0:-1], S_mod)),
np.hstack((-S_pha[-1:0:-1], S_pha)),
S_mod[0: points // zoom],
S_pha[0: points // zoom]],
formats=['b-,', 'g-,'] * 2,
labels=[r"|S(f)|", r"θs(f)"] * 2,
label_locs=[r"upper right"] * 4,
limit_ys=[(0, max(S_mod) * display_interval), None] * 2,
linewidths=[1] * 4
)
# %% 绘制 s(t) c(t) s_d(t) 时域波形
utils.drawWave(
figure_i=5,
row_i=3,
column_j=1,
label_x=r"t / s",
axis_xs=[t] * 3,
axis_ys=[s, waves[1], s_d],
formats=['b-,', 'g-,', 'r-,'],
labels=[r"s(t) = m(t)c(t)",
r"c(t) = cos(200πt)",
r"s_d(t) = s(t)c(t)"],
label_locs=[r"upper right"] * 3,
limit_ys=[(tick_min, tick_max)] * 3,
linewidths=[1] * 3
)
# %% 绘制 s_d(t) 频域波形
utils.drawWave(
figure_i=6,
row_i=4,
column_j=1,
label_x=r"f / Hz",
axis_xs=[np.hstack((-f[-1:0:-1], f))] * 2 + [f[0:points//zoom]] * 2,
axis_ys=[np.hstack((S_d_mod[-1:0:-1], S_d_mod)),
np.hstack((-S_d_pha[-1:0:-1], S_d_pha)),
S_d_mod[0: points // zoom],
S_d_pha[0: points // zoom]],
formats=['b-,', 'g-,'] * 2,
labels=[r"|Sᴅ(f)|", r"θsᴅ(f)"] * 2,
label_locs=[r"upper right"] * 4,
limit_ys=[(0, max(S_d_mod) * display_interval), None] * 2,
linewidths=[1] * 4
)
# %% 绘制 m_o(t) 时域波形
utils.drawWave(
figure_i=9,
row_i=2,
column_j=1,
label_x=r"t / s",
axis_xs=[t_m_original, t],
axis_ys=[m_o, waves[0]],
formats=['b-,', 'g-,'],
labels=[r"m_o(t) = s_d(t) * h(t)", r"m(t)"],
label_locs=[r"upper right"] * 2,
limit_ys=[(tick_min, tick_max)] * 2,
linewidths=[1] * 2
)
# %% 绘制 m_o(t) 频域波形
utils.drawWave(
figure_i=10,
row_i=4,
column_j=1,
label_x=r"f / Hz",
axis_xs=[np.hstack((-f[-1:0:-1], f))] * 2 +
[f[0:points//zoom]] * 2,
axis_ys=[np.hstack((M_o_mod[-1:0:-1], M_o_mod)),
np.hstack((-M_o_pha[-1:0:-1], M_o_pha)),
M_o_mod[0: points // zoom],
M_o_pha[0: points // zoom]],
# axis_xs=[f_h] * 2,
# axis_ys=[H_mod,
# H_pha],
formats=['b-,', 'g-,'] * 2,
labels=[r"|Mo(f)|", r"θᴍo(f)"] * 2,
label_locs=[r"upper right"] * 4,
limit_ys=[(0, max(M_o_mod) * display_interval), None] * 2,
linewidths=[1] * 4
)
# %% 绘制噪声 n_i(t), n(t), n_d(t), n_o(t) 时域波形
utils.drawWave(
figure_i=11,
row_i=4,
column_j=1,
label_x=r"t / s",
axis_xs=[t] * 4,
axis_ys=[n_i, n, n_d, n_o],
formats=['b-,', 'g-,', 'r-,', 'k-,'],
labels=[r"n_i(t)",
r"n(t)",
r"n_d(t)",
r"n_o(t)"],
label_locs=[r"upper right"] * 4,
limit_ys=[None] * 4,
linewidths=[1] * 4
)
# %% 绘制噪声 n_i(t), n(t), n(t), n_o(t) 功率谱密度波形
utils.drawPSD(
figure_i=12,
row_i=4,
column_j=1,
label_x=r"f / Hz",
axis_ys=[n_i, n, n_d, n_o],
F_samples=[f_sample] * 4,
limit_ys=[None] * 4)
# %% 求功率, 信噪比与信噪比增益
S_in = np.mean(s ** 2)
N_in = np.mean(n ** 2)
SNR_in = S_in / N_in
S_out = np.mean(m_o ** 2)
N_out = np.mean(n_o ** 2)
SNR_out = S_out / N_out
G = SNR_out / SNR_in
print("S_in = %e\nN_in = %e\nSNR_in = %e\nS_out = %e\nN_out = %e\nSNR_out = %e\nG = %e\n" % (S_in, N_in, SNR_in, S_out, N_out, SNR_out, G))
# %% 显示所有图窗
utils.show()
7.3 DSB-SC调制解调仿真程序 DSB-SC.py
# -*- coding: utf-8 -*-
# DSB-SC.PY
# %% 配置导入
from scipy import signal
from scipy import fft
import numpy as np
import utils
# %% 参数设置
time_begin = 0 # 起始时间
time_end = 1 # 终止时间
points = 1024 # 栅网采样点数(采样频率)
f_sample = points / (time_end - time_begin) # 采样频率
T = (time_end - time_begin) / (points - 1) # 栅网采样时间间距
frequency = [10, 100] # 频率
amplitude = [1, 1] # 振幅
phase = [0, 0] # 相位(cos(t)相位为0)
zoom = 4 # 频谱缩放倍数
display_interval = 1.25 # 显示区间的系数
tick_max = max(amplitude) * 1.5 # 波形纵轴刻度最大值
tick_min = -tick_max # 波形纵轴刻度最小值
snr = 6 # AWGN生成时的信噪比, 单位(dB)
seed = 3 # AWGN发生器随机种子
filter_order = 8 # 滤波器的阶数
f_H_LPF = frequency[0] * 2 # 低通滤波器的上限截止频率
f_H_BPF_DSB = frequency[1] + frequency[0] * 2 # 带通滤波器的上限截止频率
f_L_BPF_DSB = frequency[1] - frequency[0] * 2 # 带通滤波器的下限截止频率
# %% 生成时域波形
t = np.linspace(time_begin, time_end, points) # 生成时域栅网
waves = []
for i in range(len(frequency)):
waves.append(
signal.chirp(
t,
f0=frequency[i],
t1=time_end,
f1=frequency[i],
phi=phase[i],
method='linear'
) * amplitude[i]
)
s = None
for wave in waves:
if s is None:
s = wave.copy()
else:
s *= wave
s_d = waves[0] * waves[1] * waves[1]
# %% 获得频域波形
f = np.linspace(0, 1 / T, points) # 生成频域栅网
# 输入信号 M(f)
M = fft.fft(waves[0]) # 快速傅里叶变换
M_nor = M / points # 归一化
M_mod = np.abs(M_nor) # 获取幅度频谱
M_pha = np.angle(M) # 获取相位频谱
# 移频信号 C(f)
C = fft.fft(waves[1]) # 快速傅里叶变换
C_nor = C / points # 归一化
C_mod = np.abs(C_nor) # 获取幅度频谱
C_pha = np.angle(C) # 获取相位频谱
# 第一次移频 -> S(f)
S = fft.fft(s) # 快速傅里叶变换
S_nor = S / points # 归一化
S_mod = np.abs(S_nor) # 获取幅度频谱
S_pha = np.angle(S) # 获取相位频谱
# 第二次移频 -> S_d(f)
S_d = fft.fft(s_d)
S_d_nor = S_d / points # 归一化
S_d_mod = np.abs(S_d_nor) # 获取幅度频谱
S_d_pha = np.angle(S_d) # 获取相位频谱
# %% 滤波器参数
"""
滤波器构造函数(仅介绍Butterworth滤波器)
scipy.signal.butter(N, Wn, btype='low', analog=False, output='ba')
输入参数:
N:滤波器的阶数
Wn:归一化截止频率。计算公式Wn=2*截止频率/采样频率。(注意:根据采样定理,采样频率要大于两倍的信号本身最大的频率,才能还原信号。截止频率一定小于信号本身最大的频率,所以Wn一定在0和1之间)。当构造带通滤波器或者带阻滤波器时,Wn为长度为2的列表。
btype : 滤波器类型{‘lowpass’, ‘highpass’, ‘bandpass’, ‘bandstop’},
output : 输出类型{‘ba’, ‘zpk’, ‘sos’},
输出参数:
b,a: IIR滤波器的分子(b)和分母(a)多项式系数向量。output='ba'
z,p,k: IIR滤波器传递函数的零点、极点和系统增益. output= 'zpk'
sos: IIR滤波器的二阶截面表示。output= 'sos'
函数的使用
信号滤波中最常用的无非低通滤波、高通滤波和带通滤波。下面简单介绍这三种滤波的使用过程:
(1).高通滤波
# 这里假设采样频率为1000hz,信号本身最大的频率为500hz,要滤除10hz以下频率成分,即截至频率为10hz,则wn=2*10/1000=0.02
# from scipy import signal
# b, a = signal.butter(8, 0.02, 'highpass')
# filtedData = signal.filtfilt(b, a, data)#data为要过滤的信号
(2).低通滤波
# 这里假设采样频率为1000hz,信号本身最大的频率为500hz,要滤除10hz以上频率成分,即截至频率为10hz,则wn=2*10/1000=0.02
# from scipy import signal
# b, a = signal.butter(8, 0.02, 'lowpass')
# filtedData = signal.filtfilt(b, a, data) #data为要过滤的信号
(3).带通滤波
# 这里假设采样频率为1000hz,信号本身最大的频率为500hz,要滤除10hz以下和400hz以上频率成分,即截至频率为10hz和400hz,则wn1=2*10/1000=0.02,wn2=2*400/1000=0.8。Wn=[0.02,0.8]
# from scipy import signal
# b, a = signal.butter(8, [0.02,0.8], 'bandpass')
# filtedData = signal.filtfilt(b, a, data) #data为要过滤的信号
"""
wn_LPF = 2 * f_H_LPF / f_sample
b_LPF, a_LPF = signal.butter(filter_order, wn_LPF, 'lowpass') # 配置滤波器
wn_BPF_DSB = [2 * f_L_BPF_DSB / f_sample, 2 * f_H_BPF_DSB / f_sample]
b_BPF_DSB, a_BPF_DSB = signal.butter(filter_order, wn_BPF_DSB, 'bandpass') # 配置滤波器
# %% 进行滤波, 获得 m_o(t) 的时域波形
"""
滤波函数
scipy.signal.filtfilt(b, a, x, axis=-1, padtype='odd', padlen=None, method='pad', irlen=None)
输入参数:
b: 滤波器的分子系数向量
a: 滤波器的分母系数向量
x: 要过滤的数据数组。(array型)
axis: 指定要过滤的数据数组x的轴
padtype: 必须是“奇数”、“偶数”、“常数”或“无”。这决定了用于过滤器应用的填充信号的扩展类型。{‘odd’, ‘even’, ‘constant’, None}
padlen:在应用滤波器之前在轴两端延伸X的元素数目。此值必须小于要滤波元素个数 - 1。(int型或None)
method:确定处理信号边缘的方法。当method为“pad”时,填充信号;填充类型padtype和padlen决定,irlen被忽略。当method为“gust”时,使用古斯塔夫森方法,而忽略padtype和padlen。{“pad” ,“gust”}
irlen:当method为“gust”时,irlen指定滤波器的脉冲响应的长度。如果irlen是None,则脉冲响应的任何部分都被忽略。对于长信号,指定irlen可以显著改善滤波器的性能。(int型或None)
输出参数:
y: 滤波后的数据数组
"""
m_o = signal.filtfilt(b_LPF, a_LPF, s_d) # 为要过滤的信号
t_m_original = np.linspace(time_begin, T * (len(m_o) - 1), len(m_o)) # m_o(t) 信号的栅网
# %% 获得 m_o(t) 的频域波形
M_o = fft.fft(m_o)
M_o_nor = M_o / points # 归一化
M_o_mod = np.abs(M_o_nor) # 获取幅度频谱
M_o_pha = np.angle(M_o) # 获取相位频谱
# %% AWGN生成与处理
n_i = utils.wgn(s, snr, seed) # 生成AWGN
n = signal.filtfilt(b_BPF_DSB, a_BPF_DSB, n_i) # 获得带通AWGN
n_d = n * waves[1] # 获得移频后的带通AWGN
n_o = signal.filtfilt(b_LPF, a_LPF, n_d) # 获得通过低通滤波器的带通AWGN
# %% 绘制 m(t) c(t) s(t) 时域波形
utils.drawWave(
figure_i=1,
row_i=3,
column_j=1,
label_x=r"t / s",
axis_xs=[t] * 3,
axis_ys=waves + [s],
formats=['b-,', 'g-,', 'r-,'],
labels=[r"m(t) = cos(20πt)",
r"c(t) = cos(200πt)",
r"s(t) = m(t)c(t)"],
label_locs=[r"upper right"] * 3,
limit_ys=[(tick_min, tick_max)] * 3,
linewidths=[1] * 3
)
# %% 绘制 m(t) 频域波形
utils.drawWave(
figure_i=2,
row_i=4,
column_j=1,
label_x=r"f / Hz",
axis_xs=[np.hstack((-f[-1:0:-1], f))] * 2 + [f[0:points//zoom]] * 2,
axis_ys=[np.hstack((M_mod[-1:0:-1], M_mod)),
np.hstack((-M_pha[-1:0:-1], M_pha)),
M_mod[0: points // zoom],
M_pha[0: points // zoom]],
formats=['b-,', 'g-,'] * 2,
labels=[r"|M(f)|", r"θᴍ(f)"] * 2,
label_locs=[r"upper right"] * 4,
limit_ys=[(0, max(M_mod) * display_interval), None] * 2,
linewidths=[1] * 4
)
# %% 绘制 c(t) 频域波形
utils.drawWave(
figure_i=3,
row_i=4,
column_j=1,
label_x=r"f / Hz",
axis_xs=[np.hstack((-f[-1:0:-1], f))] * 2 + [f[0:points//zoom]] * 2,
axis_ys=[np.hstack((C_mod[-1:0:-1], C_mod)),
np.hstack((-C_pha[-1:0:-1], C_pha)),
C_mod[0: points // zoom],
C_pha[0: points // zoom]],
formats=['b-,', 'g-,'] * 2,
labels=[r"|C(f)|", r"θᴄ(f)"] * 2,
label_locs=[r"upper right"] * 4,
limit_ys=[(0, max(C_mod) * display_interval), None] * 2,
linewidths=[1] * 4
)
# %% 绘制 s(t) 频域波形
utils.drawWave(
figure_i=4,
row_i=4,
column_j=1,
label_x=r"f / Hz",
axis_xs=[np.hstack((-f[-1:0:-1], f))] * 2 + [f[0:points//zoom]] * 2,
axis_ys=[np.hstack((S_mod[-1:0:-1], S_mod)),
np.hstack((-S_pha[-1:0:-1], S_pha)),
S_mod[0: points // zoom],
S_pha[0: points // zoom]],
formats=['b-,', 'g-,'] * 2,
labels=[r"|S(f)|", r"θs(f)"] * 2,
label_locs=[r"upper right"] * 4,
limit_ys=[(0, max(S_mod) * display_interval), None] * 2,
linewidths=[1] * 4
)
# %% 绘制 s(t) c(t) s_d(t) 时域波形
utils.drawWave(
figure_i=5,
row_i=3,
column_j=1,
label_x=r"t / s",
axis_xs=[t] * 3,
axis_ys=[s, waves[1], s_d],
formats=['b-,', 'g-,', 'r-,'],
labels=[r"s(t) = m(t)c(t)",
r"c(t) = cos(200πt)",
r"s_d(t) = s(t)c(t)"],
label_locs=[r"upper right"] * 3,
limit_ys=[(tick_min, tick_max)] * 3,
linewidths=[1] * 3
)
# %% 绘制 s_d(t) 频域波形
utils.drawWave(
figure_i=6,
row_i=4,
column_j=1,
label_x=r"f / Hz",
axis_xs=[np.hstack((-f[-1:0:-1], f))] * 2 + [f[0:points//zoom]] * 2,
axis_ys=[np.hstack((S_d_mod[-1:0:-1], S_d_mod)),
np.hstack((-S_d_pha[-1:0:-1], S_d_pha)),
S_d_mod[0: points // zoom],
S_d_pha[0: points // zoom]],
formats=['b-,', 'g-,'] * 2,
labels=[r"|Sᴅ(f)|", r"θsᴅ(f)"] * 2,
label_locs=[r"upper right"] * 4,
limit_ys=[(0, max(S_d_mod) * display_interval), None] * 2,
linewidths=[1] * 4
)
# %% 绘制 m_o(t) 时域波形
utils.drawWave(
figure_i=9,
row_i=2,
column_j=1,
label_x=r"t / s",
axis_xs=[t_m_original, t],
axis_ys=[m_o, waves[0]],
formats=['b-,', 'g-,'],
labels=[r"m_o(t) = s_d(t) * h(t)", r"m(t)"],
label_locs=[r"upper right"] * 2,
limit_ys=[(tick_min, tick_max)] * 2,
linewidths=[1] * 2
)
# %% 绘制 m_o(t) 频域波形
utils.drawWave(
figure_i=10,
row_i=4,
column_j=1,
label_x=r"f / Hz",
axis_xs=[np.hstack((-f[-1:0:-1], f))] * 2 +
[f[0:points//zoom]] * 2,
axis_ys=[np.hstack((M_o_mod[-1:0:-1], M_o_mod)),
np.hstack((-M_o_pha[-1:0:-1], M_o_pha)),
M_o_mod[0: points // zoom],
M_o_pha[0: points // zoom]],
# axis_xs=[f_h] * 2,
# axis_ys=[H_mod,
# H_pha],
formats=['b-,', 'g-,'] * 2,
labels=[r"|Mo(f)|", r"θᴍo(f)"] * 2,
label_locs=[r"upper right"] * 4,
limit_ys=[(0, max(M_o_mod) * display_interval), None] * 2,
linewidths=[1] * 4
)
# %% 绘制噪声 n_i(t), n(t), n(t), n_o(t) 时域波形
utils.drawWave(
figure_i=11,
row_i=4,
column_j=1,
label_x=r"t / s",
axis_xs=[t] * 4,
axis_ys=[n_i, n, n_d, n_o],
formats=['b-,', 'g-,', 'r-,', 'k-,'],
labels=[r"n_i(t)",
r"n(t)",
r"n_d(t)",
r"n_o(t)"],
label_locs=[r"upper right"] * 4,
limit_ys=[None] * 4,
linewidths=[1] * 4
)
# %% 绘制噪声 n_i(t), n(t), n(t), n_o(t) 功率谱密度波形
utils.drawPSD(
figure_i=12,
row_i=4,
column_j=1,
label_x=r"f / Hz",
axis_ys=[n_i, n, n_d, n_o],
F_samples=[f_sample] * 4,
limit_ys=[None] * 4)
# %% 求功率, 信噪比与信噪比增益
S_in = np.mean(s ** 2)
N_in = np.mean(n ** 2)
SNR_in = S_in / N_in
S_out = np.mean(m_o ** 2)
N_out = np.mean(n_o ** 2)
SNR_out = S_out / N_out
G = SNR_out / SNR_in
print("S_in = %e\nN_in = %e\nSNR_in = %e\nS_out = %e\nN_out = %e\nSNR_out = %e\nG = %e\n" % (S_in, N_in, SNR_in, S_out, N_out, SNR_out, G))
# %% 显示所有图窗
utils.show()
7.4 SSB调制解调仿真程序 SSB.py
# -*- coding: utf-8 -*-
# AM.PY
# %% 配置导入
from scipy import fftpack
from scipy import signal
from scipy import fft
import numpy as np
import utils
# %% 参数设置
time_begin = 0 # 起始时间
time_end = 1 # 终止时间
points = 1024 # 栅网采样点数(采样频率)
f_sample = points / (time_end - time_begin) # 采样频率
T = (time_end - time_begin) / (points - 1) # 栅网采样时间间距
frequency = [10, 100, 100] # 频率
amplitude = [1, 1, 1] # 振幅
phase = [0, 0, -90] # 相位(cos(t)相位为0)
zoom = 4 # 频谱缩放倍数
display_interval = 1.25 # 显示区间的系数
tick_max = max(amplitude) * 1.5 # 波形纵轴刻度最大值
tick_min = -tick_max # 波形纵轴刻度最小值
snr = 6 # AWGN生成时的信噪比, 单位(dB)
seed = 3 # AWGN发生器随机种子
USSB_FLAG = True # 是否为上边带调制
filter_order = 8 # 滤波器的阶数
f_H_LPF = frequency[0] * 2 # 低通滤波器的上限截止频率
if USSB_FLAG:
# 上边带 USSB
f_H_BPF_SSB = frequency[1] + frequency[0] * 2 # 带通滤波器的上限截止频率
f_L_BPF_SSB = frequency[1] # 带通滤波器的下限截止频率
sign = -1 # 正负符号
else:
# 下边带 LSSB
f_H_BPF_SSB = frequency[1] # 带通滤波器的上限截止频率
f_L_BPF_SSB = frequency[1] - frequency[0] * 2 # 带通滤波器的下限截止频率
sign = 1 # 正负符号
# %% 生成时域波形
t = np.linspace(time_begin, time_end, points) # 生成时域栅网
waves = []
for i in range(len(frequency)):
waves.append(
signal.chirp(
t,
f0=frequency[i],
t1=time_end,
f1=frequency[i],
phi=phase[i],
method='linear'
) * amplitude[i]
)
s = waves[0] * waves[1] - sign * fftpack.hilbert(waves[0]) * waves[2]
# 该函数希尔伯特变换将相位向前移动90度, cos(t) -> -sin(t), 因此需要取负值
s_d = s * waves[1]
# %% 获得频域波形
f = np.linspace(0, 1 / T, points) # 生成频域栅网
# 输入信号 M(f)
M = fft.fft(waves[0]) # 快速傅里叶变换
M_nor = M / points # 归一化
M_mod = np.abs(M_nor) # 获取幅度频谱
M_pha = np.angle(M) # 获取相位频谱
# 移频信号 C(f)
C = fft.fft(waves[1]) # 快速傅里叶变换
C_nor = C / points # 归一化
C_mod = np.abs(C_nor) # 获取幅度频谱
C_pha = np.angle(C) # 获取相位频谱
# 第一次移频 -> S(f)
S = fft.fft(s) # 快速傅里叶变换
S_nor = S / points # 归一化
S_mod = np.abs(S_nor) # 获取幅度频谱
S_pha = np.angle(S) # 获取相位频谱
# 第二次移频 -> S_d(f)
S_d = fft.fft(s_d)
S_d_nor = S_d / points # 归一化
S_d_mod = np.abs(S_d_nor) # 获取幅度频谱
S_d_pha = np.angle(S_d) # 获取相位频谱
# %% 滤波器参数
"""
滤波器构造函数(仅介绍Butterworth滤波器)
scipy.signal.butter(N, Wn, btype='low', analog=False, output='ba')
输入参数:
N:滤波器的阶数
Wn:归一化截止频率。计算公式Wn=2*截止频率/采样频率。(注意:根据采样定理,采样频率要大于两倍的信号本身最大的频率,才能还原信号。截止频率一定小于信号本身最大的频率,所以Wn一定在0和1之间)。当构造带通滤波器或者带阻滤波器时,Wn为长度为2的列表。
btype : 滤波器类型{‘lowpass’, ‘highpass’, ‘bandpass’, ‘bandstop’},
output : 输出类型{‘ba’, ‘zpk’, ‘sos’},
输出参数:
b,a: IIR滤波器的分子(b)和分母(a)多项式系数向量。output='ba'
z,p,k: IIR滤波器传递函数的零点、极点和系统增益. output= 'zpk'
sos: IIR滤波器的二阶截面表示。output= 'sos'
函数的使用
信号滤波中最常用的无非低通滤波、高通滤波和带通滤波。下面简单介绍这三种滤波的使用过程:
(1).高通滤波
# 这里假设采样频率为1000hz,信号本身最大的频率为500hz,要滤除10hz以下频率成分,即截至频率为10hz,则wn=2*10/1000=0.02
# from scipy import signal
# b, a = signal.butter(8, 0.02, 'highpass')
# filtedData = signal.filtfilt(b, a, data)#data为要过滤的信号
(2).低通滤波
# 这里假设采样频率为1000hz,信号本身最大的频率为500hz,要滤除10hz以上频率成分,即截至频率为10hz,则wn=2*10/1000=0.02
# from scipy import signal
# b, a = signal.butter(8, 0.02, 'lowpass')
# filtedData = signal.filtfilt(b, a, data) #data为要过滤的信号
(3).带通滤波
# 这里假设采样频率为1000hz,信号本身最大的频率为500hz,要滤除10hz以下和400hz以上频率成分,即截至频率为10hz和400hz,则wn1=2*10/1000=0.02,wn2=2*400/1000=0.8。Wn=[0.02,0.8]
# from scipy import signal
# b, a = signal.butter(8, [0.02,0.8], 'bandpass')
# filtedData = signal.filtfilt(b, a, data) #data为要过滤的信号
"""
wn_LPF = 2 * f_H_LPF / f_sample
b_LPF, a_LPF = signal.butter(filter_order, wn_LPF, 'lowpass') # 配置滤波器
wn_BPF_DSB = [2 * f_L_BPF_SSB / f_sample, 2 * f_H_BPF_SSB / f_sample]
b_BPF_DSB, a_BPF_DSB = signal.butter(filter_order, wn_BPF_DSB, 'bandpass') # 配置滤波器
# %% 进行滤波, 获得 m_o(t) 的时域波形
"""
滤波函数
scipy.signal.filtfilt(b, a, x, axis=-1, padtype='odd', padlen=None, method='pad', irlen=None)
输入参数:
b: 滤波器的分子系数向量
a: 滤波器的分母系数向量
x: 要过滤的数据数组。(array型)
axis: 指定要过滤的数据数组x的轴
padtype: 必须是“奇数”、“偶数”、“常数”或“无”。这决定了用于过滤器应用的填充信号的扩展类型。{‘odd’, ‘even’, ‘constant’, None}
padlen:在应用滤波器之前在轴两端延伸X的元素数目。此值必须小于要滤波元素个数 - 1。(int型或None)
method:确定处理信号边缘的方法。当method为“pad”时,填充信号;填充类型padtype和padlen决定,irlen被忽略。当method为“gust”时,使用古斯塔夫森方法,而忽略padtype和padlen。{“pad” ,“gust”}
irlen:当method为“gust”时,irlen指定滤波器的脉冲响应的长度。如果irlen是None,则脉冲响应的任何部分都被忽略。对于长信号,指定irlen可以显著改善滤波器的性能。(int型或None)
输出参数:
y: 滤波后的数据数组
"""
m_o = signal.filtfilt(b_LPF, a_LPF, s_d) # 为要过滤的信号
t_m_original = np.linspace(time_begin, T * (len(m_o) - 1), len(m_o)) # m_o(t) 信号的栅网
# %% 获得 m_o(t) 的频域波形
M_o = fft.fft(m_o)
M_o_nor = M_o / points # 归一化
M_o_mod = np.abs(M_o_nor) # 获取幅度频谱
M_o_pha = np.angle(M_o) # 获取相位频谱
# %% AWGN生成与处理
n_i = utils.wgn(s, snr, seed) # 生成AWGN
n = signal.filtfilt(b_BPF_DSB, a_BPF_DSB, n_i) # 获得带通AWGN
n_d = n * waves[1] # 获得移频后的带通AWGN
n_o = signal.filtfilt(b_LPF, a_LPF, n_d) # 获得通过低通滤波器的带通AWGN
# %% 绘制 m(t) c(t) s(t) 时域波形
utils.drawWave(
figure_i=1,
row_i=3,
column_j=1,
label_x=r"t / s",
axis_xs=[t] * 3,
axis_ys=waves[0:2] + [s],
formats=['b-,', 'g-,', 'r-,'],
labels=[r"m(t) = cos(20πt)",
r"c(t) = cos(200πt)",
r"s(t)"],
label_locs=[r"upper right"] * 3,
limit_ys=[(tick_min, tick_max)] * 3,
linewidths=[1] * 3
)
# %% 绘制 m(t) 频域波形
utils.drawWave(
figure_i=2,
row_i=4,
column_j=1,
label_x=r"f / Hz",
axis_xs=[np.hstack((-f[-1:0:-1], f))] * 2 + [f[0:points//zoom]] * 2,
axis_ys=[np.hstack((M_mod[-1:0:-1], M_mod)),
np.hstack((-M_pha[-1:0:-1], M_pha)),
M_mod[0: points // zoom],
M_pha[0: points // zoom]],
formats=['b-,', 'g-,'] * 2,
labels=[r"|M(f)|", r"θᴍ(f)"] * 2,
label_locs=[r"upper right"] * 4,
limit_ys=[(0, max(M_mod) * display_interval), None] * 2,
linewidths=[1] * 4
)
# %% 绘制 c(t) 频域波形
utils.drawWave(
figure_i=3,
row_i=4,
column_j=1,
label_x=r"f / Hz",
axis_xs=[np.hstack((-f[-1:0:-1], f))] * 2 + [f[0:points//zoom]] * 2,
axis_ys=[np.hstack((C_mod[-1:0:-1], C_mod)),
np.hstack((-C_pha[-1:0:-1], C_pha)),
C_mod[0: points // zoom],
C_pha[0: points // zoom]],
formats=['b-,', 'g-,'] * 2,
labels=[r"|C(f)|", r"θᴄ(f)"] * 2,
label_locs=[r"upper right"] * 4,
limit_ys=[(0, max(C_mod) * display_interval), None] * 2,
linewidths=[1] * 4
)
# %% 绘制 s(t) 频域波形
utils.drawWave(
figure_i=4,
row_i=4,
column_j=1,
label_x=r"f / Hz",
axis_xs=[np.hstack((-f[-1:0:-1], f))] * 2 + [f[0:points//zoom]] * 2,
axis_ys=[np.hstack((S_mod[-1:0:-1], S_mod)),
np.hstack((-S_pha[-1:0:-1], S_pha)),
S_mod[0: points // zoom],
S_pha[0: points // zoom]],
formats=['b-,', 'g-,'] * 2,
labels=[r"|S(f)|", r"θs(f)"] * 2,
label_locs=[r"upper right"] * 4,
limit_ys=[(0, max(S_mod) * display_interval), None] * 2,
linewidths=[1] * 4
)
# %% 绘制 s(t) c(t) s_d(t) 时域波形
utils.drawWave(
figure_i=5,
row_i=3,
column_j=1,
label_x=r"t / s",
axis_xs=[t] * 3,
axis_ys=[s, waves[1], s_d],
formats=['b-,', 'g-,', 'r-,'],
labels=[r"s(t) = m(t)c(t)",
r"c(t) = cos(200πt)",
r"s_d(t) = s(t)c(t)"],
label_locs=[r"upper right"] * 3,
limit_ys=[(tick_min, tick_max)] * 3,
linewidths=[1] * 3
)
# %% 绘制 s_d(t) 频域波形
utils.drawWave(
figure_i=6,
row_i=4,
column_j=1,
label_x=r"f / Hz",
axis_xs=[np.hstack((-f[-1:0:-1], f))] * 2 + [f[0:points//zoom]] * 2,
axis_ys=[np.hstack((S_d_mod[-1:0:-1], S_d_mod)),
np.hstack((-S_d_pha[-1:0:-1], S_d_pha)),
S_d_mod[0: points // zoom],
S_d_pha[0: points // zoom]],
formats=['b-,', 'g-,'] * 2,
labels=[r"|Sᴅ(f)|", r"θsᴅ(f)"] * 2,
label_locs=[r"upper right"] * 4,
limit_ys=[(0, max(S_d_mod) * display_interval), None] * 2,
linewidths=[1] * 4
)
# %% 绘制 m_o(t) 时域波形
utils.drawWave(
figure_i=9,
row_i=2,
column_j=1,
label_x=r"t / s",
axis_xs=[t_m_original, t],
axis_ys=[m_o, waves[0]],
formats=['b-,', 'g-,'],
labels=[r"m_o(t) = s_d(t) * h(t)", r"m(t)"],
label_locs=[r"upper right"] * 2,
limit_ys=[(tick_min, tick_max)] * 2,
linewidths=[1] * 2
)
# %% 绘制 m_o(t) 频域波形
utils.drawWave(
figure_i=10,
row_i=4,
column_j=1,
label_x=r"f / Hz",
axis_xs=[np.hstack((-f[-1:0:-1], f))] * 2 +
[f[0:points//zoom]] * 2,
axis_ys=[np.hstack((M_o_mod[-1:0:-1], M_o_mod)),
np.hstack((-M_o_pha[-1:0:-1], M_o_pha)),
M_o_mod[0: points // zoom],
M_o_pha[0: points // zoom]],
# axis_xs=[f_h] * 2,
# axis_ys=[H_mod,
# H_pha],
formats=['b-,', 'g-,'] * 2,
labels=[r"|Mo(f)|", r"θᴍo(f)"] * 2,
label_locs=[r"upper right"] * 4,
limit_ys=[(0, max(M_o_mod) * display_interval), None] * 2,
linewidths=[1] * 4
)
# %% 绘制噪声 n_i(t), n(t), n(t), n_o(t) 时域波形
utils.drawWave(
figure_i=11,
row_i=4,
column_j=1,
label_x=r"t / s",
axis_xs=[t] * 4,
axis_ys=[n_i, n, n_d, n_o],
formats=['b-,', 'g-,', 'r-,', 'k-,'],
labels=[r"n_i(t)",
r"n(t)",
r"n_d(t)",
r"n_o(t)"],
label_locs=[r"upper right"] * 4,
limit_ys=[None] * 4,
linewidths=[1] * 4
)
# %% 绘制噪声 n_i(t), n(t), n(t), n_o(t) 功率谱密度波形
utils.drawPSD(
figure_i=12,
row_i=4,
column_j=1,
label_x=r"f / Hz",
axis_ys=[n_i, n, n_d, n_o],
F_samples=[f_sample * 2] * 4,
limit_ys=[None] * 4)
# %% 求功率, 信噪比与信噪比增益
S_in = np.mean(s ** 2)
N_in = np.mean(n ** 2)
SNR_in = S_in / N_in
S_out = np.mean(m_o ** 2)
N_out = np.mean(n_o ** 2)
SNR_out = S_out / N_out
G = SNR_out / SNR_in
print("S_in = %e\nN_in = %e\nSNR_in = %e\nS_out = %e\nN_out = %e\nSNR_out = %e\nG = %e\n" % (S_in, N_in, SNR_in, S_out, N_out, SNR_out, G))
# %% 显示所有图窗
utils.show()
本文地址:https://blog.csdn.net/weixin_43157144/article/details/109616435
上一篇: Java入门 -基本数据类型与逻辑结构