欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

模拟幅度调制相干解调系统抗噪声性能仿真分析

程序员文章站 2022-04-27 10:42:20
目录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.....

目录

1. 引言

1.1 研究目的

  • 理解通信系统模型, 掌握信号时域与频域特性分析方法, 能够分析模拟/数字基带/频带等各种通信系统对信号时域以及频域特性的变换关系;
  • 理解加性高斯白噪声与频带受限信道, 理解匹配滤波器接收机与相干接收机的工作原理, 掌握带宽无限与频带受限信道条件下传输波形的设计方法;
  • 理解模拟通信系统接收机输入与输出信噪比计算方法, 能够用信噪比对模拟通信系统性能进行分析;
  • 能够根据系统模型实现链路级仿真, 掌握仿真参数设置原则, 分析信号的时域以及频域特性, 获得误码性能仿真结果;

1.2 研究方法

  • 理论分析
  • 软件仿真

1.3 主要内容

  • 使用理论分析与软件仿真两种方法, 分析比较 AM, DSB-SCSSC 三种系统的抗噪声性能
    • 对原理及模型进行必要的介绍
    • 给出必要的系统框图以及分析结果
    • 完成仿真报告

2. 系统模型

2.1 常规调幅调制(AM)

2.1.1 AM 调制

模拟幅度调制相干解调系统抗噪声性能仿真分析

图2.1.1 AM调制器模型

