ARTICLE DETAIL

资讯详情

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

帕塞瓦尔定理详解:从傅里叶变换到DFT的能量守恒与工程应用

帕塞瓦尔定理详解:从傅里叶变换到DFT的能量守恒与工程应用 做信号处理这些年帕塞瓦尔定理一直是我心里最“省事”的定理之一。它解决的是一个很朴素的问题同一个信号的能量在时域里算是一种答案在频域里算又是另一种答案帕塞瓦尔定理告诉你这两个答案永远相等。换句话说它本质上是能量守恒在傅里叶分析里的一个投影。很多同学第一次看到这条定理是在《信号与系统》教材里背公式容易真正遇到问题时却不知道该在什么场景下用不知道证明里那个 (2\pi)、那个 (1/N) 是从哪冒出来的。这篇文章把帕塞瓦尔定理从连续傅里叶变换到傅里叶级数再到离散 DFT 的证明完整过一遍最后结合工程里常见的能量估计、滤波器验证、压缩质量判断这些场景聊聊怎么用、容易踩哪些坑。无论你是刚学信号处理的学生还是在做通信、音频、数据处理的工程师都应该能从中拿到一点可以直接上手的思路。1. 先搞清楚帕塞瓦尔定理到底在讲什么1.1 从能量守恒的直觉说起我经常跟同事打一个比方一杯水你既可以用立方厘米量也可以用毫升量数字不一样但水的体积完全一样。帕塞瓦尔定理也是这个意思。信号在时域里随着时间变化在频域里分解成不同频率的分量两种描述方式看着毫不相关但“总能量”这个物理量是同一个所以按时间累计和按频率累计的结果必须一致。对于连续时间非周期信号能量定义是$$ E \int_{-\infty}^{\infty} |x(t)|^2 dt $$而对它做傅里叶变换后如果用频率 (f)Hz做变量帕塞瓦尔定理写成$$ E \int_{-\infty}^{\infty} |X(f)|^2 df $$右边这个 (|X(f)|^2) 通常叫能量谱密度意思是“单位频率上分布了多少能量”。所以左边是能量按时间相加右边是能量按频率相加加起来当然一样。很多初学者会困惑为什么有时公式里多一个 (\frac{1}{2\pi})那是因为把频率变量从 (f) 换成了角频率 (\omega)单位制变了换算系数自然就出来了。1.2 定理的四种标准形式与符号约定帕塞瓦尔定理不是一个孤立的公式它跟着傅里叶变换的具体形式走。我这里把最常用的四种形式整理成表格后面对应着一条条证明信号类型变换/级数帕塞瓦尔关系备注连续非周期角频率FT(\intx(t)连续非周期频率FT(\intx(t)周期为 (T) 的信号FS(\frac{1}{T} \int_T |x(t)|^2 dt \sum_{n-\infty}^{\infty} |c_n|^2)左边是平均功率长度为 (N) 的离散序列DFT(\sum_{n0}^{N-1} |x[n]|^2 \frac{1}{N} \sum_{k0}^{N-1} |X[k]|^2)正变换不带 (1/N)反变换带这张表看起来有点乱但背后的逻辑是统一的只要把这个信号对应的一套正交基理清楚把归一化因子放对位置帕塞瓦尔定理就是“模长平方在两组正交基下不改变”这个线性代数事实在傅里叶分析中的体现。后面证明时我会反复强调这一点。2. 连续时间傅里叶变换形式先把内积算清楚2.1 证明思路把反变换代进去连续时间傅里叶变换下的帕塞瓦尔定理是最常见也最容易被“背错”的版本。我不建议死记结论而是建议亲手推一遍推完你就知道 (\frac{1}{2\pi}) 到底从哪来了。先写下傅里叶变换对。角频率形式的正变换$$ X(\omega) \int_{-\infty}^{\infty} x(t) e^{-j\omega t} dt $$反变换$$ x(t) \frac{1}{2\pi} \int_{-\infty}^{\infty} X(\omega) e^{j\omega t} d\omega $$现在要证明$$ \int_{-\infty}^{\infty} |x(t)|^2 dt \frac{1}{2\pi} \int_{-\infty}^{\infty} |X(\omega)|^2 d\omega $$计算左边注意对复信号要写 (|x(t)|^2 x(t)x^(t))。把其中一个因子用反变换展开这里展开共轭项 (x^(t))$$ x^(t) \left[\frac{1}{2\pi} \int_{-\infty}^{\infty} X(\omega) e^{j\omega t} d\omega\right]^ \frac{1}{2\pi} \int_{-\infty}^{\infty} X^*(\omega) e^{-j\omega t} d\omega $$代入能量积分$$ \int_{-\infty}^{\infty} x(t) x^(t) dt \int_{-\infty}^{\infty} x(t) \left[\frac{1}{2\pi} \int_{-\infty}^{\infty} X^(\omega) e^{-j\omega t} d\omega\right] dt $$接下来交换积分顺序把只跟 (\omega) 有关的部分挪出来$$ \frac{1}{2\pi} \int_{-\infty}^{\infty} X^*(\omega) \left[\int_{-\infty}^{\infty} x(t) e^{-j\omega t} dt\right] d\omega $$中括号里这一项你回看正变换定义恰好就是 (X(\omega))。于是$$ \frac{1}{2\pi} \int_{-\infty}^{\infty} X^*(\omega) X(\omega) d\omega \frac{1}{2\pi} \int_{-\infty}^{\infty} |X(\omega)|^2 d\omega $$证明完成。整个过程没有用到什么高深技巧就是把反变换代进去交换积分次序然后认出正变换。这也是这类定理通用的套路用正交展开把一个域里的积分/求和变成另一个域里的模方和。2.2 什么时候可以放心交换积分次序严格来说上面证明中交换积分次序这个动作在数学上需要一个条件信号必须平方可积或者说能量有限并且 (|x(t)|) 和 (|X(\omega)|) 的积分收敛性要足够好。工程里绝大多数实际信号都满足这个条件所以工程师一般不做太多数学上的纠结。但如果你想在理论课上严谨一点可以补一句如果 (x(t) \in L^2(\mathbb{R}))那么通过 Fubini 定理可以证明积分次序交换是合法的。这个条件在实际应用中很少成为障碍真正的障碍往往是后面要说的“归一化因子”。2.3 一个容易搞混的频率变量写法关于 (\omega) 和 (f) 的坑我多说两句。如果傅里叶变换写成$$ X(f) \int_{-\infty}^{\infty} x(t) e^{-j2\pi ft} dt $$反变换变成$$ x(t) \int_{-\infty}^{\infty} X(f) e^{j2\pi ft} df $$这时候帕塞瓦尔定理就是干净的$$ \int_{-\infty}^{\infty} |x(t)|^2 dt \int_{-\infty}^{\infty} |X(f)|^2 df $$为什么角频率形式要带 (\frac{1}{2\pi})因为 (\omega 2\pi f)于是$$ \frac{1}{2\pi} \int_{-\infty}^{\infty} |X(\omega)|^2 d\omega \int_{-\infty}^{\infty} |X(2\pi f)|^2 df $$也就是说同样一个频域函数只是自变量换了一种“刻度”积分结果当然还相等。很多教材默认用角频率所以公式里那个 (\frac{1}{2\pi}) 是躲不掉的。我自己的习惯是遇到这类公式先确认一下定义然后统一用一套变量到底别一会 (\omega) 一会 (f)。为了验证可以拿单边指数衰减信号 (x(t)e^{-at}u(t)) 算一下。时域能量$$ \int_0^\infty e^{-2at} dt \frac{1}{2a} $$它的频谱是 (X(\omega)\frac{1}{aj\omega})所以$$ \frac{1}{2\pi}\int_{-\infty}^{\infty} \frac{d\omega}{a^2\omega^2} \frac{1}{2\pi} \cdot \frac{\pi}{a} \frac{1}{2a} $$两边完全一致。这种小例子做一次你对定理的信心会强很多。3. 傅里叶级数形式周期信号的能量沿着谐波分配3.1 从正交基展开证明周期信号和前面的连续非周期信号有个本质区别周期信号在 ((-\infty,\infty)) 上能量是无穷大的所以帕塞瓦尔定理在周期情形下通常写成“平均功率”的形式。设周期为 (T)基波角频率 (\omega_0 2\pi/T)傅里叶级数展开为$$ x(t) \sum_{n-\infty}^{\infty} c_n e^{jn\omega_0 t} $$其中系数$$ c_n \frac{1}{T} \int_T x(t) e^{-jn\omega_0 t} dt $$关键要记住复指数基在一个周期内是正交的$$ \frac{1}{T} \int_T e^{jm\omega_0 t} \left(e^{jn\omega_0 t}\right)^* dt \frac{1}{T} \int_T e^{j(m-n)\omega_0 t} dt \begin{cases} 1, mn \ 0, m \neq n \end{cases} $$接下来算信号在一个周期内的平均功率$$ \frac{1}{T}\int_T |x(t)|^2 dt \frac{1}{T}\int_T \left(\sum_m c_m e^{jm\omega_0 t}\right) \left(\sum_n c_n e^{jn\omega_0 t}\right)^* dt $$把共轭拿到各项上$$ \frac{1}{T}\int_T \sum_m \sum_n c_m c_n^* e^{j(m-n)\omega_0 t} dt $$交换求和与积分只有 (mn) 的项非零于是$$ \sum_n |c_n|^2 $$这就得到了周期信号帕塞瓦尔定理的常用形式$$ \frac{1}{T}\int_T |x(t)|^2 dt \sum_{n-\infty}^{\infty} |c_n|^2 $$如果你看的是某个周期内的总能量那就是两边同时乘 (T)$$ \int_T |x(t)|^2 dt T \sum_{n-\infty}^{\infty} |c_n|^2 $$两种写法只是“平均”和“不平均”的区别物理上都说得通。3.2 为什么系数里没有 (2\pi)连续傅里叶变换的帕塞瓦尔关系带 (\frac{1}{2\pi})而傅里叶级数的帕塞瓦尔关系不带任何额外因子很多人在这里犯迷糊。原因很简单傅里叶系数 (c_n) 的定义里已经写了一个 (\frac{1}{T})这个 (\frac{1}{T}) 与“离散求和”天然对应所以不需要额外的连续频率刻度换算。如果你用的系数定义为 (c_n \int_T x(t) e^{-jn\omega_0 t}dt)也就是没除 (T)那么帕塞瓦尔关系就会变成 (\int_T |x(t)|^2 dt \frac{1}{T}\sum |c_n|^2)。所以核心问题始终是“怎么定义变换的”。我见过太多人拿着两本教材对不上公式就是因为一本的级数系数带了 (1/T)另一本没带。3.3 工程视角功率谱与谐波贡献从工程角度看周期信号的帕塞瓦尔定理说明一个周期信号的总平均功率等于直流功率加上各次谐波功率之和。对实数信号频谱有正负频率对称性工程上常用单边谱。此时除了直流分量外一个正频率对应的实际功率贡献是 (2|c_n|^2)因为 (c_{-n}) 和 (c_n) 是共轭关系模方相同加起来刚好是二倍。举个例子幅度为 (A) 的方波信号平均功率显然是 (A^2)。它的傅里叶级数只含奇次谐波系数模方按 (1/n^2) 衰减所有谐波功率加起来正好收敛到 (A^2)。这个例子适合自己动手算一遍能直观感受到无穷级数的能量到底是怎么“分配到高频”的。4. 离散傅里叶变换形式计算机最常用的版本4.1 先证明 DFT 帕塞瓦尔定理现在到了真正写代码时最常用的版本离散傅里叶变换 DFT。之所以单独拿出来讲是因为计算机里处理的都是离散序列跑 FFT 时一不留神能量就对不上多数是归一化因子没放对。DFT 的标准定义信号处理默认是$$ X[k] \sum_{n0}^{N-1} x[n] e^{-j 2\pi kn/N} $$反变换$$ x[n] \frac{1}{N} \sum_{k0}^{N-1} X[k] e^{j 2\pi kn/N} $$证明帕塞瓦尔关系$$ \sum_{n0}^{N-1} |x[n]|^2 \sum_{n0}^{N-1} x[n] x^*[n] $$把 (x^*[n]) 用反变换展开注意共轭会让指数变号$$ x^[n] \frac{1}{N} \sum_{k0}^{N-1} X^[k] e^{-j2\pi kn/N} $$代入$$ \frac{1}{N} \sum_{k0}^{N-1} X^*[k] \sum_{n0}^{N-1} x[n] e^{-j2\pi kn/N} $$内层求和正是 (X[k])于是$$ \frac{1}{N} \sum_{k0}^{N-1} X^*[k] X[k] \frac{1}{N} \sum_{k0}^{N-1} |X[k]|^2 $$结论$$ \sum_{n0}^{N-1} |x[n]|^2 \frac{1}{N} \sum_{k0}^{N-1} |X[k]|^2 $$这个 (1/N) 的存在完全是因为正变换没有归一化。你可以把 DFT 看成一个能量被放大了 (\sqrt{N}) 倍的正交变换所以频域模方和要先除以 (N) 才能回到原始能量。4.2 用 Python 实测一次如果你平时用 Python下面这段代码可以快速验证。这里造了一个复随机序列分别从时域和频域算能量import numpy as np rng np.random.default_rng(42) x rng.standard_normal(64) 1j * rng.standard_normal(64) E_time np.sum(np.abs(x)**2) X np.fft.fft(x) # 正变换不带 1/N E_freq np.sum(np.abs(X)**2) / len(x) print(时域能量:, E_time) print(频域能量:, E_freq)实测两个结果会非常接近浮点误差在 (10^{-14}) 量级。如果你忘记除以N结果就会差 (64) 倍这种错误在工程里非常常见。4.3 数值验证时的小坑第一如果你用的不是 (x[n] \frac{1}{N}\sum X[k]e^{j...}) 这套定义而是归一化的 DFT即正反变换都带 (1/\sqrt{N})那么帕塞瓦尔关系就是 (\sum |x[n]|^2 \sum |X[k]|^2)没有任何系数。这种定义在线性代数里很常见因为它让 DFT 成为真正的幺正变换。第二实数信号做 FFT 后正频率和负频率的系数是共轭对称的使用单边谱时不能简单把所有点的模方相加而要把直流单独算正频率部分乘 2。但帕塞瓦尔定理本身用的是双边 FFT 全部 (N) 个点不要漏掉任何一个。第三对序列补零后再做 FFT 不会改变信号本身能量因为补的是零。补零后的序列更长频域采样点更密(\frac{1}{N}\sum |X[k]|^2) 仍然等于原序列能量。这个性质经常被人忽略但它其实是帕塞瓦尔定理在离散域的一种体现。5. 帕塞瓦尔定理在工程里的几个高频用途5.1 滤波器输出能量验证我在实际项目中经常用帕塞瓦尔定理做“快速自检”。比如设计了一个数字滤波器时域上滤波后的输出序列已经算出来了那我可以顺手做一次 FFT看看频域能量和时域能量差多少。如果两边对不上而且差的比例正好是某个整数的倍数那基本就是归一化因子写错了如果差得乱七八糟那可能滤波实现本身有 bug比如卷积边界处理不对或者频谱相乘后忘记了 IFFT 的归一化。这种验证方法的好处是成本极低。一次 FFT 加上一次求和就能抓出一类非常隐蔽的错误比闷头查代码有效率得多。5.2 功率谱密度与信噪比计算随机信号分析里功率谱密度 (S_{xx}(\omega)) 在整个频率范围上的积分就是信号的平均功率。这个结论本质上就是帕塞瓦尔定理在平稳随机过程上的推广。举个例子白噪声通过一个带宽为 (B) 的理想低通滤波器输出功率等于功率谱密度的高度乘以带宽也就是常见的 (N_0 B)。这个结果可以直接解释频谱仪上看到的噪声平台面积与功率读数之间的关系。做通信系统仿真时我经常要估算带内噪声功率帕塞瓦尔定理让我可以放心地在频域积分因为我知道它和直接在时域求均方根是完全等价的。5.3 压缩算法中的能量保持做音频或图像压缩的时候变换编码是主流思路。把信号变换到频域或 DCT 域丢掉一部分能量小的高频系数然后反变换回时域。如何判断“丢了多少能量”这时候帕塞瓦尔定理就派上用场了。如果变换是正交的、归一化的那么保留的能量直接等于保留系数的模方和。假设总能量是 (E)保留了前 (M) 个系数那么丢弃的能量就是 (E - \sum_{i1}^{M} |c_i|^2)由此可以算出一个“能量保持率”。这个指标比单纯看压缩比更接近信号质量的核心因为人耳和人眼对高频能量的感知权重不同但能量保持率至少能提供一个客观下限。5.4 机器学习特征处理中的一个小惊喜机器学习里做特征变换时如果用的是正交变换比如 PCA或者归一化后的傅里叶特征那么特征向量的二范数在变换前后不变。这个性质背后的数学和帕塞瓦尔定理是同源的。理解了这一点你在设计正则化项或者做特征筛选时会更清楚“保留哪些分量等价于保留多少范数能量”而不是只把 FFT 当成一个黑盒工具。6. 证明时最容易踩的坑6.1 复信号漏了共轭这是学生证明帕塞瓦尔定理时最常见的一个错误把 (|x(t)|^2) 直接写成 (x^2(t))。对实信号没有影响但一旦信号是复的比如 (x(t)e^{j\omega_0 t})漏掉共轭会导致整个推导方向错乱。正确写法永远是 (x(t)x^(t))共轭挪到频谱上就是 (X^(\omega))最后才能变成模方。6.2 归一化因子的“隐形炸弹”下面的表格是我自己整理的“查错速查表”。遇到时频域能量对不上先看自己的变换定义属于哪一行变换定义帕塞瓦尔关系连续 FT角频率反变换带 (1/(2\pi))(\int |x|^2 dt \frac{1}{2\pi}\int |X(\omega)|^2 d\omega)连续 FT频率正反变换都不带系数(\int |x|^2 dt \int |X(f)|^2 df)FS系数带 (1/T)(\frac{1}{T}\int_T |x|^2 dt \sum |c_n|^2)DFT正变换不带 (1/N)反变换带(\sum |x[n]|^2 \frac{1}{N}\sum |X[k]|^2)归一化 DFT正反都带 (1/\sqrt{N})(\sum |x[n]|^2 \sum |X[k]|^2)6.3 周期信号总能量 vs 平均功率遇到周期信号如果直接套用 (\int_{-\infty}^{\infty}|x(t)|^2dt)结果是发散的因为周期信号持续无限久。帕塞瓦尔定理在这种情况下说的是平均功率不是总能量。要算总能量就得乘上观察时长或者干脆用“一个周期内的能量”来描述。很多人在这个问题上把自己绕晕其实只要想清楚“能量”和“功率”的定义对象就没事了。6.4 连续与离散的能量量纲最后提醒一个工程中特别容易忽略的差异。模拟信号 (x(t)) 的能量单位通常是 (V^2 \cdot s)离散序列 (x[n]) 的能量是无量纲的数字累加。如果对一个采样后的序列做数值积分来近似模拟信号能量关系是 (\int|x(t)|^2dt \approx T_s \sum |x[n]|^2)多了一个采样周期 (T_s) 的因子。因此比较模拟域和数字域的能量时必须先约定好要不要乘 (T_s)否则差出几十倍很正常。我在实际中会固定一套约定当前任务如果统一用离散序列就只比离散域的能量如果涉及模拟信号就先把采样周期考虑进去。单独拎出来一条做不会错混着来必出问题。最后分享一个我自己的小习惯凡是遇到时频域能量对不上的问题我第一步不是怀疑定理而是先把变换定义的归一化因子抄一遍。正变换有没有 (1/N)反变换有没有 (1/(2\pi))系数定义有没有 (1/T)这三点查完八成问题已经水落石出。这个动作帮我排掉过很多低级错误也让我对帕塞瓦尔定理背后的结构越用越熟。
返回列表