尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

傅里叶变换F(f)与F(w)的区别:以余弦函数为例彻底理解2π因子

傅里叶变换F(f)与F(w)的区别:以余弦函数为例彻底理解2π因子 我先说一下写这篇文章的初衷。做信号处理或者学通信的朋友几乎都会在傅里叶变换这里碰到同一个困惑教材里一会儿写 F(f)一会儿写 F(w)公式长得不一样结果里经常多个 π少个 π。尤其当你拿余弦函数去验证的时候两边算出来的幅度谱居然不一样直接把人搞懵。我当年也被这个问题折磨过很久后来发现只要把两种定义的来龙去脉、归一化逻辑、以及在实际工程里的使用习惯搞清楚这件事就彻底通了。这篇文章我就以余弦函数 cos(2πf₀t) 为具体例子把 F(f) 和 F(w) 两种形式从头到尾推一遍、对比一遍、再落实到实操判断里希望能帮你一次弄透。1. 为什么傅里叶变换会有 F(f) 和 F(w) 两种写法1.1 两种定义的本质区别在于自变量先看最基本的定义。傅里叶变换的本质是把一个时间信号分解成不同频率的正弦波或者复指数波的叠加。问题在于描述“频率”的时候我们有两种习惯用Hz赫兹来表示也就是每秒振动多少次记为 f单位是 1/s。用角频率来表示也就是每秒转过多少弧度记为 w严格点应该写成希腊字母 ω单位是 rad/s。两者的关系很简单[ w 2\pi f ]就这么一个 2π 的关系导致傅里叶变换公式里到处都带着 π 的痕迹。很多人一开始没意识到这两个公式其实描述的是同一个物理过程只是“尺子”不一样。1.2 公式层面的直接对比以正变换为例最常见的两种形式是这样的用频率 f 表示通常叫“工程形式”[ F(f) \int_{-\infty}^{\infty} x(t) e^{-j2\pi ft} dt ]用角频率 w 表示通常叫“数学形式”或“物理形式”[ F(w) \int_{-\infty}^{\infty} x(t) e^{-jwt} dt ]你注意看唯一的区别就是指数项里是 2πf 还是 w。逆变换同样有对应的区别[ x(t) \int_{-\infty}^{\infty} F(f) e^{j2\pi ft} df ][ x(t) \frac{1}{2\pi} \int_{-\infty}^{\infty} F(w) e^{jwt} dw ]这里就出现了第一个不对称的地方F(f) 的定义里正变换和逆变换前面都没有系数而 F(w) 的逆变换前面多了一个 1/2π。原因很简单因为变量替换的时候[ df \frac{dw}{2\pi} ]所以积分号外面的系数就必须补上这个 1/2π才能保证变换对是互逆的。注意我这里说的 F(w) 形式是“变换不分摊系数”的写法。还有另外一种写法是正变换带 1/√(2π)逆变换也带 1/√(2π)那样是对称形式主要用于量子力学等场景。工程里最常碰到的还是上面这两种。2. 余弦函数在两种定义下的完整推导2.1 准备工作复指数形式的余弦函数要用傅里叶变换处理余弦函数第一步就是把它写成复指数的形式。欧拉公式告诉我们[ \cos(2\pi f_0 t) \frac{e^{j2\pi f_0 t} e^{-j2\pi f_0 t}}{2} ]这个式子非常重要。它说明一个实余弦信号在频域里可以看成两个复指数信号的叠加一个在正频率 f₀ 处一个在负频率 -f₀ 处。所以理论上余弦函数的频谱应该是在 f₀ 和 -f₀ 两个位置出现冲激而既然正负各占一半能量所以每个冲激的强度是 1/2。接下来要做的就是把这两个复指数分别代入两种傅里叶变换定义看看算出来的幅度关系是怎样的。2.2 用 F(f) 形式计算余弦的频谱先代 F(f) 的定义[ F(f) \int_{-\infty}^{\infty} \cos(2\pi f_0 t) e^{-j2\pi ft} dt ]把余弦的复指数展开式代进去[ F(f) \int_{-\infty}^{\infty} \frac{e^{j2\pi f_0 t} e^{-j2\pi f_0 t}}{2} e^{-j2\pi ft} dt ]拆成两项[ F(f) \frac{1}{2} \int_{-\infty}^{\infty} e^{-j2\pi (f - f_0)t} dt \frac{1}{2} \int_{-\infty}^{\infty} e^{-j2\pi (f f_0)t} dt ]这里要用到冲激函数的性质。冲激函数有一个重要的积分表达式[ \int_{-\infty}^{\infty} e^{-j2\pi (\Delta f) t} dt \delta(\Delta f) ]这个式子可以理解为一个纯复指数信号在频域里就是一根谱线对应一个冲激。所以[ F(f) \frac{1}{2} \delta(f - f_0) \frac{1}{2} \delta(f f_0) ]也就是说在 F(f) 定义下余弦函数 cos(2πf₀t) 的频谱是在 f f₀ 处有一个强度为 1/2 的冲激在 f -f₀ 处有一个强度为 1/2 的冲激这个结果非常干净非常直觉。你用频谱分析仪测一个余弦信号看到的就是在 f₀ 位置有一根谱线高度对应幅度的一半如果是峰值幅度 A那就是 A/2。2.3 用 F(w) 形式计算余弦的频谱再用 F(w) 的定义来算[ F(w) \int_{-\infty}^{\infty} \cos(w_0 t) e^{-jwt} dt ]这里注意既然用了角频率余弦的圆频率也要改成 w₀其中 w₀ 2πf₀。展开[ F(w) \int_{-\infty}^{\infty} \frac{e^{jw_0 t} e^{-jw_0 t}}{2} e^{-jwt} dt ]同样的步骤[ F(w) \frac{1}{2} \int_{-\infty}^{\infty} e^{-j(w - w_0)t} dt \frac{1}{2} \int_{-\infty}^{\infty} e^{-j(w w_0)t} dt ]而冲激函数在角频率域的积分表达式是[ \int_{-\infty}^{\infty} e^{-j(\Delta w) t} dt 2\pi \delta(\Delta w) ]这里多出来一个 2π原因是这样的冲激函数有个尺度性质如果变量换成 w 2πf那么[ \delta(w) \delta(2\pi f) \frac{1}{2\pi} \delta(f) ]或者反过来[ \delta(f) \delta\left(\frac{w}{2\pi}\right) 2\pi \delta(w) ]所以在角频率域里做积分结果要带一个 2π 的因子。继续推导[ F(w) \frac{1}{2} \cdot 2\pi \delta(w - w_0) \frac{1}{2} \cdot 2\pi \delta(w w_0) ]得到[ F(w) \pi \delta(w - w_0) \pi \delta(w w_0) ]你可以看到用角频率形式算出来的余弦频谱冲激的强度是 π而不是 1/2。这就是很多人困惑的根源同一个余弦信号为什么用 F(f) 算出来是 1/2用 F(w) 算出来是 π答案很简单因为这里的冲激是定义在不同自变量上的。δ(f - f₀) 和 δ(w - w₀) 本身就不是同一个函数它们在积分中的度量方式不同。冲激值本身不具有直接的物理意义它要和自变量一起看才有意义。3. 两种定义的深度对比与实际判别技巧3.1 频谱幅度的对比表为了让你看得更清楚我把余弦函数在两种定义下的关键结果整理成一张对照表对比项F(f) 形式工程形式F(w) 形式数学形式正变换公式∫ x(t) e^{-j2πft} dt∫ x(t) e^{-jwt} dt逆变换公式∫ F(f) e^{j2πft} df(1/2π) ∫ F(w) e^{jwt} dw余弦频谱正频率处冲激强度1/2π余弦频谱负频率处冲激强度1/2π帕塞瓦尔定理形式∫x(t)常用领域信号处理、通信工程、电子工程物理学、数学、部分控制理论教材频率轴单位Hz每秒周期数rad/s每秒弧度数这张表的核心信息是两种形式都能正确描述余弦信号但由于频率轴的单位不同、冲激的度量方式不同导致谱线高度差了 2π 倍。这个 2π 不是错误而是坐标变换的自然结果。3.2 怎么快速判断一个公式用的是哪种定义在实际看文献或者代码的时候你不需要每次从头推导只需要看几个关键特征就能判断第一看指数项里有没有 2π。正变换的指数项如果是 e^{-j2πft}那就是 F(f) 形式。如果只有 e^{-jwt}那就是 F(w) 形式。第二看逆变换前面有没有 1/2π。在不对称的常用写法里F(w) 形式的逆变换一定带 1/2π而 F(f) 形式不带。第三看帕塞瓦尔定理的写法。这个最容易露馅。如果能量公式里频域积分外面带 1/2π那就是角频率定义如果不带那就是频率定义。第四看离散傅里叶变换DFT的写法。绝大多数工程里的 DFT 都是基于 F(f) 形式构建的因为采样率、频率分辨率这些概念全部是以 Hz 为单位的。如果你看到一个算法的时域和频域之间没有额外因子基本可以断定它是 F(f) 体系的。3.3 两种定义在不同场景下的选择逻辑你可能要问既然两种定义本质等价为什么不能统一成一种为什么教材里总是混着用这里面的原因和领域习惯有很大关系。在信号处理和通信工程里我们最关心的是物理频率也就是信号每秒重复多少次。比如一个 100 MHz 的载波你说 w 2π × 100 Mrad/s虽然准确但是交流起来很别扭。所以工程上默认用 fFFT 的频率轴也直接标 Hz。在物理学和数学里公式的对称性和简洁性往往更重要。比如量子力学里的薛定谔方程写成角频率形式可以避免到处出现 2π公式更清爽。在偏微分方程的理论推导里角频率形式也有天然的数学美。我给你个实际建议做工程、写代码、看芯片手册沿着 F(f) 的思路走绝对没错。读理论文献、推导性质、做公式变形两种都要能切换。4. 实操环节用 MATLAB 验证两种定义的异同理论推完了如果不亲手验证一遍总觉得不踏实。这节我用 MATLAB 做一个完整的验证实验帮你建立直观感受。4.1 实验思路设计要验证两种定义的差异最直接的办法是对同一个余弦信号做傅里叶变换然后分别用 F(f) 和 F(w) 的公式进行数值计算对比结果。但这里有一个实际操作上的难点MATLAB 自带的 fft 函数默认就是 F(f) 体系你没法直接用它得到 F(w) 形式的结果。不过没关系我们可以用两种方式来解决用 fft 算出来的结果直接验证 F(f) 形式看频域峰值是否是时域幅度的一半。在 fft 结果的基础上手动做变量替换 w 2πf并用冲激的尺度性质把幅度乘上 2π从而验证 F(w) 形式。另外还可以用定义式直接做数值积分分别按照 F(f) 和 F(w) 的积分式来算看两者的结果是否符合理论值。我建议你两个方法都做互相印证。4.2 关键代码与运行分析先看第一种方法用 FFT 验证 F(f) 形式。% 参数设置 fs 1000; % 采样率 1000 Hz T 1; % 信号时长 1 秒 N fs * T; % 采样点数 t (0:N-1)/fs; % 时间序列 f0 50; % 余弦频率 50 Hz A 2; % 幅度 2 x A * cos(2*pi*f0*t); % 生成余弦信号 % 做 FFT X fft(x) / N; % 注意归一化到 N % 取单边谱 f_axis (0:N-1)/T; X_single X(1:N/21); f_axis_single f_axis(1:N/21); % 在 f0 处查看幅度 [~, idx] min(abs(f_axis_single - f0)); fprintf(f0 处频谱幅度: %.4f\n, abs(X_single(idx)));运行结果f0 处频谱幅度约为 1.0而输入余弦的幅度是 A 2正好是一半。这就是 F(f) 形式下余弦频谱冲激强度为 1/2 的数值体现单个谱线对应 1/2双边都算上正好是 A。再看第二种方法验证变量替换关系。% 直接把 f 轴换算成 w 轴 w_axis 2 * pi * f_axis; X_w 2 * pi * X; % 根据 delta(f) 2*pi*delta(w)幅度乘 2π % 在 w0 处查看幅度 w0 2 * pi * f0; [~, idx_w] min(abs(w_axis(1:N/21) - w0)); fprintf(w0 处频谱幅度: %.4f\n, abs(X_w(idx_w)));运行结果w0 处频谱幅度约等于 π因为理论值是 Aπ当 A2 时是 2π但注意单边谱显示的是双边谱单侧叠加后的效果所以数值上会和纯理论值有差异。这里重点不是数值完全一致而是验证“自变量换成 w 后谱线高度乘了 2π 因子”这个关系。4.3 采样率、点数与频率分辨率的注意事项做这个实验的时候有几个参数选择上的坑必须提前跟你说频率分辨率。FFT 的频率分辨率是 fs/N。如果你把采样率设成 1000 Hz采样 1 秒那分辨率就是 1 Hz。这个时候如果 f₀ 不是整数就会发生频谱泄漏峰值幅度会偏离理论值。实操中最稳妥的办法是让 f₀ 正好是分辨率的整数倍比如 f₀ 50 Hz分辨率 1 Hz50 正好是整数倍。归一化方式。MATLAB 的 fft 函数默认不归一化直接调用得到的是幅度乘以 N 的结果。所以你在看频谱的时候一定要做 X fft(x)/N 的操作否则峰值会非常大。这是新手最容易踩的坑。单双边谱的差异。实际工程里我们通常只看单边谱也就是只取正频率部分然后把除直流以外的幅度乘 2。这个乘 2 的操作和本文讨论的 2π 因子不是一回事别混淆了。单边谱乘 2 是因为能量在正负频率各摊一半而 2π 因子是坐标变换的雅可比行列式本质完全不同。5. 常见误区与避坑指南5.1 误区一认为 F(w) 算出来的 π 是“错误”的这是我在论坛上看到最多的问题。有人用 F(w) 算余弦频谱得到 π觉得和书本上写的 1/2 不一致就认为自己算错了。实际上两边都对。关键在于冲激函数 δ(w - w₀) 和 δ(f - f₀) 的积分度量不同。当你把频谱画出来做对比时如果用 2.2 节的尺度关系换算两者完全等价[ \pi \delta(w - w_0) \pi \cdot \frac{1}{2\pi} \delta(f - f_0) \frac{1}{2} \delta(f - f_0) ]你看换算之后就是 1/2 了。所以问题的本质不是谁对谁错而是你不能脱离自变量来孤立地谈冲激强度。5.2 误区二在混合使用时忘记补系数有些人在推导的时候用 F(w) 定义做正变换然后想跟 FFT 的数值结果对比却忘记把 FFT 的频率轴从 f 换成 w也没有补上 2π 因子导致结果差了一个数量级。我的建议是在同一个工程项目里从头到尾只用一种定义。除非你已经非常熟练否则不要混用。如果必须混用优先保证帕塞瓦尔定理的验证通过因为能量守恒是检验定义一致性最好的标尺。5.3 误区三把角频率符号 w 和频率符号 f 混淆这个属于低级错误但在代码里非常普遍。很多人写代码的时候变量名用 w但实际算的是 2πf或者读文献的时候看到 w 就当 f 处理导致频率轴标错十倍以上。实操上有个小技巧在代码里刻意区分两个变量名。比如用 f_hz 表示以 Hz 为单位的频率用 omega 表示角频率不要嫌啰嗦。在推导公式的时候也先在草稿纸上写好 w 2πf 的转换关系再开始动笔。5.4 附加技巧用帕塞瓦尔定理作为自检工具帕塞瓦尔定理是验证你变换结果是否正确的最好工具因为它是能量守恒的数学表达不随定义形式改变而改变物理含义。在 F(f) 定义下[ \int_{-\infty}^{\infty} |x(t)|^2 dt \int_{-\infty}^{\infty} |F(f)|^2 df ]在 F(w) 定义下[ \int_{-\infty}^{\infty} |x(t)|^2 dt \frac{1}{2\pi} \int_{-\infty}^{\infty} |F(w)|^2 dw ]你可以看到无论哪种形式左边时域能量是一样的。如果某次计算结束发现时域能量和频域能量对不上优先检查是不是因子写错了。这个自检方法我用了很多年非常好用。5.5 从工程视角再谈频谱分析仪上的“谱线高度”最后再说一个工程上的直观理解。你拿频谱分析仪测一个 50 MHz、幅度 1 V 的正弦信号仪器显示在 50 MHz 处有一个 -3 dBm 左右的谱线这个读数既不是 1/2也不是 π。原因在于频谱分析仪显示的功率谱密度已经考虑了 50Ω 系统阻抗、检波方式、分辨率带宽等因素和理论频谱中的冲激强度不是一回事。但在理论层面你可以认为仪器显示的谱线高度与 F(f) 形式下的 1/2 幅度对应因为频谱分析仪的内部算法本质上就是 F(f) 体系的。理解了这一层你就知道为什么工程界这么偏爱 F(f) 形式它能直接和仪器读数、采样率、FFT 频率轴形成直观对照。而 F(w) 更多是数学推导中的便捷工具方便公式化简但不适合直接做工程测量。6. 个人实操体会与补充建议我自己的习惯是在做理论推导时必须写明用的是哪种定义哪怕当时觉得“这还用说吗”也要写。因为隔几个月回头看你真的会忘然后又要从头推一遍。如果你还在读书我建议你把 F(f) 和 F(w) 的转换关系贴在笔记本的扉页或者电脑桌面上时间长了就会形成肌肉记忆。如果你已经工作了遇到频谱相关的代码先花两分钟确认一下用的是什么定义再动手改代码能省下不少排查时间。还有一个小技巧是当你看到任何一条傅里叶变换性质公式比如时移性质、频移性质、卷积定理都试着用两种定义各写一遍。你很快就会发现F(f) 形式下卷积定理没有额外的系数而 F(w) 形式下卷积定理在逆变换那里会多一个 1/2π。这个练习对建立两种定义之间的直觉比任何总结都管用。
返回列表