时域表示:
{ s A M ( t ) = A c [ 1 + m ( t ) ] cos ⁡ ( 2 π f c t ) β A M = m a x { ∣ m ( t ) ∣ } (2.1.1) \begin{cases} s_{AM}(t) &= A_c[1 + m(t)]\cos(2\pi f_c t) \\ \beta_{AM} &= max\{ |m(t)|\} \\ \end{cases} \tag{2.1.1} {sAM(t)βAM=Ac[1+m(t)]cos(2πfct)=max{m(t)}(2.1.1)

  • m ( t ) m(t) m(t) 为基带信号
  • A c A_c Ac 为载波信号的幅值
  • f c f_c fc 为载波信号的频率
  • s A M ( t ) s_{AM}(t) sAM(t) 为已调AM信号
  • β A M \beta_{AM} βAM 为调幅指数
    • β A M < 1 \beta_{AM} < 1 βAM<1 时为欠调制
    • β A M = 1 \beta_{AM} = 1 βAM=1 时为临界调制
    • β A M > 1 \beta_{AM} > 1 βAM>1 时为过调制
    • 为避免包络检波时出错, 调制时应确保 β A M ≤ 1 \beta_{AM} \leq 1 βAM1

频域表示:
S A M ( f ) = A c 2 [ δ ( f − f c ) + δ ( f + f c ) ] + A c 2 [ M ( f − f c ) + M ( f + f c ) ] (2.1.2) S_{AM}(f) = \cfrac{A_c}{2}\bigg[\delta(f - f_c) + \delta(f + f_c)\bigg] + \cfrac{A_c}{2}\bigg[M(f - f_c) + M(f + f_c)\bigg] \tag{2.1.2} SAM(f)=2Ac[δ(ffc)+δ(f+fc)]+2Ac[M(ffc)+M(f+fc)](2.1.2)

  • S A M ( f ) S_{AM}(f) SAM(f) 为已调AM信号的傅里叶变换

2.1.2 AM 解调

模拟幅度调制相干解调系统抗噪声性能仿真分析

图2.1.2 AM相干解调器模型

解调器输入的已调AM信号 s ( t ) s(t) s(t):

时域表示:
s ( t ) = A c [ 1 + m ( t ) ] cos ⁡ ( 2 π f c t ) (2.1.3) s(t) = A_c[1 + m(t)]\cos(2\pi f_c t) \tag{2.1.3} s(t)=Ac[1+m(t)]cos(2πfct)(2.1.3)

频域表示:
S ( f ) = A c 2 [ δ ( f − f c ) + δ ( f + f c ) ] + A c 2 [ M ( f − f c ) + M ( f + f c ) ] (2.1.4) S(f) = \cfrac{A_c}{2}\bigg[\delta(f - f_c) + \delta(f + f_c)\bigg] + \cfrac{A_c}{2}\bigg[M(f - f_c) + M(f + f_c)\bigg] \tag{2.1.4} S(f)=2Ac[δ(ffc)+δ(f+fc)]+2Ac[M(ffc)+M(f+fc)](2.1.4)


通过带通滤波器(BPF)并移频的AM信号 s d ( t ) s_d(t) sd(t):

时域表示:
s d ( t ) = A c 2 [ 1 + m ( t ) ] ⋅ [ 1 + cos ⁡ ( 2 ⋅ 2 π f c t ) ] (2.1.5) s_d(t) = \cfrac{A_c}{2}\bigg[1 + m(t)\bigg]\cdot\bigg[1 + \cos(2 \cdot 2\pi f_c t)\bigg] \tag{2.1.5} sd(t)=2Ac[1+m(t)][1+cos(22πfct)](2.1.5)

频域表示:
S d ( f ) = A c 2 [ M ( f ) + δ ( f ) ] + A c 4 [ M ( f − 2 f c ) + M ( f + 2 f c ) + δ ( f − 2 f c ) + δ ( f + 2 f c ) ] (2.1.6) S_d(f) = \cfrac{A_c}{2}\bigg[M(f) + \delta(f)\bigg] + \cfrac{A_c}{4}\bigg[M(f - 2f_c) + M(f + 2f_c) + \delta(f - 2f_c) + \delta(f + 2f_c)\bigg] \tag{2.1.6} Sd(f)=2Ac[M(f)+δ(f)]+4Ac[M(f2fc)+M(f+2fc)+δ(f2fc)+δ(f+2fc)](2.1.6)


通过低通滤波器(LPF)滤除高频成分的解调信号 s o ( t ) s_o(t) so(t):

时域表示:
s o ( t ) = A c 2 + A c 2 m ( t ) (2.1.7) s_o(t) = \cfrac{A_c}{2} + \cfrac{A_c}{2}m(t) \tag{2.1.7} so(t)=2Ac+2Acm(t)(2.1.7)

频域表示:
S o ( f ) = A c 2 δ ( f ) + A c 2 M ( f ) (2.1.8) S_o(f) = \cfrac{A_c}{2}\delta(f) + \cfrac{A_c}{2}M(f) \tag{2.1.8} So(f)=2Acδ(f)+2AcM(f)(2.1.8)

所滤除的高频成分 s h ( t ) s_h(t) sh(t):

时域表示:
s h ( t ) = A c 2 [ 1 + m ( t ) ] ⋅ cos ⁡ ( 2 ⋅ 2 π f c t ) (2.1.9) s_h(t) = \cfrac{A_c}{2}\bigg[1 + m(t)\bigg] \cdot \cos(2 \cdot 2\pi f_c t) \tag{2.1.9} sh(t)=2Ac[1+m(t)]cos(22πfct)(2.1.9)

频域表示:
S h ( f ) = A c 4 [ M ( f − 2 f c ) + M ( f + 2 f c ) + δ ( f − 2 f c ) + δ ( f + 2 f c ) ] (2.1.10) S_h(f) = \cfrac{A_c}{4}\bigg[M(f - 2f_c) + M(f + 2f_c) + \delta(f - 2f_c) + \delta(f + 2f_c)\bigg] \tag{2.1.10} Sh(f)=4Ac[M(f2fc)+M(f+2fc)+δ(f2fc)+δ(f+2fc)](2.1.10)


2.2 抑制载波双边带调制(DSB-SC)

2.2.1 DSB_SC 调制

模拟幅度调制相干解调系统抗噪声性能仿真分析

图2.2.1 DSB-SC调制器模型

时域表示:
s D S B ( t ) = A c m ( t ) cos ⁡ ( 2 π f c t ) (2.2.1) s_{DSB}(t) = A_cm(t)\cos(2\pi f_c t) \tag{2.2.1} sDSB(t)=Acm(t)cos(2πfct)(2.2.1)

  • m ( t ) m(t) m(t) 为基带信号
  • A c A_c Ac 为载波信号的幅值
  • f c f_c fc 为载波信号的频率
  • s D S B ( t ) s_{DSB}(t) sDSB(t) 为双边带(DSB)信号

频域表示:
S D S B ( f ) = A c 2 [ M ( f − f c ) + M ( f + f c ) ] (2.2.2) S_{DSB}(f) = \cfrac{A_c}{2}\bigg[M(f - f_c) + M(f + f_c)\bigg] \tag{2.2.2} SDSB(f)=2Ac[M(ffc)+M(f+fc)](2.2.2)

  • S D S B ( 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 ) = A c m ( t ) cos ⁡ ( 2 π f c t ) (2.2.3) s(t) = A_cm(t)\cos(2\pi f_c t) \tag{2.2.3} s(t)=Acm(t)cos(2πfct)(2.2.3)

频域表示:
S ( f ) = A c 2 [ M ( f − f c ) + M ( f + f c ) ] (2.2.4) S(f) = \cfrac{A_c}{2}\bigg[M(f - f_c) + M(f + f_c)\bigg] \tag{2.2.4} S(f)=2Ac[M(ffc)+M(f+fc)](2.2.4)


通过带通滤波器(BPF)的并移频的DSB信号 s d ( t ) s_d(t) sd(t):

时域表示:
s d ( t ) = A c 2 m ( t ) ⋅ [ 1 + cos ⁡ ( 2 ⋅ 2 π f c t ) ] (2.2.5) s_d(t) = \cfrac{A_c}{2}m(t) \cdot \bigg[1 + \cos(2 \cdot 2\pi f_c t)\bigg] \tag{2.2.5} sd(t)=2Acm(t)[1+cos(22πfct)](2.2.5)

频域表示:
S d ( f ) = A c 2 M ( f ) + A c 4 [ M ( f − 2 f c ) + M ( f + 2 f c ) ] (2.2.6) S_d(f) = \cfrac{A_c}{2}M(f) + \cfrac{A_c}{4}\bigg[M(f - 2f_c) + M(f + 2f_c)\bigg] \tag{2.2.6} Sd(f)=2AcM(f)+4Ac[M(f2fc)+M(f+2fc)](2.2.6)


通过低通滤波器(LPF)滤除高频成分的解调信号 s o ( t ) s_o(t) so(t):

时域表示:
s o ( t ) = A c 2 m ( t ) (2.2.7) s_o(t) = \cfrac{A_c}{2} m(t) \tag{2.2.7} so(t)=2Acm(t)(2.2.7)

频域表示:
S o ( f ) = A c 2 M ( f ) (2.2.8) S_o(f) = \cfrac{A_c}{2}M(f) \tag{2.2.8} So(f)=2AcM(f)(2.2.8)

所滤除的高频成分 s h ( t ) s_h(t) sh(t):

时域表示:
s h ( t ) = A c 2 m ( t ) ⋅ cos ⁡ ( 2 ⋅ 2 π f c t ) (2.2.9) s_h(t) = \cfrac{A_c}{2}m(t) \cdot \cos(2 \cdot 2\pi f_c t) \tag{2.2.9} sh(t)=2Acm(t)cos(22πfct)(2.2.9)

频域表示:
S h ( f ) = A c 4 [ M ( f − 2 f c ) + M ( f + 2 f c ) ] (2.2.10) S_h(f) = \cfrac{A_c}{4}\bigg[M(f - 2f_c) + M(f + 2f_c)\bigg] \tag{2.2.10} Sh(f)=4Ac[M(f2fc)+M(f+2fc)](2.2.10)


2.3 单边带调制(SSB)

2.3.1 SSB 调制

2.3.1.1 滤波法调制

模拟幅度调制相干解调系统抗噪声性能仿真分析

图2.3.1 SSB调制器模型(滤波法)

时域表示:
s S S B ( t ) = A c m ( t ) cos ⁡ ( 2 π f c t ) ∗ h S S B ( t ) (2.3.1) s_{SSB}(t) = A_cm(t)\cos(2\pi f_c t) * h_{SSB}(t) \tag{2.3.1} sSSB(t)=Acm(t)cos(2πfct)hSSB(t)(2.3.1)

  • m ( t ) m(t) m(t) 为基带信号

  • A c A_c Ac 为载波信号的幅值

  • f c f_c fc 为载波信号的频率

  • s S S B ( t ) s_{SSB}(t) sSSB(t) 为已调SSB信号

  • h S S B ( t ) h_{SSB}(t) hSSB(t) 为滤波器冲激响应

    • 若为下边带调制(LSSB), 则滤波器为低通滤波器(LPF), 其上限截止频率为 f c f_c fc
    • 若为上边带调制(USSB), 则滤波器为高通滤波器(HPF), 其下限截止频率为 f c f_c fc
  • s S S B ( t ) s_{SSB}(t) sSSB(t) 为单边带(SSB)信号

频域表示:
S S S B ( f ) = A c 2 [ M ( f − f c ) + M ( f + f c ) ] ⋅ H S S B (2.3.2) S_{SSB}(f) = \cfrac{A_c}{2}\bigg[M(f - f_c) + M(f + f_c)\bigg] \cdot H_{SSB} \tag{2.3.2} SSSB(f)=2Ac[M(ffc)+M(f+fc)]HSSB(2.3.2)

  • M ( f ) M(f) M(f) 为基带信号的傅里叶变换
  • S S S B ( f ) S_{SSB}(f) SSSB(f) 为已调SSB信号的傅里叶变换
  • H S S B ( f ) H_{SSB}(f) HSSB(f) 为滤波器的频域表示
    • 下边带滤波器的频域表示:
      H L S S B ( f ) = 1 2 [ s g n ( f + f c ) − s g n ( f − f c ) ] (2.3.3) H_{LSSB}(f) = \cfrac{1}{2}\bigg[sgn(f + f_c) - sgn(f - f_c)\bigg] \tag{2.3.3} HLSSB(f)=21[sgn(f+fc)sgn(ffc)](2.3.3)
    • 上边带滤波器的频域表示:
      H U S S B ( f ) = 1 − H L S S B ( f ) = 1 2 [ s g n ( f − f c ) − s g n ( f + f c ) ] (2.3.4) \begin{aligned} H_{USSB}(f) &= 1 - H_{LSSB}(f) \\ &= \cfrac{1}{2}\bigg[sgn(f - f_c) - sgn(f + f_c)\bigg] \tag{2.3.4} \end{aligned} HUSSB(f)=1HLSSB(f)=21[sgn(ffc)sgn(f+fc)](2.3.4)

2.3.1.2 相移法调制

模拟幅度调制相干解调系统抗噪声性能仿真分析

图2.3.2 SSB调制器模型(相移法)

时域表示:
s L S S B ( t ) = A c [ m ( t ) cos ⁡ ( 2 π f c t ) + m ^ ( t ) sin ⁡ ( 2 π f c t ) ] (2.3.5) s_{LSSB}(t) = A_c\bigg[m(t)\cos(2\pi f_ct) + \hat{m}(t)\sin(2\pi f_c t)\bigg] \tag{2.3.5} sLSSB(t)=Ac[m(t)cos(2πfct)+m^(t)sin(2πfct)](2.3.5)
s U S S B ( t ) = s D S B ( t ) − s L S S B ( t ) = A c m ( t ) cos ⁡ ( 2 π f c t ) − A c [ m ( t ) cos ⁡ ( 2 π f c t ) + m ^ ( t ) sin ⁡ ( 2 π f c t ) ] = A c [ m ( t ) cos ⁡ ( 2 π f c t ) − m ^ ( t ) sin ⁡ ( 2 π f c t ) ] (2.3.6) \begin{aligned} s_{USSB}(t) &= s_{DSB}(t) - s_{LSSB}(t) \\ &= A_c m(t) \cos(2\pi f_c t) - A_c\bigg[m(t)\cos(2\pi f_ct) + \hat{m}(t)\sin(2\pi f_c t)\bigg] \\ &= A_c \bigg[m(t)\cos(2\pi f_c t) - \hat{m}(t)\sin(2\pi f_c t)\bigg] \\ \end{aligned} \tag{2.3.6} sUSSB(t)=sDSB(t)sLSSB(t)=Acm(t)cos(2πfct)Ac[m(t)cos(2πfct)+m^(t)sin(2πfct)]=Ac[m(t)cos(2πfct)m^(t)sin(2πfct)](2.3.6)

  • m ( t ) m(t) m(t) 为基带信号
  • m ^ ( t ) \hat{m}(t) m^(t) 为基带信号的希尔伯特变换
    m ^ ( t ) = m ( t ) ∗ 1 π t (2.3.7) \hat{m}(t) = m(t) * \cfrac{1}{\pi t} \tag{2.3.7} m^(t)=m(t)πt1(2.3.7)
  • A c A_c Ac 为载波信号的幅值
  • f c f_c fc 为载波信号的频率
  • s D S B ( t ) s_{DSB}(t) sDSB(t) 为双边带(DSB)信号
  • s L S S B ( t ) s_{LSSB}(t) sLSSB(t) 为上边带(LSSB)信号
  • s U S S B ( t ) s_{USSB}(t) sUSSB(t) 为下边带(USSB)信号

频域表示:
S L S S B ( f ) = A c 2 [ M ( f − f c ) + M ( f + f c ) ] + A c 2 [ M ( f + f c ) ⋅ s g n ( f + f c ) − M ( f + f c ) ⋅ s g n ( f − f c ) ] (2.3.8) S_{LSSB}(f) = \cfrac{A_c}{2}\bigg[M(f - f_c) + M(f + f_c)\bigg] + \cfrac{A_c}{2}\bigg[M(f + f_c) \cdot sgn(f + f_c) - M(f + f_c) \cdot sgn(f - f_c)\bigg] \tag{2.3.8} SLSSB(f)=2Ac[M(ffc)+M(f+fc)]+2Ac[M(f+fc)sgn(f+fc)M(f+fc)sgn(ffc)](2.3.8)
S U S S B = S D S B ( f ) − S L S S B ( f ) = A c 2 [ M ( f − f c ) + M ( f + f c ) ] − A c 2 [ M ( f + f c ) ⋅ s g n ( f + f c ) − M ( f + f c ) ⋅ s g n ( f − f c ) ] (2.3.9) \begin{aligned} S_{USSB} &= S_{DSB}(f) - S_{LSSB}(f) \\ &= \cfrac{A_c}{2}\bigg[M(f - f_c) + M(f + f_c)\bigg] - \cfrac{A_c}{2}\bigg[M(f + f_c) \cdot sgn(f + f_c) - M(f + f_c) \cdot sgn(f - f_c)\bigg] \\ \end{aligned} \tag{2.3.9} SUSSB=SDSB(f)SLSSB(f)=2Ac[M(ffc)+M(f+fc)]2Ac[M(f+fc)sgn(f+fc)M(f+fc)sgn(ffc)](2.3.9)

  • S D S B ( f ) S_{DSB}(f) SDSB(f) 为DSB信号的傅里叶变换
  • S L S S B ( f ) S_{LSSB}(f) SLSSB(f) 为LSSB信号的傅里叶变换
  • S U S S B ( f ) S_{USSB}(f) SUSSB(f) 为USSB信号的傅里叶变换

2.3.2 SSB 解调

模拟幅度调制相干解调系统抗噪声性能仿真分析

图2.3.3 SSB相干解调器模型

解调器输入的SSB信号 s ( t ) s(t) s(t):

时域表示:
s ( t ) = A c [ m ( t ) cos ⁡ ( 2 π f c t ) ± m ^ ( t ) sin ⁡ ( 2 π f c t ) ] (2.3.10) s(t) = A_c\bigg[m(t)\cos(2\pi f_ct) \pm \hat{m}(t)\sin(2\pi f_c t)\bigg] \tag{2.3.10} s(t)=Ac[m(t)cos(2πfct)±m^(t)sin(2πfct)](2.3.10)

频域表示:
S ( f ) = A c 2 [ M ( f − f c ) + M ( f + f c ) ] ± A c 2 [ M ( f + f c ) ⋅ s g n ( f + f c ) − M ( f + f c ) ⋅ s g n ( f − f c ) ] (2.3.11) S(f) = \cfrac{A_c}{2}\bigg[M(f - f_c) + M(f + f_c)\bigg] \pm \cfrac{A_c}{2}\bigg[M(f + f_c) \cdot sgn(f + f_c) - M(f + f_c) \cdot sgn(f - f_c)\bigg] \tag{2.3.11} S(f)=2Ac[M(ffc)+M(f+fc)]±2Ac[M(f+fc)sgn(f+fc)M(f+fc)sgn(ffc)](2.3.11)


通过带通滤波器(BPF)的并移频的SSB信号 s d ( t ) s_d(t) sd(t):

时域表示:
s d ( t ) = A c 2 m ( t ) + A c 2 [ m ( t ) cos ⁡ ( 2 ⋅ 2 π f c t ) ± m ^ ( t ) sin ⁡ ( 2 ⋅ 2 π f c t ) ] (2.3.12) s_d(t) = \cfrac{A_c}{2}m(t) + \cfrac{A_c}{2}\bigg[m(t)\cos(2 \cdot 2\pi f_ct) \pm \hat{m}(t)\sin(2 \cdot 2\pi f_c t)\bigg] \tag{2.3.12} sd(t)=2Acm(t)+2Ac[m(t)cos(22πfct)±m^(t)sin(22πfct)](2.3.12)

频域表示:
S d ( f ) = A c 2 M ( f ) + A c 4 [ M ( f − 2 f c ) + M ( f + 2 f c ) ] ± A c 4 [ M ( f + 2 f c ) ⋅ s g n ( f + 2 f c ) − M ( f + 2 f c ) ⋅ s g n ( f − 2 f c ) ] (2.2.13) S_d(f) = \cfrac{A_c}{2}M(f) + \cfrac{A_c}{4}\bigg[M(f - 2 f_c) + M(f + 2 f_c)\bigg] \pm \cfrac{A_c}{4}\bigg[M(f + 2 f_c) \cdot sgn(f + 2 f_c) - M(f + 2 f_c) \cdot sgn(f - 2 f_c)\bigg] \tag{2.2.13} Sd(f)=2AcM(f)+4Ac[M(f2fc)+M(f+2fc)]±4Ac[M(f+2fc)sgn(f+2fc)M(f+2fc)sgn(f2fc)](2.2.13)


通过低通滤波器(LPF)滤除高频成分的解调信号 s o ( t ) s_o(t) so(t):

时域表示:
s o ( t ) = A c 2 m ( t ) (2.2.14) s_o(t) = \cfrac{A_c}{2} m(t) \tag{2.2.14} so(t)=2Acm(t)(2.2.14)

频域表示:
S o ( f ) = A c 2 M ( f ) (2.2.15) S_o(f) = \cfrac{A_c}{2}M(f) \tag{2.2.15} So(f)=2AcM(f)(2.2.15)

所滤除的高频成分 s h ( t ) s_h(t) sh(t):

时域表示:
s h ( t ) = A c 2 [ m ( t ) cos ⁡ ( 2 ⋅ 2 π f c t ) ± m ^ ( t ) sin ⁡ ( 2 ⋅ 2 π f c t ) ] (2.2.16) s_h(t) = \cfrac{A_c}{2}\bigg[m(t)\cos(2 \cdot 2\pi f_ct) \pm \hat{m}(t)\sin(2 \cdot 2\pi f_c t)\bigg] \tag{2.2.16} sh(t)=2Ac[m(t)cos(22πfct)±m^(t)sin(22πfct)](2.2.16)

频域表示:
S h ( f ) = A c 4 [ M ( f − 2 f c ) + M ( f + 2 f c ) ] ± A c 4 [ M ( f + 2 f c ) ⋅ s g n ( f + 2 f c ) − M ( f + 2 f c ) ⋅ s g n ( f − 2 f c ) ] (2.2.17) S_h(f) = \cfrac{A_c}{4}\bigg[M(f - 2 f_c) + M(f + 2 f_c)\bigg] \pm \cfrac{A_c}{4}\bigg[M(f + 2 f_c) \cdot sgn(f + 2 f_c) - M(f + 2 f_c) \cdot sgn(f - 2 f_c)\bigg] \tag{2.2.17} Sh(f)=4Ac[M(f2fc)+M(f+2fc)]±4Ac[M(f+2fc)sgn(f+2fc)M(f+2fc)sgn(f2fc)](2.2.17)


3. 抗干扰性能理论分析

模拟幅度调制相干解调系统抗噪声性能仿真分析

图3.1 相干解调器模型

3.1 加性高斯白噪声(AWGN)通过相干解调器

由带通AWGN的解析信号
n ~ ( t ) = n c ( t ) + j n s ( t ) (3.1.1) \tilde{n}(t) = n_c(t) + j n_s(t) \tag{3.1.1} n~(t)=nc(t)+jns(t)(3.1.1)

可得带通AWGN的同相-正交形式:
n ( t ) = R e { n ~ ( t ) e j 2 π f c t } = R e { [ n c ( t ) + j n s ( t ) ] ⋅ [ cos ⁡ ( 2 π f c t ) + j sin ⁡ ( 2 π f c t ) ] } = n c ( t ) cos ⁡ ( 2 π f c t ) − n s ( t ) sin ⁡ ( 2 π f c t ) (3.1.2) \begin{aligned} n(t) &= Re\{\tilde{n}(t) e^{j 2\pi f_c t}\} \\ &= Re\{[n_c(t) + j n_s(t)] \cdot [\cos(2\pi f_c t) + j\sin(2\pi f_c t)]\} \\ &= n_c(t)\cos(2\pi f_c t) - n_s(t)\sin(2\pi f_c t) \\ \end{aligned} \tag{3.1.2} n(t)=Re{n~(t)ej2πfct}=Re{[nc(t)+jns(t)][cos(2πfct)+jsin(2πfct)]}=nc(t)cos(2πfct)ns(t)sin(2πfct)(3.1.2)

带通AWGN通过乘法器移频后
n d ( t ) = n ( t ) ⋅ A c cos ⁡ ( 2 π f c t ) = n c ( t ) cos ⁡ 2 ( 2 π f c t ) − n s ( t ) sin ⁡ ( 2 π f c t ) cos ⁡ ( 2 π f c t ) = 1 2 n c ( t ) + 1 2 [ n c ( t ) cos ⁡ ( 2 ⋅ 2 π f c t ) − n s ( t ) sin ⁡ ( 2 ⋅ 2 π f c t ) ] (3.1.3) \begin{aligned} n_d(t) &= n(t) \cdot A_c \cos(2\pi f_c t) \\ &= n_c(t)\cos^2(2\pi f_c t) - n_s(t)\sin(2\pi f_c t)\cos(2\pi f_c t) \\ &= \cfrac{1}{2}n_c(t) + \cfrac{1}{2}\bigg[n_c(t)\cos(2 \cdot 2\pi f_c t) - n_s(t)\sin(2 \cdot 2\pi f_c t)\bigg] \\ \end{aligned} \tag{3.1.3} nd(t)=n(t)Accos(2πfct)=nc(t)cos2(2πfct)ns(t)sin(2πfct)cos(2πfct)=21nc(t)+21[nc(t)cos(22πfct)ns(t)sin(22πfct)](3.1.3)

相干解调器输出的AWGN成分:
n o ( t ) = 1 2 n c ( t ) (3.1.4) n_o(t) = \cfrac{1}{2}n_c(t) \tag{3.1.4} no(t)=21nc(t)(3.1.4)

为方便分析, 假设单边带信号带通滤波器的通带带宽为 B B B, 双边带信号带通滤波器的通带带宽为 2 B 2B 2B, AWGN的单边功率谱密度 P N 单 ( f ) = n 0 P_{N单}(f) = n_0 PN(f)=n0, AWGN的双边功率谱密度 P N 双 = n 0 2 P_{N双} = \cfrac{n_0}{2} PN=2n0

双边带调制时输入相干解调器的带通AWGN的功率
N i n 双 = E [ n 2 ( t ) ] = n 0 2 ⋅ 2 ⋅ 2 B = 2 n 0 B (3.1.5) N_{in双} = E[n^2(t)] = \cfrac{n_0}{2} \cdot 2 \cdot 2B = 2 n_0 B \tag{3.1.5} Nin=E[n2(t)]=2n022B=2n0B(3.1.5)

单边带调制时输入相干解调器的带通AWGN的功率
N i n 单 = E [ n 2 ( t ) ] = n 0 2 ⋅ 2 B = n 0 B (3.1.6) N_{in单} = E[n^2(t)] = \cfrac{n_0}{2} \cdot 2 B = n_0 B \tag{3.1.6} Nin=E[n2(t)]=2n02B=n0B(3.1.6)

又因为
n ( t ) ∼ n c ( t ) ∼ n s ( t ) ∼ N ( m 0 , σ 0 2 ) (3.1.7) n(t) \sim n_c(t) \sim n_s(t) \sim N(m_0, \sigma_0^2) \tag{3.1.7} n(t)nc(t)ns(t)N(m0,σ02)(3.1.7)

综合AWGN的特性后可得
{ E [ n ( t ) ] = E [ n c ( t ) ] = E [ n s ( t ) ] = m 0 = 0 E [ n 2 ( t ) ] = E [ n c 2 ( t ) ] = E [ n s 2 ( t ) ] = σ 0 2 (3.1.8) \begin{cases} E[n(t)] &= E[n_c(t)] &= E[n_s(t)] &= m_0 &= 0 \\ E[n^2(t)] &= E[n_c^2(t)] &= E[n_s^2(t)] &= \sigma_0^2 \\ \end{cases} \tag{3.1.8} {E[n(t)]E[n2(t)]=E[nc(t)]=E[nc2(t)]=E[ns(t)]=E[ns2(t)]=m0=σ02=0(3.1.8)

再结合公式 (3.1.4) 可得输出相干解调器得带通AWGN功率

双边带调制时输出相干解调器的带通AWGN的功率:
N o u t 双 = E [ n o 2 ( t ) ] = 1 4 E [ n c 2 ( t ) ] = 1 4 E [ n 2 ( t ) ] = 1 4 N i n 双 = 1 2 n 0 B (3.1.9) N_{out双} = E[n_o^2(t)] = \cfrac{1}{4}E[n_c^2(t)] = \cfrac{1}{4}E[n^2(t)] = \cfrac{1}{4}N_{in双} = \cfrac{1}{2}n_0 B \tag{3.1.9} Nout=E[no2(t)]=41E[nc2(t)]=41E[n2(t)]=41Nin=21n0B(3.1.9)

单边带调制时输出相干解调器的带通AWGN的功率:
N o u t 单 = E [ n o 2 ( t ) ] = 1 4 E [ n c 2 ( t ) ] = 1 4 E [ n 2 ( t ) ] = 1 4 N i n 单 = 1 4 n 0 B (3.1.10) N_{out单} = E[n_o^2(t)] = \cfrac{1}{4}E[n_c^2(t)] = \cfrac{1}{4}E[n^2(t)] = \cfrac{1}{4}N_{in单} = \cfrac{1}{4}n_0 B \tag{3.1.10} Nout=E[no2(t)]=41E[nc2(t)]=41E[n2(t)]=41Nin=41n0B(3.1.10)


3.2 常规调幅调制解调(AM)

(2.1.3) 与归一化功率的定义
P = < w 2 ( t ) > (3.2.1) P = \big<w^2(t)\big> \tag{3.2.1} P=w2(t)(3.2.1)

可得输入相干解调器的AM信号的功率

S i n = < s 2 ( t ) > = A c 2 ( 1 + P m ) 2 (3.2.2) S_{in} = \big<s^2(t)\big> = \cfrac{A_c^2 (1 + P_m)}{2} \tag{3.2.2} Sin=s2(t)=2Ac2(1+Pm)(3.2.2)

其中 P m P_m Pm 为基带信号 m ( t ) m(t) m(t) 的归一化平均功率
P m = < m 2 ( t ) > (3.2.3) P_m = \big<m^2(t)\big> \tag{3.2.3} Pm=m2(t)(3.2.3)

再结合公式 (2.1.7) 可得输出相干解调器的AM信号的功率

S o u t = < s o 2 ( t ) > = A c 2 4 < ( 1 + m ( t ) ) 2 > = A c 2 ⋅ ( 1 + P m ) 4 (3.2.4) S_{out} = \big<s_o^2(t)\big> = \cfrac{A_c^2}{4}\bigg<\big(1 + m(t)\big)^2\bigg> = \cfrac{A_c^2 \cdot(1 + P_m)}{4} \tag{3.2.4} Sout=so2(t)=4Ac2(1+m(t))2=4Ac2(1+Pm)(3.2.4)

结合公式 (3.2.2) 与公式 (3.1.5) 可得到相干解调器输入信号的信噪比

S N R i n = S i n N i n 双 = A c 2 2 ( 1 + P m ) 2 n 0 B = A c 2 ( 1 + P m ) 4 n 0 B (3.2.5) SNR_{in} = \cfrac{S_{in}}{N_{in双}} = \cfrac{\cfrac{A_c^2}{2}(1 + P_m)}{2 n_0 B} = \cfrac{A_c^2(1 + P_m)}{4 n_0 B} \tag{3.2.5} SNRin=NinSin=2n0B2Ac2(1+Pm)=4n0BAc2(1+Pm)(3.2.5)

结合公式 (3.2.4) 与公式 (3.1.10) 可得到相干解调器输出信号的信噪比

S N R o u t = S o u t N o u t = A c 2 ⋅ ( 1 + P m ) 4 1 2 n 0 B = A c 2 ⋅ ( 1 + P m ) 2 n 0 B (3.2.6) SNR_{out} = \cfrac{S_{out}}{N_{out}} = \cfrac{\cfrac{A_c^2 \cdot(1 + P_m)}{4}}{\cfrac{1}{2}n_0 B} = \cfrac{A_c^2 \cdot(1 + P_m)}{2 n_0 B} \tag{3.2.6} SNRout=NoutSout=21n0B4Ac2(1+Pm)=2n0BAc2(1+Pm)(3.2.6)

结合公式 (3.2.5) 与公式 (3.2.6) 可得到相干解调器关于AM信号的信噪比增益

G A M = S N R o u t S N R i n = 2 ⋅ ( 1 + P m ) 1 + P m = 2 (3.2.7) G_{AM} = \cfrac{SNR_{out}}{SNR_{in}} = \cfrac{2 \cdot(1 + P_m)}{1 + P_m} = 2 \tag{3.2.7} GAM=SNRinSNRout=1+Pm2(1+Pm)=2(3.2.7)


3.3 抑制载波双边带调制解调(DSB-SC)

(2.2.1) 与归一化功率的定义
P = < w 2 ( t ) > (3.3.1) P = \big<w^2(t)\big> \tag{3.3.1} P=w2(t)(3.3.1)

可得输入相干解调器的DSB-SC信号的功率

S i n = < s 2 ( t ) > = A c 2 P m 2 (3.3.2) S_{in} = \big<s^2(t)\big> = \cfrac{A_c^2 P_m}{2} \tag{3.3.2} Sin=s2(t)=2Ac2Pm(3.3.2)

其中 P m P_m Pm 为基带信号 m ( t ) m(t) m(t) 的归一化平均功率
P m = < m 2 ( t ) > (3.3.3) P_m = \big<m^2(t)\big> \tag{3.3.3} Pm=m2(t)(3.3.3)

再结合公式 (2.2.7) 可得输出相干解调器的DSB-SC信号的功率

S o u t = < s o 2 ( t ) > = A c 2 4 < m 2 ( t ) > = A c 2 P m 4 (3.3.4) S_{out} = \big<s_o^2(t)\big> = \cfrac{A_c^2}{4}\big<m^2(t)\big> = \cfrac{A_c^2 P _m}{4} \tag{3.3.4} Sout=so2(t)=4Ac2m2(t)=4Ac2Pm(3.3.4)

结合公式 (3.3.2) 与公式 (3.1.5) 可得到相干解调器输入信号的信噪比

S N R i n = S i n N i n = A c 2 2 P m 2 n 0 B = A c 2 P m 4 n 0 B (3.3.5) SNR_{in} = \cfrac{S_{in}}{N_{in}} = \cfrac{\cfrac{A_c^2}{2}P_m}{2 n_0 B} = \cfrac{A_c^2 P_m}{4 n_0 B} \tag{3.3.5} SNRin=NinSin=2n0B2Ac2Pm=4n0BAc2Pm(3.3.5)

结合公式 (3.3.4) 与公式 (3.1.10) 可得到相干解调器输出信号的信噪比

S N R o u t = S o u t N o u t = A c 2 P m 4 1 2 n 0 B = A c 2 P m 2 n 0 B (3.3.6) SNR_{out} = \cfrac{S_{out}}{N_{out}} = \cfrac{\cfrac{A_c^2 P _m}{4}}{\cfrac{1}{2}n_0 B} = \cfrac{A_c^2 P_m}{2 n_0 B} \tag{3.3.6} SNRout=NoutSout=21n0B4Ac2Pm=2n0BAc2Pm(3.3.6)

结合公式 (3.3.5) 与公式 (3.3.6) 可得到相干解调器关于DSB-SC信号的信噪比增益

G D S B = S N R o u t S N R i n = 2 (3.3.7) G_{DSB} = \cfrac{SNR_{out}}{SNR_{in}} = 2 \tag{3.3.7} GDSB=SNRinSNRout=2(3.3.7)


3.4 单边带调制解调(SSB)

(2.3.10) 与归一化功率的定义
P = < w 2 ( t ) > (3.4.1) P = \big<w^2(t)\big> \tag{3.4.1} P=w2(t)(3.4.1)

可得输入相干解调器的DSB-SC信号的功率

S i n = < s 2 ( t ) > = A c 2 P m (3.4.2) S_{in} = \big<s^2(t)\big> = A_c^2 P_m \tag{3.4.2} Sin=s2(t)=Ac2Pm(3.4.2)

其中 P m P_m Pm 为基带信号 m ( t ) m(t) m(t) 的归一化平均功率
P m = < m 2 ( t ) > (3.4.3) P_m = \big<m^2(t)\big> \tag{3.4.3} Pm=m2(t)(3.4.3)

再结合公式 (2.3.14) 可得输出相干解调器的DSB-SC信号的功率

S o u t = < s o 2 ( t ) > = A c 2 4 < m 2 ( t ) > = A c 2 P m 4 (3.4.4) S_{out} = \big<s_o^2(t)\big> = \cfrac{A_c^2}{4}\big<m^2(t)\big> = \cfrac{A_c^2 P _m}{4} \tag{3.4.4} Sout=so2(t)=4Ac2m2(t)=4Ac2Pm(3.4.4)

结合公式 (3.4.2) 与公式 (3.1.6) 可得到相干解调器输入信号的信噪比

S N R i n = S i n N i n = A c 2 P m n 0 B = A c 2 P m n 0 B (3.4.5) SNR_{in} = \cfrac{S_{in}}{N_{in}} = \cfrac{A_c^2 P_m}{n_0 B} = \cfrac{A_c^2 P_m}{n_0 B} \tag{3.4.5} SNRin=NinSin=n0BAc2Pm=n0BAc2Pm(3.4.5)

结合公式 (3.4.4) 与公式 (3.1.11) 可得到相干解调器输出信号的信噪比

S N R o u t = S o u t N o u t = A c 2 P m 4 1 4 n 0 B = A c 2 P m n 0 B (3.4.6) SNR_{out} = \cfrac{S_{out}}{N_{out}} = \cfrac{\cfrac{A_c^2 P _m}{4}}{\cfrac{1}{4}n_0 B} = \cfrac{A_c^2 P_m}{n_0 B} \tag{3.4.6} SNRout=NoutSout=41n0B4Ac2Pm=n0BAc2Pm(3.4.6)

结合公式 (3.4.5) 与公式 (3.4.6) 可得到相干解调器关于DSB-SC信号的信噪比增益

G D S B = S N R o u t S N R i n = 1 (3.4.7) G_{DSB} = \cfrac{SNR_{out}}{SNR_{in}} = 1 \tag{3.4.7} GDSB=SNRinSNRout=1(3.4.7)


4. 仿真实现与仿真结果

4.1 常规调幅调制解调仿真(AM)

仿真程序见 附录7.2 AM调制解调仿真程序 (AM.py)


4.1.1 基带信号 m ( t ) m(t) m(t), 载波信号 c ( t ) c(t) c(t) 与 AM调制信号 s ( t ) s(t) s(t) 时域波形

模拟幅度调制相干解调系统抗噪声性能仿真分析

图4.1.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) 与 移频信号 s d ( t ) s_d(t) sd(t) 时域波形

模拟幅度调制相干解调系统抗噪声性能仿真分析

图4.1.5 AM调制信号, 同步载波信号与移频信号时域波形

4.1.6 移频信号 s d ( t ) s_d(t) sd(t) 频域波形

模拟幅度调制相干解调系统抗噪声性能仿真分析

图4.1.6 移频信号频域波形

4.1.7 解调信号 m o ( t ) m_o(t) mo(t) 时域波形

模拟幅度调制相干解调系统抗噪声性能仿真分析

图4.1.7 解调信号时域波形

4.1.8 解调信号 m o ( t ) m_o(t) mo(t) 频域波形

模拟幅度调制相干解调系统抗噪声性能仿真分析

图4.1.8 解调信号频域波形

4.1.9 AWGN噪声 n i ( t ) n_i(t) ni(t), 带通AWGN噪声 n ( t ) n(t) n(t), 移频带通AWGN噪声 n d ( t ) n_d(t) nd(t) 与输出AWGN噪声 n o ( t ) n_o(t) no(t) 时域波形

模拟幅度调制相干解调系统抗噪声性能仿真分析

图4.1.9 相干解调器中噪声的时域波形

4.1.10 AWGN噪声 n i ( t ) n_i(t) ni(t), 带通AWGN噪声 n ( t ) n(t) n(t), 移频带通AWGN噪声 n d ( t ) n_d(t) nd(t) 与输出AWGN噪声 n o ( t ) n_o(t) no(t) 功率谱密度波形

模拟幅度调制相干解调系统抗噪声性能仿真分析

图4.1.10 相干解调器中噪声的功率谱

4.1.11 功率, 信噪比与信噪比增益计算与分析

表4.1 AM调制信号相干解调时功率与信噪比
信号特征 理论值 仿真值 相对误差
输入信号功率 S i n S_{in} Sin 5.625000e-01 5.641479e-01 2.92E-03
输入噪声功率 N i n N_{in} Nin 1.103856e-02 1.200238e-02 8.03E-02
输入信噪比 S N R i n SNR_{in} SNRin 5.095772e+01 4.700301e+01 8.41E-02
输出信号功率 S o u t S_{out} Sout 2.812500e-01 2.901258e-01 3.06E-02
输出噪声功率 N o u t N_{out} Nout 2.759640e-03 3.321398e-03 1.69E-01
输出信噪比 S N R o u t SNR_{out} SNRout 1.019154e+02 8.735052e+01 1.67E-01
信噪比增益 G G G 2.000000e+00 1.858403e+00 7.62E-02
  • 注: 通过BPF前信号的信噪比为6dB.

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

误差产生原因分析:

  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) 与 移频信号 s d ( t ) s_d(t) sd(t) 时域波形

模拟幅度调制相干解调系统抗噪声性能仿真分析

图4.2.5 DSB-SC调制信号, 同步载波信号与移频信号时域波形

4.2.6 移频信号 s d ( t ) s_d(t) sd(t) 频域波形

模拟幅度调制相干解调系统抗噪声性能仿真分析

图4.2.6 移频信号频域波形

4.2.7 解调信号 m o ( t ) m_o(t) mo(t) 时域波形

模拟幅度调制相干解调系统抗噪声性能仿真分析

图4.2.7 解调信号时域波形

4.2.8 解调信号 m o ( t ) m_o(t) mo(t) 频域波形

模拟幅度调制相干解调系统抗噪声性能仿真分析

图4.2.8 解调信号频域波形

4.2.9 AWGN噪声 n i ( t ) n_i(t) ni(t), 带通AWGN噪声 n ( t ) n(t) n(t), 移频带通AWGN噪声 n d ( t ) n_d(t) nd(t) 与输出AWGN噪声 n o ( t ) n_o(t) no(t) 时域波形

模拟幅度调制相干解调系统抗噪声性能仿真分析

图4.2.9 相干解调器中噪声的时域波形

4.2.10 AWGN噪声 n i ( t ) n_i(t) ni(t), 带通AWGN噪声 n ( t ) n(t) n(t), 移频带通AWGN噪声 n d ( t ) n_d(t) nd(t) 与输出AWGN噪声 n o ( t ) n_o(t) no(t) 功率谱密度波形

模拟幅度调制相干解调系统抗噪声性能仿真分析

图4.2.10 相干解调器中噪声的功率谱

4.2.11 功率, 信噪比与信噪比增益计算与分析

表4.2 DSB-SC调制信号相干解调时功率与信噪比
信号特征 理论值 仿真值 相对误差
输入信号功率 S i n S_{in} Sin 2.500000e-01 2.507324e-01 2.92E-03
输入噪声功率 N i n N_{in} Nin 4.906028e-03 5.334388e-03 8.03E-02
输入信噪比 S N R i n SNR_{in} SNRin 5.095772e+01 4.700304e+01 8.41E-02
输出信号功率 S o u t S_{out} Sout 1.250000e-01 1.269980e-01 1.57E-02
输出噪声功率 N o u t N_{out} Nout 1.226507e-03 1.476175e-03 1.69E-01
输出信噪比 S N R o u t SNR_{out} SNRout 1.019153e+02 8.603178e+01 1.85E-01
信噪比增益 G G G 2.000000e+00 1.830345e+00 9.27E-02
  • 注: 通过BPF前信号的信噪比为6dB.

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

误差产生原因分析:

  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) 与 移频信号 s d ( t ) s_d(t) sd(t) 时域波形

模拟幅度调制相干解调系统抗噪声性能仿真分析

图4.3.5 USSB调制信号, 同步载波信号与移频信号时域波形

4.3.6 移频信号 s d ( t ) s_d(t) sd(t) 频域波形

模拟幅度调制相干解调系统抗噪声性能仿真分析

图4.3.6 移频信号频域波形

4.3.7 解调信号 m o ( t ) m_o(t) mo(t) 时域波形

模拟幅度调制相干解调系统抗噪声性能仿真分析

图4.3.7 解调信号时域波形

4.3.8 解调信号 m o ( t ) m_o(t) mo(t) 频域波形

模拟幅度调制相干解调系统抗噪声性能仿真分析

图4.3.8 解调信号频域波形

4.3.9 AWGN噪声 n i ( t ) n_i(t) ni(t), 带通AWGN噪声 n ( t ) n(t) n(t), 移频带通AWGN噪声 n d ( t ) n_d(t) nd(t) 与输出AWGN噪声 n o ( t ) n_o(t) no(t) 时域波形

模拟幅度调制相干解调系统抗噪声性能仿真分析

图4.3.9 相干解调器中噪声的时域波形

4.3.10 AWGN噪声 n i ( t ) n_i(t) ni(t), 带通AWGN噪声 n ( t ) n(t) n(t), 移频带通AWGN噪声 n d ( t ) n_d(t) nd(t) 与输出AWGN噪声 n o ( t ) n_o(t) no(t) 功率谱密度波形

模拟幅度调制相干解调系统抗噪声性能仿真分析

图4.3.10 相干解调器中噪声的功率谱

4.3.11 功率, 信噪比与信噪比增益计算与误差分析

表4.3 USSB调制信号相干解调时功率与信噪比
信号特征 理论值 仿真值 相对误差
输入信号功率 S i n S_{in} Sin 5.000000e-01 5.009397e-01 1.88E-03
输入噪声功率 N i n N_{in} Nin 4.906028e-03 4.968031e-03 1.25E-02
输入信噪比 S N R i n SNR_{in} SNRin 1.019154e+02 1.008327e+02 1.07E-02
输出信号功率 S o u t S_{out} Sout 1.250000e-01 1.265897e-01 1.26E-02
输出噪声功率 N o u t N_{out} Nout 1.226507e-03 1.134983e-03 8.06E-02
输出信噪比 S N R o u t SNR_{out} SNRout 1.019153e+02 1.115344e+02 8.62E-02
信噪比增益 G G G 1.000000e+00 1.106134e+00 9.60E-02
  • 注: 通过BPF前信号的信噪比为6dB.

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

误差产生原因分析:

  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) 与 移频信号 s d ( t ) s_d(t) sd(t) 时域波形

