跳转到内容
新建笔记

信号与系统 05:DFT、FFT、窗与频谱标定

完整入口 · 上一章:傅里叶与采样 · 下一章:工程应用

1. 四个名字各解决什么问题

跳转到“1. 四个名字各解决什么问题”
名称时间输入频率输出
CTFT连续时间信号连续角频率
DTFT整条离散序列连续且 2π2\pi 周期的离散角频率
DFT有限 NN 个点NN 个频率取值
FFT同 DFT同 DFT,算法计算更快

本章约定正变换不缩放、逆变换除以变换长度。软件可能采用其他约定,须明确归一化;可对照 NumPy FFT 文档。

把实际记录 x[0],…,x[N−1]x[0],\ldots,x[N-1] 在记录外补零,DTFT 是:

Xd(ejΩ)=∑n=0N−1x[n]e−jΩn.X_{\mathrm d}(e^{j\Omega})=\sum_{n=0}^{N-1}x[n]e^{-j\Omega n}.

在 Ωk=2πk/N\Omega_k=2\pi k/N 读取 NN 个点:

X[k]=∑n=0N−1x[n]e−j2πkn/N,k=0,…,N−1.\boxed{X[k]=\sum_{n=0}^{N-1}x[n]e^{-j2\pi kn/N}}, \quad k=0,\ldots,N-1.

这就是 NN 点 DFT。它也可看作 NN 周期序列傅里叶系数的 NN 倍;频域乘法因此对应循环卷积,需要与非周期的线性卷积分开。

3. 为什么逆变换除以 NN

跳转到“3. 为什么逆变换除以 NNN”

令 WN=e−j2π/NW_N=e^{-j2\pi/N}。计算正交和:

Sm−n=∑k=0N−1ej2πk(m−n)/N.S_{m-n}=\sum_{k=0}^{N-1}e^{j2\pi k(m-n)/N}.

若 m=nm=n,每项为 1,和为 NN。若 m≠nm\ne n,令 q=ej2π(m−n)/N≠1q=e^{j2\pi(m-n)/N}\ne1,但 qN=1q^N=1:

Sm−n=1−qN1−q=0.S_{m-n}=\frac{1-q^N}{1-q}=0.

因此:

1N∑kX[k]ej2πkm/N=1N∑k∑nx[n]ej2πk(m−n)/N=1N∑nx[n]Sm−n=x[m].\begin{aligned} \frac1N\sum_kX[k]e^{j2\pi km/N} &=\frac1N\sum_k\sum_nx[n]e^{j2\pi k(m-n)/N}\\ &=\frac1N\sum_nx[n]S_{m-n}\\ &=x[m]. \end{aligned}

所以:

x[n]=1N∑k=0N−1X[k]ej2πkn/N.\boxed{x[n]=\frac1N\sum_{k=0}^{N-1}X[k]e^{j2\pi kn/N}}.

1/N1/N 抵消了选中一个模式时得到的正交和 NN。这也说明标准 DFT 并没有自动输出“原信号的物理峰值”。

输入 x=[1,0,−1,0]x=[1,0,-1,0],N=4N=4:

X[k]=1−e−jπk.X[k]=1-e^{-j\pi k}.
kke−jπke^{-j\pi k}X[k]X[k]
010
1-12
210
3-12

所以 X=[0,2,0,2]X=[0,2,0,2]。逆变换:

x[n]=14(2ejπn/2+2ej3πn/2)=12(ejπn/2+e−jπn/2)=cos⁡(πn/2),\begin{aligned} x[n] &=\frac14(2e^{j\pi n/2}+2e^{j3\pi n/2})\\ &=\frac12(e^{j\pi n/2}+e^{-j\pi n/2})\\ &=\cos(\pi n/2), \end{aligned}

在整数 n=0,1,2,3n=0,1,2,3 恢复 [1,0,−1,0][1,0,-1,0]。k=3k=3 对应负频率 −π/2-\pi/2,因此两边构成一对共轭正弦分量。

直接 DFT 有 NN 个频点,每点求 NN 项,主要计算量为 O(N2)O(N^2)。偶数 NN 时,把采样下标分为偶数和奇数:

