ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

傅里叶变换四种形式全解析:CTFT/FS/DTFT/DFT对比与工程应用

傅里叶变换四种形式全解析:CTFT/FS/DTFT/DFT对比与工程应用 傅里叶变换这四个字可能是信号与系统课程里最让人头疼的四个字。更头疼的是教材上一口气给出好几种变换傅里叶级数FS、连续时间傅里叶变换CTFT、离散时间傅里叶变换DTFT、离散傅里叶变换DFT有的教材还会叠上拉普拉斯变换和Z变换。很多同学学完、考完脑子里就剩下一句话反正都是把时域变到频域。但做过实际信号处理的人会告诉你如果只记住这一句话后面做通信、做音频处理、做振动分析会处处碰壁。四种变换虽然共享同一个傅里叶思想但它们的输入输出形态完全不同分别对应不同的物理场景用错了地方结论可能南辕北辙。这篇文章想帮大家做一件事把傅里叶变换的四种形式放到同一张逻辑图上说清楚它们各自是什么、为什么存在、怎么互相推导以及在工程上为什么你打开 Python 写一行np.fft.fft()其实就是在用其中某一种形式。这篇文章适合谁准备信号与系统、数字信号处理考试的学生刚接触频谱分析的工程师还有那些公式看得懂、一遇到实际信号就发懵的朋友。我会尽量用大白话加实际例子来讲争取让你读完以后下次再看到这四对名词能直接说出它们之间差在哪里、用哪一个、怎么用。1. 用一张坐标图把四种形式装进脑子里先说结论傅里叶变换之所以有四种形式不是因为数学家没事找事而是因为现实世界的信号本来就有四种不同形态。判断形态的维度只有两个时间或空间是连续的还是离散的频率是连续的还是离散的。把这两个维度一交叉正好四个象限四种变换各占一个。你可以在纸上画两条互相垂直的坐标轴横轴写时域是连续还是离散纵轴写频域是连续还是离散然后把四种变换一一填进四个格子这块知识的地基就算打好了。1.1 两个维度时域的连续/离散频域的连续/离散先说时域。我们接触的物理信号比如麦克风收到的声音、示波器看到的电压时间轴是连续的任意一个时刻理论上都有值。但计算机只能存储采样点时间轴是离散的。这就是时域连续和时域离散的差别。频域同理一个信号的频谱可以是连续的一段比如一个非周期脉冲的频谱铺满整条频率轴也可以是一根根离散的谱线比如一个周期信号它的频率成分是等间隔、可数的。有一个需要立刻记住的对应关系连续频谱是非周期信号的标志离散频谱是周期信号的标志。这不是巧合。周期信号在时域上无限重复它的频率成分只能出现在基频的整数倍位置自然就是离散的线谱非周期信号不会重复能量的分布必然是连续的。所以后面讨论时我有时会说频域连续或频域非周期有时会说频域离散或频域周期两套说法指的其实是同一件事频域连续等价于频域非周期频域离散等价于频域周期。1.2 四个象限的具体对应我把最常用的对应关系整理成一张表建议你先通读一遍再回到下面的公式部分逐项验证信号形态时域频谱形态频域对应变换典型场景连续、非周期连续、非周期CTFT 连续时间傅里叶变换单个脉冲、瞬态信号的理论分析连续、周期离散、非周期FS 傅里叶级数正弦波、方波、周期信号的谐波分析离散、非周期连续、周期DTFT 离散时间傅里叶变换对采样序列做理论频谱分析离散、周期离散、周期DFT 离散傅里叶变换计算机中实际计算的频谱这张表里有一条非常值得注意的对角规律时域连续对应频域非周期CTFT、FS时域离散对应频域周期DTFT、DFT。一句话总结——时域离散化会让频域周期化时域周期化会让频域离散化。这个性质是理解整篇文章的关键我后面专门用一章展开这里先记住结论。1.3 为什么离散和周期永远成对出现离散与周期成对出现背后的原因是一个域里的等间隔采样在另一个域里会导致周期性重复。这有点抽象我举个具体的例子。想象你在纸上画了一条连续曲线现在只保留整数点上的值相当于用一个梳子去抽这条曲线。抽完以后在频域看去这个梳子对应一组等间隔的谱线而谱线等间隔排列等价于频率上的周期性复制。反过来如果一个信号是周期的说明它在时间轴上无限重复那么它的频率只能出现在某些固定位置也就是离散谱线。这个规律在数学上叫周期性与离散性的对偶在工程上最著名的推论就是采样定理。你现在只需要有个直觉后面无论是推公式还是做频谱分析都会反复用到这条规律。2. 逐个拆解四种变换的公式与物理意义框架建立以后我们来逐个看公式。我不打算把严格的数学推导从头来一遍那种做法教材上多的是而且绝大部分工程应用根本不需要手动做积分。我更想帮大家理解每一个变换的公式为什么长成那个样子它的输入输出分别是什么以及它到底在描述什么物理现象。2.1 CTFT连续非周期信号的密度谱连续时间傅里叶变换的公式是[ X(f)\int_{-\infty}^{\infty} x(t) e^{-j 2\pi f t} dt ](x(t)) 是连续时间信号(X(f)) 是它的频谱。这里的 (X(f)) 是一个密度概念因为信号在时域上是非周期的、能量有限的单个脉冲它的频谱铺满整条频率轴任意一个极小频率区间里都有能量所以 (X(f)) 的量纲是单位频率上的强度准确称呼是频谱密度。体现在单位上如果 (x(t)) 的单位是伏特那么 (X(f)) 的单位是伏特/赫兹。反变换公式是把无数个频率成分重新叠加回时域[ x(t)\int_{-\infty}^{\infty} X(f) e^{j 2\pi f t} df ]这个积分在工程计算中几乎没法精确算出来所以 CTFT 更多是一个理论分析工具而不是一个计算工具。它的价值在于告诉我们非周期信号的频谱长什么样。比如高斯脉冲的频谱仍然是高斯形状矩形脉冲的频谱是 sinc 函数。这些结论虽然来自纸上公式但它们是后面理解滤波器、理解采样、理解通信系统带宽的基础。2.2 FS连续周期信号的离散谱线对于周期信号 (x(t) x(tT))可以用傅里叶级数展开[ x(t) \sum_{k-\infty}^{\infty} C_k e^{j 2\pi k f_0 t} ]其中 (f_0 1/T) 是基频(C_k) 是第 (k) 次谐波的复振幅。它和 CTFT 最大的区别在于频域不再是连续函数而是一根根离散的谱线。这个区别是直觉上最好理解的——周期信号就像一个乐句在不断重复它的音高必然是基频的整数倍不可能出现任意的频率成分。最经典的例子是方波。一个 50% 占空比的方波只包含奇次谐波基频、3 次、5 次、7 次……幅度按 (1/k) 的规律衰减。你之所以觉得方波又亮又刺耳正是因为它的高频谐波能量不小。你看连方波这种看起来硬邦邦的信号本质上都是无限个正弦波的叠加这就是傅里叶思想最直观的一次体现。理解了这个例子FS 就不再是一堆看不懂的三角级数而是用一系列正弦波去拟合周期信号的工程方法。2.3 DTFT离散非周期信号的周期连续谱DTFT 的公式是[ X(e^{j\omega})\sum_{n-\infty}^{\infty} x[n] e^{-j\omega n} ]输入是离散序列 (x[n])输出是频域上的连续函数。注意计算机永远无法直接算出 DTFT因为频域是连续的你没法把无穷多个频率点的值都算出来。这个变换的重要性在于它揭示了一个核心性质——离散序列的频谱会在频域以 (2\pi) 为周期重复。这个性质直接推导出了采样定理模拟信号被采样后频谱会在每个采样率的整数倍处复制一份如果原始频谱带宽超过采样率的一半复制出来的频谱就会重叠这就是混叠。这里的 (\omega) 是归一化角频率单位是弧度/样本它和模拟角频率 (\Omega) 的关系是 (\omega \Omega T_s)其中 (T_s) 是采样周期。很多初学者会在归一化频率上绕晕。我的建议是先别管单位把它理解为每个采样点之间能发生的相位变化就行。等你后续做数字滤波器设计天天对着 (H(e^{j\omega})) 画响应曲线自然会习惯这种表述。2.4 DFT离散周期信号的有限长计算式最后是工程上最常用的 DFT公式是[ X[k]\sum_{n0}^{N-1} x[n] e^{-j 2\pi k n / N} ]它看起来像 DTFT 的离散化版本频域只保留 (N) 个采样点(k0,1,\dots,N-1)。但真正重要的是它的隐含假设时域序列 (x[n]) 被当作一个周期为 (N) 的周期序列来处理。一个 (N) 点的有限长序列经过 DFT 运算得到 (N) 个频率点。第 (k) 个点对应的实际频率是[ f_k \frac{k}{N} f_s ]其中 (f_s) 是采样率。也就是说DFT 的频率分辨率是 (\Delta f f_s / N)。这是工程中极其重要的一个公式后面讲频谱分析时还会反复出现。你现在只需要记住DFT 是那个计算机真正能算的傅里叶变换而 FFT 只是它的快速算法两者算出的结果在数学上是完全一致的。3. 周期与离散的对偶关系为什么四条理论其实只有两个规律很多人把四种变换当成四个独立的公式去背背完就忘。我想换个角度如果你抓住了周期性与离散性对偶这条主线四种变换其实只需要记两个规律。这两个规律就是时域离散化频域周期化时域周期化频域离散化。前者的典型应用是采样定理后者的典型应用是傅里叶级数的谱线结构。3.1 对偶性到底在说什么我们回到公式层面来看。CTFT 的积分把连续时间信号映射到连续频率轴FS 的求和把连续周期信号映射到离散频率点DTFT 的求和把离散序列映射到连续、周期的频率轴DFT 的求和把有限长序列映射到离散频率点。拆开来看四种变换其实就是两个动作的组合时域做积分还是求和也就是时域是连续还是离散频域是连续函数还是离散序列也就是频域是非周期还是周期。有趣的地方在于频域的形式完全由时域的形式决定不需要额外单记。时域上的等间隔采样对应频域上的周期性延拓时域上的周期性延拓对应频域上的等间隔采样。这两句话只要理解其中一句另一句可以靠对称性推出来。用一句口诀记住周期对离散连续对非周期。它们就像磁铁的南北极不会单独出现。3.2 从 CTFT 到 DFT两步推导把概念串成一条线如果想把几种形式串成一条线最直观的方法是从 CTFT 出发走两步得到 DFT。第一步时域离散化也就是采样。把连续信号 (x(t)) 以采样率 (f_s 1/T_s) 采样得到序列 (x[n])。对应地频域变成以 (f_s) 为周期的连续频谱这就得到了 DTFT。到这一步频谱虽然是周期的但仍然是连续函数计算机没法用有限个点存下来。第二步频域离散化也就是对 DTFT 的一个周期采样 (N) 个点。这一步得到 DFT。频域一旦离散化对应的时域就变成周期为 (N) 的序列。所以 DFT 在数学上处理的信号是一个离散周期序列的主值区间。这两步走完四种变换的关系就全部打通了。我把这个对应关系整理成一张简洁的对照表你甚至可以把它贴在工位上变换时域状态频域状态数学操作CTFT连续非周期连续非周期积分 → 积分FS连续周期离散非周期积分 → 求和DTFT离散非周期连续周期求和 → 积分DFT离散周期离散周期求和 → 求和这张表把四种变换的异同浓缩在了一个表格里。你会发现所有公式上的区别本质上都是求和和积分的区别也就是离散和连续的区别。3.3 一个亲测有效的记忆与推导方法我当年学这块时用过一种画框法效果很好分享给你。具体操作是在白纸上画两个坐标轴横轴代表时域状态纵轴代表频域状态。先记住 CTFT 是双方都连续的基准然后记住两条规则在时域上打点离散化频域就延展成周期在时域上重复周期化频域就打点离散化。这样从 CTFT 出发用一条规则推 DTFT用另一条规则推 FS最后再用时域打点 频域打点推 DFT四条象限全部可以现场推出来不需要死记四个公式。这个方法在考试时救过我很多次比背公式靠谱得多。4. 工程视角下的真正主角DFT 与 FFT 的使用边界前面几章在打通理论这一章聊点更贴近实际的内容既然有四种变换为什么打开 MATLAB、Python、单片机里的 DSP 库能用的基本只有 DFT 和它的快速算法 FFT这些工具背后有哪些必须知道的使用边界我把这些年做信号处理时踩过的坑以及最常用的操作流程都放在这一章。4.1 为什么工程计算只剩下 DFT原因很直接计算机只能处理离散的、有限长的数据。CTFT 和 DTFT 的频谱是连续函数没法放进内存FS 需要无穷项求和也没法在有限步内算完。而 DFT 的输入是 (N) 个离散点输出是 (N) 个离散点一切操作都可以用数组完成。FFT 又是一种把 DFT 从 (O(N^2)) 降到 (O(N\log N)) 的快速算法这才让实时频谱分析成为可能。你听到的FFT 频谱分析本质就是对采集到的一段离散信号做 DFT。我用一个数字来感受一下 FFT 的意义一段 8192 点的采样信号直接按 DFT 公式算大约需要做 6700 万次复数乘法用 FFT 只要大约 10 万次差了三个数量级。没有 FFT实时频谱分析不可能走进今天的嵌入式设备、手机和示波器。4.2 采样率、点数与频率分辨率三个参数一个都别搞错DFT 工程应用里最常用的几个公式频率轴映射(f_k k \cdot f_s / N)频率分辨率(\Delta f f_s / N)奈奎斯特频率(f_{max} f_s / 2)举个例子采样率 1000 Hz做 512 点 DFT频率分辨率 (\Delta f 1000/512 \approx 1.95) Hz。意思是两个频率相差小于 1.95 Hz 的正弦信号在这个 DFT 结果里是分不开的它们会挤进同一根谱线。有一个新手非常容易踩的坑想提高频率分辨率直接调高采样率结果发现分辨率反而没变或者变得更差。原理很简单频率分辨率取决于 (f_s/N)而 (N f_s \cdot T)所以 (\Delta f 1/T)。也就是说分辨率只取决于总采样时长 (T)和采样率没有直接关系。想要分辨两个挨得很近的频率唯一可靠的办法是延长采样时间。这个结论初看反直觉但一旦写过几次频谱分析代码就会深有体会。4.3 频谱泄漏与栅栏效应DFT 的隐藏假设导致的误差DFT 在数学上假设处理的是离散周期序列但实际信号往往截取的不是整周期。当你从一段无限长信号里截取有限长片段做 DFT 时相当于给信号加了一个矩形窗。矩形窗的硬边界会在频谱上产生泄漏一个纯净的正弦信号理论上应该是一根单根谱线实际画出来却是一条带拖尾的峰。如果你的采样时长不是信号周期的整数倍泄漏会更严重真实峰还可能恰好落在两根谱线之间幅度被低估位置看起来也不对这就是栅栏效应。工程上解决泄漏的常规手段是加窗函数比如汉宁窗、海明窗、布莱克曼窗。加窗可以压低旁瓣减少泄漏但代价是主瓣变宽频率分辨率轻微下降。怎么取舍我的经验是先问自己三个问题——信号本身是周期的吗我关心的是幅度还是频率允许的分辨率是多少如果信号是周期性的且采样时长正好是整数倍周期矩形窗完全够用泄漏最小如果信号是非周期的、成分很复杂汉宁窗通常是更稳的选择如果要测幅值精度而不是频率附近有没有干扰平顶窗往往更合适。没有绝对最好的窗只有最匹配你测量目标的窗。4.4 一段可以直接抄作业的 Python 频谱分析代码下面这段代码是我日常工作里经常用到的起点用 numpy 对一段信号做频谱分析并画出幅度谱。注释里写了每一步的作用建议连同注释一起阅读import numpy as np import matplotlib.pyplot as plt # 基本参数 fs 1000 # 采样率单位 Hz T 1.0 # 采样时长单位 s N int(fs * T) # 样本点数 t np.linspace(0, T, N, endpointFalse) # 时间轴 # 构造测试信号50 Hz 正弦 120 Hz 正弦 噪声 f1, f2 50, 120 x 1.5 * np.sin(2 * np.pi * f1 * t) 1.0 * np.sin(2 * np.pi * f2 * t) x 0.5 * np.random.randn(N) # 加一点噪声模拟真实采集 # 做 FFT X np.fft.fft(x) freqs np.fft.fftfreq(N, 1/fs) # 频率轴 half_N N // 2 # 只看单边谱 # 幅度归一化单边谱幅度 双边谱幅度 * 2 / N amp np.abs(X[:half_N]) * 2.0 / N ffreq freqs[:half_N] # 找出峰值对应的频率 peak_idx np.argsort(amp)[-3:] print(前三个峰值的频率:, ffreq[peak_idx]) # 画图 plt.figure(figsize(10, 4)) plt.plot(ffreq, amp) plt.xlabel(Frequency (Hz)) plt.ylabel(Amplitude) plt.title(Single-Sided Amplitude Spectrum) plt.grid(True) plt.show()运行这段代码你应该会在 50 Hz 和 120 Hz 附近看到两个明显的峰幅度分别接近 1.5 和 1.0。这里有个细节很多人第一次都没注意如果不做 (\times 2 / N) 的归一化FFT 结果的幅度并不是信号的真实幅度。这个系数从哪来回到前文那个 DFT 公式因为是 (N) 个点求和输出天然带着一个 (N) 倍的缩放因子单边谱只需要一半的点再乘 2 把另一半的能量补回来。所以说你要是真的理解了四种变换的公式连这种经验值都可以自己推出来根本不用死记。5. 学习中的最大误区与一套绕开误区的理解方法最后这一章聊聊我辅导同学和在实际合作中见到的几种普遍误区。如果你能把这几个坑避开傅里叶变换的四种形式基本就不会再困扰你了。这些问题在各类论坛上反复出现说明不是个别人的困惑而是普遍的理解障碍。5.1 误区一把傅里叶级数FS和离散傅里叶变换DFT混为一谈这是最常见的混淆点。FS 的输入是连续周期信号输出是离散谱线DFT 的输入是离散有限长序列输出也是离散谱线。两者在谱线这件事上看起来很像但本质差异很大FS 的谱线间隔是基频 (f_0 1/T)由时域周期决定可以任意小DFT 的谱线间隔固定是 (\Delta f f_s/N)由采样率和点数决定。更重要的是FS 处理的是连续函数计算用到积分可以求解析解DFT 处理的是数值数组计算用到求和只能求数值解。实际工作中如果你面对的是一个可解析建模的连续周期信号比如电网里的 50 Hz 正弦波带谐波用 FS 可以写出清晰的谐波幅度公式如果你手里只有采样后的数据点那只能用 DFT。两者的使用场景不同工具不能随便替代。5.2 误区二觉得 DTFT 既然是离散的就能进计算机DTFT 的输入确实是离散序列看起来比 CTFT 亲民很多。但它的输出是连续函数而且是以 (2\pi) 为周期的。计算机无法存储每一个频率点的值所以 DTFT 通常只用来做理论分析。比如推导数字滤波器的频率响应时我们会写 (H(e^{j\omega}))其中 (\omega) 是连续变量意味着理论上有无穷多个点。真要计算只能在一个周期内均匀取 (N) 个点这一步本质上就是 DFT。所以工程计算中的离散频谱分析最终都会落到 DFT而不是 DTFT。认准这一点很多教材里DTFT 和 DFT 有什么区别的讨论你就能自己回答了。5.3 误区三公式会背但不会判断真实信号的频谱形态考试允许背公式但工程不允许你对着示波器上的波形发呆。我建议你训练一套由时域推频域的快速判断流程先看时域是连续还是离散再看时域是周期还是非周期前者决定频域是周期还是非周期后者决定频域是离散还是连续。举一个真实例子一段手机录音时域是连续还是离散如果已经过 ADC 进入芯片就是离散序列。它有周期性吗语音在几十毫秒内可以近似看成周期信号但从整段录音看又不像。所以我们在工程上干脆把它当作有限长离散序列直接用 DFT 分析每一帧的频谱。理论形态和工程近似之间存在一座灵活的桥梁理解这座桥比背公式更值钱。5.4 我从这些误区里总结出的学习顺序如果让我给初学者一个学习顺序我会建议这样走先彻底搞懂 CTFT因为它是一切的基础理解连续频谱和频谱密度的概念然后学 DTFT重点理解采样和频域周期化的关系再看 DFT这才是计算机能算的变换最后看 FS用它理解周期信号和离散谱线。这个顺序和很多教材是反的教材喜欢从 FS 开始因为它是历史上最早出现的傅里叶工具但在现代数字信号处理语境下先理解离散化和周期化的对偶再回头读 FS反而更容易建立直觉。你自己可以对比着试试看哪种顺序更适合你。我在实际学习中的体会是四种变换说到底只是同一枚硬币的四个面。只要抓住周期对应离散、连续对应非周期这两组对偶关系再加上工程上最终都能归到 DFT这一个收口整块知识就不再是一堆零散公式而是一张可以随手调用的地图。最后再分享一个小技巧如果你也在备考或准备面试试着合上书在白纸上把四象限表格完整画出来再对着表格写出每一个公式。能画出来、能写出来说明这一章你是真正吃透了而不只是看着眼熟。
返回列表