模拟幅度调制相干解调系统抗噪声性能仿真分析

图4.4.5 LSSB调制信号, 同步载波信号与移频信号时域波形

4.4.6 移频信号 s d ( t ) s_d(t) sd(t) 频域波形

模拟幅度调制相干解调系统抗噪声性能仿真分析

图4.4.6 移频信号频域波形

4.4.7 解调信号 m o ( t ) m_o(t) mo(t) 时域波形

模拟幅度调制相干解调系统抗噪声性能仿真分析

图4.4.7 解调信号时域波形

4.4.8 解调信号 m o ( t ) m_o(t) mo(t) 频域波形

模拟幅度调制相干解调系统抗噪声性能仿真分析

图4.4.8 解调信号频域波形

4.4.9 AWGN噪声 n i ( t ) n_i(t) ni(t), 带通AWGN噪声 n ( t ) n(t) n(t), 移频带通AWGN噪声 n d ( t ) n_d(t) nd(t) 与输出AWGN噪声 n o ( t ) n_o(t) no(t) 时域波形

模拟幅度调制相干解调系统抗噪声性能仿真分析

图4.4.9 相干解调器中噪声的时域波形

4.4.10 AWGN噪声 n i ( t ) n_i(t) ni(t), 带通AWGN噪声 n ( t ) n(t) n(t), 移频带通AWGN噪声 n d ( t ) n_d(t) nd(t) 与输出AWGN噪声 n o ( t ) n_o(t) no(t) 功率谱密度波形

