数字信号处理Python示例(2-5)混叠现象的频域演示
文章目录
- 引言
- 第一部分:模拟实验方案设计
- 第二部分:基于Python的时间域信号混叠现象演示案例
- 第三部分:仿真结果解读与分析
- 总结与展望
前言
本文设计并展示了一个基于低于奈奎斯特采样的频域混叠现象演示系统,并提供相应的Python仿真代码。通过图形化界面直观地解释了混叠现象的发生机制。
一、仿真实验设计
该定理表明,在满足fs≥2fmax的前提下,在采样过程中能够无失真地重建原始连续时间信号x(t)。相反地,在 fs<2fmax 的情况下,则会导致信号信息丢失的现象即为混叠现象。通过频域分析可以看出混叠现象产生的根本原因:我们采用两个不同的采样率fs1=64Hz 和 fs2=32Hz,并引入了两个不同频率的正弦波信号 f1=10Hz 和 f₂=20Hz 来模拟实验条件下的信号特性
二、时域中信号混叠示例的Python代码
# 导入必要的库
import numpy as np # numpy用于数学计算
import matplotlib.pyplot as plt # 用于绘图
from scipy.fft import fft,fftfreq #用于信号处理
f1 = 10 # 信号1的频率,单位Hz
f2 = 20 # 信号2的频率,单位Hz
fs = [64, 32] # 采样频率
N = 256 # 信号samples数量,同时也是FFT的点数
for i in range(len(fs)):
T = 1/fs[i]
t = np.linspace(0, N*T, N, endpoint=False) # 生成时间轴
x = np.sin(2 * np.pi * f1 * t) + np.sin(2 * np.pi * f2 * t)
X = fft(x)
f = fftfreq(N,T)[0:N//2]
# 画图
plt.subplot(2, 1, i+1)
plt.plot(f, 2/N*np.abs(X[0:N//2]))
plt.xlabel('频率(Hz)')
plt.ylabel('幅度')
plt.title(' Spectrum for Sampling Rate $f_s = {} Hz$'.format(fs[i]))
plt.grid(True)
plt.tight_layout() # 自动调整子图参数,使之填充整个图像区域
plt.show() # 显示图形
三、仿真结果及分析
以下是执行代码后画图的结果。
结果分析:
(1)信号x(t)所包含的频率成分包括f_₁=10\ \text{Hz}和f_₂=20\ \text{Hz}。
(2)在采用64\ \text{Hz}的采样率情况下,在频谱中清晰地显示出f_₁=10\ \text{Hz}以及f_₂=20\ \text{Hz}这两个明显的峰值。
(3)当采用f_s=32\ \text{Hz}作为采样率时,在分析中发现与f_₁=10\ \text{Hz}相关的频带未发生变化;然而,在频谱中观察到原本应为f_₂=20\ \text{Hz}的频带现在被识别为f_₂=12\ \text{Hz}的现象被称为混叠现象。
写在后面的话
本系列文章已经是《数字信号处理python示例》中的第25期内容。作为本系列的一部分,《数字信号处理python示例》旨在通过Python编程语言来演示数字信号处理的基本理论与实际应用技术。在本系列中所呈现的所有Python代码都将力求简洁明了,并注重对基本概念和原理的阐释。在理论分析部分,我们尽量避免繁琐的数学推导和复杂证明过程,并着重阐述其物理内涵及其在实际工程中的应用。
感谢您的阅读!
