拓冰建站拓冰建站
首页 / 资讯中心 / 正文

周期信号的傅里叶变换:离散谱线与FFT观测全解析

周期信号能不能做傅里叶变换很多人在学《信号与系统》时会卡在这里非周期能量信号做傅里叶变换积分收敛没问题可遇到 (\sin(\omega_0 t))、周期方波这种信号直接带入傅里叶积分会发现绝对不可积积分结果发散。更明确一点常规意义上的傅里叶变换并不适用于周期信号。但在工程上周期信号的频谱分析又必须做而且天天都在用。解决路径是引入冲激函数把周期信号的离散谱线“搬”到连续频域上得到一组只在基频整数倍位置有值的谱线。这个结果既保留了傅里叶级数中每个谐波分量的幅度和相位信息又能直接套用傅里叶变换的性质进行滤波、调制、采样分析。本文要解决的问题有三个周期信号傅里叶变换的定义怎么来的、几个典型信号的频谱长什么样、以及用 Python/FFT 观察周期信号谱线时应该注意什么。这篇内容适合三类读者正在复习信号与系统、通信原理的本科生需要做谐波分析或频谱检测的工程师以及想深入理解采样定理、调制解调背后数学原理的人。周期信号的傅里叶变换不是孤立的公式推导它连接了傅里叶级数、傅里叶变换、采样定理和频谱分析理解清楚一条主线后面处理连续信号和离散信号都会顺很多。1. 核心知识速览知识维度本文给出的结论研究问题如何定义周期信号的傅里叶变换并解释频谱中的离散谱线数学工具冲激函数、傅里叶级数、傅里叶变换的线性性质核心结论(X(j\omega) 2\pi \sum_{n-\infty}^{\infty} F_n \delta(\omega - n\omega_0))频谱形态离散谱线只出现在基频 (\omega_0) 的整数倍处根数无穷多与傅里叶级数的关系级数系数 (F_n) 决定冲激的面积变换后的频域位置由 (n\omega_0) 决定物理含义功率有限信号不具备能量密度谱应理解为功率谱与离散谐波的对应关系典型应用调制搬频、采样混叠分析、谐波检测、周期信号滤波数值方法FFT 只能近似观察有限时长周期信号的谱线无法直接生成理想冲激周期信号傅里叶变换与传统能量信号傅里叶变换的区别不在于“结果长什么样”而在于进入数学定义的方式。传统傅里叶变换使用普通积分处理能量有限信号周期信号则需要进入广义函数框架用冲激函数描述“能量集中在单个频率点上”的极端频谱分布。2. 周期信号为什么不能直接套用傅里叶变换2.1 普通傅里叶变换的条件信号 (f(t)) 的傅里叶变换定义为[ F(j\omega) \int_{-\infty}^{\infty} f(t) e^{-j\omega t} dt ]为保证积分收敛通常要求信号满足绝对可积条件[ \int_{-\infty}^{\infty} |f(t)| dt \infty ]对于矩形脉冲、指数衰减信号、高斯脉冲这类能量有限信号这个条件是满足的。它们的频谱是连续的或者说频谱是某种宽度的“包络”。周期信号的最大问题是它不会随时间衰减。比如正弦信号 (\cos(\omega_0 t)) 的绝对积分值随着积分区间扩大而无界增长Dirichlet 条件不满足因此常规积分意义下的 (F(j\omega)) 不存在。如果强行做积分会得到振荡不收敛的结果。2.2 周期信号并不是没有频谱工程上不能因为积分不收敛就说周期信号没有频谱。周期信号由基波和一系列整数倍频率谐波叠加而成从傅里叶级数角度看它具有明确的离散频谱结构。问题只是如何把一个周期无限延续的信号放进傅里叶变换的框架里。观察频域中的值周期信号的频谱本来就集中在离散点上而不是连续分布在频率轴上。如果用普通函数表示这些离散点上的“谱密度”应当是无穷大单点的积分面积对应谐波幅度。这正好和冲激函数的特点吻合——冲激函数在单点取值无穷大但面积有限。因此香农和许多信号处理教材把冲激函数引入傅里叶变换用广义函数解释周期信号的频谱。这不仅是数学处理技巧更是工程实践中“频谱密度”概念的延伸频域中单个频率点的谐波不需要连续分布只需要一个由该点冲激构成的“权重”。3. 周期信号傅里叶变换的定义式假设周期信号 (f(t)) 的周期为 (T)基频角频率为[ \omega_0 \frac{2\pi}{T} ]周期信号可以用复指数傅里叶级数表示[ f(t) \sum_{n-\infty}^{\infty} F_n e^{j n \omega_0 t} ]其中傅里叶级数系数为[ F_n \frac{1}{T} \int_{T} f(t) e^{-j n\omega_0 t} dt ]系数 (F_n) 是一个复数它的模表示第 (n) 次谐波的幅度相位表示第 (n) 次谐波的初始相位。接下来对等式两边同时做傅里叶变换。由于傅里叶变换是线性变换可以交换求和与积分顺序[ \mathcal{F}{f(t)} \sum_{n-\infty}^{\infty} F_n \cdot \mathcal{F}{e^{j n \omega_0 t}} ]这里需要用到复指数信号的傅里叶变换结果。推导依据傅里叶反变换式[ \frac{1}{2\pi} \int_{-\infty}^{\infty} 2\pi \delta(\omega - n\omega_0) e^{j\omega t} d\omega e^{j n\omega_0 t} ]这说明 (e^{j n\omega_0 t}) 的傅里叶变换应当是[ \mathcal{F}{e^{j n\omega_0 t}} 2\pi \delta(\omega - n\omega_0) ]于是得到[ F(j\omega) \mathcal{F}{f(t)} 2\pi \sum_{n-\infty}^{\infty} F_n \delta(\omega - n\omega_0) ]这就是周期信号傅里叶变换的最基本公式。理解这个公式有三个关键点频域中每一根谱线都对应时域中的一个复指数分量 (e^{j n\omega_0 t})谱线出现的位置由周期 (T) 决定位置是 (\omega n\omega_0)冲激前的系数 (2\pi F_n) 表示该频谱分量的“面积”。从连续频率角度看周期信号的频谱在所有非 (n\omega_0) 频率点上取值都是零只有在基频整数倍位置存在冲激。频率轴的图形如果画出来应当是一根根竖直的箭头不在任何区间内连续延展。由于 (n) 从负无穷一直取到正无穷严格说周期信号频谱中有无限多个冲激。正负频率都存在这是复指数正交分解带来的结果。4. 典型周期信号的傅里叶变换理解公式之后需要落到具体信号上。下面用三个典型例子展示计算过程正弦余弦信号、直流信号、周期冲激串。4.1 余弦信号[ f(t) \cos(\omega_0 t) ]用欧拉公式展开[ \cos(\omega_0 t) \frac{1}{2} e^{j\omega_0 t} \frac{1}{2} e^{-j\omega_0 t} ]因此傅里叶级数系数只有两项(n1) 时为 (1/2)(n-1) 时为 (1/2)。代入周期信号傅里叶变换式[ F(j\omega) \pi \delta(\omega - \omega_0) \pi \delta(\omega \omega_0) ]这说明余弦信号频谱由两根冲激组成分别位于正负基频 (\omega_0) 处每根冲激的权重为 (\pi)。这里很多人会疑惑为什么不写成 (F_n \frac{1}{2}) 时频谱幅度只有 (1/2)。关键原因是存在冲激之外的因子 (2\pi)(2\pi \times \frac{1}{2} \pi)。如果把横坐标换用频率 (f) 而非角频率 (\omega)系数还要相应变化。同理正弦信号[ \sin(\omega_0 t) \frac{1}{2j} e^{j\omega_0 t} - \frac{1}{2j} e^{-j\omega_0 t} ]其傅里叶变换为[ F(j\omega) j\pi \delta(\omega \omega_0) - j\pi \delta(\omega - \omega_0) ]由于虚数单位 (j) 参与系数计算两根冲激的相位不同这正好反映正弦信号与余弦信号之间的 (90^\circ) 相位差。4.2 直流信号直流信号 (f(t) 1) 也可以看成周期无穷大的特例但从复指数展开看它本质上只包含 (n0) 这一项相当于 (F_0 1)。根据冲激表达式[ \mathcal{F}{1} 2\pi \delta(\omega) ]直流信号的频谱只在零频点存在一根冲激其余频率全部为零。这一点和工程常识一致恒定不变的直流分量不随频率变化它没有任何振荡成分。4.3 周期冲激串周期冲激串在采样理论中非常关键定义为单位冲激以周期 (T) 重复[ f(t) \sum_{n-\infty}^{\infty} \delta(t - nT) ]在一个周期 ([0, T)) 内只有一个 (\delta(t))因此傅里叶级数系数为[ F_n \frac{1}{T} \int_{0}^{T} \delta(t) e^{-j n\omega_0 t} dt \frac{1}{T} ]所有谐波分量的幅度都一样都是 (1/T)。把这个结果代入定义式[ F(j\omega) \frac{2\pi}{T} \sum_{n-\infty}^{\infty} \delta(\omega - n\omega_0) ]更规范地写成[ F(j\omega) \omega_0 \sum_{n-\infty}^{\infty} \delta(\omega - n\omega_0) ]因为 (\omega_0 2\pi / T)所以 (2\pi / T \omega_0)。这个结果的直观含义是周期冲激串的频谱仍然是一个周期冲激串只是脉冲间隔和系数发生了变化。时域周期 (T) 越小频域中相邻冲激间隔 (\omega_0) 越大。理想采样模型中时域做乘法对应频域做卷积采样信号的频谱就是原信号频谱以 (\omega_0) 为间隔周期延拓。4.4 周期矩形脉冲串如果认为冲激串过于特殊还可以分析一个更接近实际的信号——周期矩形脉冲串。设脉冲宽度为 (\tau)周期为 (T)幅度为 1记占空比 (d \tau / T)。计算可得[ F_n \frac{\tau}{T} \frac{\sin(n\pi \tau / T)}{n\pi \tau / T} ]用 sinc 函数可以写成[ F_n \frac{\tau}{T} \operatorname{sinc}\left(\frac{n\tau}{T}\right) ]因此周期矩形脉冲串的傅里叶变换为[ F(j\omega) 2\pi \sum_{n-\infty}^{\infty} \frac{\tau}{T} \operatorname{sinc}\left(\frac{n\tau}{T}\right) \delta(\omega - n\omega_0) ]这说明频谱仍是一根根离散冲激但每根冲激的幅度受到 sinc 包络调制。零点的位置取决于脉冲宽度与周期的比值。这不是简单的等幅冲激串而是“包络内的一排离散谱线”。数字信号中的时钟信号近似就属于这类频谱结构。5. 谱密度与功率谱的对应关系理解周期信号傅里叶变换时必须区分“谱线幅度”和“谱密度”两个概念。普通非周期能量信号的傅里叶变换表示单位频率宽度上的能量分布是能量谱密度而周期信号总能量无穷单位频率上的功率密度用冲激函数表示才合理。与这个体系配套的是帕塞瓦尔定理。对于周期信号 (f(t))平均功率可以写成[ P \frac{1}{T} \int_T |f(t)|^2 dt ]复指数傅里叶级数满足正交性因此平均功率又可以写成各次谐波功率之和[ P \sum_{n-\infty}^{\infty} |F_n|^2 ]工程上如果只需要关心信号在某个频点附近的功率不需要对频域中所有冲激进行积分。直接用 (|F_n|^2) 或 (|F_n|) 就可以描述谐波强度。这也是为什么在频谱仪上观察周期信号时看到的是离散谱线而不是连续谱包络。如果把周期信号的傅里叶变换结果真正当作普通函数去积分会出现问题上冲激平方在普通函数框架下没有定义其积分也不收敛。这说明周期信号处理的数学框架从一开始就是广义函数计算频谱时要把注意力放在冲激的“面积系数”上而不是把它当成一个物理上可测量的有限幅值。这个区别还影响后面学习随机信号和功率谱密度。随机信号中的平稳过程存在于无数个时间点上其功率谱通常也是连续分布的但确定性周期信号的功率谱是离散的整块功率集中在谐波频率处。两者在谱分析中的处理方式并不相同。6. 频移与调制中的应用周期信号傅里叶变换的结果往往和傅里叶变换性质结合在一起使用最常见的场景是振幅调制。设基带信号为 (m(t))载波为 (\cos(\omega_c t))调制后信号为[ s(t) m(t) \cos(\omega_c t) ]根据频域卷积性质时域相乘对应频域卷积[ S(j\omega) \frac{1}{2\pi} M(j\omega) \ast \left[\pi\delta(\omega-\omega_c) \pi\delta(\omega\omega_c)\right] ]展开后得到[ S(j\omega) \frac{1}{2} M(j(\omega - \omega_c)) \frac{1}{2} M(j(\omega \omega_c)) ]这说明调制把基带频谱整体平移到载波频率两侧。如果载波是周期信号而非单频余弦则基带频谱会被复制搬移到载波信号的每一个谐波分量上。理解这一点需要同时掌握傅里叶变换的频移特性和周期信号冲激谱的结构。另一个典型场景是脉冲幅度调制。周期方波或冲激串作为开关信号时理想采样信号为[ x_s(t) x(t) \cdot p(t) ]其中 (p(t)) 是周期冲激串。在频域中采样信号频谱是 (X(j\omega)) 与周期冲激串频谱的卷积结果是基带频谱以采样频率整数倍为中心周期搬移[ X_s(j\omega) \frac{1}{T} \sum_{k-\infty}^{\infty} X(j(\omega - k\omega_s)) ]其中 (\omega_s 2\pi / T) 为采样频率。这就是采样频谱混叠和采样定理的理论出发点。如果不用周期信号傅里叶变换这段推导很难用冲激卷积的语言表达清楚。7. Python 验证周期信号的离散谱线工程中无法直接计算理想冲激但可以通过 FFT 观察周期信号的有限长度谱线。需要明确一点FFT 不是理想傅里叶变换的严格替代它只在有限观测时间和离散频点上给出近似。观测时间如果正好取信号周期的整数倍FFT 结果会出现明显的离散谱峰如果观测长度不是整数倍就会出现频谱泄漏谱峰周围散落很多小旁瓣。下面用周期信号做一次验证。import numpy as np import matplotlib.pyplot as plt fs 8192 # 采样率Hz f0 20 # 基频Hz T 0.25 # 观测时长s正好包含 5 个周期 t np.arange(0, T, 1/fs) # 构造周期信号基波 3 次谐波 7 次谐波 x 1.0 * np.cos(2 * np.pi * f0 * t) \ 0.5 * np.cos(2 * np.pi * 3 * f0 * t np.pi / 6) \ 0.2 * np.cos(2 * np.pi * 7 * f0 * t) N len(x) # 使用汉宁窗抑制泄漏 window np.hanning(N) xw x * window X np.fft.rfft(xw) freq np.fft.rfftfreq(N, d1/fs) # 幅度归一化加窗后需要做幅值恢复 amp 2 * np.abs(X) / N / window.mean() plt.figure(figsize(10, 4)) plt.stem(freq[:200], amp[:200]) plt.xlabel(Frequency (Hz)) plt.ylabel(Amplitude) plt.title(Periodic Signal Spectrum via FFT) plt.grid(True) plt.show()运行这段代码后频谱图上最明显的位置会在 (20) Hz、(60) Hz、(140) Hz 附近出现三个谱峰分别对应基波、三次谐波和七次谐波。如果不加窗并且观测时长不是周期整数倍那么 (20) Hz 旁边的旁瓣会变得很高干扰对真实谱线的判断。这里还需要解释幅度恢复逻辑。FFT 默认分析对象是时域能量的累积加窗后信号总幅度被压缩因此用window.mean()做归一化可以尽量恢复谐波幅度。实际工程中不同窗函数的幅度恢复系数不同汉宁窗的恢复系数也不是严格等于1/window.mean()在高精度测量时需要查表校准。从数值现象再回看理论FFT 输出的离散谱峰在频域中占据一定宽度这和理想冲激有差别。真正用频谱仪观察周期信号时分辨率带宽也会决定谱线展宽程度。周期信号傅里叶变换理论中的“冲激”是一种极限抽象现实仪器和算法都只能在有限带宽内近似接近它。8. 常见误区与排查思路问题现象可能原因处理思路把周期信号直接代入傅里叶积分出现发散信号不满足绝对可积条件改用广义傅里叶变换引入冲激函数不理解余弦信号频谱系数为什么是 (\pi)忘记角频率定义中存在 (1/2\pi)始终用 (2\pi F_n) 作为冲激面积FFT 频谱在基频附近出现大量旁瓣观测时长不是信号周期的整数倍调整采样点数或加汉宁窗抑制泄漏频谱图上谱线幅度与理论 (F_n) 不一致FFT 归一化方式与连续傅里叶变换不一致检查窗函数、采样率、幅值恢复系数把冲激函数当成普通可测量函数未进入广义函数体系只把冲激前的系数当有效信息使用 (f) 为单位时的傅里叶变换公式角频率 (\omega) 与频率 (f) 定义不同统一公式体系不要混合使用两侧定义周期方波频谱出现零点但找不准零点位置由 (n\tau/T 整数) 决定根据脉冲宽度与周期比值直接算零点认为周期信号的总能量可以被有限积分周期信号功率有限但能量无穷用平均功率或者帕塞瓦尔定理处理这些误区在教学和工程调试里都很常见。排查思路其实很统一先明确使用的是傅里叶级数还是傅里叶变换再确认频率单位是 (\omega) 还是 (f)最后检查数值算法中的窗函数和归一化方式。三者对齐后理论与实验不会相差太远。9. 工程应用与使用边界周期信号傅里叶变换在电路、通信、自动控制和电力系统中并不只停留在理论公式本身它几乎遍布每个需要频率分析的环节。电力系统中的谐波分析是最直接的应用。电网中的电压电流信号在理想状态是 (50) Hz 正弦波实际中由于非线性负载会产生 (100) Hz、(150) Hz、(250) Hz 等整数倍频率谐波。用有限时间窗做 FFT 测量时如果窗长正好取 (10) 个工频周期可以大幅降低泄漏误差。理论依据恰恰来自周期信号只在基频整数倍有谱线这一结论。通信系统里调制和解调本质上就是频谱搬移。载波信号是周期信号因此频谱由离散谐波组成基带信号与载波相乘后频谱会平移到载波谐波位置。学习正交幅度调制时如果不能快速理解信号与复指数相乘等价于频域搬移就不容易理解 I/Q 两路信号的结构。采样系统设计是另一个高频使用场景。理想采样中的周期冲激串虽然是数学理想化模型但它给出了采样频谱周期延拓的本质规律。实际 ADC 使用有限脉宽脉冲傅里叶变化仍接近周期冲激串的推导只是频谱包络出现 sinc 衰减。了解理想模型才能预测非理想采样带来的高频衰减和混叠。周期信号傅里叶变换也存在使用边界。它描述的是“确定性的、无限延续的周期信号”而现实世界里的信号通常有起始点、有噪声、有缓慢漂移。实际测量时你只能取有限时长进行分析任何有限观测都会引入谱泄漏或窗函数误差。工程中使用 FFT 时要意识到观测窗函数、分辨率和噪声对谱峰形状和幅值的影响。另一个需要特别注意的问题是频率与角频率的选择。许多通信教材使用单边谱表达只在正频率画出谱线而傅里叶级数天然给出双边谱正负频率都存在。两种表示在功率值上需要系数折算使用时要保持统一否则容易把幅度算差一倍。10. 应用示例周期信号滤波器设计思路如果需要一个滤波器只保留周期信号中的 3 次谐波抑制基波和高次谐波采用带通滤波器即可。设计前先确定三个关键频率基频 (f_0)、目标谐波频率 (3f_0)、需要抑制的谐波频率 (2f_0) 与 (4f_0)。滤波器中心频率设为 (3f_0)带宽需要窄到能避开相邻谐波但又要足够宽以适应信号频率漂移。设计步骤可以整理如下测量信号的准确基频用锁相环或过零检测跟踪基频变化确定滤波器类型巴特沃斯滤波器提供平坦通带切比雪夫滤波器提供更陡峭的过渡带但通带有纹波根据相邻谐波间隔选择阶数阶数过低会导致相邻谐波衰减不足通过仿真或实测确认三次谐波的幅度与相位是否满足需要系统接入后监测滤波器输出端的谐波泄漏程度。周期信号由于谱线间距等于基频滤波器选择性要求与信号基频高低直接相关。基频越低谱线越密过渡带设计难度越大。比如处理 (50) Hz 信号要区分 (50) Hz 间隔的谱线滤波器阶数通常要比处理 (1) kHz 信号更高。这是周期信号频谱离散性带来的设计挑战也是傅里叶变换理论直接指导工程实践的重要案例。设计过程中可以先用 MATLAB 或 Python 的scipy.signal快速原型验证再落实为模拟或有源滤波器电路。测试时输入源必须保证为周期信号否则常见的相邻频点能量泄漏会导致滤波器输出结果畸变。11. 学习路径与进阶引导周期信号傅里叶变换的上游是傅里叶级数下游是采样定理、离散傅里叶变换和滤波器设计。如果上面的内容已经掌握清楚可以从以下几条线索继续深入。先练傅里叶级数计算。自己手动求三角波、半波整流信号、升余弦信号的傅里叶系数再画频谱图。多算几个典型信号后会发现这些谱线形态有一定规律能帮助理解为什么有些谐波不存在。然后练习连续傅里叶变换性质。周期信号的推导过程中只用了线性性质但实际系统分析中还经常使用时移、频移、卷积、微分这些性质。可以考虑一个矩形脉冲串做时移后谱线相位如何变化。再进入离散时间域。理想采样信号频谱周期延拓后采样频率低于信号最高频率会导致混叠混叠后的频谱无法恢复原信号。这可以解释为什么大多数 ADC 前端必须加抗混叠滤波器。最后回到现实测量。用示波器采集一个方波或任意周期波形导出数据后用 Python 做窗函数对比。比较矩形窗、汉宁窗、布莱克曼窗对频谱泄漏的抑制效果会真正体会傅里叶变换理论在数值计算中的价值。周期信号傅里叶变换表面上是公式处理实际上是理解信号频谱世界的枢纽。把冲激谱的物理含义想清楚后面接触采样定理、调制解调、匹配滤波都会顺畅得多。你也可以先把本文中的三个典型推导重新手写一遍重点核对每一项的 (2\pi) 因子到底从哪一步进入公式这是最容易出错也最容易补齐理解缺口的地方。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门