目录

  • 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-SCSSC 三种系统的抗噪声性能

    • 对原理及模型进行必要的介绍
    • 给出必要的系统框图以及分析结果
    • 完成仿真报告

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πfc​t)=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πfc​t)(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πfc​t)](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​​+2Ac​​m(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)+2Ac​​M(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πfc​t)(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)=Ac​m(t)cos(2πfc​t)(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)=Ac​m(t)cos(2πfc​t)(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)=2Ac​​m(t)⋅[1+cos(2⋅2πfc​t)](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)=2Ac​​M(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)=2Ac​​m(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)=2Ac​​M(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)=2Ac​​m(t)⋅cos(2⋅2πfc​t)(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)=Ac​m(t)cos(2πfc​t)∗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πfc​t)+m^(t)sin(2πfc​t)](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)=Ac​m(t)cos(2πfc​t)−Ac​[m(t)cos(2πfc​t)+m^(t)sin(2πfc​t)]=Ac​[m(t)cos(2πfc​t)−m^(t)sin(2πfc​t)]​(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πfc​t)±m^(t)sin(2πfc​t)](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)=2Ac​​m(t)+2Ac​​[m(t)cos(2⋅2πfc​t)±m^(t)sin(2⋅2πfc​t)](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)=2Ac​​M(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)=2Ac​​m(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)=2Ac​​M(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πfc​t)±m^(t)sin(2⋅2πfc​t)](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πfc​t}=Re{[nc​(t)+jns​(t)]⋅[cos(2πfc​t)+jsin(2πfc​t)]}=nc​(t)cos(2πfc​t)−ns​(t)sin(2πfc​t)​(3.1.2)