X[k]=∑m=0N/2−1x[2m]WN2mk+∑m=0N/2−1x[2m+1]WN(2m+1)k=E[k]+WNkO[k].\begin{aligned} X[k] &=\sum_{m=0}^{N/2-1}x[2m]W_N^{2mk} +\sum_{m=0}^{N/2-1}x[2m+1]W_N^{(2m+1)k}\\ &=E[k]+W_N^kO[k]. \end{aligned}

因为 WN2=WN/2W_N^2=W_{N/2},EE 与 OO 分别是偶数、奇数子序列的 N/2N/2 点 DFT。再利用:

WNk+N/2=−WNk,W_N^{k+N/2}=-W_N^k,

得到另一半:

X[k]=E[k]+WNkO[k],X[k+N/2]=E[k]−WNkO[k].\boxed{ X[k]=E[k]+W_N^kO[k],\quad X[k+N/2]=E[k]-W_N^kO[k] }.

一对结果只需同一个中间乘积,称为蝶形。N=2pN=2^p 时反复拆到单点:

C(N)=2C(N/2)+O(N)=O(Nlog⁡2N).C(N)=2C(N/2)+O(N)=O(N\log_2N).

对上例,偶数子序列 [1,−1][1,-1] 的 2 点 DFT 为 [0,2][0,2];奇数子序列 [0,0][0,0] 为 [0,0][0,0],合并得到 [0,2,0,2][0,2,0,2]。

这推导的是基 2 FFT;其他长度有其他分解与算法,FFT 长度并非必须是 2 的幂。

6. 频率轴、实际点数与补零

跳转到“6. 频率轴、实际点数与补零”

采样率 fsf_s,不补零时:

fk=kfsN,Δf=fsN.f_k=\frac{k f_s}{N},\qquad \Delta f=\frac{f_s}{N}.

对于负频率部分,k>N/2k>N/2 可写成 (k−N)fs/N(k-N)f_s/N。偶数长度 k=N/2k=N/2 位于 Nyquist 点,正负表示等价。

实际数据有 NN 点,补零到 M≥NM\ge N 点:

XM[k]=∑n=0N−1x[n]e−j2πkn/M,X_M[k]=\sum_{n=0}^{N-1}x[n]e^{-j2\pi kn/M}, Δfgrid=fsM,Trecord=Nfs.\Delta f_{\mathrm{grid}}=\frac{f_s}{M},\qquad T_{\mathrm{record}}=\frac N{f_s}.

最后一个样本时刻为 (N−1)/fs(N-1)/f_s,频谱记录窗通常按覆盖 NN 个采样间隔计算 N/fsN/f_s。这两个时间描述用途不同。

例如 fs=1000f_s=1000 Hz、N=1000N=1000、M=4000M=4000:实际观察仍是约 1 s,频点从 1 Hz 加密到 0.25 Hz。补零读取的是同一段有限数据 DTFT 上更多位置;不会增加新的时间信息,也不自动提高分开相邻正弦的能力。

7. 泄漏从哪里来:直接展开几何和

跳转到“7. 泄漏从哪里来:直接展开几何和”

复正弦 x[n]=AejΩ0nx[n]=Ae^{j\Omega_0n},截取 NN 点。第 kk 个 DFT 值:

X[k]=A∑n=0N−1ej(Ω0−2πk/N)n.X[k]=A\sum_{n=0}^{N-1}e^{j(\Omega_0-2\pi k/N)n}.

令 θ=Ω0−2πk/N\theta=\Omega_0-2\pi k/N,用几何和:

X[k]=A1−ejNθ1−ejθ.X[k]=A\frac{1-e^{jN\theta}}{1-e^{j\theta}}.

用 1−ejβ=−2jejβ/2sin⁡(β/2)1-e^{j\beta}=-2je^{j\beta/2}\sin(\beta/2):

X[k]=Aej(N−1)θ/2sin⁡(Nθ/2)sin⁡(θ/2).\boxed{ X[k]=Ae^{j(N-1)\theta/2} \frac{\sin(N\theta/2)}{\sin(\theta/2)} }.

当 θ=0\theta=0,取极限得到 ANAN;在恰好整周期、对准频点的情况下,其他不同整数频点处为 0。若频率没有对齐网格,很多频点非零,就表现为泄漏。