模拟幅度调制相干解调系统抗噪声性能仿真分析

图4.4.10 相干解调器中噪声的功率谱

4.4.11 功率, 信噪比与信噪比增益计算与误差分析

表4.3 LSSB调制信号相干解调时功率与信噪比
信号特征 理论值 仿真值 相对误差
输入信号功率 S i n S_{in} Sin 5.000000e-01 5.010163e-01 2.03E-03
输入噪声功率 N i n N_{in} Nin 4.906028e-03 5.601459e-03 1.24E-01
输入信噪比 S N R i n SNR_{in} SNRin 1.019154e+02 8.944388e+01 1.39E-01
输出信号功率 S o u t S_{out} Sout 1.250000e-01 1.274379e-01 1.91E-02
输出噪声功率 N o u t N_{out} Nout 1.226507e-03 1.353658e-03 9.39E-02
输出信噪比 S N R o u t SNR_{out} SNRout 1.019153e+02 9.414334e+01 8.26E-02
信噪比增益 G G G 1.000000e+00 1.052541e+00 4.99E-02
  • 注: 通过BPF前信号的信噪比为6dB.

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

误差产生原因分析:

  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) A c [ 1 + m ( t ) ] cos ⁡ ( 2 π f c t ) A_c[1 + m(t)]\cos(2\pi f_c t) Ac[1+m(t)]cos(2πfct) A c m ( t ) cos ⁡ ( 2 π f c t ) A_cm(t)\cos(2\pi f_c t) Acm(t)cos(2πfct) A c [ m ( t ) cos ⁡ ( 2 π f c t ) − m ^ ( t ) sin ⁡ ( 2 π f c t ) ] A_c\bigg[m(t)\cos(2\pi f_ct) - \hat{m}(t)\sin(2\pi f_c t)\bigg] Ac[m(t)cos(2πfct)m^(t)sin(2πfct)] A c [ m ( t ) cos ⁡ ( 2 π f c t ) + m ^ ( t ) sin ⁡ ( 2 π f c t ) ] A_c\bigg[m(t)\cos(2\pi f_ct) + \hat{m}(t)\sin(2\pi f_c t)\bigg] Ac[m(t)cos(2πfct)+m^(t)sin(2πfct)]
移频后调制信号 s d ( t ) s_d(t) sd(t) A c 2 [ 1 + m ( t ) ] ⋅ [ 1 + cos ⁡ ( 2 ⋅ 2 π f c t ) ] \cfrac{A_c}{2}\bigg[1 + m(t)\bigg]\cdot\bigg[1 + \cos(2 \cdot 2\pi f_c t)\bigg] 2Ac[1+m(t)][1+cos(22πfct)] A c 2 m ( t ) ⋅ [ 1 + cos ⁡ ( 2 ⋅ 2 π f c t ) ] \cfrac{A_c}{2}m(t) \cdot \bigg[1 + \cos(2 \cdot 2\pi f_c t)\bigg] 2Acm(t)[1+cos(22πfct)] A c 2 m ( t ) + A c 2 [ m ( t ) cos ⁡ ( 2 ⋅ 2 π f c t ) − m ^ ( t ) sin ⁡ ( 2 ⋅ 2 π f c t ) ] \cfrac{A_c}{2}m(t) + \cfrac{A_c}{2}\bigg[m(t)\cos(2 \cdot 2\pi f_ct) - \hat{m}(t)\sin(2 \cdot 2\pi f_c t)\bigg] 2Acm(t)+2Ac[m(t)cos(22πfct)m^(t)sin(22πfct)] A c 2 m ( t ) + A c 2 [ m ( t ) cos ⁡ ( 2 ⋅ 2 π f c t ) + m ^ ( t ) sin ⁡ ( 2 ⋅ 2 π f c t ) ] \cfrac{A_c}{2}m(t) + \cfrac{A_c}{2}\bigg[m(t)\cos(2 \cdot 2\pi f_ct) + \hat{m}(t)\sin(2 \cdot 2\pi f_c t)\bigg] 2Acm(t)+2Ac[m(t)cos(22πfct)+m^(t)sin(22πfct)]
解调信号 m o ( t ) m_o(t) mo(t) A c 2 m ( t ) \cfrac{A_c}{2}m(t) 2Acm(t) A c 2 m ( t ) \cfrac{A_c}{2} m(t) 2Acm(t) A c 2 m ( t ) \cfrac{A_c}{2} m(t) 2Acm(t) A c 2 m ( t ) \cfrac{A_c}{2} m(t) 2Acm(t)
  • 注: AM调制信号解调后未消除直流分量
表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) A c 2 [ δ ( f − f c ) + δ ( f + f c ) ] + A c 2 [ M ( f − f c ) + M ( f + f c ) ] \cfrac{A_c}{2}\bigg[\delta(f - f_c) + \delta(f + f_c)\bigg] + \cfrac{A_c}{2}\bigg[M(f - f_c) + M(f + f_c)\bigg] 2Ac[δ(ffc)+δ(f+fc)]+2Ac[M(ffc)+M(f+fc)] A c 2 [ M ( f − f c ) + M ( f + f c ) ] \cfrac{A_c}{2}\bigg[M(f - f_c) + M(f + f_c)\bigg] 2Ac[M(ffc)+M(f+fc)] A c 2 [ M ( f − f c ) + M ( f + f c ) ] − A c 2 [ M ( f + f c ) ⋅ s g n ( f + f c ) − M ( f + f c ) ⋅ s g n ( f − f c ) ] \cfrac{A_c}{2}\bigg[M(f - f_c) + M(f + f_c)\bigg] - \cfrac{A_c}{2}\bigg[M(f + f_c) \cdot sgn(f + f_c) - M(f + f_c) \cdot sgn(f - f_c)\bigg] 2Ac[M(ffc)+M(f+fc)]2Ac[M(f+fc)sgn(f+fc)M(f+fc)sgn(ffc)] A c 2 [ M ( f − f c ) + M ( f + f c ) ] + A c 2 [ M ( f + f c ) ⋅ s g n ( f + f c ) − M ( f + f c ) ⋅ s g n ( f − f c ) ] \cfrac{A_c}{2}\bigg[M(f - f_c) + M(f + f_c)\bigg] + \cfrac{A_c}{2}\bigg[M(f + f_c) \cdot sgn(f + f_c) - M(f + f_c) \cdot sgn(f - f_c)\bigg] 2Ac[M(ffc)+M(f+fc)]+2Ac[M(f+fc)sgn(f+fc)M(f+fc)sgn(ffc)]
移频后调制信号频域表达式 S d ( f ) S_d(f) Sd(f) A c 2 [ M ( f ) + δ ( f ) ] + A c 4 [ M ( f − 2 f c ) + M ( f + 2 f c ) + δ ( f − 2 f c ) + δ ( f + 2 f c ) ] \cfrac{A_c}{2}\bigg[M(f) + \delta(f)\bigg] + \cfrac{A_c}{4}\bigg[M(f - 2f_c) + M(f + 2f_c) + \delta(f - 2f_c) + \delta(f + 2f_c)\bigg] 2Ac[M(f)+δ(f)]+4Ac[M(f2fc)+M(f+2fc)+δ(f2fc)+δ(f+2fc)] A c 2 M ( f ) + A c 4 [ M ( f − 2 f c ) + M ( f + 2 f c ) ] \cfrac{A_c}{2}M(f) + \cfrac{A_c}{4}\bigg[M(f - 2f_c) + M(f + 2f_c)\bigg] 2AcM(f)+4Ac[M(f2fc)+M(f+2fc)] A c 2 M ( f ) + A c 4 [ M ( f − 2 f c ) + M ( f + 2 f c ) ] − A c 4 [ M ( f + 2 f c ) ⋅ s g n ( f + 2 f c ) − M ( f + 2 f c ) ⋅ s g n ( f − 2 f c ) ] \cfrac{A_c}{2}M(f) + \cfrac{A_c}{4}\bigg[M(f - 2 f_c) + M(f + 2 f_c)\bigg] - \cfrac{A_c}{4}\bigg[M(f + 2 f_c) \cdot sgn(f + 2 f_c) - M(f + 2 f_c) \cdot sgn(f - 2 f_c)\bigg] 2AcM(f)+4Ac[M(f2fc)+M(f+2fc)]4Ac[M(f+2fc)sgn(f+2fc)M(f+2fc)sgn(f2fc)] A c 2 M ( f ) + A c 4 [ M ( f − 2 f c ) + M ( f + 2 f c ) ] + A c 4 [ M ( f + 2 f c ) ⋅ s g n ( f + 2 f c ) − M ( f + 2 f c ) ⋅ s g n ( f − 2 f c ) ] \cfrac{A_c}{2}M(f) + \cfrac{A_c}{4}\bigg[M(f - 2 f_c) + M(f + 2 f_c)\bigg] + \cfrac{A_c}{4}\bigg[M(f + 2 f_c) \cdot sgn(f + 2 f_c) - M(f + 2 f_c) \cdot sgn(f - 2 f_c)\bigg] 2AcM(f)+4Ac[M(f2fc)+M(f+2fc)]+4Ac[M(f+2fc)sgn(f+2fc)M(f+2fc)sgn(f2fc)]
解调信号频域表达式 M o ( f ) M_o(f) Mo(f) A c 2 δ ( f ) + A c 2 M ( f ) \cfrac{A_c}{2}\delta(f) + \cfrac{A_c}{2}M(f) 2Acδ(f)+2AcM(f) A c 2 M ( f ) \cfrac{A_c}{2}M(f) 2AcM(f) A c 2 M ( f ) \cfrac{A_c}{2}M(f) 2AcM(f) A c 2 M ( f ) \cfrac{A_c}{2}M(f) 2AcM(f)
  • 注: AM调制信号解调后未消除直流分量
