ARTICLE DETAIL

资讯详情

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

常见傅里叶变换对速记:三角脉冲频谱的卷积推导法

常见傅里叶变换对速记:三角脉冲频谱的卷积推导法 前阵子帮一个刚入职的同事改信号处理代码他把一段三角窗数据直接丢给 FFT 库然后盯着频谱图问我“为什么主瓣旁边还带着一圈一圈的波纹”我反手在白板上画了一个矩形脉冲和它的 sinc 谱问他“你猜三角窗的频谱长什么样”他愣了一下说“我记得好像是 sinc 的平方但具体系数和零点在哪我得翻书。”傅里叶变换的常见变换对真的是信号处理里最容易被高估、又最容易被低估的一组知识。说它被高估是因为很多人以为背下公式表就够了说它被低估是因为真正用的时候你需要的不是“背”而是“能推”。做滤波器设计、调制解调、采样分析、雷达信号处理几乎每天都要在脑子里快速画频谱草图。如果每次都要翻书效率会非常低。这篇文章我就把这组“乘法口诀”重新梳理一遍不讲复杂的数学证明重点说三件事哪些变换对必须刻进脑子哪些可以由基本变换对推出来以及三角脉冲这种看着不起眼、实际特别常见的变换对到底怎么记才不容易忘。1. 为什么说“背变换对”是一条弯路1.1 从一次“卡壳”说起同事那次卡壳其实很典型。他刚做频谱分析矩形窗的频谱是 sinc这是知道的但换成三角窗他就只能看软件输出的数值结果没法自己预判频谱形状。问题就出在他把“矩形脉冲 ↔ sinc”当成了一条孤立公式来记不知道三角脉冲和矩形脉冲之间还有一层“卷积”的亲戚关系。这就像学乘法只背了九九乘法表里的“三六十八”却不知道 6 × 3 和 3 × 6 是一回事。一道题换个写法就懵了。后来我带他做了一次完整的推导三角波形可以拆成两个矩形波形的卷积而时域卷积对应频域相乘。所以矩形脉冲的频谱是 sinc两个矩形卷积出来的三角波形频谱自然就是 sinc 乘以 sinc也就是 sinc 的平方。这一下子他不仅记住了“三角窗频谱是 sinc²”连“三角窗旁瓣衰减比矩形窗快”这种工程结论也顺带理解了。1.2 变换对不是孤立的它们是一张关系网常见的傅里叶变换对看起来有几十个但真正独立的其实没几个。很多变换对都能通过几条最基本的规则从少数“基石”变换对里推出来。我总结下来最重要的生成规则就四条线性信号叠加频谱也叠加。时移/频移时域搬移带来频域相位旋转频域搬移对应时域乘复指数。尺度时域压得越窄频域展得越宽幅度还要跟着缩放。对偶正向变换和反向变换形式几乎一样时域的某个形状它的频谱形状往往就是它自己在另一个域里的“镜像”。这几条规则不用专门去背用多了自然就记住了。它们的意义在于你只需要把少数几个基础变换对记牢剩下的都能在需要时快速推出来。比如有了矩形脉冲的频谱利用对偶性就能得到 sinc 脉冲的频谱利用两个矩形脉冲卷积就能得到三角脉冲的频谱利用欧拉公式把余弦拆成两个复指数就能画出两根谱线。1.3 先统一约定再看公式聊傅里叶变换之前必须先把约定说清楚否则看什么公式都是错的。我用的是工程中最常见的一套定义$$X(f) \int_{-\infty}^{\infty} x(t) e^{-j2\pi ft} dt$$逆变换是$$x(t) \int_{-\infty}^{\infty} X(f) e^{j2\pi ft} df$$sinc 函数的定义也统一成$$\mathrm{sinc}(x) \frac{\sin(\pi x)}{\pi x}$$这套约定下矩形脉冲的频谱是最漂亮的宽度为 T 的矩形脉冲频谱就是 $T,\mathrm{sinc}(fT)$不需要额外再乘任何 $2\pi$。有些教材喜欢用角频率 $\omega$ 来写那种约定下公式里会多点 $2\pi$ 的因子对偶性写起来也麻烦。这不是谁对谁错的问题但你自己脑子里必须固定一套否则口算频谱的时候很容易犯低级错误。2. 第一梯队变换对先背熟这几组“乘法口诀”2.1 冲激、常数与矩形脉冲三块最基础的积木我把最该记住的变换对分成“第一梯队”它们就是信号处理里的九九乘法表。第一组是冲激函数和常数$$\delta(t) \leftrightarrow 1$$$$1 \leftrightarrow \delta(f)$$时域里一个无限窄的冲激频域里是平坦的一条线。这在物理上对应“极短时间的冲击包含所有频率成分”比如用锤子敲一下结构激发的响应里就包含结构的各阶模态频率。反过来时域里恒定的直流频域就只有频率为零处一根线。第二组是矩形脉冲$$\mathrm{rect}(t/T) \leftrightarrow T,\mathrm{sinc}(fT)$$宽度为 $T$、高度为 1 的矩形脉冲它的频谱峰值是 $T$也就是矩形的面积第一个零点在 $f 1/T$后面每隔 $1/T$ 出现一个零点。**“时域宽度和频域主瓣宽度乘积是常数”**这个结论基本都从这条变换对来。第三组是复指数$$e^{j2\pi f_0 t} \leftrightarrow \delta(f - f_0)$$这条的重要性不亚于前两组因为任何实信号都能通过欧拉公式拆成一对共轭复指数。只要记住了它余弦、正弦的频谱就是现成的。2.2 单边指数衰减与高斯脉冲两种天然波形单边指数衰减大概是实际系统里出现频率最高的波形了。RC 低通滤波器的冲激响应就是 $e^{-at}u(t)$它的傅里叶变换是$$e^{-at}u(t) \leftrightarrow \frac{1}{a j2\pi f}$$这个频谱的幅频特性是 $1/\sqrt{a^2 (2\pi f)^2}$典型的低通形状$f a/(2\pi)$ 附近是 -3dB 转折点。记住它很多模拟滤波器的问题都能直接看懂。高斯脉冲也值得单独说$$e^{-\pi t^2} \leftrightarrow e^{-\pi f^2}$$高斯函数傅里叶变换后还是高斯函数而且形式上完全对称。稍微推广一下$e^{-t^2/(2\sigma^2)}$ 对应的频谱是一个宽度成反比的高斯。高斯信号在时域和频域都“不拖尾巴”是时宽带宽积最小的信号雷达和通信里很多脉冲设计都围绕它展开。2.3 第一梯队速查表时域信号 $x(t)$频域 $X(f)$典型场景$\delta(t)$$1$冲激响应、采样理想化$1$$\delta(f)$直流、均值分量$e^{j2\pi f_0 t}$$\delta(f-f_0)$单频复指数、频谱搬移$\mathrm{rect}(t/T)$$T,\mathrm{sinc}(fT)$门信号、截断、滤波$\mathrm{sinc}(Bt)$$\frac{1}{B}\mathrm{rect}(f/B)$理想低通、无码间串扰$e^{-at}u(t),, a0$$\frac{1}{aj2\pi f}$RC电路、指数衰减过程$e^{-\pi t^2}$$e^{-\pi f^2}$高斯脉冲、最优时频聚焦这组表值得做到条件反射。看到矩形波形脑子里就要浮现出零点在 $n/T$ 的 sinc看到指数衰减就要想到那个一阶低通形状看到高斯波形就要想到还是高斯。3. 第二梯队变换对用欧拉公式和极限思想拼出来第一梯队是积木第二梯队就是用积木搭出来的常见成品。这些变换对不需要刻意背掌握推导路径就够了。3.1 余弦、正弦与频谱搬移余弦信号可以拆成两个复指数$$\cos(2\pi f_0 t) \frac{e^{j2\pi f_0 t} e^{-j2\pi f_0 t}}{2}$$所以它的频谱就是两个冲激分别位于 $f_0$ 和 $-f_0$幅度各为 $1/2$$$\cos(2\pi f_0 t) \leftrightarrow \frac{1}{2}[\delta(f-f_0) \delta(ff_0)]$$正弦信号同理但因为是奇函数频谱里两个冲激的方向相反$$\sin(2\pi f_0 t) \leftrightarrow \frac{1}{2j}[\delta(f-f_0) - \delta(ff_0)]$$工程上最常用的推论来自频移性质基带信号乘上余弦频谱整体搬到 $\pm f_0$ 处。这就是调制的本质。做通信系统的人看到“乘载波”三个字脑子里自动就把频谱搬移画出来了。3.2 阶跃、符号函数与 1/f 型频谱阶跃信号 $u(t)$ 的傅里叶变换是个经典推导因为它既不是绝对可积的也不是能量有限的必须在广义函数意义下理解。处理思路是拆成两部分$$u(t) \frac{1}{2} \frac{1}{2}\mathrm{sgn}(t)$$直流部分对应 $\frac{1}{2}\delta(f)$符号函数部分对应一个纯虚数的 $1/(j2\pi f)$合起来就是$$u(t) \leftrightarrow \frac{1}{j2\pi f} \frac{1}{2}\delta(f)$$符号函数 $\mathrm{sgn}(t)$ 本身的变换对是$$\mathrm{sgn}(t) \leftrightarrow \frac{1}{j\pi f}$$经常有人问为什么阶跃信号的频谱里有“$1/f$”这东西。直观理解是阶跃信号从 0 跳到 1这种突变需要全频段的能量来构造而 $1/f$ 的形状说明低频分量贡献更大这也解释了为什么方波、阶跃这类信号在通过带宽有限的系统后边沿会变缓——高频分量被砍掉了。3.3 双边指数与周期冲激串双边指数衰减信号可以看成两个单边指数背靠背拼起来$$e^{-a|t|} \leftrightarrow \frac{2a}{a^2 (2\pi f)^2}$$这个谱是实函数而且是“钟形”的比单边指数的幅度谱衰减更快。热噪声的自相关函数往往建模成双边指数对应的功率谱就是洛伦兹型这个表达式在物理和工程里都极其常见。周期冲激串的变换对要单独拿出来说因为它是采样定理的数学地基$$\sum_{n-\infty}^{\infty} \delta(t - nT) \leftrightarrow \frac{1}{T}\sum_{k-\infty}^{\infty} \delta\left(f - \frac{k}{T}\right)$$时域间隔为 $T$ 的冲激串频谱是间隔为 $1/T$ 的冲激串。这个结果用傅里叶级数很容易得到周期冲激串的傅里叶级数系数恒等于 $1/T$于是它本身就能展开成无穷多个复指数的叠加每个复指数对应频域里一根谱线。这就是为什么采样之后的频谱会周期性重复也是为什么稍微处理不好就会发生频谱混叠。4. 三角脉冲的傅里叶变换为什么我推荐卷积法记忆三角脉冲这个变换对很多人是当成“tri(t/T)的频谱是 $T,\mathrm{sinc}^2(fT)$”来背的。但恰恰因为它太容易和矩形脉冲搞混我强烈建议不要直接背结论而是用卷积法去理解。我先明确这里三角脉冲的定义$$\mathrm{tri}(t/T) 1 - \frac{|t|}{T}, \quad |t| \le T$$也就是说它从 $-T$ 到 $T$峰值在 0 处为 1底宽为 $2T$。有些教材把底宽定义为 $T$那样公式里的系数和零点位置都会差一个 2看文献的时候要特别留意。4.1 直接积分不推荐的理由最容易想到的方法当然是拿定义硬算$$\int_{-\infty}^{\infty} \mathrm{tri}(t/T) e^{-j2\pi ft} dt$$但因为三角形是分段函数必须拆成 $(-T,0)$ 和 $(0,T)$ 两段每段都要用一次分部积分最后还要处理 $e^{\pm j2\pi fT}$ 的化简。做一次会发现这个方法不算难但过程很繁琐而且考试或面试时容易在某个符号上出错。更关键的问题是直接积分只告诉了你“三角脉冲的频谱是 sinc 的平方”却没有告诉你“为什么”。一旦题目换成梯形脉冲或者问“三角窗和矩形窗的频谱有什么区别”直接积分的方法就提供不了任何直觉。4.2 卷积法三角脉冲就是矩形卷积矩形我最推荐的方法是把三角脉冲看成两个矩形脉冲的卷积。宽度为 $T$ 的矩形脉冲 $r_T(t) \mathrm{rect}(t/T)$ 和自身做卷积结果是一个底宽 $2T$、峰值 $T$ 的三角形。把它除以 $T$就得到峰值 1、底宽 $2T$ 的三角脉冲$$r_T(t) * r_T(t) T \cdot \mathrm{tri}(t/T)$$所以$$\mathrm{tri}(t/T) \frac{1}{T}\left[r_T(t) * r_T(t)\right]$$两边同时做傅里叶变换。时域卷积对应频域相乘矩形脉冲的频谱是 $T,\mathrm{sinc}(fT)$于是$$F[\mathrm{tri}(t/T)] \frac{1}{T} \left[T,\mathrm{sinc}(fT)\right]^2 T,\mathrm{sinc}^2(fT)$$这一步的系数很容易算错关键是别忘记时域里的 $1/T$。如果只是把两个 $T,\mathrm{sinc}(fT)$ 乘在一起而不除以 $T$结果就大了 $T$ 倍。这个推导最大的价值在于它把“三角窗频谱是 sinc²”变成了一个可以重复使用的思考方式时域里做了卷积频域里就在乘自身。矩形脉冲乘一次变 sinc卷积一次变 sinc²那么梯形脉冲呢就是一个宽矩形和一个窄矩形卷积频谱是两个不同宽度的 sinc 相乘。想清楚这一层很多窗函数分析都不需要查表了。4.3 微分法三冲激与代数化简除了卷积法还有一种方法也值得掌握尤其是已经熟悉傅里叶变换微分性质的人。三角脉冲的波形是两段直线拼接的斜率的斜率在 $t-T$、$t0$、$tT$ 三个点出现突变。求二阶导数会得到三个冲激$$\frac{d^2}{dt^2}\mathrm{tri}(t/T) \frac{1}{T}\delta(tT) - \frac{2}{T}\delta(t) \frac{1}{T}\delta(t-T)$$对右边做傅里叶变换利用 $\delta(t-a) \leftrightarrow e^{-j2\pi fa}$$$\frac{1}{T}e^{j2\pi fT} - \frac{2}{T} \frac{1}{T}e^{-j2\pi fT} \frac{2}{T}\left[\cos(2\pi fT) - 1\right]$$时域二阶导对应频域乘以 $(j2\pi f)^2 -4\pi^2 f^2$因此$$-4\pi^2 f^2 X(f) \frac{2}{T}\left[\cos(2\pi fT) - 1\right]$$利用 $\cos(2\pi fT) - 1 -2\sin^2(\pi fT)$整理后得到$$X(f) \frac{\frac{2}{T} \cdot 2\sin^2(\pi fT)}{4\pi^2 f^2} T,\mathrm{sinc}^2(fT)$$这个方法的好处是如果以后遇到分段线性的其他波形比如不对称三角波也能用同样的“二阶导变冲激串”的思路去推适合喜欢代数处理的同学。4.4 从频谱看工程含义旁瓣衰减弄明白三角脉冲的频谱公式之后工程含义就很直接了。$T,\mathrm{sinc}^2(fT)$ 的零点位置在 $f \pm 1/T, \pm 2/T, \dots$主瓣宽度是 $2/T$峰值是 $T$。和矩形脉冲的 $T,\mathrm{sinc}(fT)$ 相比主瓣宽度是矩形脉冲的两倍矩形脉冲主瓣宽度是 $1/T$也就是频谱分辨率变差了但旁瓣衰减速度从 $1/f$ 变成了 $1/f^2$泄漏到远处的能量小得多。这就是频谱分析里“矩形窗 vs 三角窗Bartlett 窗”的经典权衡矩形窗主瓣窄、但旁瓣高泄露严重三角窗主瓣稍宽但旁瓣衰减快谱线更干净。很多东西看着是数学公式实际上早就刻在算法的设计选择里了。5. 工程中真正要小心的四个坑变换对背得再熟工程里还是会踩坑。下面这四个问题几乎每个带过的新人都犯过。5.1 频率变量约定用 f 还是用 ω公式完全不同如果你习惯用角频率 $\omega$那矩形脉冲的变换对会变成$$\mathrm{rect}(t/T) \leftrightarrow T,\mathrm{Sa}\left(\frac{\omega T}{2}\right)$$这里 $\mathrm{Sa}(x) \sin(x)/x$而且逆变换前面多一个 $1/(2\pi)$。如果一会儿用 $f$、一会儿用 $\omega$还混用不同的 sinc 定义那十个公式有九个会错。我的建议是口算和工程估算一律用 $f$ 约定只在推导拉普拉斯变换或某些频域积分时才切到 $\omega$。这样矩形脉冲的公式永远是 $T,\mathrm{sinc}(fT)$省心很多。5.2 对偶性用不好反而添乱对偶性是好东西但用不好会出系数错误。规则是若 $x(t) \leftrightarrow X(f)$则 $X(t) \leftrightarrow x(-f)$。举个例子已知$$\mathrm{rect}(t/T) \leftrightarrow T,\mathrm{sinc}(fT)$$把矩形函数换成 $T,\mathrm{sinc}(tT)$ 作为时域信号它的频谱就应该是对偶之后的 $\mathrm{rect}(f/T)$。再整理一下系数令 $B T$就能得到$$\mathrm{sinc}(Bt) \leftrightarrow \frac{1}{B}\mathrm{rect}(f/B)$$具体的系数推导容易在变量的尺度关系上出错。我自己的做法是每次用对偶性推完都拿一个特殊点验证一下。比如令 $t0$看两边面积或峰值是否对得上。这种验证习惯能挡住绝大多数系数错误。5.3 帕斯瓦尔定理当验算工具算了一个变换对怎么知道系数有没有漏用帕斯瓦尔定理能量守恒$$\int |x(t)|^2 dt \int |X(f)|^2 df$$比如宽度 $T$、高度 1 的矩形脉冲能量是 $T$。频域里 $X(f) T,\mathrm{sinc}(fT)$那么$$\int T^2 \mathrm{sinc}^2(fT) df T^2 \cdot \frac{1}{T} T$$正好对上。如果推出来的频谱能量和时域能量不一致那一定某个地方乘错了或漏掉了系数。这个检查成本很低但很有效。我自己每推导一个新的变换对几乎都会顺手验一次能量尤其是推双边指数、三角脉冲这种带参数的信号能避免很多尴尬。5.4 连续域结论不要直接搬到离散 FFT这个坑属于“知道但没意识到”的那种。FFT 输出的是离散频谱它对应的是时域周期延拓之后的序列。连续傅里叶变换里的很多结论比如“矩形脉冲的频谱是 sinc”“三角窗的频谱是 sinc²”在离散域中只能近似成立。特别是无限长的信号做 FFT 前必然要截断截断等于乘了一个矩形窗频域里就是卷积上一个很宽的 sinc。于是本来干净的一条谱线变成带着旁瓣的一团。这就是“频谱泄漏”的来源。如果被分析信号本身是周期的还要注意截取长度必须包含整数个周期否则泄漏会更严重。对付这个问题常见做法是换用三角窗、汉宁窗等旁瓣更低的窗函数——本质上就是在用我们前面讲的变换对权衡主瓣宽度和旁瓣衰减。6. 把变换对变成“肌肉记忆”的实操建议6.1 记忆优先级不是所有变换对都值得背我见过有人把十几页的傅里叶变换表打印出来贴在工位上但效果并不好。真正的记忆优先级应该是第一梯队全部条件反射看到波形立刻浮现频谱的大致形状和零点位置第二梯队不需要背但要在 30 秒内用欧拉公式或拆解思路推出来第三梯队也就是三角脉冲这类记“生成方法”比记公式本身靠谱。所谓记忆本质上就是建立触发条件。看到 sinc 就要想到矩形看到矩形就要想到 $f n/T$ 的零点看到三角波形就要想到两个矩形卷积。这样链条式的记忆比孤立地背几十个公式牢固得多。6.2 口算频谱的三个触发场景实际工作里我给自己总结了一套快速反应规则看到有限长、无跳变波形矩形、梯形、三角优先想“这是不是若干矩形卷积的结果”频谱一定由若干个 sinc 相乘构成看到无限长、衰减波形指数、双边指数、高斯优先想“时域多宽、频域多窄”频谱一定是某个低通/钟形曲线看到周期波形优先想傅里叶级数频谱是离散谱线而不是连续曲线。这套规则不能替代严格推导但足以让你在开会时不用开软件就能对系统行为有个大致判断。很多时候这种快速估算能力比精确计算更能帮你发现设计里的问题。6.3 用代码验证你的记忆想检验自己有没有记错最直接的方式是拿 Python 快速验证import numpy as np fs 2000 T 0.02 t np.arange(-0.06, 0.06, 1/fs) # 矩形脉冲宽度 T x (np.abs(t) T/2).astype(float) # 数值傅里叶变换注意乘以时间间隔 1/fs 做近似积分 X np.fft.fftshift(np.fft.fft(x)) * (1/fs) f np.fft.fftshift(np.fft.fftfreq(len(t), 1/fs)) # 理论值 X_theory T * np.sinc(f * T)numpy 里的sinc(x)就是 $\sin(\pi x)/(\pi x)$正好对得上我这套约定。跑出来的两条曲线几乎重合你就能确信脑子里那套公式是对的。三角脉冲的验证也类似只要把x换成np.maximum(0, 1 - np.abs(t)/T)理论值换成T * np.sinc(f * T) ** 2。我在实际项目里还有一个习惯把验证过的那组变换对写成一个小的速查脚本下次碰到类似问题直接调用而不是重新推导。但这种脚本本身不是必要的真正必要的是让“看到波形就能想到频谱形状”变成你的本能反应。说白了常见傅里叶变换对是信号处理里最值得花时间打磨的基本功。它不会像某个花哨的新算法那样给你带来新鲜感但恰恰是这种基本功决定了你拿到一个信号时是能在白板上三分钟画出频谱结构还是打开 MATLAB 浑浑噩噩试半天窗口函数。
返回列表