带通AWGN通过乘法器移频后
nd(t)=n(t)⋅Accos⁡(2πfct)=nc(t)cos⁡2(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)⋅Ac​cos(2πfc​t)=nc​(t)cos2(2πfc​t)−ns​(t)sin(2πfc​t)cos(2πfc​t)=21​nc​(t)+21​[nc​(t)cos(2⋅2πfc​t)−ns​(t)sin(2⋅2πfc​t)]​(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)=21​nc​(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=2n0​B(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=n0​B(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)]=41​E[nc2​(t)]=41​E[n2(t)]=41​Nin双​=21​n0​B(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)]=41​E[nc2​(t)]=41​E[n2(t)]=41​Nin单​=41​n0​B(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​​=2n0​B2Ac2​​(1+Pm​)​=4n0​BAc2​(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​=Nout​Sout​​=21​n0​B4Ac2​⋅(1+Pm​)​​=2n0​BAc2​⋅(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​=SNRin​SNRout​​=1+Pm​2⋅(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)⟩=2Ac2​Pm​​(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)⟩=4Ac2​Pm​​(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​=Nin​Sin​​=2n0​B2Ac2​​Pm​​=4n0​BAc2​Pm​​(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​=Nout​Sout​​=21​n0​B4Ac2​Pm​​​=2n0​BAc2​Pm​​(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​=SNRin​SNRout​​=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)⟩=Ac2​Pm​(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)⟩=4Ac2​Pm​​(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​=Nin​Sin​​=n0​BAc2​Pm​​=n0​BAc2​Pm​​(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​=Nout​Sout​​=41​n0​B4Ac2​Pm​​​=n0​BAc2​Pm​​(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​=SNRin​SNRout​​=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.

在误差允许范围内可以认为理论分析符合实际情况.

误差产生原因分析:

  1. 相干解调器中的滤波器(BPF, LPF)并非理想滤波器, 因此有一部分通带外的频率成分通过, 其主要导致输入与输出噪声功率仿真值的功率仿真值偏大, 该误差可以通过提高滤波器的阶数减小.
  2. 由于抽样信号的频率较低, 因此产生的AWGN并不完全符合随机分布, 且高度依赖随机种子, 不同的随机种子产生的带通AWGN功率有一个较大的散布范围, 其主要影响输入与输出的噪声功率, 间接影响输入与输出的信噪比.
  3. 由于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.

在误差允许范围内可以认为理论分析符合实际情况.

误差产生原因分析:

  1. 相干解调器中的滤波器(BPF, LPF)并非理想滤波器, 因此有一部分通带外的频率成分通过, 其主要导致输入与输出噪声功率仿真值的功率仿真值偏大, 该误差可以通过提高滤波器的阶数减小.
  2. 由于抽样信号的频率较低, 因此产生的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.

在误差允许范围内可以认为理论分析符合实际情况.

误差产生原因分析:

  1. 相干解调器中的滤波器(BPF, LPF)并非理想滤波器, 因此有一部分通带外的频率成分通过, 其主要导致输入与输出噪声功率仿真值的功率仿真值偏大, 该误差可以通过提高滤波器的阶数减小.
  2. 由于抽样信号的频率较低, 因此产生的AWGN并不完全符合随机分布, 且高度依赖随机种子, 不同的随机种子产生的带通AWGN功率有一个较大的散布范围, 其主要影响输入与输出的噪声功率, 间接影响输入与输出的信噪比.
  3. 还是由于产生的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.

在误差允许范围内可以认为理论分析符合实际情况.

误差产生原因分析:

  1. 相干解调器中的滤波器(BPF, LPF)并非理想滤波器, 因此有一部分通带外的频率成分通过, 其主要导致输入与输出噪声功率仿真值的功率仿真值偏大, 该误差可以通过提高滤波器的阶数减小.
  2. 由于抽样信号的频率较低, 因此产生的AWGN并不完全符合随机分布, 且高度依赖随机种子, 不同的随机种子产生的带通AWGN功率有一个较大的散布范围, 其主要影响输入与输出的噪声功率, 间接影响输入与输出的信噪比.
  3. 还是由于产生的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πfc​t) Acm(t)cos⁡(2πfct)A_cm(t)\cos(2\pi f_c t)Ac​m(t)cos(2πfc​t) 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πfc​t)−m^(t)sin(2πfc​t)] 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πfc​t)+m^(t)sin(2πfc​t)]
移频后调制信号 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πfc​t)] 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]2Ac​​m(t)⋅[1+cos(2⋅2πfc​t)] 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]2Ac​​m(t)+2Ac​​[m(t)cos(2⋅2πfc​t)−m^(t)sin(2⋅2πfc​t)] 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]2Ac​​m(t)+2Ac​​[m(t)cos(2⋅2πfc​t)+m^(t)sin(2⋅2πfc​t)]
解调信号 mo(t)m_o(t)mo​(t) Ac2+Ac2m(t)\cfrac{A_c}{2} + \cfrac{A_c}{2}m(t)2Ac​​+2Ac​​m(t) Ac2m(t)\cfrac{A_c}{2} m(t)2Ac​​m(t) Ac2m(t)\cfrac{A_c}{2} m(t)2Ac​​m(t) Ac2m(t)\cfrac{A_c}{2} m(t)2Ac​​m(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]2Ac​​M(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]2Ac​​M(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]2Ac​​M(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)+2Ac​​M(f) Ac2M(f)\cfrac{A_c}{2}M(f)2Ac​​M(f) Ac2M(f)\cfrac{A_c}{2}M(f)2Ac​​M(f) Ac2M(f)\cfrac{A_c}{2}M(f)2Ac​​M(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}2Ac2​Pm​​ Ac2PmA_c^2 P_mAc2​Pm​
输入噪声功率 NinN_{in}Nin​ 2n0B2 n_0 B2n0​B 2n0B2 n_0 B2n0​B n0Bn_0 Bn0​B
输入信噪比 SNRinSNR_{in}SNRin​ Ac2(1+Pm)4n0B\cfrac{A_c^2(1 + P_m)}{4 n_0 B}4n0​BAc2​(1+Pm​)​ Ac2Pm4n0B\cfrac{A_c^2 P_m}{4 n_0 B}4n0​BAc2​Pm​​ Ac2Pmn0B\cfrac{A_c^2 P_m}{n_0 B}n0​BAc2​Pm​​
输出信号功率 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}4Ac2​Pm​​ Ac2Pm4\cfrac{A_c^2 P_m}{4}4Ac2​Pm​​
输出噪声功率 NoutN_{out}Nout​ 12n0B\cfrac{1}{2}n_0 B21​n0​B 12n0B\cfrac{1}{2}n_0 B21​n0​B 14n0B\cfrac{1}{4}n_0 B41​n0​B
输出信噪比 SNRoutSNR_{out}SNRout​ Ac2⋅(1+Pm)2n0B\cfrac{A_c^2 \cdot(1 + P_m)}{2 n_0 B}2n0​BAc2​⋅(1+Pm​)​ Ac2Pm2n0B\cfrac{A_c^2 P_m}{2 n_0 B}2n0​BAc2​Pm​​ Ac2Pmn0B\cfrac{A_c^2 P_m}{n_0 B}n0​BAc2​Pm​​
信噪比增益 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. 模拟幅度调制系统抗噪声性能

    模拟幅度调制系统抗干扰性能仿真分析 1.引言 2.系统模型 2.1.常规幅度调制(AM) 2.2.抑制载波双边带调幅(DSB-SC) 2.3.单边带调幅调制(SSB) 3.抗噪声性能理论分析 3.1. ...

  2. c语言幅度调制程序,模拟幅度调制系统仿真.docx

    模拟幅度调制系统仿真要点 摘要本文首先介绍了线性调制与解调的基本原理以及操作方法.其次主要介绍了普通调幅(AM).双边带调制(DSB)的基本原理.最后利用MATLAB软件进行调制和解调程序的设计:对普 ...

  3. 如何利用matlab实现各种线性调制系统的抗噪声分析调制仿真,5.2线性调制系统的抗噪声性能题库.ppt...

    输入信噪比Si /Ni : 解调器输出信噪比: 调制制度增益: DSB相干解调抗噪声性能分析模型 分别计算解调器输入/输出的信号功率和噪声功率. 解调器输入信号为 解调器输入信号平均功率为 与相干载波 ...

  4. 【基于matlab的mqam调制与解调系统】

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.正交幅度调制原理 二.QAM的解调和判决 三.16QAM调制解调系统的实现与仿真 总结 前言 提示:这里可以添加本 ...

  5. 通信原理之模拟幅度调制(线性调制)详解

    通信原理系列文章: 通信原理之模拟幅度调制(线性调制) 通信原理之模拟角度调制(非线性调制) 通信原理之模拟调制系统信号的抗造性能 通信原理之数字调制原理 通信原理之模拟幅度调制(线性调制)详解 1. ...

  6. dpsk调制解调 matlab,2DPSK调制与解调系统的MATLAB实现及性能分析.doc

    2DPSK调制与解调系统的MATLAB实现及性能分析 2DPSK调制与解调系统的MATLAB实现及性能分析 摘 要:MATLAB集成环境下的Simulink仿真平台,设计一个2DPSK调制与解调系统. ...

  7. matlab显示2dpsk误码率,基于MATLAB的2DPSK调制与解调系统的分析.doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspmatlab 基于MATLAB的2DPSK调制与解调系统的分析. ...

  8. 数字基带部分响应matlab,第Ⅰ类部分响应系统的抗噪声性能分析与仿真

    第Ⅰ类部分响应系统的抗噪声性能分析与仿真 陈海英 (漳州师范学院物理与电子信息工程系,福建 漳州363000) 摘要:分析了第Ⅰ类部分响应系统的抗噪声性能,并利用MATLAB软件仿真计算不同信噪比下的 ...

  9. matlab 2dpsk调制频谱,基于MATLAB的2DPSK调制与解调系统的分析

    摘要 MATLAB集成环境下的Simulink仿真平台,设计一个2DPSK调制与解调系统.用示波器观察调制前后的信号波形;用频谱分析模块观察调制前后信号频谱的变化;加上噪声源,用误码测试模块测量误码率 ...