表5.3 相干解调器解调不同调制信号的抗噪能力对比
信号特征 AM DSB-SC SSB
带宽 B W BW BW 2 B 2B 2B 2 B 2B 2B B B B
输入信号功率 S i n S_{in} Sin A c 2 ( 1 + P m ) 2 \cfrac{A_c^2 (1 + P_m)}{2} 2Ac2(1+Pm) A c 2 P m 2 \cfrac{A_c^2 P_m}{2} 2Ac2Pm A c 2 P m A_c^2 P_m Ac2Pm
输入噪声功率 N i n N_{in} Nin 2 n 0 B 2 n_0 B 2n0B 2 n 0 B 2 n_0 B 2n0B n 0 B n_0 B n0B
输入信噪比 S N R i n SNR_{in} SNRin A c 2 ( 1 + P m ) 4 n 0 B \cfrac{A_c^2(1 + P_m)}{4 n_0 B} 4n0BAc2(1+Pm) A c 2 P m 4 n 0 B \cfrac{A_c^2 P_m}{4 n_0 B} 4n0BAc2Pm A c 2 P m n 0 B \cfrac{A_c^2 P_m}{n_0 B} n0BAc2Pm
输出信号功率 S o u t S_{out} Sout A c 2 ⋅ ( 1 + P m ) 4 \cfrac{A_c^2 \cdot(1 + P_m)}{4} 4Ac2(1+Pm) A c 2 P m 4 \cfrac{A_c^2 P_m}{4} 4Ac2Pm A c 2 P m 4 \cfrac{A_c^2 P_m}{4} 4Ac2Pm
输出噪声功率 N o u t N_{out} Nout 1 2 n 0 B \cfrac{1}{2}n_0 B 21n0B 1 2 n 0 B \cfrac{1}{2}n_0 B 21n0B 1 4 n 0 B \cfrac{1}{4}n_0 B 41n0B
输出信噪比 S N R o u t SNR_{out} SNRout A c 2 ⋅ ( 1 + P m ) 2 n 0 B \cfrac{A_c^2 \cdot(1 + P_m)}{2 n_0 B} 2n0BAc2(1+Pm) A c 2 P m 2 n 0 B \cfrac{A_c^2 P_m}{2 n_0 B} 2n0BAc2Pm A c 2 P m n 0 B \cfrac{A_c^2 P_m}{n_0 B} n0BAc2Pm
信噪比增益 G G G 2 2 2 2 2 2 1 1 1
  • 注: AM调制信号解调后未消除直流分量

6. 参考资料

[1] Markdown 公式编号.
[2] markdown让文字居中和带颜色.
[3] LaTeX公式手册(全网最全).
[4] python signal滤波器使用说明.
[5] Python基于scipy实现信号滤波功能.
[7] Python 加性高斯白噪声 AWGN.
[8] 高斯白噪声 python.
[9] 频域特征提取的Python实现(频谱、功率谱、倒频谱).
[10] Python求均值,方差,标准差.
[11] python基础_格式化输出.
[12] 现代通信原理6.1 常规调幅调制(AM)与抑制载波双边带(DSB-SC)调制.
[13] 现代通信原理6.2:单边带(SSB)调制.
[14] 仿真作业3:噪声通过DSB-SC解调器.
[15] MATLAB通信仿真实例1:无噪声信道下DSB-SC调制解调器.
[16] 现代通信原理A.3:随机信号的功率谱估计.
[17] 现代通信原理4.3:白噪声.
[18] 模拟幅度调制相干解调系统抗噪声性能仿真分析.
[19] 模拟幅度调制相干解调系统抗噪声性能仿真分析.
[20] 现代通信原理 - 仿真2 - DSB-SC(双边带抑制载波)调制解调器的仿真.


7. 附录

7.1 实用程序 utils.py

# -*- coding: utf-8 -*-
# utils.py

# %% 导入库
import numpy as np
import matplotlib.pyplot as plt
# help(plt.psd)s


# %% 加性高斯白噪声生成函数
def wgn(x, snr, seed=7):
    '''
    加入高斯白噪声 Additive White Gaussian Noise
    :param x: 原始信号
    :param snr: 信噪比
    :param seed: 随机种子
    :return: 加入噪声后的信号
    '''
    np.random.seed(seed)  # 设置随机种子
    snr = 10 ** (snr / 10.0)
    xpower = np.sum(x ** 2) / len(x)
    npower = xpower / snr
    return np.random.randn(len(x)) * np.sqrt(npower)


# %% 波形绘制函数
def drawWave(
        figure_i,
        row_i,
        column_j,
        label_x,
        axis_xs,
        axis_ys,
        formats,
        labels,
        label_locs,
        limit_ys,
        linewidths):
    """
    param:
        figure_i: 图窗编号
        row_i: 图表的行数
        column_j: 图表的列数
        label_x: 横轴标签
        axis_xs: 横轴
        axis_ys: 纵轴
        formats: 曲线格式(颜色 风格 标记)
            颜色:
                'b' 蓝色(blue)(默认)
                'g' 绿色(green)
                'r' 红色(red)
                'y' 黄色(yellow)
                'k' 黑色(black)
                'w' 白色(white)
                'c' 青绿色(cyan)
                'm' 洋红色(magenta)
                '#xxxxxx'   RGB颜色
                '0.xxx' 灰度
            风格:
                '-' 实线(默认)
                ':' 虚线
                ' ' 无线条
                '--'    破折线
                '-.'    点划线
            标记:
                '.' 点(默认)
                ',' 极小点
                'o' 实心圆
                '^' 正三角
                'v' 倒三角
                '>' 右三角
                '<' 左三角
                '1' 下花三角
                '2' 上花三角
                '3' 左花三角
                '4' 右花三角
                's' 实心方形(square)
                'p' 实心五边形(pentagon)
                '*' 星形
                'h' 竖六边形(hexagon)
                'H' 横六边形
                '+' 十字
                'x' 叉形
                'D' 菱形(diamond)
                'd' 瘦菱形
                '|' 垂直线
        labels: 曲线标签内容
        label_locs: 曲线标签位置
            0 "best 最佳位置(默认)
            1 "upper right" 右上
            2 "upper left" 左上
            3 "lower right" 右下
            4 "lower left" 左下
        limit_ys: 坐标轴下限与上限
        linewidths: 线宽
    """

    fig = plt.figure(figure_i)
    chart_formate = row_i * 100 + column_j * 10
    for i in range(row_i * column_j):
        ax = fig.add_subplot(chart_formate + 1 + i)
        ax.plot(
            axis_xs[i],
            axis_ys[i],
            formats[i],
            label=labels[i],
            linewidth=linewidths[i]
        )  # 横轴, 纵轴, 标签
        ax.legend(loc=label_locs[i])  # 标签位置
        if limit_ys[i] is not None:
            ax.set_ylim(limit_ys[i])  # 纵轴刻度范围
        ax.grid()  # 显示网格线
    ax.set_xlabel(label_x)


# %% 功率密度谱绘制函数
def drawPSD(
        figure_i,
        row_i,
        column_j,
        label_x,
        axis_ys,
        F_samples,
        limit_ys):
    """
    param:
        figure_i: 图窗编号
        row_i: 图表的行数
        column_j: 图表的列数
        label_x: 横轴标签
        axis_ys: 纵轴
        Fs_s:
        limit_ys: 坐标轴下限与上限
    """

    fig = plt.figure(figure_i)
    chart_formate = row_i * 100 + column_j * 10
    for i in range(row_i * column_j):
        ax = fig.add_subplot(chart_formate + 1 + i)
        ax.psd(axis_ys[i], Fs=F_samples[i])
        if limit_ys[i] is not None:
            ax.set_ylim(limit_ys[i])  # 纵轴刻度范围
        ax.grid()  # 显示网格线
    ax.set_xlabel(label_x)


# %% 显示所有图窗
def show():
    plt.show()


7.2 AM调制解调仿真程序 AM.py

# -*- coding: utf-8 -*-
# AM.PY
# %% 配置导入
from scipy import signal
from scipy import fft
import numpy as np
import utils


# %% 参数设置
time_begin = 0  # 起始时间
time_end = 1  # 终止时间
points = 1024  # 栅网采样点数(采样频率)
f_sample = points / (time_end - time_begin)  # 采样频率
T = (time_end - time_begin) / (points - 1)  # 栅网采样时间间距
frequency = [10, 100]  # 频率
amplitude = [0.5, 1]  # 调幅系数/振幅
phase = [0, 0]  # 相位(cos(t)相位为0)
zoom = 4  # 频谱缩放倍数
display_interval = 1.25  # 显示区间的系数
tick_max = max(amplitude) * 2  # 波形纵轴刻度最大值
tick_min = -tick_max  # 波形纵轴刻度最小值

snr = 6  # AWGN生成时的信噪比, 单位(dB)
seed = 3  # AWGN发生器随机种子

filter_order = 8  # 滤波器的阶数
f_H_LPF = frequency[0] * 2  # 低通滤波器的上限截止频率
f_H_BPF_DSB = frequency[1] + frequency[0] * 2  # 带通滤波器的上限截止频率
f_L_BPF_DSB = frequency[1] - frequency[0] * 2  # 带通滤波器的下限截止频率


# %% 生成时域波形
t = np.linspace(time_begin, time_end, points)  # 生成时域栅网
waves = []
for i in range(len(frequency)):
    waves.append(
        signal.chirp(
            t,
            f0=frequency[i],
            t1=time_end,
            f1=frequency[i],
            phi=phase[i],
            method='linear'
        ) * amplitude[i]
    )
s = None
for wave in waves:
    if s is None:
        s = 1 + wave.copy()
    else:
        s *= wave
s_d = s * waves[1]


# %% 获得频域波形
f = np.linspace(0, 1 / T, points)  # 生成频域栅网
# 输入信号 M(f)
M = fft.fft(waves[0])  # 快速傅里叶变换
M_nor = M / points  # 归一化
M_mod = np.abs(M_nor)  # 获取幅度频谱
M_pha = np.angle(M)  # 获取相位频谱
# 移频信号 C(f)
C = fft.fft(waves[1])  # 快速傅里叶变换
C_nor = C / points  # 归一化
C_mod = np.abs(C_nor)  # 获取幅度频谱
C_pha = np.angle(C)  # 获取相位频谱
# 第一次移频 -> S(f)
S = fft.fft(s)  # 快速傅里叶变换
S_nor = S / points  # 归一化
S_mod = np.abs(S_nor)  # 获取幅度频谱
S_pha = np.angle(S)  # 获取相位频谱
# 第二次移频 -> S_d(f)
S_d = fft.fft(s_d)
S_d_nor = S_d / points  # 归一化
S_d_mod = np.abs(S_d_nor)  # 获取幅度频谱
S_d_pha = np.angle(S_d)  # 获取相位频谱


