模拟幅度调制相干解调系统抗噪声性能仿真分析-python实现
目录
- 1. 引言
- 1.1 研究目的
- 1.2 研究方法
- 1.3 主要内容
- 2. 系统模型
- 2.1 常规调幅调制`(AM)`
- 2.1.1 AM 调制
- 2.1.2 AM 解调
- 2.2 抑制载波双边带调制`(DSB-SC)`
- 2.2.1 DSB_SC 调制
- 2.2.2 DSB_SC 解调
- 2.3 单边带调制`(SSB)`
- 2.3.1 SSB 调制
- 2.3.1.1 滤波法调制
- 2.3.1.2 相移法调制
- 2.3.2 SSB 解调
- 3. 抗干扰性能理论分析
- 3.1 加性高斯白噪声`(AWGN)`通过相干解调器
- 3.2 常规调幅调制解调`(AM)`
- 3.3 抑制载波双边带调制解调`(DSB-SC)`
- 3.4 单边带调制解调`(SSB)`
- 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) 与 移频信号 sd(t)s_d(t)sd(t) 时域波形
- 4.1.6 移频信号 sd(t)s_d(t)sd(t) 频域波形
- 4.1.7 解调信号 mo(t)m_o(t)mo(t) 时域波形
- 4.1.8 解调信号 mo(t)m_o(t)mo(t) 频域波形
- 4.1.9 AWGN噪声 ni(t)n_i(t)ni(t), 带通AWGN噪声 n(t)n(t)n(t), 移频带通AWGN噪声 nd(t)n_d(t)nd(t) 与输出AWGN噪声 no(t)n_o(t)no(t) 时域波形
- 4.1.10 AWGN噪声 ni(t)n_i(t)ni(t), 带通AWGN噪声 n(t)n(t)n(t), 移频带通AWGN噪声 nd(t)n_d(t)nd(t) 与输出AWGN噪声 no(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) 与 移频信号 sd(t)s_d(t)sd(t) 时域波形
- 4.2.6 移频信号 sd(t)s_d(t)sd(t) 频域波形
- 4.2.7 解调信号 mo(t)m_o(t)mo(t) 时域波形
- 4.2.8 解调信号 mo(t)m_o(t)mo(t) 频域波形
- 4.2.9 AWGN噪声 ni(t)n_i(t)ni(t), 带通AWGN噪声 n(t)n(t)n(t), 移频带通AWGN噪声 nd(t)n_d(t)nd(t) 与输出AWGN噪声 no(t)n_o(t)no(t) 时域波形
- 4.2.10 AWGN噪声 ni(t)n_i(t)ni(t), 带通AWGN噪声 n(t)n(t)n(t), 移频带通AWGN噪声 nd(t)n_d(t)nd(t) 与输出AWGN噪声 no(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) 与 移频信号 sd(t)s_d(t)sd(t) 时域波形
- 4.3.6 移频信号 sd(t)s_d(t)sd(t) 频域波形
- 4.3.7 解调信号 mo(t)m_o(t)mo(t) 时域波形
- 4.3.8 解调信号 mo(t)m_o(t)mo(t) 频域波形
- 4.3.9 AWGN噪声 ni(t)n_i(t)ni(t), 带通AWGN噪声 n(t)n(t)n(t), 移频带通AWGN噪声 nd(t)n_d(t)nd(t) 与输出AWGN噪声 no(t)n_o(t)no(t) 时域波形
- 4.3.10 AWGN噪声 ni(t)n_i(t)ni(t), 带通AWGN噪声 n(t)n(t)n(t), 移频带通AWGN噪声 nd(t)n_d(t)nd(t) 与输出AWGN噪声 no(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) 与 移频信号 sd(t)s_d(t)sd(t) 时域波形
- 4.4.6 移频信号 sd(t)s_d(t)sd(t) 频域波形
- 4.4.7 解调信号 mo(t)m_o(t)mo(t) 时域波形
- 4.4.8 解调信号 mo(t)m_o(t)mo(t) 频域波形
- 4.4.9 AWGN噪声 ni(t)n_i(t)ni(t), 带通AWGN噪声 n(t)n(t)n(t), 移频带通AWGN噪声 nd(t)n_d(t)nd(t) 与输出AWGN噪声 no(t)n_o(t)no(t) 时域波形
- 4.4.10 AWGN噪声 ni(t)n_i(t)ni(t), 带通AWGN噪声 n(t)n(t)n(t), 移频带通AWGN噪声 nd(t)n_d(t)nd(t) 与输出AWGN噪声 no(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 调制
图2.1.1 AM调制器模型
时域表示:
{sAM(t)=Ac[1+m(t)]cos(2πfct)βAM=max{∣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) 为基带信号
- AcA_cAc 为载波信号的幅值
- fcf_cfc 为载波信号的频率
- sAM(t)s_{AM}(t)sAM(t) 为已调AM信号
- βAM\beta_{AM}βAM 为调幅指数
- βAM<1\beta_{AM} < 1βAM<1 时为欠调制
- βAM=1\beta_{AM} = 1βAM=1 时为临界调制
- βAM>1\beta_{AM} > 1βAM>1 时为过调制
- 为避免包络检波时出错, 调制时应确保 βAM≤1\beta_{AM} \leq 1βAM≤1
频域表示:
SAM(f)=Ac2[δ(f−fc)+δ(f+fc)]+Ac2[M(f−fc)+M(f+fc)](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)
- SAM(f)S_{AM}(f)SAM(f) 为已调AM信号的傅里叶变换
2.1.2 AM 解调
图2.1.2 AM相干解调器模型
解调器输入的已调AM信号 s(t)s(t)s(t):
时域表示:
s(t)=Ac[1+m(t)]cos(2πfct)(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)=Ac2[δ(f−fc)+δ(f+fc)]+Ac2[M(f−fc)+M(f+fc)](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信号 sd(t)s_d(t)sd(t):
时域表示:
sd(t)=Ac2[1+m(t)]⋅[1+cos(2⋅2πfct)](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)
频域表示:
Sd(f)=Ac2[M(f)+δ(f)]+Ac4[M(f−2fc)+M(f+2fc)+δ(f−2fc)+δ(f+2fc)](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)
滤除高频成分的解调信号 so(t)s_o(t)so(t):
时域表示:
so(t)=Ac2+Ac2m(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)
频域表示:
So(f)=Ac2δ(f)+Ac2M(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)
所滤除的高频成分 sh(t)s_h(t)sh(t):
时域表示:
sh(t)=Ac2[1+m(t)]⋅cos(2⋅2πfct)(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)
频域表示:
Sh(f)=Ac4[M(f−2fc)+M(f+2fc)+δ(f−2fc)+δ(f+2fc)](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 调制
图2.2.1 DSB-SC调制器模型
时域表示:
sDSB(t)=Acm(t)cos(2πfct)(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) 为基带信号
- AcA_cAc 为载波信号的幅值
- fcf_cfc 为载波信号的频率
- sDSB(t)s_{DSB}(t)sDSB(t) 为双边带(DSB)信号
频域表示:
SDSB(f)=Ac2[M(f−fc)+M(f+fc)](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)
- SDSB(f)S_{DSB}(f)SDSB(f) 为双边带(DSB)信号的傅里叶变换
2.2.2 DSB_SC 解调
图2.2.2 DSB-SC相干解调器模型
解调器输入的DSB信号 s(t)s(t)s(t):
时域表示:
s(t)=Acm(t)cos(2πfct)(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)=Ac2[M(f−fc)+M(f+fc)](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信号 sd(t)s_d(t)sd(t):
时域表示:
sd(t)=Ac2m(t)⋅[1+cos(2⋅2πfct)](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)
频域表示:
Sd(f)=Ac2M(f)+Ac4[M(f−2fc)+M(f+2fc)](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)
滤除高频成分的解调信号 so(t)s_o(t)so(t):
时域表示:
so(t)=Ac2m(t)(2.2.7)s_o(t) = \cfrac{A_c}{2} m(t) \tag{2.2.7} so(t)=2Acm(t)(2.2.7)
频域表示:
So(f)=Ac2M(f)(2.2.8)S_o(f) = \cfrac{A_c}{2}M(f) \tag{2.2.8} So(f)=2AcM(f)(2.2.8)
所滤除的高频成分 sh(t)s_h(t)sh(t):
时域表示:
sh(t)=Ac2m(t)⋅cos(2⋅2πfct)(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)
频域表示:
Sh(f)=Ac4[M(f−2fc)+M(f+2fc)](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 滤波法调制
图2.3.1 SSB调制器模型(滤波法)
时域表示:
sSSB(t)=Acm(t)cos(2πfct)∗hSSB(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) 为基带信号
AcA_cAc 为载波信号的幅值
fcf_cfc 为载波信号的频率
sSSB(t)s_{SSB}(t)sSSB(t) 为已调SSB信号
hSSB(t)h_{SSB}(t)hSSB(t) 为滤波器冲激响应
- 若为下边带调制
(LSSB)
, 则滤波器为低通滤波器(LPF)
, 其上限截止频率为 fcf_cfc - 若为上边带调制
(USSB)
, 则滤波器为高通滤波器(HPF)
, 其下限截止频率为 fcf_cfc
- 若为下边带调制
sSSB(t)s_{SSB}(t)sSSB(t) 为单边带(SSB)信号
频域表示:
SSSB(f)=Ac2[M(f−fc)+M(f+fc)]⋅HSSB(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) 为基带信号的傅里叶变换
- SSSB(f)S_{SSB}(f)SSSB(f) 为已调SSB信号的傅里叶变换
- HSSB(f)H_{SSB}(f)HSSB(f) 为滤波器的频域表示
- 下边带滤波器的频域表示:
HLSSB(f)=12[sgn(f+fc)−sgn(f−fc)](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) - 上边带滤波器的频域表示:
HUSSB(f)=1−HLSSB(f)=12[sgn(f−fc)−sgn(f+fc)](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 相移法调制
图2.3.2 SSB调制器模型(相移法)
时域表示:
sLSSB(t)=Ac[m(t)cos(2πfct)+m^(t)sin(2πfct)](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)
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)\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) - AcA_cAc 为载波信号的幅值
- fcf_cfc 为载波信号的频率
- sDSB(t)s_{DSB}(t)sDSB(t) 为双边带(DSB)信号
- sLSSB(t)s_{LSSB}(t)sLSSB(t) 为上边带(LSSB)信号
- sUSSB(t)s_{USSB}(t)sUSSB(t) 为下边带(USSB)信号
频域表示:
SLSSB(f)=Ac2[M(f−fc)+M(f+fc)]+Ac2[M(f+fc)⋅sgn(f+fc)−M(f+fc)⋅sgn(f−fc)](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)
SUSSB=SDSB(f)−SLSSB(f)=Ac2[M(f−fc)+M(f+fc)]−Ac2[M(f+fc)⋅sgn(f+fc)−M(f+fc)⋅sgn(f−fc)](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)
- SDSB(f)S_{DSB}(f)SDSB(f) 为DSB信号的傅里叶变换
- SLSSB(f)S_{LSSB}(f)SLSSB(f) 为LSSB信号的傅里叶变换
- SUSSB(f)S_{USSB}(f)SUSSB(f) 为USSB信号的傅里叶变换
2.3.2 SSB 解调
图2.3.3 SSB相干解调器模型
解调器输入的SSB信号 s(t)s(t)s(t):
时域表示:
s(t)=Ac[m(t)cos(2πfct)±m^(t)sin(2πfct)](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)=Ac2[M(f−fc)+M(f+fc)]±Ac2[M(f+fc)⋅sgn(f+fc)−M(f+fc)⋅sgn(f−fc)](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信号 sd(t)s_d(t)sd(t):
时域表示:
sd(t)=Ac2m(t)+Ac2[m(t)cos(2⋅2πfct)±m^(t)sin(2⋅2πfct)](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)
频域表示:
Sd(f)=Ac2M(f)+Ac4[M(f−2fc)+M(f+2fc)]±Ac4[M(f+2fc)⋅sgn(f+2fc)−M(f+2fc)⋅sgn(f−2fc)](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)
滤除高频成分的解调信号 so(t)s_o(t)so(t):
时域表示:
so(t)=Ac2m(t)(2.2.14)s_o(t) = \cfrac{A_c}{2} m(t) \tag{2.2.14} so(t)=2Acm(t)(2.2.14)
频域表示:
So(f)=Ac2M(f)(2.2.15)S_o(f) = \cfrac{A_c}{2}M(f) \tag{2.2.15} So(f)=2AcM(f)(2.2.15)
所滤除的高频成分 sh(t)s_h(t)sh(t):
时域表示:
sh(t)=Ac2[m(t)cos(2⋅2πfct)±m^(t)sin(2⋅2πfct)](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)
频域表示:
Sh(f)=Ac4[M(f−2fc)+M(f+2fc)]±Ac4[M(f+2fc)⋅sgn(f+2fc)−M(f+2fc)⋅sgn(f−2fc)](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 相干解调器模型
3.1 加性高斯白噪声(AWGN)
通过相干解调器
由带通AWGN的解析信号
n~(t)=nc(t)+jns(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)=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)\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通过乘法器移频后
nd(t)=n(t)⋅Accos(2πfct)=nc(t)cos2(2πfct)−ns(t)sin(2πfct)cos(2πfct)=12nc(t)+12[nc(t)cos(2⋅2πfct)−ns(t)sin(2⋅2πfct)](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成分:
no(t)=12nc(t)(3.1.4)n_o(t) = \cfrac{1}{2}n_c(t) \tag{3.1.4} no(t)=21nc(t)(3.1.4)
为方便分析, 假设单边带信号带通滤波器的通带带宽为 BBB, 双边带信号带通滤波器的通带带宽为 2B2B2B, AWGN的单边功率谱密度 PN单(f)=n0P_{N单}(f) = n_0PN单(f)=n0, AWGN的双边功率谱密度 PN双=n02P_{N双} = \cfrac{n_0}{2}PN双=2n0
双边带调制时输入相干解调器的带通AWGN的功率
Nin双=E[n2(t)]=n02⋅2⋅2B=2n0B(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的功率
Nin单=E[n2(t)]=n02⋅2B=n0B(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)∼nc(t)∼ns(t)∼N(m0,σ02)(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[nc(t)]=E[ns(t)]=m0=0E[n2(t)]=E[nc2(t)]=E[ns2(t)]=σ02(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的功率:
Nout双=E[no2(t)]=14E[nc2(t)]=14E[n2(t)]=14Nin双=12n0B(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的功率:
Nout单=E[no2(t)]=14E[nc2(t)]=14E[n2(t)]=14Nin单=14n0B(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=<w2(t)>(3.2.1)P = \big<w^2(t)\big> \tag{3.2.1} P=⟨w2(t)⟩(3.2.1)
可得输入相干解调器的AM信号的功率
Sin=<s2(t)>=Ac2(1+Pm)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)
其中 PmP_mPm 为基带信号 m(t)m(t)m(t) 的归一化平均功率
Pm=<m2(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信号的功率
Sout=<so2(t)>=Ac24<(1+m(t))2>=Ac2⋅(1+Pm)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)
可得到相干解调器输入信号的信噪比
SNRin=SinNin双=Ac22(1+Pm)2n0B=Ac2(1+Pm)4n0B(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)
可得到相干解调器输出信号的信噪比
SNRout=SoutNout=Ac2⋅(1+Pm)412n0B=Ac2⋅(1+Pm)2n0B(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信号的信噪比增益
GAM=SNRoutSNRin=2⋅(1+Pm)1+Pm=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=<w2(t)>(3.3.1)P = \big<w^2(t)\big> \tag{3.3.1} P=⟨w2(t)⟩(3.3.1)
可得输入相干解调器的DSB-SC信号的功率
Sin=<s2(t)>=Ac2Pm2(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)
其中 PmP_mPm 为基带信号 m(t)m(t)m(t) 的归一化平均功率
Pm=<m2(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信号的功率
Sout=<so2(t)>=Ac24<m2(t)>=Ac2Pm4(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)
可得到相干解调器输入信号的信噪比
SNRin=SinNin=Ac22Pm2n0B=Ac2Pm4n0B(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)
可得到相干解调器输出信号的信噪比
SNRout=SoutNout=Ac2Pm412n0B=Ac2Pm2n0B(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信号的信噪比增益
GDSB=SNRoutSNRin=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=<w2(t)>(3.4.1)P = \big<w^2(t)\big> \tag{3.4.1} P=⟨w2(t)⟩(3.4.1)
可得输入相干解调器的DSB-SC信号的功率
Sin=<s2(t)>=Ac2Pm(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)
其中 PmP_mPm 为基带信号 m(t)m(t)m(t) 的归一化平均功率
Pm=<m2(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信号的功率
Sout=<so2(t)>=Ac24<m2(t)>=Ac2Pm4(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)
可得到相干解调器输入信号的信噪比
SNRin=SinNin=Ac2Pmn0B=Ac2Pmn0B(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)
可得到相干解调器输出信号的信噪比
SNRout=SoutNout=Ac2Pm414n0B=Ac2Pmn0B(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信号的信噪比增益
GDSB=SNRoutSNRin=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.1 基带信号, 载波信号与AM调制信号时域波形
4.1.2 基带信号 m(t)m(t)m(t) 频域波形
图4.1.2 基带信号频域波形
4.1.3 载波信号 c(t)c(t)c(t) 频域波形
图4.1.3 载波信号频域波形
4.1.4 AM调制信号 s(t)s(t)s(t) 频域波形
图4.1.4 AM调制信号频域波形
4.1.5 AM调制信号 s(t)s(t)s(t), 同步载波信号 c(t)c(t)c(t) 与 移频信号 sd(t)s_d(t)sd(t) 时域波形
图4.1.5 AM调制信号, 同步载波信号与移频信号时域波形
4.1.6 移频信号 sd(t)s_d(t)sd(t) 频域波形
图4.1.6 移频信号频域波形
4.1.7 解调信号 mo(t)m_o(t)mo(t) 时域波形
图4.1.7 解调信号时域波形
4.1.8 解调信号 mo(t)m_o(t)mo(t) 频域波形
图4.1.8 解调信号频域波形
4.1.9 AWGN噪声 ni(t)n_i(t)ni(t), 带通AWGN噪声 n(t)n(t)n(t), 移频带通AWGN噪声 nd(t)n_d(t)nd(t) 与输出AWGN噪声 no(t)n_o(t)no(t) 时域波形
图4.1.9 相干解调器中噪声的时域波形
4.1.10 AWGN噪声 ni(t)n_i(t)ni(t), 带通AWGN噪声 n(t)n(t)n(t), 移频带通AWGN噪声 nd(t)n_d(t)nd(t) 与输出AWGN噪声 no(t)n_o(t)no(t) 功率谱密度波形
图4.1.10 相干解调器中噪声的功率谱
4.1.11 功率, 信噪比与信噪比增益计算与分析
表4.1 AM调制信号相干解调时功率与信噪比
信号特征 | 理论值 | 仿真值 | 相对误差 |
---|---|---|---|
输入信号功率 SinS_{in}Sin | 5.625000e-01 | 5.641479e-01 | 2.92E-03 |
输入噪声功率 NinN_{in}Nin | 1.103856e-02 | 1.200238e-02 | 8.03E-02 |
输入信噪比 SNRinSNR_{in}SNRin | 5.095772e+01 | 4.700301e+01 | 8.41E-02 |
输出信号功率 SoutS_{out}Sout | 2.812500e-01 | 2.901258e-01 | 3.06E-02 |
输出噪声功率 NoutN_{out}Nout | 2.759640e-03 | 3.321398e-03 | 1.69E-01 |
输出信噪比 SNRoutSNR_{out}SNRout | 1.019154e+02 | 8.735052e+01 | 1.67E-01 |
信噪比增益 GGG | 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.1 基带信号, 载波信号与DSB-SC调制信号时域波形
4.2.2 基带信号 m(t)m(t)m(t) 频域波形
图4.2.2 基带信号频域波形
4.2.3 载波信号 c(t)c(t)c(t) 频域波形
图4.2.3 载波信号频域波形
4.2.4 DSB-SC调制信号 s(t)s(t)s(t) 频域波形
图4.2.4 DSB-SC调制信号频域波形
4.2.5 DSB-SC调制信号 s(t)s(t)s(t), 同步载波信号 c(t)c(t)c(t) 与 移频信号 sd(t)s_d(t)sd(t) 时域波形
图4.2.5 DSB-SC调制信号, 同步载波信号与移频信号时域波形
4.2.6 移频信号 sd(t)s_d(t)sd(t) 频域波形
图4.2.6 移频信号频域波形
4.2.7 解调信号 mo(t)m_o(t)mo(t) 时域波形
图4.2.7 解调信号时域波形
4.2.8 解调信号 mo(t)m_o(t)mo(t) 频域波形
图4.2.8 解调信号频域波形
4.2.9 AWGN噪声 ni(t)n_i(t)ni(t), 带通AWGN噪声 n(t)n(t)n(t), 移频带通AWGN噪声 nd(t)n_d(t)nd(t) 与输出AWGN噪声 no(t)n_o(t)no(t) 时域波形
图4.2.9 相干解调器中噪声的时域波形
4.2.10 AWGN噪声 ni(t)n_i(t)ni(t), 带通AWGN噪声 n(t)n(t)n(t), 移频带通AWGN噪声 nd(t)n_d(t)nd(t) 与输出AWGN噪声 no(t)n_o(t)no(t) 功率谱密度波形
图4.2.10 相干解调器中噪声的功率谱
4.2.11 功率, 信噪比与信噪比增益计算与分析
表4.2 DSB-SC调制信号相干解调时功率与信噪比
信号特征 | 理论值 | 仿真值 | 相对误差 |
---|---|---|---|
输入信号功率 SinS_{in}Sin | 2.500000e-01 | 2.507324e-01 | 2.92E-03 |
输入噪声功率 NinN_{in}Nin | 4.906028e-03 | 5.334388e-03 | 8.03E-02 |
输入信噪比 SNRinSNR_{in}SNRin | 5.095772e+01 | 4.700304e+01 | 8.41E-02 |
输出信号功率 SoutS_{out}Sout | 1.250000e-01 | 1.269980e-01 | 1.57E-02 |
输出噪声功率 NoutN_{out}Nout | 1.226507e-03 | 1.476175e-03 | 1.69E-01 |
输出信噪比 SNRoutSNR_{out}SNRout | 1.019153e+02 | 8.603178e+01 | 1.85E-01 |
信噪比增益 GGG | 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.1 基带信号, 载波信号与USSB调制信号时域波形
4.3.2 基带信号 m(t)m(t)m(t) 频域波形
图4.3.2 基带信号频域波形
4.3.3 载波信号 c(t)c(t)c(t) 频域波形
图4.3.3 载波信号频域波形
4.3.4 USSB调制信号 s(t)s(t)s(t) 频域波形
图4.3.4 USSB调制信号频域波形
4.3.5 USSB调制信号 s(t)s(t)s(t), 同步载波信号 c(t)c(t)c(t) 与 移频信号 sd(t)s_d(t)sd(t) 时域波形
图4.3.5 USSB调制信号, 同步载波信号与移频信号时域波形
4.3.6 移频信号 sd(t)s_d(t)sd(t) 频域波形
图4.3.6 移频信号频域波形
4.3.7 解调信号 mo(t)m_o(t)mo(t) 时域波形
图4.3.7 解调信号时域波形
4.3.8 解调信号 mo(t)m_o(t)mo(t) 频域波形
图4.3.8 解调信号频域波形
4.3.9 AWGN噪声 ni(t)n_i(t)ni(t), 带通AWGN噪声 n(t)n(t)n(t), 移频带通AWGN噪声 nd(t)n_d(t)nd(t) 与输出AWGN噪声 no(t)n_o(t)no(t) 时域波形
图4.3.9 相干解调器中噪声的时域波形
4.3.10 AWGN噪声 ni(t)n_i(t)ni(t), 带通AWGN噪声 n(t)n(t)n(t), 移频带通AWGN噪声 nd(t)n_d(t)nd(t) 与输出AWGN噪声 no(t)n_o(t)no(t) 功率谱密度波形
图4.3.10 相干解调器中噪声的功率谱
4.3.11 功率, 信噪比与信噪比增益计算与误差分析
表4.3 USSB调制信号相干解调时功率与信噪比
信号特征 | 理论值 | 仿真值 | 相对误差 |
---|---|---|---|
输入信号功率 SinS_{in}Sin | 5.000000e-01 | 5.009397e-01 | 1.88E-03 |
输入噪声功率 NinN_{in}Nin | 4.906028e-03 | 4.968031e-03 | 1.25E-02 |
输入信噪比 SNRinSNR_{in}SNRin | 1.019154e+02 | 1.008327e+02 | 1.07E-02 |
输出信号功率 SoutS_{out}Sout | 1.250000e-01 | 1.265897e-01 | 1.26E-02 |
输出噪声功率 NoutN_{out}Nout | 1.226507e-03 | 1.134983e-03 | 8.06E-02 |
输出信噪比 SNRoutSNR_{out}SNRout | 1.019153e+02 | 1.115344e+02 | 8.62E-02 |
信噪比增益 GGG | 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.1 基带信号, 载波信号与LSSB调制信号时域波形
4.4.2 基带信号 m(t)m(t)m(t) 频域波形
图4.4.2 基带信号频域波形
4.4.3 载波信号 c(t)c(t)c(t) 频域波形
图4.4.3 载波信号频域波形
4.4.4 LSSB调制信号 s(t)s(t)s(t) 频域波形
图4.4.4 LSSB调制信号频域波形
4.4.5 LSSB调制信号 s(t)s(t)s(t), 同步载波信号 c(t)c(t)c(t) 与 移频信号 sd(t)s_d(t)sd(t) 时域波形
图4.4.5 LSSB调制信号, 同步载波信号与移频信号时域波形
4.4.6 移频信号 sd(t)s_d(t)sd(t) 频域波形
图4.4.6 移频信号频域波形
4.4.7 解调信号 mo(t)m_o(t)mo(t) 时域波形
图4.4.7 解调信号时域波形
4.4.8 解调信号 mo(t)m_o(t)mo(t) 频域波形
图4.4.8 解调信号频域波形
4.4.9 AWGN噪声 ni(t)n_i(t)ni(t), 带通AWGN噪声 n(t)n(t)n(t), 移频带通AWGN噪声 nd(t)n_d(t)nd(t) 与输出AWGN噪声 no(t)n_o(t)no(t) 时域波形
图4.4.9 相干解调器中噪声的时域波形
4.4.10 AWGN噪声 ni(t)n_i(t)ni(t), 带通AWGN噪声 n(t)n(t)n(t), 移频带通AWGN噪声 nd(t)n_d(t)nd(t) 与输出AWGN噪声 no(t)n_o(t)no(t) 功率谱密度波形
图4.4.10 相干解调器中噪声的功率谱
4.4.11 功率, 信噪比与信噪比增益计算与误差分析
表4.3 LSSB调制信号相干解调时功率与信噪比
信号特征 | 理论值 | 仿真值 | 相对误差 |
---|---|---|---|
输入信号功率 SinS_{in}Sin | 5.000000e-01 | 5.010163e-01 | 2.03E-03 |
输入噪声功率 NinN_{in}Nin | 4.906028e-03 | 5.601459e-03 | 1.24E-01 |
输入信噪比 SNRinSNR_{in}SNRin | 1.019154e+02 | 8.944388e+01 | 1.39E-01 |
输出信号功率 SoutS_{out}Sout | 1.250000e-01 | 1.274379e-01 | 1.91E-02 |
输出噪声功率 NoutN_{out}Nout | 1.226507e-03 | 1.353658e-03 | 9.39E-02 |
输出信噪比 SNRoutSNR_{out}SNRout | 1.019153e+02 | 9.414334e+01 | 8.26E-02 |
信噪比增益 GGG | 1.000000e+00 | 1.052541e+00 | 4.99E-02 |
- 注: 通过BPF前信号的信噪比为6dB.
在误差允许范围内可以认为理论分析符合实际情况.
误差产生原因分析:
- 相干解调器中的滤波器(BPF, LPF)并非理想滤波器, 因此有一部分通带外的频率成分通过, 其主要导致输入与输出噪声功率仿真值的功率仿真值偏大, 该误差可以通过提高滤波器的阶数减小.
- 由于抽样信号的频率较低, 因此产生的AWGN并不完全符合随机分布, 且高度依赖随机种子, 不同的随机种子产生的带通AWGN功率有一个较大的散布范围, 其主要影响输入与输出的噪声功率, 间接影响输入与输出的信噪比.
- 还是由于产生的AWGN并不完全符合随机分布, 因此相同的AWGN通过USSB的带通滤波器与通过LSSB的带通滤波器后的功率并不相同, 且其同样高度依赖随机种子, 不同的随机种子对USSB与LSSB的噪声功率之差也有决定性影响.
5. 小结
表5.1 不同调制信号的时域表达式
信号时域表达式 | 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) | Ac[1+m(t)]cos(2πfct)A_c[1 + m(t)]\cos(2\pi f_c t)Ac[1+m(t)]cos(2πfct) | Acm(t)cos(2πfct)A_cm(t)\cos(2\pi f_c t)Acm(t)cos(2πfct) | Ac[m(t)cos(2πfct)−m^(t)sin(2πfct)]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)] | Ac[m(t)cos(2πfct)+m^(t)sin(2πfct)]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)] |
移频后调制信号 sd(t)s_d(t)sd(t) | Ac2[1+m(t)]⋅[1+cos(2⋅2πfct)]\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)] | Ac2m(t)⋅[1+cos(2⋅2πfct)]\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)] | Ac2m(t)+Ac2[m(t)cos(2⋅2πfct)−m^(t)sin(2⋅2πfct)]\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)] | Ac2m(t)+Ac2[m(t)cos(2⋅2πfct)+m^(t)sin(2⋅2πfct)]\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)] |
解调信号 mo(t)m_o(t)mo(t) | Ac2+Ac2m(t)\cfrac{A_c}{2} + \cfrac{A_c}{2}m(t)2Ac+2Acm(t) | Ac2m(t)\cfrac{A_c}{2} m(t)2Acm(t) | Ac2m(t)\cfrac{A_c}{2} m(t)2Acm(t) | Ac2m(t)\cfrac{A_c}{2} m(t)2Acm(t) |
- 注: AM调制信号解调后未消除直流分量
表5.2 不同调制信号的频域表达式
信号频域表达式 | 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) | Ac2[δ(f−fc)+δ(f+fc)]+Ac2[M(f−fc)+M(f+fc)]\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)] | Ac2[M(f−fc)+M(f+fc)]\cfrac{A_c}{2}\bigg[M(f - f_c) + M(f + f_c)\bigg]2Ac[M(f−fc)+M(f+fc)] | Ac2[M(f−fc)+M(f+fc)]−Ac2[M(f+fc)⋅sgn(f+fc)−M(f+fc)⋅sgn(f−fc)]\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)] | Ac2[M(f−fc)+M(f+fc)]+Ac2[M(f+fc)⋅sgn(f+fc)−M(f+fc)⋅sgn(f−fc)]\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)] |
移频后调制信号频域表达式 Sd(f)S_d(f)Sd(f) | Ac2[M(f)+δ(f)]+Ac4[M(f−2fc)+M(f+2fc)+δ(f−2fc)+δ(f+2fc)]\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)] | Ac2M(f)+Ac4[M(f−2fc)+M(f+2fc)]\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)] | Ac2M(f)+Ac4[M(f−2fc)+M(f+2fc)]−Ac4[M(f+2fc)⋅sgn(f+2fc)−M(f+2fc)⋅sgn(f−2fc)]\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)] | Ac2M(f)+Ac4[M(f−2fc)+M(f+2fc)]+Ac4[M(f+2fc)⋅sgn(f+2fc)−M(f+2fc)⋅sgn(f−2fc)]\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)] |
解调信号频域表达式 Mo(f)M_o(f)Mo(f) | Ac2δ(f)+Ac2M(f)\cfrac{A_c}{2}\delta(f) + \cfrac{A_c}{2}M(f)2Acδ(f)+2AcM(f) | Ac2M(f)\cfrac{A_c}{2}M(f)2AcM(f) | Ac2M(f)\cfrac{A_c}{2}M(f)2AcM(f) | Ac2M(f)\cfrac{A_c}{2}M(f)2AcM(f) |
- 注: AM调制信号解调后未消除直流分量
表5.3 相干解调器解调不同调制信号的抗噪能力对比
信号特征 | AM | DSB-SC | SSB |
---|---|---|---|
带宽 BWBWBW | 2B2B2B | 2B2B2B | BBB |
输入信号功率 SinS_{in}Sin | Ac2(1+Pm)2\cfrac{A_c^2 (1 + P_m)}{2}2Ac2(1+Pm) | Ac2Pm2\cfrac{A_c^2 P_m}{2}2Ac2Pm | Ac2PmA_c^2 P_mAc2Pm |
输入噪声功率 NinN_{in}Nin | 2n0B2 n_0 B2n0B | 2n0B2 n_0 B2n0B | n0Bn_0 Bn0B |
输入信噪比 SNRinSNR_{in}SNRin | Ac2(1+Pm)4n0B\cfrac{A_c^2(1 + P_m)}{4 n_0 B}4n0BAc2(1+Pm) | Ac2Pm4n0B\cfrac{A_c^2 P_m}{4 n_0 B}4n0BAc2Pm | Ac2Pmn0B\cfrac{A_c^2 P_m}{n_0 B}n0BAc2Pm |
输出信号功率 SoutS_{out}Sout | Ac2⋅(1+Pm)4\cfrac{A_c^2 \cdot(1 + P_m)}{4}4Ac2⋅(1+Pm) | Ac2Pm4\cfrac{A_c^2 P_m}{4}4Ac2Pm | Ac2Pm4\cfrac{A_c^2 P_m}{4}4Ac2Pm |
输出噪声功率 NoutN_{out}Nout | 12n0B\cfrac{1}{2}n_0 B21n0B | 12n0B\cfrac{1}{2}n_0 B21n0B | 14n0B\cfrac{1}{4}n_0 B41n0B |
输出信噪比 SNRoutSNR_{out}SNRout | Ac2⋅(1+Pm)2n0B\cfrac{A_c^2 \cdot(1 + P_m)}{2 n_0 B}2n0BAc2⋅(1+Pm) | Ac2Pm2n0B\cfrac{A_c^2 P_m}{2 n_0 B}2n0BAc2Pm | Ac2Pmn0B\cfrac{A_c^2 P_m}{n_0 B}n0BAc2Pm |
信噪比增益 GGG | 222 | 222 | 111 |
- 注: 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 / snrreturn 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: 横轴数据-2Daxis_ys: 纵轴数据-2Dformats: 曲线格式(颜色 风格 标记)-2D颜色:'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: 曲线标签内容-2Dlabel_locs: 曲线标签位置-2D0 "best 最佳位置(默认)1 "upper right" 右上2 "upper left" 左上3 "lower right" 右下4 "lower left" 左下limit_ys: 坐标轴下限与上限-2DNone: 自动选择纵轴数据的最小值与最大值linewidths: 线宽"""fig = plt.figure(figure_i)chart_formate = row_i * 100 + column_j * 10for 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: 纵轴数据-2DF_samples: 抽样频率-2Dlimit_ys: 坐标轴下限与上限-2D"""fig = plt.figure(figure_i)chart_formate = row_i * 100 + column_j * 10for 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_inS_out = np.mean(m_o ** 2)
N_out = np.mean(n_o ** 2)
SNR_out = S_out / N_outG = SNR_out / SNR_inprint("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_inS_out = np.mean(m_o ** 2)
N_out = np.mean(n_o ** 2)
SNR_out = S_out / N_outG = SNR_out / SNR_inprint("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:# 上边带 USSBf_H_BPF_SSB = frequency[1] + frequency[0] * 2 # 带通滤波器的上限截止频率f_L_BPF_SSB = frequency[1] # 带通滤波器的下限截止频率sign = -1 # 正负符号
else:# 下边带 LSSBf_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_inS_out = np.mean(m_o ** 2)
N_out = np.mean(n_o ** 2)
SNR_out = S_out / N_outG = SNR_out / SNR_inprint("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()
模拟幅度调制相干解调系统抗噪声性能仿真分析-python实现相关推荐
- 模拟幅度调制系统抗噪声性能
模拟幅度调制系统抗干扰性能仿真分析 1.引言 2.系统模型 2.1.常规幅度调制(AM) 2.2.抑制载波双边带调幅(DSB-SC) 2.3.单边带调幅调制(SSB) 3.抗噪声性能理论分析 3.1. ...
- c语言幅度调制程序,模拟幅度调制系统仿真.docx
模拟幅度调制系统仿真要点 摘要本文首先介绍了线性调制与解调的基本原理以及操作方法.其次主要介绍了普通调幅(AM).双边带调制(DSB)的基本原理.最后利用MATLAB软件进行调制和解调程序的设计:对普 ...
- 如何利用matlab实现各种线性调制系统的抗噪声分析调制仿真,5.2线性调制系统的抗噪声性能题库.ppt...
输入信噪比Si /Ni : 解调器输出信噪比: 调制制度增益: DSB相干解调抗噪声性能分析模型 分别计算解调器输入/输出的信号功率和噪声功率. 解调器输入信号为 解调器输入信号平均功率为 与相干载波 ...
- 【基于matlab的mqam调制与解调系统】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.正交幅度调制原理 二.QAM的解调和判决 三.16QAM调制解调系统的实现与仿真 总结 前言 提示:这里可以添加本 ...
- 通信原理之模拟幅度调制(线性调制)详解
通信原理系列文章: 通信原理之模拟幅度调制(线性调制) 通信原理之模拟角度调制(非线性调制) 通信原理之模拟调制系统信号的抗造性能 通信原理之数字调制原理 通信原理之模拟幅度调制(线性调制)详解 1. ...
- dpsk调制解调 matlab,2DPSK调制与解调系统的MATLAB实现及性能分析.doc
2DPSK调制与解调系统的MATLAB实现及性能分析 2DPSK调制与解调系统的MATLAB实现及性能分析 摘 要:MATLAB集成环境下的Simulink仿真平台,设计一个2DPSK调制与解调系统. ...
- matlab显示2dpsk误码率,基于MATLAB的2DPSK调制与解调系统的分析.doc
您所在位置:网站首页 > 海量文档  > 计算机 > matlab 基于MATLAB的2DPSK调制与解调系统的分析. ...
- 数字基带部分响应matlab,第Ⅰ类部分响应系统的抗噪声性能分析与仿真
第Ⅰ类部分响应系统的抗噪声性能分析与仿真 陈海英 (漳州师范学院物理与电子信息工程系,福建 漳州363000) 摘要:分析了第Ⅰ类部分响应系统的抗噪声性能,并利用MATLAB软件仿真计算不同信噪比下的 ...
- matlab 2dpsk调制频谱,基于MATLAB的2DPSK调制与解调系统的分析
摘要 MATLAB集成环境下的Simulink仿真平台,设计一个2DPSK调制与解调系统.用示波器观察调制前后的信号波形;用频谱分析模块观察调制前后信号频谱的变化;加上噪声源,用误码测试模块测量误码率 ...
最新文章
- postgresql数据库修改表
- python书籍_Python 之父宣布加盟微软!包邮送几本 Python 书籍压压惊!
- OpenCascade Primitives BRep-Cylinder
- c#中chart绘制曲线,柱状图等
- 【Yoshua Bengio 亲自解答】机器学习 81 个问题及答案(最全收录)
- 经典指针程序互换(一)
- 基于共享内存、信号、命名管道和Select模型实现聊天窗口
- Python中 '==' 与'is' 以及它们背后的故事
- SVD奇异值分解(PCA,LSI)
- org.apache.hadoop.hive.metastore.HiveMetaException: Schema initialization FAILED! Metastore state wo
- Android 控件 之 Adapter 基础讲解
- composer 安装
- Camtasia Studio2023专业的电脑屏幕录像视频编辑软件
- 无线上外网,有线上内网的方式
- cc美团_项目注册界面实现
- js获取当前日期前12月后12月日期
- element-ui dialog组件添加可拖拽位置 可拖拽宽高
- 【JS】1162- 90% 的前端都会使用 ES6 来简化代码,你都用过哪些?
- Java Type接口 运行时获取泛型类型
- matlab自耦变压器,基于MATLAB的500kV自耦变压器建模及仿真.pdf
热门文章
- 基于明度(亮度)和RGB通道方差的异常图片检测:筛除病理切片的组织液、肌肉和纯色区域(深色、亮色图片检测)
- 测试开发面试题目(三)——测试用例、安卓苹果系统区别、小程序与app的区别
- Python 列表、元素、字典
- Jsp页面接收解析后台传来的链表和对象
- group_concat函数详解
- 记ViewModel和LiveData使用的一些坑与注意点
- CSS (Cascading Style Sheets)
- Android——使用contentprovider获取内容
- 北大心理与认知学院院长方方:人类注意力图和动态机制
- 小甲鱼《零基础学习Python》课后笔记(二十八):文件——因为懂你,所以永恒