最新文章

  1. postgresql数据库修改表
  2. python书籍_Python 之父宣布加盟微软!包邮送几本 Python 书籍压压惊!
  3. OpenCascade Primitives BRep-Cylinder
  4. c#中chart绘制曲线,柱状图等
  5. 【Yoshua Bengio 亲自解答】机器学习 81 个问题及答案(最全收录)
  6. 经典指针程序互换(一)
  7. 基于共享内存、信号、命名管道和Select模型实现聊天窗口
  8. Python中 '==' 与'is' 以及它们背后的故事
  9. SVD奇异值分解(PCA,LSI)
  10. org.apache.hadoop.hive.metastore.HiveMetaException: Schema initialization FAILED! Metastore state wo
  11. Android 控件 之 Adapter 基础讲解
  12. composer 安装
  13. Camtasia Studio2023专业的电脑屏幕录像视频编辑软件
  14. 无线上外网,有线上内网的方式
  15. cc美团_项目注册界面实现
  16. js获取当前日期前12月后12月日期
  17. element-ui dialog组件添加可拖拽位置 可拖拽宽高
  18. 【JS】1162- 90% 的前端都会使用 ES6 来简化代码,你都用过哪些?
  19. Java Type接口 运行时获取泛型类型
  20. matlab自耦变压器,基于MATLAB的500kV自耦变压器建模及仿真.pdf

热门文章

  1. 基于明度(亮度)和RGB通道方差的异常图片检测:筛除病理切片的组织液、肌肉和纯色区域(深色、亮色图片检测)
  2. 测试开发面试题目(三)——测试用例、安卓苹果系统区别、小程序与app的区别
  3. Python 列表、元素、字典
  4. Jsp页面接收解析后台传来的链表和对象
  5. group_concat函数详解
  6. 记ViewModel和LiveData使用的一些坑与注意点
  7. CSS (Cascading Style Sheets)
  8. Android——使用contentprovider获取内容
  9. 北大心理与认知学院院长方方:人类注意力图和动态机制
  10. 小甲鱼《零基础学习Python》课后笔记(二十八):文件——因为懂你,所以永恒