对真实余弦,要把正负两支复指数都加上。观察记录窗不等于物理信号永远从记录起点重复;DFT 的周期延拓是表示上的约定。

8. 加窗、相干增益与窗能量

跳转到“8. 加窗、相干增益与窗能量”

令实际数据点数为 NN,窗 w[n]w[n] 同样有 NN 点:

v[n]=w[n]x[n].v[n]=w[n]x[n].

定义:

S1=∑n=0N−1w[n],S2=∑n=0N−1∣w[n]∣2,CG=S1N.S_1=\sum_{n=0}^{N-1}w[n],\qquad S_2=\sum_{n=0}^{N-1}|w[n]|^2,\qquad CG=\frac{S_1}{N}.

S1S_1 用于相干正弦的幅值校正,S2S_2 用于功率密度归一化,它们不是同一个量。矩形窗 w=1w=1 时 S1=S2=NS_1=S_2=N。

例如周期型 Hann 窗,N≥4N\ge4:

w[n]=12−12cos⁡(2πn/N).w[n]=\frac12-\frac12\cos(2\pi n/N).

一个整周期余弦和为 0,因此 S1=N/2S_1=N/2。平方:

w[n]2=14−12cos⁡(2πn/N)+14cos⁡2(2πn/N).w[n]^2=\frac14-\frac12\cos(2\pi n/N) +\frac14\cos^2(2\pi n/N).

余弦平方和为 N/2N/2,所以 S2=3N/8S_2=3N/8。于是 CG=1/2CG=1/2。对称型 Hann 用 N−1N-1 作分母,有限长度的这些值会不同;应按实际窗计算,不盲套常数。

窗降低旁瓣通常伴随更宽主瓣。按任务选择窗:分开近邻分量、读取孤立峰幅值、估计宽带噪声,关注点不同。

9. 单边峰值幅度为什么乘 2

跳转到“9. 单边峰值幅度为什么乘 2”

矩形窗、整周期余弦、0<k0<N/20<k_0<N/2:

x[n]=Acos⁡(2πk0n/N+ϕ)=A2ejϕej2πk0n/N+A2e−jϕe−j2πk0n/N.x[n]=A\cos(2\pi k_0n/N+\phi) =\frac A2e^{j\phi}e^{j2\pi k_0n/N} +\frac A2e^{-j\phi}e^{-j2\pi k_0n/N}.

由正交性:

X[k0]=AN2ejϕ,X[N−k0]=AN2e−jϕ.X[k_0]=\frac{AN}2e^{j\phi},\qquad X[N-k_0]=\frac{AN}2e^{-j\phi}.

只保留正频率并表示真实余弦峰值:

A^[k0]=2∣X[k0]∣N.\boxed{\widehat A[k_0]=\frac{2|X[k_0]|}{N}}.

arg⁡X[k0]=ϕ\arg X[k_0]=\phi 是以记录起点和余弦为基准的相位。正弦的相位还需换成相同余弦约定。

加窗时:

V[k0]=A2ejϕS1+A2e−jϕ∑nw[n]e−j4πk0n/N.V[k_0]=\frac A2e^{j\phi}S_1+ \frac A2e^{-j\phi}\sum_nw[n]e^{-j4\pi k_0n/N}.

第二项是负频率镜像通过窗产生的贡献。如果该项为零,2∣V[k0]∣/∣S1∣2|V[k_0]|/|S_1| 精确给出峰值;若镜像足够小,则可近似使用。靠近 DC、Nyquist、邻近峰或偏离频点时,要考虑镜像、泄漏和窗的栅栏损失,不能把简单公式视为任意信号的精确幅值。

DC 与偶数长度的 Nyquist 点各只有一个独立频点,不乘 2。对实信号、MM 点 FFT 的单边范围 0≤k≤⌊M/2⌋0\le k\le\lfloor M/2\rfloor:

  • k=0k=0 不倍增。
  • MM 为偶数时,k=M/2k=M/2 不倍增。
  • 其余正频率倍增;奇数长度的最高正频率仍要倍增。
  • 复数输入没有同样的共轭对称,不能一般地丢弃负频率。

