FEATURED · 精选文章

从傅里叶变换到Python实战:频谱分析、采样与滤波器全解析

发布时间 / 2026/8/31 7:42:16
来源 / 创域科博编辑部
栏目 / 资讯中心
从傅里叶变换到Python实战:频谱分析、采样与滤波器全解析 在信号与系统这门课里很多人一开始都会被“频域”这个概念绕晕。时域波形明明是眼睛能看见、示波器能测到的信号为什么还要费尽心思把它变换到频域去分析频谱图上的一个个尖峰到底代表了什么为什么采样频率不够信号就会“变质”AM 调制为什么能用一个正弦波把低频信号搬到高频上去这些问题如果只看课本上的推导很难真正建立直觉。这篇文章会围绕频谱分析、频域分析、调制、滤波器和采样这五个核心主题用尽量通俗的语言把概念讲清楚再结合 Python 代码做一组可以直接运行的实验。通过观察信号的时域波形和频谱图你会理解傅里叶变换在做什么采样定理为什么是数字信号处理的基石滤波器又是如何按照频率来“放行”或“拦截”信号的。整个过程不需要复杂的硬件一台电脑、一个 Python 环境就够了。无论你是信号与系统课程还在入门阶段的在校生还是工作中需要处理波形数据、音频信号、传感器数据的开发者这篇文章都能帮你把零散的知识点串联起来。1. 背景与核心概念1.1 什么是信号与系统信号是信息的载体。常见的信号包括声音信号、图像信号、传感器采集的温度数据、心电波形等等。从数学上看信号可以表示为一个或多个自变量的函数。比如随时间变化的电压信号可以写成 x(t)一幅灰度图像可以写成 I(x, y)。系统则是作用于信号的处理过程。系统接收输入信号经过某种变换或运算产生输出信号。比如一个低通滤波器就是一个系统它接收包含高频噪声的输入信号输出滤除高频成分后的信号。信号与系统这门学科研究的就是两件事一是信号本身具有什么样的性质二是信号通过系统之后会发生什么变化。而频谱分析正是研究信号性质最有力的工具。1.2 时域与频域同一枚硬币的两面我们平时接触到的信号绝大多数是以时间为自变量来观察的也就是时域视角。示波器上显示的波形就是时域波形横轴是时间纵轴是幅度。时域分析直观但它有一个明显的局限当信号由多个频率成分叠加而成时很难一眼看出信号里包含了哪些频率分量。频域分析提供了另一个观察角度。在频域视角下横轴是频率纵轴是幅度或相位。信号被分解为一系列不同频率的正弦波或复指数之和每个频率对应一个幅度值。这样一来一个看似复杂的时域波形在频域里可能就是几条清晰的谱线。举个例子一段由 50Hz 和 120Hz 正弦波叠加而成的信号时域波形是两条正弦曲线叠加后的形状肉眼很难直接分辨出这两个频率。但经过傅里叶变换后频谱图上会在 50Hz 和 120Hz 两个位置出现明显的尖峰一眼就能看清信号的频率构成。1.3 为什么需要频域分析频域分析并不是为了把简单问题复杂化而是因为很多在时域中难以处理的问题在频域中会变得非常简单。滤波器设计滤波器的本质就是按照频率对信号进行加权。低通滤波器保留低频分量、衰减高频分量。在频域中滤波器的特性一目了然。信号识别与特征提取在设备故障诊断中轴承磨损、齿轮断齿等故障都会在振动信号的特定频段产生特征分量。通过频域分析可以快速识别故障类型。通信系统设计调制就是将基带信号的频谱搬移到高频载波上接收端再通过解调把频谱搬回来。整个过程用频域分析描述非常简洁。采样与混叠判断判断采样频率是否满足要求必须借助信号的频谱带宽来分析。可以说频域分析是连接信号理论、数字信号处理和工程应用之间的桥梁。2. 环境准备与版本说明接下来要动手做实验先把环境准备好。本文所有代码基于 Python 编写使用的核心库包括 NumPy、SciPy 和 Matplotlib。这三个库是 Python 科学计算最常用的组合几乎所有的信号处理示例都可以用它们完成。工具/库作用Python 3.8运行环境推荐 3.9 或更高版本NumPy提供数组运算和 FFT 实现Matplotlib绘制时域波形和频谱图SciPy提供滤波器设计和信号处理工具安装命令如下pip install numpy matplotlib scipy如果使用的是 Anaconda 环境这三个库通常已经预装可以直接在 Jupyter Notebook 或 VS Code 中运行。本文代码不依赖特定平台Windows、macOS、Linux 均可以直接运行。版本说明NumPy 和 SciPy 的接口在近几个大版本中基本保持稳定本文使用的 np.fft、scipy.signal.butter 等接口都是长期存在的公共 API。如果你使用的是较老的 NumPy 1.x 版本代码同样可以运行如果你使用的是较新的 NumPy 2.x需要注意个别函数签名差异但本文涉及的函数不受影响。3. 核心原理拆解3.1 傅里叶变换进入频域的大门傅里叶变换是频域分析的理论基础。它把一个时域信号 x(t) 分解为一系列复指数信号的叠加。连续时间傅里叶变换的公式如下X(f) ∫ x(t) e^{-j2πft} dt其中 f 是频率X(f) 表示信号在频率 f 处的分量。X(f) 的模 |X(f)| 称为幅度谱它表示信号在各个频率上的幅度大小X(f) 的辐角称为相位谱表示各个频率分量的相位信息。对于计算机处理而言信号是离散的有限长序列使用的是离散傅里叶变换DFT。直接计算 DFT 的运算量很大实际中使用的是快速傅里叶变换FFT它把 O(N²) 的运算量降低到 O(NlogN)使得实时频谱分析成为可能。在 Python 中我们可以用一行代码完成 FFTimport numpy as np # 生成一个包含 50Hz 和 120Hz 的信号 fs 1000 # 采样率 1000Hz t np.arange(0, 1, 1/fs) x 0.7 * np.sin(2 * np.pi * 50 * t) np.sin(2 * np.pi * 120 * t) # FFT 分析 X np.fft.fft(x) freqs np.fft.fftfreq(len(x), 1/fs)这里的关键是理解 np.fft.fftfreq 生成的频率轴。fftfreq 返回的是长度为 N 的数组前一半是正频率后一半是负频率。对于实信号来说负频率部分是正频率部分的共轭对称因此通常只画出正频率部分即可。幅度谱的幅值需要做归一化处理。FFT 结果中每一个频点上的数值其绝对值约为对应正弦分量幅值的 N/2 倍单边谱因此实际绘制幅度谱时通常乘以 2/N。3.2 采样定理模拟到数字的桥梁计算机只能处理离散的数字信号而现实世界中的信号大多是连续的模拟信号。把模拟信号转换为数字信号必须经过采样。采样定理奈奎斯特-香农采样定理给出了无失真采样的条件采样频率 fs 必须大于信号最高频率 fmax 的两倍即 fs 2fmax。如果采样频率不满足这个条件信号中高于 fs/2 的频率成分会“折叠”回低频区域产生混叠aliasing现象。混叠一旦发生就无法通过后续的数字处理来恢复原始信号。为了直观理解混叠我们看一个例子import numpy as np import matplotlib.pyplot as plt # 模拟 90Hz 信号分别用 200Hz 和 100Hz 采样 f_signal 90 t_cont np.linspace(0, 0.1, 2000) x_cont np.sin(2 * np.pi * f_signal * t_cont) fs1 200 t1 np.arange(0, 0.1, 1/fs1) x1 np.sin(2 * np.pi * f_signal * t1) fs2 100 t2 np.arange(0, 0.1, 1/fs2) x2 np.sin(2 * np.pi * f_signal * t2) plt.figure(figsize(12, 4)) plt.subplot(1, 3, 1) plt.plot(t_cont, x_cont) plt.title(原始 90Hz 信号) plt.subplot(1, 3, 2) plt.stem(t1, x1) plt.title(200Hz 采样满足条件) plt.subplot(1, 3, 3) plt.stem(t2, x2) plt.title(100Hz 采样混叠) plt.tight_layout() plt.show()当采样率为 100Hz 时fs/2 50Hz而信号频率为 90Hz超过奈奎斯特频率采样点反而表现为一个 10Hz 的低频信号。这就是混叠的直接后果。在 ADC模数转换器应用中通常会在采样之前加入抗混叠滤波器先把高于 fs/2 的频率成分滤除然后再采样。3.3 调制与解调频谱的搬移调制是通信系统中的核心技术。它的本质是把基带信号的频谱搬移到更高的频段使信号适合在信道中传输。最常见的幅度调制AM可以表示为x_AM(t) [A0 m(t)] · cos(2πfc·t)其中 m(t) 是基带信号A0 是直流偏置fc 是载波频率。从频域角度看调制的过程就是把基带信号的频谱搬移到 ±fc 附近。这个过程可以通过乘法器实现也可以用数字方式在软件中模拟。解调则是调制的逆过程。对于 AM 信号一种简单的解调方法是相干解调将接收信号乘以同频率的载波再经过低通滤波器滤除高频分量即可恢复出原始基带信号。import numpy as np import matplotlib.pyplot as plt from scipy.signal import butter, lfilter fs 10000 t np.arange(0, 1, 1/fs) # 基带信号5Hz 正弦波 m np.sin(2 * np.pi * 5 * t) fc 500 # 载波频率 500Hz # AM 调制A0 取 2保证包络完整 A0 2 x_am (A0 m) * np.cos(2 * np.pi * fc * t) # 相干解调 x_demod x_am * np.cos(2 * np.pi * fc * t) # 低通滤波器设计 b, a butter(4, 30 / (fs/2), btypelow) m_rec lfilter(b, a, x_demod)上面的代码演示了 AM 调制与相干解调的核心过程。注意低通滤波器的截止频率需要设置为基带信号的最高频率附近同时低于载波频率才能有效滤除高频分量。3.4 滤波器频率的守门员滤波器是信号处理中最常用的系统之一。它的功能是按照频率对信号进行选择性传输让一部分频率成分通过衰减另一部分频率成分。按频率特性分类常见的滤波器有四种低通滤波器Low-pass保留低频衰减高频。高通滤波器High-pass保留高频衰减低频。带通滤波器Band-pass只保留某个频带内的信号。带阻滤波器Band-stop衰减某个频带内的信号。理想滤波器的频率响应是一个矩形窗通带内幅度为 1阻带内幅度为 0。但理想滤波器在物理上是不可实现的因为它的冲激响应在时间上无限延伸且非因果。实际滤波器通过设计逼近理想特性常见的有巴特沃斯滤波器、切比雪夫滤波器、椭圆滤波器等。巴特沃斯滤波器具有单调平坦的通带特性是最常用的滤波器类型。在 SciPy 中设计巴特沃斯滤波器的接口如下from scipy.signal import butter, lfilter # 设计一个 4 阶低通滤波器截止频率为 60Hz def butter_lowpass(cutoff, fs, order4): nyq 0.5 * fs normal_cutoff cutoff / nyq b, a butter(order, normal_cutoff, btypelow, analogFalse) return b, a b, a butter_lowpass(60, fs1000) y lfilter(b, a, x)滤波器设计中有几个关键参数需要关注滤波器阶数order阶数越高过渡带越窄滤波效果越陡峭但相位失真也越明显计算量也更大。截止频率cutoff通带和阻带之间的分界频率。滤波类型btypelow、high、bandpass、bandstop。lfilter 是 IIR 滤波器的时域滤波函数它采用直接型结构实现差分方程。如果数据量很大且需要实时处理也可以使用 scipy.signal.sosfilt 配合二阶分段结构数值稳定性更好。4. 完整实战案例信号生成、频谱分析、调制与滤波现在我们把前面讲到的知识点整合到一个完整的实验项目中。这个实验的流程如下生成一个由两个不同频率正弦波叠加而成的基带信号。对基带信号进行 FFT绘制幅度谱观察频谱结构。对基带信号进行 AM 调制将频谱搬移到高频段。在调制信号上叠加高斯白噪声模拟信道干扰。设计带通滤波器从含噪信号中提取已调信号。进行相干解调再通过低通滤波器恢复基带信号。对比恢复信号与原始信号分析误差。这个实验完整覆盖了采样、频域分析、调制、滤波四个核心主题不算复杂但足够帮助你建立信号处理全流程的直觉。4.1 创建项目结构和数据新建一个 Python 文件例如 signal_demo.py。实验参数统一放在脚本开头方便调整。import numpy as np import matplotlib.pyplot as plt from scipy.signal import butter, lfilter, freqz # 全局参数 FS 10000 # 采样率 10kHz T 1 # 信号时长 1 秒 N int(FS * T) # 采样点数 t np.arange(N) / FS # 信号参数两个频率分量 f1 5 # 5Hz f2 20 # 20Hz a1 1.0 # 幅度 1 a2 0.5 # 幅度 0.5 # 生成基带信号 m a1 * np.sin(2 * np.pi * f1 * t) a2 * np.sin(2 * np.pi * f2 * t)在这个设计中基带信号的最高频率是 20Hz采样率 10kHz远大于奈奎斯特条件采样过程不会产生混叠。4.2 编写 FFT 频谱分析函数频谱分析是后续所有环节的基础。我们编写一个通用函数输入时域信号和采样率输出频率轴和归一化振幅谱。def compute_spectrum(x, fs): 计算信号的幅度谱 返回频率轴 freqs 和单边谱幅度 amp n len(x) X np.fft.fft(x) freqs np.fft.fftfreq(n, 1/fs) # 只取正频率部分 half n // 2 freqs freqs[:half] amp 2.0 / n * np.abs(X[:half]) return freqs, amp def plot_spectrum(x, fs, title): freqs, amp compute_spectrum(x, fs) plt.figure(figsize(10, 3)) plt.plot(freqs, amp) plt.xlim(0, 1000) plt.xlabel(频率 (Hz)) plt.ylabel(幅度) plt.title(title) plt.grid(True) plt.show()注意这里我们使用了 2.0 / n 的归一化系数。对于 N 点 FFT一个幅度为 A 的正弦分量会在正频域产生幅度为 A·N/2 的峰所以乘以 2/N 可以将频谱幅度还原为信号的原始幅度。4.3 观察基带信号频谱调用上面的函数绘制基带信号的时域波形和频谱图。plt.figure(figsize(10, 6)) plt.subplot(2, 1, 1) plt.plot(t, m) plt.xlabel(时间 (s)) plt.ylabel(幅度) plt.title(基带信号时域波形) plt.grid(True) plt.xlim(0, 0.5) plt.subplot(2, 1, 2) freqs, amp compute_spectrum(m, FS) plt.plot(freqs, amp) plt.xlabel(频率 (Hz)) plt.ylabel(幅度) plt.title(基带信号频谱) plt.grid(True) plt.xlim(0, 100) plt.tight_layout() plt.show()运行后可以观察到频谱图上 5Hz 和 20Hz 两个位置出现明显的峰值峰值高度分别为 1.0 和 0.5与设定的信号幅度完全一致。这验证了 FFT 幅度归一化的正确性。4.4 AM 调制与频谱搬移接下来对基带信号进行 AM 调制。载波频率选择 500Hz直流偏置取 2以避免过调幅导致的包络失真。fc 500 A0 2 carrier np.cos(2 * np.pi * fc * t) x_am (A0 m) * carrier # 观察已调信号的频谱 plot_spectrum(x_am, FS, AM 调制信号频谱)频谱图会显示原本在 5Hz 和 20Hz 附近的两个峰被搬移到了 500Hz 两侧即 500±5Hz 和 500±20Hz 附近。这就是频谱搬移最直观的体现。4.5 添加噪声模拟信道干扰实际通信系统中信号在信道传输过程中会叠加噪声。我们以高斯白噪声为例。np.random.seed(42) noise 0.3 * np.random.randn(N) x_noisy x_am noise plot_spectrum(x_noisy, FS, 含噪 AM 信号频谱)添加噪声后整个频带上都会出现噪声基底。如果信噪比比较低时域波形会模糊不清但在频域中500Hz 附近的信号成分依然比较突出。4.6 带通滤波提取已调信号为了从含噪信号中恢复 AM 信号我们使用带通滤波器保留 500Hz 附近的分量滤除带外噪声。def butter_bandpass(lowcut, highcut, fs, order4): nyq 0.5 * fs low lowcut / nyq high highcut / nyq b, a butter(order, [low, high], btypeband) return b, a b_bp, a_bp butter_bandpass(400, 600, FS, order4) x_filtered lfilter(b_bp, a_bp, x_noisy) plot_spectrum(x_filtered, FS, 带通滤波后信号频谱)带通滤波器的通带范围设置为 [400Hz, 600Hz]可以覆盖 500±20Hz 的所有信号分量同时滤除大部分噪声。4.7 相干解调与低通滤波解调时将带通滤波后的信号乘以同频率载波。这一步会产生一个直流分量和一个 2fc 附近的高频分量再用低通滤波器滤除高频分量即可。x_demod x_filtered * np.cos(2 * np.pi * fc * t) b_lp, a_lp butter_lowpass(50, FS, order4) m_est lfilter(b_lp, a_lp, x_demod) # 去除解调引入的直流分量 m_est m_est - np.mean(m_est)这里的 butter_lowpass 函数我们在前面已经定义过。低通滤波器的截止频率设置为 50Hz可以保留基带信号 20Hz 以内的频率成分同时滤除 900Hz 左右的高频分量。4.8 结果对比与误差分析最后将恢复信号与原始信号进行对比。plt.figure(figsize(12, 6)) plt.subplot(3, 1, 1) plt.plot(t, m) plt.xlim(0.2, 0.8) plt.title(原始基带信号) plt.subplot(3, 1, 2) plt.plot(t, x_am) plt.xlim(0.2, 0.8) plt.title(AM 调制信号) plt.subplot(3, 1, 3) plt.plot(t, m_est) plt.xlim(0.2, 0.8) plt.title(解调恢复信号) plt.tight_layout() plt.show() # 计算误差 error m - m_est print(f最大误差: {np.max(np.abs(error)):.4f}) print(f均方根误差: {np.sqrt(np.mean(error**2)):.4f})运行结果说明在噪声较小的情况下解调恢复的基带信号与原始信号基本重合。由于滤波器的过渡带和相位响应的影响恢复信号会存在一定的幅度衰减和相位延迟这是模拟滤波器不可避免的。5. 常见问题与排查思路在实际使用 Python 做信号处理时经常遇到一些问题。整理如下问题现象常见原因解决思路频谱幅值与真实幅度不一致FFT 结果没有归一化单边谱幅度乘以 2/N频谱最高峰频率偏小一个刻度fftfreq 频率轴计算错误使用 np.fft.fftfreq(n, 1/fs) 生成正确频率轴频谱出现不该有的低频分量时域信号存在直流分量先去除信号均值再做 FFT高频信号变成了低频信号采样率不满足采样定理发生混叠提高采样率或先经过抗混叠低通滤波器信号频率附近出现“拖尾”时域截断导致频谱泄漏使用窗函数汉宁窗、汉明窗减少泄漏滤波器滤波后信号幅值变小滤波器阶数过高通带边缘衰减调整滤波器阶数或截止频率解调后的信号有高频纹波低通滤波器截止频率过高降低截止频率或提高滤波器阶数出现过调幅现象AM 调制时直流偏置过小保证 A0 max(更详细的排查方法如下。5.1 频谱泄漏问题对有限长信号做 FFT等于对无限长信号进行矩形窗截断。截断会导致频谱泄漏即信号能量扩散到主瓣附近的频率上使频谱出现拖尾。解决泄漏的方法是使用窗函数。在 FFT 之前将信号乘以一个窗函数比如汉宁窗window np.hanning(N) X np.fft.fft(x * window)使用窗函数之后主瓣会变宽但旁瓣会显著降低频谱的泄漏现象得到明显改善。需要注意的是加窗会降低频谱幅度的精度幅值归一化系数也需要相应调整。5.2 滤波器不稳定或输出 NaN滤波器阶数过高或参数设计不当可能导致滤波器不稳定输出出现 NaN 或无穷大。特别是 IIR 滤波器阶数越高极点越靠近单位圆稳定性风险越大。排查时先检查滤波器系数b, a butter(10, 0.1, btypelow) print(a 系数:, a)如果 a 中存在接近 0 的值滤波器必然不稳定。建议使用 sosfilt 代替 lfilter因为二阶分段结构在数值上更稳定from scipy.signal import butter, sosfilt sos butter(4, 0.1, btypelow, outputsos) y sosfilt(sos, x)5.3 幅值归一化混乱FFT 的幅值归一化是初学者最容易出错的环节。总结一下规则对于实信号FFT 结果关于 N/2 对称通常只画单边谱。单边谱的幅度要乘以 2/N。直流分量0Hz不在此规则内不需要乘以 2。如果信号本身是复数信号则不需要乘以 2。如果只是观察频谱形状不关心绝对幅度可以不做归一化但要注意图上的纵轴刻度不能直接代表信号幅度。6. 最佳实践与工程建议6.1 先看时域再做频谱在实际信号分析中强烈建议先观察时域波形确认信号的长度、幅度范围、是否存在直流偏置或异常突变然后再做频谱分析。时域中的异常往往能提前预警频域分析可能出现的问题。例如如果时域波形在首尾出现突变说明截断不完整需要考虑加窗如果时域信号有明显的趋势项频谱图中 0Hz 附近会出现很大的分量需要先做去趋势处理。6.2 采样频率与抗混叠设计数字信号处理系统的第一步一定是采样。在实际工程中采样频率的选择要考虑两个因素信号最高频率和系统成本。采样频率越高ADC 成本越高数据量越大对处理器的压力也越大。推荐的做法是先对模拟信号做抗混叠滤波再以大于两倍信号最高频率的采样率进行采样。在条件允许的情况下可以采用过采样技术用更高的采样频率换取后续数字滤波的设计灵活性。6.3 滤波器的选择IIR 还是 FIR滤波器的选择要结合实际需求。IIR 滤波器如巴特沃斯、切比雪夫阶数低计算效率高但相位响应是非线性的会产生相位失真。适合对相位要求不高的场景如语音、振动信号的能量分析。FIR 滤波器具有严格的线性相位特性不会造成波形畸变但同等过渡带条件下阶数更高计算量更大。适合对信号波形保真度要求高的场景如生物电信号、通信基带处理。如果硬件资源有限但需要线性相位可以考虑 IIR 滤波后做零相位反向滤波filtfilt。6.4 代码工程化建议把信号处理代码写成可复用的函数而不是全部堆在脚本里。建议至少拆分以下模块信号生成模块负责产生测试信号。频谱分析模块封装 FFT、窗函数、归一化逻辑。滤波器设计模块封装滤波器的创建与参数验证。可视化模块统一绘图风格和坐标轴范围。统一的绘图风格也很重要。建议在代码开头设置 Matplotlib 全局参数import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei, Arial Unicode MS, DejaVu Sans] plt.rcParams[axes.unicode_minus] False plt.rcParams[figure.dpi] 100这样在绘图中文字标题时不会出现乱码。6.5 处理边界条件在真实工程中信号处理不能只在仿真环境中跑通还需要处理各种边界条件信号过短FFT 的点数太少频率分辨率太低。此时可以用补零的方式增加 FFT 点数但要注意补零不能提高真实频率分辨率只是让频谱曲线更平滑。信号异常值传感器数据可能包含 NaN、毛刺、跳变。建议在做 FFT 之前先处理异常值否则会导致频谱严重畸变。分段处理处理长信号时不要一次性把整段信号送入 FFT。推荐使用分段 FFT、重叠处理、以及短时傅里叶变换STFT来分析时变信号。频率分辨率有一个重要公式Δf fs / N其中 N 是 FFT 点数。如果采样率 10kHz做 1000 点 FFT频率分辨率就是 10Hz。也就是说两个频率相差小于 10Hz 的分量在频谱上是无法分辨的。要提高频率分辨率可以增加 FFT 点数也就是采集更长时间的信号。6.6 安全与确认原则在真实系统中对采集到的数据进行滤波或频谱分析时尤其是在后续会自动产生控制动作或告警判断的场景中需要遵守基本的工程确认原则每次修改参数前保留原始数据备份。关键分析结果输出到日志文件便于回溯。对自动判断逻辑先离线回放验证再上线上验证。涉及权限操作或生产数据修改时遵循最小权限原则先申请、再操作、后确认。这些原则虽然与算法本身无关但在工程化落地的过程中同样重要。7. 总结与学习路线通过本文的梳理和实验你应该已经掌握了几件关键的事情傅里叶变换是频域分析的理论核心FFT 是计算机实现频谱分析的高效工具采样定理划定了模拟信号数字化的边界低于奈奎斯特频率的采样必然产生混叠AM 调制将基带信号的频谱搬移到高频段解调则是用载波相乘加低通滤波把频谱搬回来滤波器在频域中扮演“频率守门员”的角色不同特性的滤波器适用于不同的任务。如果接下来想继续深入学习信号处理可以参考下面这条路线先理解傅里叶变换的物理意义区分傅里叶级数、连续时间傅里叶变换、离散时间傅里叶变换和离散傅里叶变换这四个概念。练习用 Python 对不同类型的信号做 FFT包括正弦波、方波、三角波、噪声信号观察它们频谱的差异。学习短时傅里叶变换STFT理解为什么时变信号不能只用全局频谱来描述。深入滤波器设计比较巴特沃斯、切比雪夫、椭圆滤波器在不同指标下的表现。尝试实现一次完整的通信链路包括调制、信道建模、接收端同步、解调、误码率分析。如果对硬件感兴趣可以在单片机或 SDR 设备上做实时信号采集和频谱分析。在实际项目中最值得警觉的是采样混叠和频谱泄漏。前者会导致信号频率被错误识别后者会掩盖小幅信号的真实特征。两者都是原理层面的问题不是靠调参就能完美解决的必须在系统设计阶段就充分考虑。如果本文对你有帮助可以收藏备用也欢迎在自己的项目中动手把代码跑一遍。信号处理是一门非常依赖直觉的学科看得再多都不如亲手画出一幅频谱图来得印象深刻。
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