# %% 滤波器参数
"""
    滤波器构造函数(仅介绍Butterworth滤波器)
        scipy.signal.butter(N, Wn, btype='low', analog=False, output='ba')
    输入参数:
        N:滤波器的阶数
        Wn:归一化截止频率。计算公式Wn=2*截止频率/采样频率。(注意:根据采样定理,采样频率要大于两倍的信号本身最大的频率,才能还原信号。截止频率一定小于信号本身最大的频率,所以Wn一定在0和1之间)。当构造带通滤波器或者带阻滤波器时,Wn为长度为2的列表。
        btype : 滤波器类型{‘lowpass’, ‘highpass’, ‘bandpass’, ‘bandstop’},
        output : 输出类型{‘ba’, ‘zpk’, ‘sos’},
    输出参数:
        b,a: IIR滤波器的分子(b)和分母(a)多项式系数向量。output='ba'
        z,p,k: IIR滤波器传递函数的零点、极点和系统增益. output= 'zpk'
        sos: IIR滤波器的二阶截面表示。output= 'sos'
    函数的使用
        信号滤波中最常用的无非低通滤波、高通滤波和带通滤波。下面简单介绍这三种滤波的使用过程:
    (1).高通滤波
        # 这里假设采样频率为1000hz,信号本身最大的频率为500hz,要滤除10hz以下频率成分,即截至频率为10hz,则wn=2*10/1000=0.02
        # from scipy import signal
        # b, a = signal.butter(8, 0.02, 'highpass')
        # filtedData = signal.filtfilt(b, a, data)#data为要过滤的信号
    (2).低通滤波
        # 这里假设采样频率为1000hz,信号本身最大的频率为500hz,要滤除10hz以上频率成分,即截至频率为10hz,则wn=2*10/1000=0.02
        # from scipy import signal
        # b, a = signal.butter(8, 0.02, 'lowpass')
        # filtedData = signal.filtfilt(b, a, data)       #data为要过滤的信号
    (3).带通滤波
        # 这里假设采样频率为1000hz,信号本身最大的频率为500hz,要滤除10hz以下和400hz以上频率成分,即截至频率为10hz和400hz,则wn1=2*10/1000=0.02,wn2=2*400/1000=0.8。Wn=[0.02,0.8]
        # from scipy import signal
        # b, a = signal.butter(8, [0.02,0.8], 'bandpass')
        # filtedData = signal.filtfilt(b, a, data)   #data为要过滤的信号
"""
wn_LPF = 2 * f_H_LPF / f_sample
b_LPF, a_LPF = signal.butter(filter_order, wn_LPF, 'lowpass')  # 配置滤波器

wn_BPF_DSB = [2 * f_L_BPF_DSB / f_sample, 2 * f_H_BPF_DSB / f_sample]
b_BPF_DSB, a_BPF_DSB = signal.butter(filter_order, wn_BPF_DSB, 'bandpass')  # 配置滤波器


# %% 进行滤波, 获得 m_o(t) 的时域波形
"""
    滤波函数
        scipy.signal.filtfilt(b, a, x, axis=-1, padtype='odd', padlen=None, method='pad', irlen=None)
    输入参数:
        b: 滤波器的分子系数向量
        a: 滤波器的分母系数向量
        x: 要过滤的数据数组。(array型)
        axis: 指定要过滤的数据数组x的轴
        padtype: 必须是“奇数”、“偶数”、“常数”或“无”。这决定了用于过滤器应用的填充信号的扩展类型。{‘odd’, ‘even’, ‘constant’, None}
        padlen:在应用滤波器之前在轴两端延伸X的元素数目。此值必须小于要滤波元素个数 - 1。(int型或None)
        method:确定处理信号边缘的方法。当method为“pad”时,填充信号;填充类型padtype和padlen决定,irlen被忽略。当method为“gust”时,使用古斯塔夫森方法,而忽略padtype和padlen。{“pad” ,“gust”}
        irlen:当method为“gust”时,irlen指定滤波器的脉冲响应的长度。如果irlen是None,则脉冲响应的任何部分都被忽略。对于长信号,指定irlen可以显著改善滤波器的性能。(int型或None)
    输出参数:
        y: 滤波后的数据数组
"""
m_o = signal.filtfilt(b_LPF, a_LPF, s_d)  # 为要过滤的信号
t_m_original = np.linspace(time_begin, T * (len(m_o) - 1), len(m_o))  # m_o(t) 信号的栅网


# %% 获得 m_o(t) 的频域波形
M_o = fft.fft(m_o)
M_o_nor = M_o / points  # 归一化
M_o_mod = np.abs(M_o_nor)  # 获取幅度频谱
M_o_pha = np.angle(M_o)  # 获取相位频谱


# %% AWGN生成与处理
n_i = utils.wgn(s, snr, seed)  # 生成AWGN
n = signal.filtfilt(b_BPF_DSB, a_BPF_DSB, n_i)  # 获得带通AWGN
n_d = n * waves[1]  # 获得移频后的带通AWGN
n_o = signal.filtfilt(b_LPF, a_LPF, n_d)  # 获得通过低通滤波器的带通AWGN


# %% 绘制 m(t) c(t) s(t) 时域波形
utils.drawWave(
    figure_i=1,
    row_i=3,
    column_j=1,
    label_x=r"t / s",
    axis_xs=[t] * 3,
    axis_ys=waves + [s],
    formats=['b-,', 'g-,', 'r-,'],
    labels=[r"m(t) = 0.5cos(20πt)",
            r"c(t) = cos(200πt)",
            r"s(t) = [1 + m(t)]c(t)"],
    label_locs=[r"upper right"] * 3,
    limit_ys=[(tick_min, tick_max)] * 3,
    linewidths=[1] * 3
)