补零后分母仍由 S1S_1 决定。矩形窗就是实际 NN,不是补零后的 MM。

10. 幅值、RMS、功率和 PSD

跳转到“10. 幅值、RMS、功率和 PSD”
量电压输入时的单位回答
峰值幅度V一个正弦峰值是多少
RMS 幅度V与同等均方对应的幅度
均方/功率型量V²电压平方的平均
PSDV²/Hz每单位频率的均方密度
ASD,即 PSD\sqrt{\mathrm{PSD}}V/Hz\sqrt{\mathrm{Hz}}密度的平方根

零均值正弦 x=Acos⁡x=A\cos 的均方 A2/2A^2/2,RMS 为 ∣A∣/2|A|/\sqrt2。PSD 的积分得到均方,再开方得到 RMS;单个 PSD 峰高会随窗、实际记录长度和估计方法改变,不能直接当成峰值电压。只增加补零长度时,同一物理频率处的密度值不变;更密的网格可能采到更接近连续谱峰顶的位置,因此网格上的最大值可以变化。这与改变 PSD 归一化是两回事。

电阻上的瓦特还需 PW=xRMS2/RP_{\mathrm W}=x_{\mathrm{RMS}}^2/R。将 V² 随意标成 W 会导致物理单位错误。

11. 从 Parseval 推导 PSD 归一化

跳转到“11. 从 Parseval 推导 PSD 归一化”

对 MM 点 FFT,实际加窗数据 v[n]v[n] 在 n≥Nn\ge N 处补零。由 DFT 正交性:

∑k=0M−1∣VM[k]∣2=∑n,mv[n]v[m]∗∑ke−j2πk(n−m)/M=M∑n=0N−1∣v[n]∣2.\begin{aligned} \sum_{k=0}^{M-1}|V_M[k]|^2 &=\sum_{n,m}v[n]v[m]^* \sum_k e^{-j2\pi k(n-m)/M}\\ &=M\sum_{n=0}^{N-1}|v[n]|^2. \end{aligned}

定义双边周期图密度:

P2[k]=∣VM[k]∣2fsS2,Δf=fsM.\boxed{P_2[k]=\frac{|V_M[k]|^2}{f_s S_2}}, \qquad \Delta f=\frac{f_s}{M}.

对全部频点积分近似:

∑k=0M−1P2[k]Δf=1MS2∑k∣VM[k]∣2=∑n=0N−1∣w[n]x[n]∣2S2.\begin{aligned} \sum_{k=0}^{M-1}P_2[k]\Delta f &=\frac1{MS_2}\sum_k|V_M[k]|^2\\ &=\boxed{\frac{\sum_{n=0}^{N-1}|w[n]x[n]|^2}{S_2}}. \end{aligned}

矩形窗时右侧正好是原记录均方。一般窗得到窗能量加权的均方;对适当平稳过程具有相应估计解释,并非每段任意确定信号都与未加窗均方精确相等。

这个归一化与 SciPy 的频谱估计说明 及 periodogram 文档 一致。本章不默认去均值;实际库调用可能默认去均值,比较 DC 和总均方前应核对设置。

12. 单边 PSD 为何也是乘 2,但不是幅度平方乘 4

跳转到“12. 单边 PSD 为何也是乘 2,但不是幅度平方乘 4”

对实数据,负频率与对应正频率的平方模相同。构造单边 PSD 时,把两边的功率相加:

