ARTICLE DETAIL

资讯详情

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

傅里叶变换定义差异:余弦频谱为何有1/2和π两种答案?

傅里叶变换定义差异:余弦频谱为何有1/2和π两种答案? 同一个余弦信号 cos(2πf₀t)有的教材说它的傅里叶变换是两个面积为 1/2 的冲激有的教材说两个面积为 π。你拿着两本教材对照看第一反应是其中一本印错了或者作者犯了低级错误。等你自己用不同工具去验证发现结果还真的不一样这时候就更懵了。这篇文章想把这个困扰很多人的问题彻底讲清楚傅里叶变换里的 F(f) 和 F(ω) 到底差在哪为什么同一个信号算出来的频谱会长着两张脸以及在实际做题、写程序、看频谱图的时候怎么快速判断对方用的是哪套定义。内容不需要多深的数学基础大学信号与系统水平就够但如果你已经工作多年还时不时被这个 π 和 1/2 绕晕那这篇文章同样值得花二十分钟看完。1. 一场两个答案的争论余弦频谱的 1/2 与 π我第一次认真思考这个问题是帮一个学弟看作业。他拿着两本不同教材上同一道题来问我求 cos(2πf₀t) 的傅里叶变换教材 A 给出的答案是 F(ω) π[δ(ω - ω₀) δ(ω ω₀)]教材 B 给出的答案是 F(f) ½[δ(f - f₀) δ(f f₀)]。两个答案长得完全不一样一个带 π一个带 ½学弟觉得肯定是某一本写错了让我帮忙分辨哪本是对的。我当时第一反应也是其中一本勘误没做好但拿笔仔细一推发现两边都对只是用了不同的定义。这里先说结论傅里叶变换不是一条公式而是一族公式。不同教材、不同学科领域可能采用不同的约定。最常见的分歧有两点第一频域自变量用角频率 ω单位 rad/s还是频率 f单位 Hz第二那个 2π 因子放在正变换、逆变换还是拆成两个 √(2π) 分开放。这两个选择组合起来会让同一个信号在频域的函数表达式数值不同尤其是遇到冲激函数时体现得特别明显。工程和教学中最常见的是下面这两套第一套ω 定义F(\omega) \int_{-\infty}^{\infty} f(t) e^{-j\omega t} dtf(t) \frac{1}{2\pi} \int_{-\infty}^{\infty} F(\omega) e^{j\omega t} d\omega第二套f 定义F(f) \int_{-\infty}^{\infty} f(t) e^{-j2\pi ft} dtf(t) \int_{-\infty}^{\infty} F(f) e^{j2\pi ft} df两套定义里的 2π 摆放位置不同频域坐标的单位也不同于是同一个余弦信号算出来一个频谱冲激带 π另一个带 ½。这不是谁对谁错的问题而是测量尺子不同的问题。2. 两套变换定义到底差在哪坐标轴与系数的取舍2.1 角频率 ω 和频率 f 的物理区别先搞清楚最底层的物理量。频率 f 表示每秒完成多少个周期单位是赫兹Hz。角频率 ω 表示每秒转过多少弧度单位是 rad/s。一个周期对应 2π 弧度所以两者之间存在一个非常简单的换算关系\omega 2\pi f这个关系并不复杂但它带来的连锁反应往往被低估了。频域坐标如果用 ω那么 ω 轴上单位长度的宽度是 1 rad/s如果用 f那么同一段物理区间在 f 轴上只有 1/(2π) 的长度。坐标轴的刻度变了频谱密度函数在每个点上的数值自然要跟着变否则积分出来的总能量就对不上了。可以把这个想成一条公路旁的人口密度分布。如果你用每公里人数来画曲线某段路测出来是 500 人/km如果改用每百米人数来画同一段路的读数就变成 50 人/百米。人还是那些人人口总量也没变只是你选的单位长度不同密度函数在每一点的数值就不同。傅里叶变换本质上是信号在频率上的密度分布F(f) 和 F(ω) 就是分别用 Hz 和 rad/s 两把尺子去量同一个物理量读数不同是必然的。2.2 几种常见定义的归纳把常见的定义放一起看会更清楚。市面上能见到的无非就这几种形式定义名称正变换逆变换2π 的归属ω 非酉形式∫f(t)e^(-jωt)dt(1/2π)∫F(ω)e^(jωt)dω逆变换带 1/2πf 形式∫f(t)e^(-j2πft)dt∫F(f)e^(j2πft)df没有显式系数ω 酉形式(1/√(2π))∫f(t)e^(-jωt)dt(1/√(2π))∫F(ω)e^(jωt)dω两边各 1/√(2π)我特意没有把f 酉形式单列一行因为你会发现f 形式虽然看起来正逆变换都没有系数但由于频率变量的坐标换算里自动包含了 2π 的雅可比因子它其实天然就是酉的。换句话说在 f 坐标下你不需要额外加系数帕塞瓦尔定理直接成立而在 ω 坐标下要么在逆变换里放一个 1/2π要么在正逆变换各放一个 1/√(2π)总得有地方把这 2π 消化掉。2.3 为什么理论推导偏爱 ω工程计算偏爱 f一个很实际的问题是既然两套定义各有各的麻烦为什么不能统一成一种答案是不同场景下两套定义的麻烦程度不一样。理论推导偏爱 ω主要是因为很多公式在这种表示下更紧凑。比如时域信号求导对应频域乘以 jω拉普拉斯变换令 s jω 就能得到傅里叶变换傅里叶级数里本来就习惯用 nω₀ 形式的角频率。数学推导里每少写一个 2π整体式子就清爽一截所以理论教材、物理类课程基本都用 ω 定义。工程计算偏爱 f原因更直接你手里的仪器和软件都围绕 Hz 工作。采样率 fs 是 HzFFT 的频率分辨率 Δf fs/N 是 Hz频谱仪横轴是 Hz滤波器带宽指标写的是 Hz。你用 f 定义推导出来的频谱可以直接和这些工具对上话。更重要的是f 定义下帕塞瓦尔定理长这样\int_{-\infty}^{\infty} |f(t)|^2 dt \int_{-\infty}^{\infty} |F(f)|^2 df没有系数能量看着就是舒服。ω 定义下则是\int_{-\infty}^{\infty} |f(t)|^2 dt \frac{1}{2\pi} \int_{-\infty}^{\infty} |F(\omega)|^2 d\omega多出来的这个 1/2π就是坐标换算的代价。3. 余弦函数的完整推导从两个不同坐标出发3.1 两个必须用到的预备性质在正式推导之前先铺两块基石。第一块是欧拉公式。余弦函数可以拆成两个复指数信号的叠加\cos(2\pi f_0 t) \frac{1}{2}\left(e^{j2\pi f_0 t} e^{-j2\pi f_0 t}\right)这个式子非常关键。它把实信号的频谱问题转化成了复指数信号的频谱问题而复指数信号在频域对应一个干干净净的冲激。第二块是复指数信号的变换对。在 f 定义下e^{j2\pi f_0 t} \quad \leftrightarrow \quad \delta(f - f_0)验证方法是用逆变换代回去∫δ(f - f₀)e^(j2πft)df e^(j2πf₀t)成立。在 ω 定义下e^{j\omega_0 t} \quad \leftrightarrow \quad 2\pi\delta(\omega - \omega_0)验证同样简单把 (1/2π)∫2πδ(ω - ω₀)e^(jωt)dω 展开2π 和 1/2π 抵消剩下 e^(jω₀t)。注意这里多出来的 2π 不是随便加的而是为了让逆变换能够精确还原出原信号。3.2 f 定义下的推导两个 1/2 冲激直接代入定义式计算。设 x(t) cos(2πf₀t)用欧拉公式展开后F(f) \int_{-\infty}^{\infty} \frac{1}{2}\left(e^{j2\pi f_0 t} e^{-j2\pi f_0 t}\right) e^{-j2\pi ft} dt拆成两项。第一项是 ∫(1/2)e^(-j2π(f - f₀)t)dt由上面的变换对等于 ½δ(f - f₀)。第二项同理等于 ½δ(f f₀)。合并起来F(f) \frac{1}{2}\left[\delta(f - f_0) \delta(f f_0)\right]所以在 f 定义下余弦信号的频谱在 f₀ 和 -f₀ 处各有一根冲激面积都是 1/2。这就是½ 派答案的来源。注意这里的面积 1/2 有明确的物理含义余弦信号的平均功率是 1/2能量平均分到了正负两个频率分量上每个分量贡献 1/4加起来正好是 1/2这个数值和信号的幅度 A 的关系是 (A/2)² 的两倍即 A²/2。3.3 ω 定义下的推导两个 π 冲激如果改用 ω 定义设 x(t) cos(ω₀t)同样用欧拉公式F(\omega) \int_{-\infty}^{\infty} \frac{1}{2}\left(e^{j\omega_0 t} e^{-j\omega_0 t}\right) e^{-j\omega t} dt第一项用 ω 定义下的变换对 e^(jω₀t) ↔ 2πδ(ω - ω₀)得到 (1/2)·2πδ(ω - ω₀) πδ(ω - ω₀)。第二项同理得到 πδ(ω ω₀)。合并F(\omega) \pi\left[\delta(\omega - \omega_0) \delta(\omega \omega_0)\right]π 派答案也出来了。这里最让人迷惑的点在于明明是同一个物理信号为什么一个出现 ½一个出现 π从上面的推导过程你应该已经看出来了原因在于复指数信号的变换对本身就不同ω 定义下 e^(jω₀t) 对应的冲激带了一个 2π 系数这是为了和逆变换里的 1/2π 配对。3.4 两套结果互相转换冲激函数的尺度变换现在用严格的数学操作验证两套结果确实是同一个东西。已知 f ω/(2π)f₀ ω₀/(2π)。把 f 定义下的结果从变量 f 换成变量 ωF_f\left(\frac{\omega}{2\pi}\right) \frac{1}{2}\left[\delta\left(\frac{\omega-\omega_0}{2\pi}\right) \delta\left(\frac{\omega\omega_0}{2\pi}\right)\right]这时需要用到冲激函数的尺度性质\delta(at) \frac{1}{|a|}\delta(t)这里 a 1/(2π)所以\delta\left(\frac{\omega-\omega_0}{2\pi}\right) 2\pi\delta(\omega-\omega_0)代入后每一项的 ½ 和 2π 相乘得到 πδ(ω ± ω₀)。这正是 ω 定义下的结果。两套结果在数学上是严格自洽的转换的关键就是冲激函数跟随自变量缩放时面积会反向缩放。这个性质非常有意思也特别容易被人忽略。很多人在两套定义之间换算时只是机械地把公式里的 f 替换成 ω/(2π)然后就发现结果对不上原因就是漏掉了冲激函数本身的尺度变换。这不是小事以后遇到任何带冲激的频谱换算都要留个心眼。4. 频谱高度变化的本质密度而非幅度4.1 冲激在坐标变换下的缩放规律第三章的推导过程已经展示了冲激的尺度变化在起作用这里再把这个规律单独拎出来看看它的本质。冲激函数本身不是普通函数它是一个广义函数它的意义是在某个点集中了多大的面积。δ(t) 定义为面积为 1、只存在于 t 0 处的理想化对象。当你把自变量从 t 换成 at 时坐标轴被压缩或拉伸了但冲激要保持总面积不变这个物理约束所以高度面积就要反向变化。这就是 δ(at) δ(t)/|a| 的物理来源。套用到余弦信号的频谱上ω 轴比 f 轴密了 2π 倍。同样一段频率区间以 Hz 为单位的长度若是 df以 rad/s 为单位的长度就是 dω 2πdf。为了让积分结果一致ω 轴上的频谱密度就必须比 f 轴上的密的倒数倍也就是 2π 倍。f 定义下冲激面积 1/2到了 ω 定义下就变成 1/2 × 2π π。4.2 一个理解频谱密度的人均类比前面提到的公路人口密度类比在这里值得再展开一点。假设一条路上只住了两个人分别在 1 公里处和 1.5 公里处。你用每公里人数作单位画分布会在两个位置各画一个高度为 1 的尖峰如果用每百米人数作单位这两个尖峰的高度就会变成 0.1。人没变路没变变的只是你选择的密度基准。频谱密度也是这样F(ω) 和 F(f) 不是两个不同的物理量而是同一个频率密度在不同坐标标度下的两种读数。理解了这一点再看很多频谱图就不会纠结了。有人在博客上贴余弦信号的 FFT 幅度谱看到两个高度为 N/2 的峰然后拿理论书上 π 的答案来对比发现对不上就开始怀疑 FFT 写错了。其实 FFT 输出对应的是 f 定义下的离散频谱或者说 DFT 是对 f 形式频谱的等间隔采样和 ½ 那套是一致的N/2 里的 N 只是离散化带来的尺度因素和定义差异是两码事。4.3 帕塞瓦尔定理在两种定义下的差别帕塞瓦尔定理是检验频谱理解是否正确的最好工具因为它从能量守恒的角度约束了所有系数。在 f 定义下能量公式没有多余系数\int_{-\infty}^{\infty} |x(t)|^2 dt \int_{-\infty}^{\infty} |F(f)|^2 df对余弦信号用工程上的直观方式验证F(f) 在 ±f₀ 有两个面积为 1/2 的冲激每个冲激代表功率 1/4两个加起来是 1/2正好等于 cos²(2πf₀t) 在一个周期内的平均功率。这里我刻意用了每个冲激代表功率 1/4这种说法严格来说对功率信号应该用功率谱密度来讨论但对离散谱线的直观理解在工程上足够用而且数值完全吻合。在 ω 定义下能量公式变成\int_{-\infty}^{\infty} |x(t)|^2 dt \frac{1}{2\pi} \int_{-\infty}^{\infty} |F(\omega)|^2 d\omega把 F(ω) π[δ(ω-ω₀)δ(ωω₀)] 代进去|F(ω)|² 的积分是 2π²再乘以 1/(2π)得到 π。等等这个数字看起来不对问题出在哪问题在于对周期信号直接套用非周期信号的帕塞瓦尔定理本身就会遇到冲激平方这种没有定义的操作。我对学生讲这部分时会刻意避开直接算冲激平方而是提醒他们对周期信号最干净的能量验证方式是回到傅里叶级数级数系数才是真正的离散振幅频谱密度是级数系数在冲激叠加下的结果。cos 的级数系数是 1/2 和 1/2功率 (1/2)² (1/2)² 1/2。这个结果和 f 定义下的频谱直接对应和 ω 定义则差一个由坐标换算带来的倍数。所以如果你非要在 ω 定义下用帕塞瓦尔记住功率谱密度那套要配套使用别拿离散谱线当普通函数做平方。4.4 用直流信号做快速标定如果上面的推导看得有点晕这里给一个万试万灵的标定方法用直流信号 x(t) 1 来检验任何傅里叶变换定义。在 f 定义下直流信号的频谱显然是 δ(f)面积 1在 ω 定义下直流信号 e^(j·0·t) 的频谱是 2πδ(ω)面积 2π。换句话说同样一个常数 1f 定义下频谱图会画一根高度为 1 的箭头ω 定义下会画一根高度为 2π 的箭头。其他信号的频谱都可以拿这个当参照。比如余弦f 定义的两个 1/2ω 定义的两个 π比值也是 2π。再看单位冲激信号 δ(t)在两种定义下频谱都恒等于常数 1面积反而不变。这个特例容易误导人让人以为系数差异只在部分信号里出现实际上 δ(t) 的频谱是常数函数坐标缩放引入的密度变化被常数特性抹平了看不到差异。真正遇到带冲激的频谱时差异立刻暴露。这张小表可以帮你快速建立直觉信号f 定义下的频谱ω 定义下的频谱直流 1δ(f)2πδ(ω)cos(2πf₀t)½[δ(f-f₀)δ(ff₀)]π[δ(ω-ω₀)δ(ωω₀)]sin(2πf₀t)(1/2j)[δ(f-f₀)-δ(ff₀)](π/j)[δ(ω-ω₀)-δ(ωω₀)]δ(t)11注意 δ(t) 那一行的两个 1 只是表面相同它是常数函数在两种坐标下处处相等所以不存在系数差异的问题。5. 实际项目里的判断方法与避坑经验5.1 拿到一张频谱图先判断它用的是哪套定义你从论文、同事、开源代码里拿到一张频谱图第一件事不应该是急着读数值而是先判断对方用的是什么坐标系。判断方法很简单按照以下顺序来第一看横轴单位。横轴标着 Hz 或者 kHz那基本是 f 定义横轴标着 rad/s那是 ω 定义。大部分频谱仪、示波器 FFT 功能、MATLAB 的 plot 输出横轴都是 Hz可以直接按 f 定义理解。第二看纵轴标的是幅度还是密度。很多频谱图画的是单边谱把负频率部分折到正频率这时纵轴变成 A信号的峰值幅度。这种图已经和 F(f)/F(ω) 之争无关了因为它显示的是幅度而不是密度你只需要关心信号幅度不需要管冲激面积。第三如果是理论推导给出的解析式找直流项。如果直流 1 对应 δ(·) 面积 1那就是 f 定义对应面积 2π就是 ω 定义。一眼就能看出来。5.2 不同软件工具默认习惯大不同这里要特别提醒同一个软件生态里的不同工具箱默认习惯可能不一样别想当然。MATLAB 的符号计算工具箱 fourier 函数默认使用的是 ω 定义正变换没有系数逆变换有 1/(2π)。你直接跑 fourier(cos(2pif0*t))得到的是 πδ(ω-ω₀)πδ(ωω₀) 那一类结果。而 MATLAB 的数值 FFT、频谱分析相关函数全部默认频率轴为 Hz本质对应 f 定义。也就是说同一个 MATLAB符号算出来是 π数值算出来是 1/2中间隔着一层坐标换算。Python 的 SymPy 默认 fourier_transform 用的变量是 ω或者说符号自己定义但 SciPy 的 fft、welch 这些函数又是 Hz 体系。所以用这些工具时先 doc 一下看看变量定义再动手算比你事后拿着结果对半天答案要省事得多。5.3 我踩过的一个典型坑我自己早年做信号采集项目时在论文里写了一个余弦信号的频谱推导用的是 ω 定义写的是 πδ(ω-ω₀) 那套。后来要验证算法拿 MATLAB fft 跑仿真直接取了 FFT 峰值高度来和论文里的 π 做对比结果怎么都对不上。折腾了大半天才发现FFT 的结果如果按周期信号的幅度谱来理解峰值约等于 N/2N 是 FFT 点数这个 N/2 对应的是 f 定义下每条谱线占总功率的一半这个概念。而论文里写的 π是基于 ω 坐标的频谱密度。两者之间差的不是简单的倍数关系因为 FFT 的离散谱线和连续频谱密度根本不是一个层面的东西。从那次之后我养成了一个习惯凡是推导涉及频谱解析式一定在旁边标注f 定义还是ω 定义凡是写代码分析频谱一定先写明频率轴变量和归一化方式。两套定义本身没有谁更优越混用才是真正的灾难。5.4 给初学者和工程师的几点实操建议如果你正在学信号与系统我的建议是以 f 定义为主要理解框架因为它的帕塞瓦尔定理没有前缀系数FFT 的物理意义也直接对应。但考试和教材如果默认 ω 定义你必须熟练掌握把 2π 在正变换、逆变换之间搬来搬去的规则。做题时先看题目用哪种约定不要一上来就写公式。如果你已经工作经常要读论文建议在阅读任何包含频谱图的论文时先到方法部分找定义式。有些论文写得很随意公式里 F(ω) 和 F(f) 混着用这时候你只能靠上下文推断看它是从拉普拉斯变换推过来的大概率 ω还是从采样和 DFT 推过来的大概率 f。如果你要写代码最稳妥的做法是全程用 f 定义并且以 Hz 为单位。遇到别人给的 ω 定义公式不要只做变量替换要把冲激的尺度变换也一并处理掉。换算公式再给你写一遍\delta\left(\frac{\omega}{2\pi} - f_0\right) \delta\left(\frac{\omega - \omega_0}{2\pi}\right) 2\pi\delta(\omega - \omega_0)这个式子在两套定义之间来回跳的时候比背任何理论都管用。最后一点个人经验我在做笔记时会固定用 f 定义作为基准坐标系所有信号的频谱都先写成 F(f)然后再按需要转换到 ω。这样做的好处是FFT、采样率、滤波器带宽这些工程参数可以直接对号入座不会出现推了半天发现单位对不上的尴尬。学习傅里叶变换头疼的不是傅里叶本人那套积分而是各种约定之间怎么转换。把转换规则刻进脑子里遇到 π 还是 1/2 的争论你反而能一眼看出对方用的是哪把尺子。
返回列表