# %% 绘制 m(t) 频域波形
utils.drawWave(
    figure_i=2,
    row_i=4,
    column_j=1,
    label_x=r"f / Hz",
    axis_xs=[np.hstack((-f[-1:0:-1], f))] * 2 + [f[0:points//zoom]] * 2,
    axis_ys=[np.hstack((M_mod[-1:0:-1], M_mod)),
             np.hstack((-M_pha[-1:0:-1], M_pha)),
             M_mod[0: points // zoom],
             M_pha[0: points // zoom]],
    formats=['b-,', 'g-,'] * 2,
    labels=[r"|M(f)|", r"θᴍ(f)"] * 2,
    label_locs=[r"upper right"] * 4,
    limit_ys=[(0, max(M_mod) * display_interval), None] * 2,
    linewidths=[1] * 4
)


# %% 绘制 c(t) 频域波形
utils.drawWave(
    figure_i=3,
    row_i=4,
    column_j=1,
    label_x=r"f / Hz",
    axis_xs=[np.hstack((-f[-1:0:-1], f))] * 2 + [f[0:points//zoom]] * 2,
    axis_ys=[np.hstack((C_mod[-1:0:-1], C_mod)),
             np.hstack((-C_pha[-1:0:-1], C_pha)),
             C_mod[0: points // zoom],
             C_pha[0: points // zoom]],
    formats=['b-,', 'g-,'] * 2,
    labels=[r"|C(f)|", r"θᴄ(f)"] * 2,
    label_locs=[r"upper right"] * 4,
    limit_ys=[(0, max(C_mod) * display_interval), None] * 2,
    linewidths=[1] * 4
)


# %% 绘制 s(t) 频域波形
utils.drawWave(
    figure_i=4,
    row_i=4,
    column_j=1,
    label_x=r"f / Hz",
    axis_xs=[np.hstack((-f[-1:0:-1], f))] * 2 + [f[0:points//zoom]] * 2,
    axis_ys=[np.hstack((S_mod[-1:0:-1], S_mod)),
             np.hstack((-S_pha[-1:0:-1], S_pha)),
             S_mod[0: points // zoom],
             S_pha[0: points // zoom]],
    formats=['b-,', 'g-,'] * 2,
    labels=[r"|S(f)|", r"θs(f)"] * 2,
    label_locs=[r"upper right"] * 4,
    limit_ys=[(0, max(S_mod) * display_interval), None] * 2,
    linewidths=[1] * 4
)


# %% 绘制 s(t) c(t) s_d(t) 时域波形
utils.drawWave(
    figure_i=5,
    row_i=3,
    column_j=1,
    label_x=r"t / s",
    axis_xs=[t] * 3,
    axis_ys=[s, waves[1], s_d],
    formats=['b-,', 'g-,', 'r-,'],
    labels=[r"s(t) = m(t)c(t)",
            r"c(t) = cos(200πt)",
            r"s_d(t) = s(t)c(t)"],
    label_locs=[r"upper right"] * 3,
    limit_ys=[(tick_min, tick_max)] * 3,
    linewidths=[1] * 3
)


# %% 绘制 s_d(t) 频域波形
utils.drawWave(
    figure_i=6,
    row_i=4,
    column_j=1,
    label_x=r"f / Hz",
    axis_xs=[np.hstack((-f[-1:0:-1], f))] * 2 + [f[0:points//zoom]] * 2,
    axis_ys=[np.hstack((S_d_mod[-1:0:-1], S_d_mod)),
             np.hstack((-S_d_pha[-1:0:-1], S_d_pha)),
             S_d_mod[0: points // zoom],
             S_d_pha[0: points // zoom]],
    formats=['b-,', 'g-,'] * 2,
    labels=[r"|Sᴅ(f)|", r"θsᴅ(f)"] * 2,
    label_locs=[r"upper right"] * 4,
    limit_ys=[(0, max(S_d_mod) * display_interval), None] * 2,
    linewidths=[1] * 4
)


# %% 绘制 m_o(t) 时域波形
utils.drawWave(
    figure_i=9,
    row_i=2,
    column_j=1,
    label_x=r"t / s",
    axis_xs=[t_m_original, t],
    axis_ys=[m_o, waves[0]],
    formats=['b-,', 'g-,'],
    labels=[r"m_o(t) = s_d(t) * h(t)", r"m(t)"],
    label_locs=[r"upper right"] * 2,
    limit_ys=[(tick_min, tick_max)] * 2,
    linewidths=[1] * 2
)


# %% 绘制 m_o(t) 频域波形
utils.drawWave(
    figure_i=10,
    row_i=4,
    column_j=1,
    label_x=r"f / Hz",
    axis_xs=[np.hstack((-f[-1:0:-1], f))] * 2 +
    [f[0:points//zoom]] * 2,
    axis_ys=[np.hstack((M_o_mod[-1:0:-1], M_o_mod)),
             np.hstack((-M_o_pha[-1:0:-1], M_o_pha)),
             M_o_mod[0: points // zoom],
             M_o_pha[0: points // zoom]],
    # axis_xs=[f_h] * 2,
    # axis_ys=[H_mod,
    #          H_pha],
    formats=['b-,', 'g-,'] * 2,
    labels=[r"|Mo(f)|", r"θᴍo(f)"] * 2,
    label_locs=[r"upper right"] * 4,
    limit_ys=[(0, max(M_o_mod) * display_interval), None] * 2,
    linewidths=[1] * 4
)


# %% 绘制噪声 n_i(t), n(t), n_d(t), n_o(t) 时域波形
utils.drawWave(
    figure_i=11,
    row_i=4,
    column_j=1,
    label_x=r"t / s",
    axis_xs=[t] * 4,
    axis_ys=[n_i, n, n_d, n_o],
    formats=['b-,', 'g-,', 'r-,', 'k-,'],
    labels=[r"n_i(t)",
            r"n(t)",
            r"n_d(t)",
            r"n_o(t)"],
    label_locs=[r"upper right"] * 4,
    limit_ys=[None] * 4,
    linewidths=[1] * 4
)


# %% 绘制噪声 n_i(t), n(t), n(t), n_o(t) 功率谱密度波形
utils.drawPSD(
    figure_i=12,
    row_i=4,
    column_j=1,
    label_x=r"f / Hz",
    axis_ys=[n_i, n, n_d, n_o],
    F_samples=[f_sample] * 4,
    limit_ys=[None] * 4)


# %% 求功率, 信噪比与信噪比增益
S_in = np.mean(s ** 2)
N_in = np.mean(n ** 2)
SNR_in = S_in / N_in

S_out = np.mean(m_o ** 2)
N_out = np.mean(n_o ** 2)
SNR_out = S_out / N_out

G = SNR_out / SNR_in

print("S_in = %e\nN_in = %e\nSNR_in = %e\nS_out = %e\nN_out = %e\nSNR_out = %e\nG = %e\n" % (S_in, N_in, SNR_in, S_out, N_out, SNR_out, G))


# %% 显示所有图窗
utils.show()


7.3 DSB-SC调制解调仿真程序 DSB-SC.py

# -*- coding: utf-8 -*-
# DSB-SC.PY
# %% 配置导入
from scipy import signal
from scipy import fft
import numpy as np
import utils


# %% 参数设置
time_begin = 0  # 起始时间
time_end = 1  # 终止时间
points = 1024  # 栅网采样点数(采样频率)
f_sample = points / (time_end - time_begin)  # 采样频率
T = (time_end - time_begin) / (points - 1)  # 栅网采样时间间距
frequency = [10, 100]  # 频率
amplitude = [1, 1]  # 振幅
phase = [0, 0]  # 相位(cos(t)相位为0)
zoom = 4  # 频谱缩放倍数
display_interval = 1.25  # 显示区间的系数
tick_max = max(amplitude) * 1.5  # 波形纵轴刻度最大值
tick_min = -tick_max  # 波形纵轴刻度最小值

snr = 6  # AWGN生成时的信噪比, 单位(dB)
seed = 3  # AWGN发生器随机种子

filter_order = 8  # 滤波器的阶数

f_H_LPF = frequency[0] * 2  # 低通滤波器的上限截止频率
f_H_BPF_DSB = frequency[1] + frequency[0] * 2  # 带通滤波器的上限截止频率
f_L_BPF_DSB = frequency[1] - frequency[0] * 2  # 带通滤波器的下限截止频率


# %% 生成时域波形
t = np.linspace(time_begin, time_end, points)  # 生成时域栅网
waves = []
for i in range(len(frequency)):
    waves.append(
        signal.chirp(
            t,
            f0=frequency[i],
            t1=time_end,
            f1=frequency[i],
            phi=phase[i],
            method='linear'
        ) * amplitude[i]
    )
s = None
for wave in waves:
    if s is None:
        s = wave.copy()
    else:
        s *= wave
s_d = waves[0] * waves[1] * waves[1]


# %% 获得频域波形
f = np.linspace(0, 1 / T, points)  # 生成频域栅网
# 输入信号 M(f)
M = fft.fft(waves[0])  # 快速傅里叶变换
M_nor = M / points  # 归一化
M_mod = np.abs(M_nor)  # 获取幅度频谱
M_pha = np.angle(M)  # 获取相位频谱
# 移频信号 C(f)
C = fft.fft(waves[1])  # 快速傅里叶变换
C_nor = C / points  # 归一化
C_mod = np.abs(C_nor)  # 获取幅度频谱
C_pha = np.angle(C)  # 获取相位频谱
# 第一次移频 -> S(f)
S = fft.fft(s)  # 快速傅里叶变换
S_nor = S / points  # 归一化
S_mod = np.abs(S_nor)  # 获取幅度频谱
S_pha = np.angle(S)  # 获取相位频谱
# 第二次移频 -> S_d(f)
S_d = fft.fft(s_d)
S_d_nor = S_d / points  # 归一化
S_d_mod = np.abs(S_d_nor)  # 获取幅度频谱
S_d_pha = np.angle(S_d)  # 获取相位频谱


# %% 滤波器参数
"""
    滤波器构造函数(仅介绍Butterworth滤波器)
        scipy.signal.butter(N, Wn, btype='low', analog=False, output='ba')
    输入参数:
        N:滤波器的阶数
        Wn:归一化截止频率。计算公式Wn=2*截止频率/采样频率。(注意:根据采样定理,采样频率要大于两倍的信号本身最大的频率,才能还原信号。截止频率一定小于信号本身最大的频率,所以Wn一定在0和1之间)。当构造带通滤波器或者带阻滤波器时,Wn为长度为2的列表。
        btype : 滤波器类型{‘lowpass’, ‘highpass’, ‘bandpass’, ‘bandstop’},
        output : 输出类型{‘ba’, ‘zpk’, ‘sos’},
    输出参数:
        b,a: IIR滤波器的分子(b)和分母(a)多项式系数向量。output='ba'
        z,p,k: IIR滤波器传递函数的零点、极点和系统增益. output= 'zpk'
        sos: IIR滤波器的二阶截面表示。output= 'sos'
    函数的使用
        信号滤波中最常用的无非低通滤波、高通滤波和带通滤波。下面简单介绍这三种滤波的使用过程:
    (1).高通滤波
        # 这里假设采样频率为1000hz,信号本身最大的频率为500hz,要滤除10hz以下频率成分,即截至频率为10hz,则wn=2*10/1000=0.02
        # from scipy import signal
        # b, a = signal.butter(8, 0.02, 'highpass')
        # filtedData = signal.filtfilt(b, a, data)#data为要过滤的信号
    (2).低通滤波
        # 这里假设采样频率为1000hz,信号本身最大的频率为500hz,要滤除10hz以上频率成分,即截至频率为10hz,则wn=2*10/1000=0.02
        # from scipy import signal
        # b, a = signal.butter(8, 0.02, 'lowpass')
        # filtedData = signal.filtfilt(b, a, data)       #data为要过滤的信号
    (3).带通滤波
        # 这里假设采样频率为1000hz,信号本身最大的频率为500hz,要滤除10hz以下和400hz以上频率成分,即截至频率为10hz和400hz,则wn1=2*10/1000=0.02,wn2=2*400/1000=0.8。Wn=[0.02,0.8]
        # from scipy import signal
        # b, a = signal.butter(8, [0.02,0.8], 'bandpass')
        # filtedData = signal.filtfilt(b, a, data)   #data为要过滤的信号
"""
wn_LPF = 2 * f_H_LPF / f_sample
b_LPF, a_LPF = signal.butter(filter_order, wn_LPF, 'lowpass')  # 配置滤波器

wn_BPF_DSB = [2 * f_L_BPF_DSB / f_sample, 2 * f_H_BPF_DSB / f_sample]
b_BPF_DSB, a_BPF_DSB = signal.butter(filter_order, wn_BPF_DSB, 'bandpass')  # 配置滤波器


# %% 进行滤波, 获得 m_o(t) 的时域波形
"""
    滤波函数
        scipy.signal.filtfilt(b, a, x, axis=-1, padtype='odd', padlen=None, method='pad', irlen=None)
    输入参数:
        b: 滤波器的分子系数向量
        a: 滤波器的分母系数向量
        x: 要过滤的数据数组。(array型)
        axis: 指定要过滤的数据数组x的轴
        padtype: 必须是“奇数”、“偶数”、“常数”或“无”。这决定了用于过滤器应用的填充信号的扩展类型。{‘odd’, ‘even’, ‘constant’, None}
        padlen:在应用滤波器之前在轴两端延伸X的元素数目。此值必须小于要滤波元素个数 - 1。(int型或None)
        method:确定处理信号边缘的方法。当method为“pad”时,填充信号;填充类型padtype和padlen决定,irlen被忽略。当method为“gust”时,使用古斯塔夫森方法,而忽略padtype和padlen。{“pad” ,“gust”}
        irlen:当method为“gust”时,irlen指定滤波器的脉冲响应的长度。如果irlen是None,则脉冲响应的任何部分都被忽略。对于长信号,指定irlen可以显著改善滤波器的性能。(int型或None)
    输出参数:
        y: 滤波后的数据数组
"""
m_o = signal.filtfilt(b_LPF, a_LPF, s_d)  # 为要过滤的信号
t_m_original = np.linspace(time_begin, T * (len(m_o) - 1), len(m_o))  # m_o(t) 信号的栅网


# %% 获得 m_o(t) 的频域波形
M_o = fft.fft(m_o)
M_o_nor = M_o / points  # 归一化
M_o_mod = np.abs(M_o_nor)  # 获取幅度频谱
M_o_pha = np.angle(M_o)  # 获取相位频谱


# %% AWGN生成与处理
n_i = utils.wgn(s, snr, seed)  # 生成AWGN
n = signal.filtfilt(b_BPF_DSB, a_BPF_DSB, n_i)  # 获得带通AWGN
n_d = n * waves[1]  # 获得移频后的带通AWGN
n_o = signal.filtfilt(b_LPF, a_LPF, n_d)  # 获得通过低通滤波器的带通AWGN


# %% 绘制 m(t) c(t) s(t) 时域波形
utils.drawWave(
    figure_i=1,
    row_i=3,
    column_j=1,
    label_x=r"t / s",
    axis_xs=[t] * 3,
    axis_ys=waves + [s],
    formats=['b-,', 'g-,', 'r-,'],
    labels=[r"m(t) = cos(20πt)",
            r"c(t) = cos(200πt)",
            r"s(t) = m(t)c(t)"],
    label_locs=[r"upper right"] * 3,
    limit_ys=[(tick_min, tick_max)] * 3,
    linewidths=[1] * 3
)


# %% 绘制 m(t) 频域波形
utils.drawWave(
    figure_i=2,
    row_i=4,
    column_j=1,
    label_x=r"f / Hz",
    axis_xs=[np.hstack((-f[-1:0:-1], f))] * 2 + [f[0:points//zoom]] * 2,
    axis_ys=[np.hstack((M_mod[-1:0:-1], M_mod)),
             np.hstack((-M_pha[-1:0:-1], M_pha)),
             M_mod[0: points // zoom],
             M_pha[0: points // zoom]],
    formats=['b-,', 'g-,'] * 2,
    labels=[r"|M(f)|", r"θᴍ(f)"] * 2,
    label_locs=[r"upper right"] * 4,
    limit_ys=[(0, max(M_mod) * display_interval), None] * 2,
    linewidths=[1] * 4
)


# %% 绘制 c(t) 频域波形
utils.drawWave(
    figure_i=3,
    row_i=4,
    column_j=1,
    label_x=r"f / Hz",
    axis_xs=[np.hstack((-f[-1:0:-1], f))] * 2 + [f[0:points//zoom]] * 2,
    axis_ys=[np.hstack((C_mod[-1:0:-1], C_mod)),
             np.hstack((-C_pha[-1:0:-1], C_pha)),
             C_mod[0: points // zoom],
             C_pha[0: points // zoom]],
    formats=['b-,', 'g-,'] * 2,
    labels=[r"|C(f)|", r"θᴄ(f)"] * 2,
    label_locs=[r"upper right"] * 4,
    limit_ys=[(0, max(C_mod) * display_interval), None] * 2,
    linewidths=[1] * 4
)


# %% 绘制 s(t) 频域波形
utils.drawWave(
    figure_i=4,
    row_i=4,
    column_j=1,
    label_x=r"f / Hz",
    axis_xs=[np.hstack((-f[-1:0:-1], f))] * 2 + [f[0:points//zoom]] * 2,
    axis_ys=[np.hstack((S_mod[-1:0:-1], S_mod)),
             np.hstack((-S_pha[-1:0:-1], S_pha)),
             S_mod[0: points // zoom],
             S_pha[0: points // zoom]],
    formats=['b-,', 'g-,'] * 2,
    labels=[r"|S(f)|", r"θs(f)"] * 2,
    label_locs=[r"upper right"] * 4,
    limit_ys=[(0, max(S_mod) * display_interval), None] * 2,
    linewidths=[1] * 4
)


# %% 绘制 s(t) c(t) s_d(t) 时域波形
utils.drawWave(
    figure_i=5,
    row_i=3,
    column_j=1,
    label_x=r"t / s",
    axis_xs=[t] * 3,
    axis_ys=[s, waves[1], s_d],
    formats=['b-,', 'g-,', 'r-,'],
    labels=[r"s(t) = m(t)c(t)",
            r"c(t) = cos(200πt)",
            r"s_d(t) = s(t)c(t)"],
    label_locs=[r"upper right"] * 3,
    limit_ys=[(tick_min, tick_max)] * 3,
    linewidths=[1] * 3
)


# %% 绘制 s_d(t) 频域波形
utils.drawWave(
    figure_i=6,
    row_i=4,
    column_j=1,
    label_x=r"f / Hz",
    axis_xs=[np.hstack((-f[-1:0:-1], f))] * 2 + [f[0:points//zoom]] * 2,
    axis_ys=[np.hstack((S_d_mod[-1:0:-1], S_d_mod)),
             np.hstack((-S_d_pha[-1:0:-1], S_d_pha)),
             S_d_mod[0: points // zoom],
             S_d_pha[0: points // zoom]],
    formats=['b-,', 'g-,'] * 2,
    labels=[r"|Sᴅ(f)|", r"θsᴅ(f)"] * 2,
    label_locs=[r"upper right"] * 4,
    limit_ys=[(0, max(S_d_mod) * display_interval), None] * 2,
    linewidths=[1] * 4
)


# %% 绘制 m_o(t) 时域波形
utils.drawWave(
    figure_i=9,
    row_i=2,
    column_j=1,
    label_x=r"t / s",
    axis_xs=[t_m_original, t],
    axis_ys=[m_o, waves[0]],
    formats=['b-,', 'g-,'],
    labels=[r"m_o(t) = s_d(t) * h(t)", r"m(t)"],
    label_locs=[r"upper right"] * 2,
    limit_ys=[(tick_min, tick_max)] * 2,
    linewidths=[1] * 2
)


# %% 绘制 m_o(t) 频域波形
utils.drawWave(
    figure_i=10,
    row_i=4,
    column_j=1,
    label_x=r"f / Hz",
    axis_xs=[np.hstack((-f[-1:0:-1], f))] * 2 +
    [f[0:points//zoom]] * 2,
    axis_ys=[np.hstack((M_o_mod[-1:0:-1], M_o_mod)),
             np.hstack((-M_o_pha[-1:0:-1], M_o_pha)),
             M_o_mod[0: points // zoom],
             M_o_pha[0: points // zoom]],
    # axis_xs=[f_h] * 2,
    # axis_ys=[H_mod,
    #          H_pha],
    formats=['b-,', 'g-,'] * 2,
    labels=[r"|Mo(f)|", r"θᴍo(f)"] * 2,
    label_locs=[r"upper right"] * 4,
    limit_ys=[(0, max(M_o_mod) * display_interval), None] * 2,
    linewidths=[1] * 4
)


# %% 绘制噪声 n_i(t), n(t), n(t), n_o(t) 时域波形
utils.drawWave(
    figure_i=11,
    row_i=4,
    column_j=1,
    label_x=r"t / s",
    axis_xs=[t] * 4,
    axis_ys=[n_i, n, n_d, n_o],
    formats=['b-,', 'g-,', 'r-,', 'k-,'],
    labels=[r"n_i(t)",
            r"n(t)",
            r"n_d(t)",
            r"n_o(t)"],
    label_locs=[r"upper right"] * 4,
    limit_ys=[None] * 4,
    linewidths=[1] * 4
)


# %% 绘制噪声 n_i(t), n(t), n(t), n_o(t) 功率谱密度波形
utils.drawPSD(
    figure_i=12,
    row_i=4,
    column_j=1,
    label_x=r"f / Hz",
    axis_ys=[n_i, n, n_d, n_o],
    F_samples=[f_sample] * 4,
    limit_ys=[None] * 4)


# %% 求功率, 信噪比与信噪比增益
S_in = np.mean(s ** 2)
N_in = np.mean(n ** 2)
SNR_in = S_in / N_in

S_out = np.mean(m_o ** 2)
N_out = np.mean(n_o ** 2)
SNR_out = S_out / N_out

G = SNR_out / SNR_in

print("S_in = %e\nN_in = %e\nSNR_in = %e\nS_out = %e\nN_out = %e\nSNR_out = %e\nG = %e\n" % (S_in, N_in, SNR_in, S_out, N_out, SNR_out, G))


# %% 显示所有图窗
utils.show()


7.4 SSB调制解调仿真程序 SSB.py

# -*- coding: utf-8 -*-
# AM.PY
# %% 配置导入
from scipy import fftpack
from scipy import signal
from scipy import fft
import numpy as np
import utils


# %% 参数设置
time_begin = 0  # 起始时间
time_end = 1  # 终止时间
points = 1024  # 栅网采样点数(采样频率)
f_sample = points / (time_end - time_begin)  # 采样频率
T = (time_end - time_begin) / (points - 1)  # 栅网采样时间间距
frequency = [10, 100, 100]  # 频率
amplitude = [1, 1, 1]  # 振幅
phase = [0, 0, -90]  # 相位(cos(t)相位为0)
zoom = 4  # 频谱缩放倍数
display_interval = 1.25  # 显示区间的系数
tick_max = max(amplitude) * 1.5  # 波形纵轴刻度最大值
tick_min = -tick_max  # 波形纵轴刻度最小值

snr = 6  # AWGN生成时的信噪比, 单位(dB)
seed = 3  # AWGN发生器随机种子

USSB_FLAG = True  # 是否为上边带调制

filter_order = 8  # 滤波器的阶数
f_H_LPF = frequency[0] * 2  # 低通滤波器的上限截止频率

if USSB_FLAG:
    # 上边带 USSB
    f_H_BPF_SSB = frequency[1] + frequency[0] * 2  # 带通滤波器的上限截止频率
    f_L_BPF_SSB = frequency[1]  # 带通滤波器的下限截止频率
    sign = -1  # 正负符号
else:
    # 下边带 LSSB
    f_H_BPF_SSB = frequency[1]  # 带通滤波器的上限截止频率
    f_L_BPF_SSB = frequency[1] - frequency[0] * 2  # 带通滤波器的下限截止频率
    sign = 1  # 正负符号



# %% 生成时域波形
t = np.linspace(time_begin, time_end, points)  # 生成时域栅网
waves = []
for i in range(len(frequency)):
    waves.append(
        signal.chirp(
            t,
            f0=frequency[i],
            t1=time_end,
            f1=frequency[i],
            phi=phase[i],
            method='linear'
        ) * amplitude[i]
    )
s = waves[0] * waves[1] - sign * fftpack.hilbert(waves[0]) * waves[2]
# 该函数希尔伯特变换将相位向前移动90度, cos(t) -> -sin(t), 因此需要取负值
s_d = s * waves[1]


# %% 获得频域波形
f = np.linspace(0, 1 / T, points)  # 生成频域栅网
# 输入信号 M(f)
M = fft.fft(waves[0])  # 快速傅里叶变换
M_nor = M / points  # 归一化
M_mod = np.abs(M_nor)  # 获取幅度频谱
M_pha = np.angle(M)  # 获取相位频谱
# 移频信号 C(f)
C = fft.fft(waves[1])  # 快速傅里叶变换
C_nor = C / points  # 归一化
C_mod = np.abs(C_nor)  # 获取幅度频谱
C_pha = np.angle(C)  # 获取相位频谱
# 第一次移频 -> S(f)
S = fft.fft(s)  # 快速傅里叶变换
S_nor = S / points  # 归一化
S_mod = np.abs(S_nor)  # 获取幅度频谱
S_pha = np.angle(S)  # 获取相位频谱
# 第二次移频 -> S_d(f)
S_d = fft.fft(s_d)
S_d_nor = S_d / points  # 归一化
S_d_mod = np.abs(S_d_nor)  # 获取幅度频谱
S_d_pha = np.angle(S_d)  # 获取相位频谱


# %% 滤波器参数
"""
    滤波器构造函数(仅介绍Butterworth滤波器)
        scipy.signal.butter(N, Wn, btype='low', analog=False, output='ba')
    输入参数:
        N:滤波器的阶数
        Wn:归一化截止频率。计算公式Wn=2*截止频率/采样频率。(注意:根据采样定理,采样频率要大于两倍的信号本身最大的频率,才能还原信号。截止频率一定小于信号本身最大的频率,所以Wn一定在0和1之间)。当构造带通滤波器或者带阻滤波器时,Wn为长度为2的列表。
        btype : 滤波器类型{‘lowpass’, ‘highpass’, ‘bandpass’, ‘bandstop’},
        output : 输出类型{‘ba’, ‘zpk’, ‘sos’},
    输出参数:
        b,a: IIR滤波器的分子(b)和分母(a)多项式系数向量。output='ba'
        z,p,k: IIR滤波器传递函数的零点、极点和系统增益. output= 'zpk'
        sos: IIR滤波器的二阶截面表示。output= 'sos'
    函数的使用
        信号滤波中最常用的无非低通滤波、高通滤波和带通滤波。下面简单介绍这三种滤波的使用过程:
    (1).高通滤波
        # 这里假设采样频率为1000hz,信号本身最大的频率为500hz,要滤除10hz以下频率成分,即截至频率为10hz,则wn=2*10/1000=0.02
        # from scipy import signal
        # b, a = signal.butter(8, 0.02, 'highpass')
        # filtedData = signal.filtfilt(b, a, data)#data为要过滤的信号
    (2).低通滤波
        # 这里假设采样频率为1000hz,信号本身最大的频率为500hz,要滤除10hz以上频率成分,即截至频率为10hz,则wn=2*10/1000=0.02
        # from scipy import signal
        # b, a = signal.butter(8, 0.02, 'lowpass')
        # filtedData = signal.filtfilt(b, a, data)       #data为要过滤的信号
    (3).带通滤波
        # 这里假设采样频率为1000hz,信号本身最大的频率为500hz,要滤除10hz以下和400hz以上频率成分,即截至频率为10hz和400hz,则wn1=2*10/1000=0.02,wn2=2*400/1000=0.8。Wn=[0.02,0.8]
        # from scipy import signal
        # b, a = signal.butter(8, [0.02,0.8], 'bandpass')
        # filtedData = signal.filtfilt(b, a, data)   #data为要过滤的信号
"""
wn_LPF = 2 * f_H_LPF / f_sample
b_LPF, a_LPF = signal.butter(filter_order, wn_LPF, 'lowpass')  # 配置滤波器

wn_BPF_DSB = [2 * f_L_BPF_SSB / f_sample, 2 * f_H_BPF_SSB / f_sample]
b_BPF_DSB, a_BPF_DSB = signal.butter(filter_order, wn_BPF_DSB, 'bandpass')  # 配置滤波器


# %% 进行滤波, 获得 m_o(t) 的时域波形
"""
    滤波函数
        scipy.signal.filtfilt(b, a, x, axis=-1, padtype='odd', padlen=None, method='pad', irlen=None)
    输入参数:
        b: 滤波器的分子系数向量
        a: 滤波器的分母系数向量
        x: 要过滤的数据数组。(array型)
        axis: 指定要过滤的数据数组x的轴
        padtype: 必须是“奇数”、“偶数”、“常数”或“无”。这决定了用于过滤器应用的填充信号的扩展类型。{‘odd’, ‘even’, ‘constant’, None}
        padlen:在应用滤波器之前在轴两端延伸X的元素数目。此值必须小于要滤波元素个数 - 1。(int型或None)
        method:确定处理信号边缘的方法。当method为“pad”时,填充信号;填充类型padtype和padlen决定,irlen被忽略。当method为“gust”时,使用古斯塔夫森方法,而忽略padtype和padlen。{“pad” ,“gust”}
        irlen:当method为“gust”时,irlen指定滤波器的脉冲响应的长度。如果irlen是None,则脉冲响应的任何部分都被忽略。对于长信号,指定irlen可以显著改善滤波器的性能。(int型或None)
    输出参数:
        y: 滤波后的数据数组
"""
m_o = signal.filtfilt(b_LPF, a_LPF, s_d)  # 为要过滤的信号
t_m_original = np.linspace(time_begin, T * (len(m_o) - 1), len(m_o))  # m_o(t) 信号的栅网


# %% 获得 m_o(t) 的频域波形
M_o = fft.fft(m_o)
M_o_nor = M_o / points  # 归一化
M_o_mod = np.abs(M_o_nor)  # 获取幅度频谱
M_o_pha = np.angle(M_o)  # 获取相位频谱


# %% AWGN生成与处理
n_i = utils.wgn(s, snr, seed)  # 生成AWGN
n = signal.filtfilt(b_BPF_DSB, a_BPF_DSB, n_i)  # 获得带通AWGN
n_d = n * waves[1]  # 获得移频后的带通AWGN
n_o = signal.filtfilt(b_LPF, a_LPF, n_d)  # 获得通过低通滤波器的带通AWGN


# %% 绘制 m(t) c(t) s(t) 时域波形
utils.drawWave(
    figure_i=1,
    row_i=3,
    column_j=1,
    label_x=r"t / s",
    axis_xs=[t] * 3,
    axis_ys=waves[0:2] + [s],
    formats=['b-,', 'g-,', 'r-,'],
    labels=[r"m(t) = cos(20πt)",
            r"c(t) = cos(200πt)",
            r"s(t)"],
    label_locs=[r"upper right"] * 3,
    limit_ys=[(tick_min, tick_max)] * 3,
    linewidths=[1] * 3
)


# %% 绘制 m(t) 频域波形
utils.drawWave(
    figure_i=2,
    row_i=4,
    column_j=1,
    label_x=r"f / Hz",
    axis_xs=[np.hstack((-f[-1:0:-1], f))] * 2 + [f[0:points//zoom]] * 2,
    axis_ys=[np.hstack((M_mod[-1:0:-1], M_mod)),
             np.hstack((-M_pha[-1:0:-1], M_pha)),
             M_mod[0: points // zoom],
             M_pha[0: points // zoom]],
    formats=['b-,', 'g-,'] * 2,
    labels=[r"|M(f)|", r"θᴍ(f)"] * 2,
    label_locs=[r"upper right"] * 4,
    limit_ys=[(0, max(M_mod) * display_interval), None] * 2,
    linewidths=[1] * 4
)


# %% 绘制 c(t) 频域波形
utils.drawWave(
    figure_i=3,
    row_i=4,
    column_j=1,
    label_x=r"f / Hz",
    axis_xs=[np.hstack((-f[-1:0:-1], f))] * 2 + [f[0:points//zoom]] * 2,
    axis_ys=[np.hstack((C_mod[-1:0:-1], C_mod)),
             np.hstack((-C_pha[-1:0:-1], C_pha)),
             C_mod[0: points // zoom],
             C_pha[0: points // zoom]],
    formats=['b-,', 'g-,'] * 2,
    labels=[r"|C(f)|", r"θᴄ(f)"] * 2,
    label_locs=[r"upper right"] * 4,
    limit_ys=[(0, max(C_mod) * display_interval), None] * 2,
    linewidths=[1] * 4
)


# %% 绘制 s(t) 频域波形
utils.drawWave(
    figure_i=4,
    row_i=4,
    column_j=1,
    label_x=r"f / Hz",
    axis_xs=[np.hstack((-f[-1:0:-1], f))] * 2 + [f[0:points//zoom]] * 2,
    axis_ys=[np.hstack((S_mod[-1:0:-1], S_mod)),
             np.hstack((-S_pha[-1:0:-1], S_pha)),
             S_mod[0: points // zoom],
             S_pha[0: points // zoom]],
    formats=['b-,', 'g-,'] * 2,
    labels=[r"|S(f)|", r"θs(f)"] * 2,
    label_locs=[r"upper right"] * 4,
    limit_ys=[(0, max(S_mod) * display_interval), None] * 2,
    linewidths=[1] * 4
)


# %% 绘制 s(t) c(t) s_d(t) 时域波形
utils.drawWave(
    figure_i=5,
    row_i=3,
    column_j=1,
    label_x=r"t / s",
    axis_xs=[t] * 3,
    axis_ys=[s, waves[1], s_d],
    formats=['b-,', 'g-,', 'r-,'],
    labels=[r"s(t) = m(t)c(t)",
            r"c(t) = cos(200πt)",
            r"s_d(t) = s(t)c(t)"],
    label_locs=[r"upper right"] * 3,
    limit_ys=[(tick_min, tick_max)] * 3,
    linewidths=[1] * 3
)


# %% 绘制 s_d(t) 频域波形
utils.drawWave(
    figure_i=6,
    row_i=4,
    column_j=1,
    label_x=r"f / Hz",
    axis_xs=[np.hstack((-f[-1:0:-1], f))] * 2 + [f[0:points//zoom]] * 2,
    axis_ys=[np.hstack((S_d_mod[-1:0:-1], S_d_mod)),
             np.hstack((-S_d_pha[-1:0:-1], S_d_pha)),
             S_d_mod[0: points // zoom],
             S_d_pha[0: points // zoom]],
    formats=['b-,', 'g-,'] * 2,
    labels=[r"|Sᴅ(f)|", r"θsᴅ(f)"] * 2,
    label_locs=[r"upper right"] * 4,
    limit_ys=[(0, max(S_d_mod) * display_interval), None] * 2,
    linewidths=[1] * 4
)


# %% 绘制 m_o(t) 时域波形
utils.drawWave(
    figure_i=9,
    row_i=2,
    column_j=1,
    label_x=r"t / s",
    axis_xs=[t_m_original, t],
    axis_ys=[m_o, waves[0]],
    formats=['b-,', 'g-,'],
    labels=[r"m_o(t) = s_d(t) * h(t)", r"m(t)"],
    label_locs=[r"upper right"] * 2,
    limit_ys=[(tick_min, tick_max)] * 2,
    linewidths=[1] * 2
)


# %% 绘制 m_o(t) 频域波形
utils.drawWave(
    figure_i=10,
    row_i=4,
    column_j=1,
    label_x=r"f / Hz",
    axis_xs=[np.hstack((-f[-1:0:-1], f))] * 2 +
    [f[0:points//zoom]] * 2,
    axis_ys=[np.hstack((M_o_mod[-1:0:-1], M_o_mod)),
             np.hstack((-M_o_pha[-1:0:-1], M_o_pha)),
             M_o_mod[0: points // zoom],
             M_o_pha[0: points // zoom]],
    # axis_xs=[f_h] * 2,
    # axis_ys=[H_mod,
    #          H_pha],
    formats=['b-,', 'g-,'] * 2,
    labels=[r"|Mo(f)|", r"θᴍo(f)"] * 2,
    label_locs=[r"upper right"] * 4,
    limit_ys=[(0, max(M_o_mod) * display_interval), None] * 2,
    linewidths=[1] * 4
)


# %% 绘制噪声 n_i(t), n(t), n(t), n_o(t) 时域波形
utils.drawWave(
    figure_i=11,
    row_i=4,
    column_j=1,
    label_x=r"t / s",
    axis_xs=[t] * 4,
    axis_ys=[n_i, n, n_d, n_o],
    formats=['b-,', 'g-,', 'r-,', 'k-,'],
    labels=[r"n_i(t)",
            r"n(t)",
            r"n_d(t)",
            r"n_o(t)"],
    label_locs=[r"upper right"] * 4,
    limit_ys=[None] * 4,
    linewidths=[1] * 4
)


# %% 绘制噪声 n_i(t), n(t), n(t), n_o(t) 功率谱密度波形
utils.drawPSD(
    figure_i=12,
    row_i=4,
    column_j=1,
    label_x=r"f / Hz",
    axis_ys=[n_i, n, n_d, n_o],
    F_samples=[f_sample * 2] * 4,
    limit_ys=[None] * 4)


# %% 求功率, 信噪比与信噪比增益
S_in = np.mean(s ** 2)
N_in = np.mean(n ** 2)
SNR_in = S_in / N_in

S_out = np.mean(m_o ** 2)
N_out = np.mean(n_o ** 2)
SNR_out = S_out / N_out

G = SNR_out / SNR_in

print("S_in = %e\nN_in = %e\nSNR_in = %e\nS_out = %e\nN_out = %e\nSNR_out = %e\nG = %e\n" % (S_in, N_in, SNR_in, S_out, N_out, SNR_out, G))


# %% 显示所有图窗
utils.show()

本文地址:https://blog.csdn.net/weixin_43157144/article/details/109616435