P1[k]={P2[k],k=0P2[k],M 偶数且 k=M/22P2[k],其余单边频点.P_1[k]= \begin{cases} P_2[k],&k=0\\ P_2[k],&M\ \text{偶数且 }k=M/2\\ 2P_2[k],&\text{其余单边频点}. \end{cases}

因此单边 PSD 积分仍等于双边积分。峰值幅度乘 2 与功率合并乘 2 是不同操作;不能先构造单边峰值,再平方直接冒充 PSD,否则还缺时间/窗/采样率归一化。

x=[1,0,−1,0]x=[1,0,-1,0] V、fs=4f_s=4 Hz、矩形窗,N=M=4N=M=4、Δf=1\Delta f=1 Hz:

X=[0,2,0,2].X=[0,2,0,2].

正频率 1 Hz 的单边峰值:

A=2×24=1 V.A=\frac{2\times2}{4}=1\ \mathrm V.

双边密度在 k=1,3k=1,3 都是:

P2=224×4=0.25 V2/Hz.P_2=\frac{2^2}{4\times4}=0.25\ \mathrm{V^2/Hz}.

合成单边:

P1(1 Hz)=0.5 V2/Hz.P_1(1\,\mathrm{Hz})=0.5\ \mathrm{V^2/Hz}.

积分 0.5×1=0.50.5\times1=0.5 V²,RMS 为 0.5=0.707107\sqrt{0.5}=0.707107 V,与时域 (1+0+1+0)/4\sqrt{(1+0+1+0)/4} 一致。

补零到 M=16M=16:网格变成 0.25 Hz,原 1 Hz 点的变换值仍是 2,幅值分母仍是 N=4N=4,PSD 分母仍是 fsS2=16f_sS_2=16。新增频点让窗频谱曲线更密,但全部单边 PSD 乘 0.25 Hz 后的总和仍为 0.5 V²。

13. 等效噪声带宽与平均

跳转到“13. 等效噪声带宽与平均”

对于实窗且 S1≠0S_1\ne0:

ENBW=fsS2∣S1∣2.\boxed{\mathrm{ENBW}=f_s\frac{S_2}{|S_1|^2}}.

它把功率谱型归一化 ∣V∣2/∣S1∣2|V|^2/|S_1|^2 与 PSD 归一化 ∣V∣2/(fsS2)|V|^2/(f_sS_2) 联系起来。矩形窗 ENBW 为 fs/Nf_s/N;上述周期 Hann 为:

fs3N/8N2/4=1.5fs/N.f_s\frac{3N/8}{N^2/4}=1.5f_s/N.

补零不改变 S1,S2S_1,S_2,因此不改变这个噪声带宽。单次周期图的随机起伏通常很大;Welch 方法分段加窗并平均,减少方差,同时短段会扩大频谱主瓣。段长、重叠和窗应随结果记录。

14. FFT 卷积为何需要补到足够长度

跳转到“14. FFT 卷积为何需要补到足够长度”

长度 LxL_x 与 LhL_h 的线性卷积长度是 Lx+Lh−1L_x+L_h-1。DFT 乘法给循环卷积:

yM[n]=∑m=0M−1x[m]h[(n−m) mod M].y_M[n]=\sum_{m=0}^{M-1}x[m]h[(n-m)\bmod M].

若 M<Lx+Lh−1M<L_x+L_h-1,尾部会绕回开头,造成时域混叠。两段都补零到:

M≥Lx+Lh−1M\ge L_x+L_h-1

后,FFT 相乘再逆变换才能得到完整线性卷积。例如 [1,2,3]∗[0.5,0.5][1,2,3]*[0.5,0.5] 长度为 4;3 点循环卷积会把最后的 1.5 叠回第一点。

  1. 记录实际 fs,Nf_s,N、信号单位、是否去均值或去趋势。
  2. 根据目标选窗,计算实际 S1,S2S_1,S_2。
  3. 按需要补零到 MM,用 fs/Mf_s/M 建频率轴。
  4. 选择峰值/RMS/PSD 的一种表示,按其规则归一化。
  5. 实输入构造单边时处理 DC、Nyquist 和长度奇偶。
  6. 用已知正弦核幅值,用 Parseval 核总均方。
  7. 说明记录长度、窗、平均方式;不要只报告“用了 FFT”。
  1. [1,1,1,1][1,1,1,1] 的 DFT:[4,0,0,0][4,0,0,0];DC 为 4/4=14/4=1,不乘 2。
  2. [1,−1,1,−1][1,-1,1,-1] 的 DFT:[0,0,4,0][0,0,4,0];Nyquist 点幅值为 1,不乘 2。
  3. 实际 1000 点、FFT 4000 点,矩形窗幅值分母?1000;频点间隔分母?4000。
  4. 单边 PSD 积分为 4 V²,含 DC 的总 RMS?2 V;交流 RMS 需先处理 DC。
  5. 5 点实 FFT 的最高正频率点是否倍增?是,奇数长度没有独立 Nyquist 点。