想象你站在黑暗里,手里握着一束看起来毫无区别的“白光”。这束光其实是无数种颜色的光混在一起。科学家用一块玻璃三棱镜,就能把白光折成一幅彩虹——红橙黄绿青蓝紫,每种颜色对应一个频率。离散傅里叶变换(DFT),就是数学家发明的“数字三棱镜”。 不过它折射的不是光,而是任何一段记录下来的离散信号:一段录音、一行心电图、一列股票价格。DFT 把这段乱糟糟的波形拆成一组“纯音”——不同频率的复指数振动——并告诉你每个纯音有多强。这个看似简单的拆解,却是数字信号处理世界的基石:语音识别靠它,电力故障诊断靠它,雷达测速也靠它。但三棱镜也有脾气:截断会产生“漏色”(频谱泄漏),快速计算要靠 FFT 算法,分辨率受窗口尺寸限制。这篇文章用最日常的类比,把这台数字三棱镜的内部结构、使用方法和坑点一次讲清楚。

岗位关联

对 AI 从业者来说,DFT/FFT 是处理时间序列与感知数据的底层能力。读懂频谱图、设计特征工程、在音频和传感器方向做出可落地模型,都离不开这台“数字三棱镜”。

目录
  1. 可视化演示
  2. 信号分解思想
  3. DFT数学定义
  4. 正交性原理
  5. FFT快速计算
  6. 频谱泄漏
  7. 窗函数
  8. 频率分辨率
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示DFT将时域信号分解为频域分量的过程、FFT蝶形运算将复杂度从O(N²)降至O(NlogN)、以及不同窗函数对频谱泄漏的影响。

本节配有交互动效(进入视口后自动加载,约 3KB)。

DFT时频变换 TIME时域信号含两个频率分量 FREQ频域显示对应频率峰值 X(k)=sum x(n)*W_N^(kn) 旋转因子W_N=exp(-j2pi/N)

信号分解思想

把一段音乐录音想象成一束“白光”:笛声、鼓声、人声搅在一起,像白色光里裹着所有颜色。数字三棱镜——DFT——能把混合波形拆成一道道单色光,每一道就是一个纯净频率的振动。这就是信号分解思想:任何复杂波形都可以看作若干简单“纯音”的叠加。

对计算机来说,声音是一串等间隔采样的数字 x[0], x[1], …, x[N-1]。DFT 的出发点是一个大胆的声明:任意这样的有限长离散序列,都能写成 N 个复指数振动之和。每个振动的频率为 2πk/N,权重是复数 X[k]。权重的大小表示这个频率成分的“音量”,角度表示它的“起唱时间”。

这个重建公式就是逆变换(综合公式)。它先证明了“所有信号都可以被拆开”,因为只要能把信号拼回去,就必然存在一套拆法。于是问题变成:如何把混合信号“称”到各个频段上——这正是下一节的正变换。

原本混沌的“白光”信号,就这样被数学三棱镜拆成了彩虹频谱。每个 X[k] 就是彩虹上一条色带的亮度,而所有色带按原样混合又能变回白光——这正是分解思想的核心。

x[n]=1N∑k=0N−1X[k]ej2πkn/Nx[n] = \frac{1}{N} \sum_{k=0}^{N-1} X[k] e^{j 2\pi kn / N}
这个公式像一份“彩虹配方”:把每个频率成分 X[k] 乘以对应的颜色模板 e^{j2πkn/N},再全部混匀,恢复原信号。
  1. 求和运算对 k=0 到 N-1 共 N 个频率成分逐一累加,把每个频段的贡献叠加起来。
    ∑k=0N−1\sum_{k=0}^{N-1}
  2. 权重系数X[k] 表示第 k 个频率成分的幅度和相位,是这束“单色光”的亮度。
    X[k]X[k]
  3. 复指数基函数e 的指数项描述了第 k 个频率对应的数字角频率 2πk/N。
    ej2πkn/Ne^{j 2\pi kn / N}
  4. 归一化因子1/N 保证混合还原后的信号幅度和原信号一致,不会越拆越响。
    1N\frac{1}{N}

DFT数学定义

三棱镜的“拆解核心”是 DFT 分析公式。它把信号 x[n] 与某个特定频率 k 的“模板”复指数相乘,再逐点求和,得到的 X[k] 就是该频段的强度。就像用一架精密天平称彩虹里每种颜色的含量:信号与“颜色滤光片”相乘,剩下的重量就是该颜色的分量。

公式里指数为负号,与上一节的综合公式正好相反。原因是分析时要“反向匹配”信号中的原频率成分;一正一负成对出现,才能保证拆得开也装得回。k 的范围是 0 到 N-1,对应数字频率 2πk/N,换算成物理频率就是 k·fs/N(fs 为采样频率)。

这个公式直接告诉计算机:算一个 X[k],就把整个信号“拧”到第 k 根谱线上看一眼。N 个 X[k] 按顺序排开,就得到完整的频谱——一条数字彩虹。

每算一个 X[k],就得到彩虹上一条色带的亮度;算完 N 个 k,整条彩虹便呈现在眼前。这个看似重复的“称重”过程,因为有了正交性,才能保证每条色带互不污染。

X[k]=∑n=0N−1x[n]e−j2πkn/NX[k] = \sum_{n=0}^{N-1} x[n] e^{-j 2\pi kn / N}
DFT 公式是“称重”操作:把信号与每个候选频率做内积,结果代表该频率在信号中的含量。
  1. 输入序列x[n] 是时域上第 n 个采样点的值,来自 ADC 采样后的离散信号。
    x[n]x[n]
  2. 旋转因子负指数复指数,表示以该频率的“模板波形”去探测信号。
    e−j2πkn/Ne^{-j 2\pi kn / N}
  3. 乘积求和逐点相乘再累加,这是内积运算,用于检测两者“相似程度”。
    ∑n=0N−1x[n]e−j2πkn/N\sum_{n=0}^{N-1} x[n] e^{-j 2\pi kn / N}
  4. 频点序号k 越大代表频率越高,k=0 是直流分量,k=N/2 对应奈奎斯特频率。
    k=0,1,…,N−1k = 0, 1, \ldots, N-1

正交性原理

为什么三棱镜能干净地分开颜色?因为每一种纯频率的“尺子”互相垂直:当你用频率 3 的模板去量信号时,频率 5 的成分不会在结果里留下影子。数学上叫正交——两个不同频率的复指数在 N 个采样点上的内积等于 0。

把两个频率分别为 k 和 l 的复指数做内积,结果如下式。当 k ≠ l 时,和为 0;当 k = l 时,和为 N。这个简洁的结果是 DFT 一切性质的地基。它保证了某个 X[k] 只反映对应频率的信息,不会被其他频率“带跑”,因此分解结果是唯一的。

有了正交性,“数字三棱镜”才能放心使用:每个频率通道就像一根独立的振动筛,筛眼之间互不干扰。这也是为什么 DFT 能用一组固定公式同时完成“拆解”和“还原”,而不用担心颜色混成一团。

光谱仪之所以能给出精确的彩虹,是因为棱镜用互为正交的“尺子”去测量每种单色光,谁也不打扰谁。正交性保证了 DFT 的每一次“称重”都只针对目标频率,让频域分析有了唯一而稳定的答案。

∑n=0N−1ej2π(k−l)n/N=Nδkl\sum_{n=0}^{N-1} e^{j 2\pi (k-l)n / N} = N \delta_{kl}
这就像用水平尺和垂直尺分别测量一张桌子的长和宽,两把尺子互不影响,测量结果自然唯一。
  1. 内积求和对 n=0 到 N-1 逐点相乘再累加,相当于两个离散波形的“点积”。
    ∑n=0N−1\sum_{n=0}^{N-1}
  2. 两个频率之差指数里的 (k-l) 表示两个基函数之间的频率差值。
    ej2π(k−l)n/Ne^{j 2\pi (k-l)n / N}
  3. 正交结果k≠l 时结果为 0,说明两个频率的波形完全不相关。
    00
  4. 克罗内克符号δ_{kl} 在 k=l 时取 1,其他情况取 0,此时内积结果为 N。
    NδklN \delta_{kl}

FFT快速计算

直接按 DFT 公式计算,需要对每个 k 都做 N 次乘法,共 N×N = N² 次运算。当 N 变成几千几万时,就像把一箱苹果一颗一颗地称重量,效率低得令人抓狂。FFT 的核心思路是“分治”:把一箱苹果分成两半,分别称重,再合并结果,一层一层递归下去。

具体做法是把序列按下标奇偶拆成两部分:偶数下标 X_e 和奇数下标 X_o,各自只含 N/2 个点。分别算出它们的 DFT 后,用一组“蝶形”运算合成为完整的 N 点结果。蝶形的两个输出只差一个正负号,计算量因此大幅减少。

最终 FFT 的复杂度从 O(N²) 骤降到 O(N log N)。例如 N=1024 时,直接计算约 100 万次乘法,FFT 只需约 1 万次。这也是为什么现代手机能实时分析音频频谱——三棱镜换成了流水线,效率高了两个数量级。

FFT 是同一台三棱镜的“流水线升级版”:玻璃没变,但把称重任务反复二分,耗时从平方级降到线性对数级。这种化整为零的智慧,让频谱分析从理论工具变成了人人可用的工程利器。

X[k]=Xe[k]+WNkXo[k],X[k+N/2]=Xe[k]−WNkXo[k]X[k] = X_e[k] + W_N^k X_o[k], \quad X[k + N/2] = X_e[k] - W_N^k X_o[k]
左边是“蝶形”的上半身,右边是下半身,一加一减完成合并。W_N^k 是旋转因子,负责调整相位。
  1. 偶序列变换X_e[k] 是原序列偶数下标子序列的 N/2 点 DFT。
    Xe[k]X_e[k]
  2. 奇序列变换X_o[k] 对应奇数下标子序列的 N/2 点 DFT。
    Xo[k]X_o[k]
  3. 旋转因子W_N^k 是单位复指数 e^{-j2πk/N},实现相位旋转。
    WNk=e−j2πk/NW_N^k = e^{-j 2\pi k / N}
  4. 蝶形合并前半段用加号,后半段用减号,一次算出两个频率点的结果。
    X[k]=Xe[k]±WNkXo[k]X[k] = X_e[k] \pm W_N^k X_o[k]

频谱泄漏

真实世界没有无限长的信号。我们只能用一扇“窗户”截取有限长的一段数据,就像站在窗口看彩虹,窗户边缘会把光硬生生切断。原本只有一个纯频率的正弦信号,经过矩形窗截断后,频谱不再是干净的一根线,而变成了向两侧摊开的“涂抹状”——这就是频谱泄漏。

用数学描述,截断相当于在时域乘以矩形窗 w[n](窗口内为 1,窗口外为 0)。时域相乘对应频域卷积:原始频谱 X(ω) 与矩形窗的频谱 W_R(ω) 卷积。矩形窗的频谱是 sinc 型函数,主瓣较宽且带有旁瓣,于是谱线被“抹开”,周围出现了虚假的能量。

泄漏让彩虹的色带变粗、相邻颜色混在一起,甚至可能把微弱的真实频率淹没在旁瓣里。要观察更干净的光谱,我们需要换一扇更好的“窗户”。

频谱泄漏是“三棱镜边缘缺陷”的数学本质。矩形窗虽然简单,副作用却大;于是我们需要给窗户装一块“渐变玻璃”——也就是窗函数。

WR(ω)=sin⁡(ωN/2)Nsin⁡(ω/2)W_R(\omega) = \frac{\sin(\omega N / 2)}{N \sin(\omega / 2)}
矩形窗的频谱像一个瘦高个:中间一个尖峰(主瓣),两侧各有逐渐衰减的“小鼓包”(旁瓣),这些旁瓣就是泄漏的杂光。
  1. 矩形窗频谱W_R(ω) 是长度为 N 的矩形窗函数的傅里叶变换。
    WR(ω)=sin⁡(ωN/2)Nsin⁡(ω/2)W_R(\omega) = \frac{\sin(\omega N / 2)}{N \sin(\omega / 2)}
  2. 时域截断把无限长信号乘以窗函数,等价于只保留窗口内的样本。
    xt[n]=x[n]⋅w[n]x_t[n] = x[n] \cdot w[n]
  3. 频域卷积时域相乘在频域变成卷积,原始频谱被窗频谱“涂抹”。
    Xt(ω)=X(ω)∗WR(ω)X_t(\omega) = X(\omega) * W_R(\omega)
  4. 主瓣与旁瓣主瓣宽度决定谱线展宽程度,旁瓣大小决定泄漏程度。
    主瓣宽≈2πN\text{主瓣宽} \approx \frac{2\pi}{N}

窗函数

与其让窗户硬生生切断信号,不如把窗户边缘做成渐变:透光率从 0 逐渐升到 1,再逐渐降回 0。这样截断边缘就不会产生剧烈的“切口”,频域的旁瓣也会大幅降低。最常见的渐变窗户是汉宁窗。

汉宁窗的公式是一个简单的余弦形状:中间最高,两端趋近于 0。加窗时,只需把每个采样点 x[n] 与对应的窗值 w[n] 相乘。这样得到的加窗信号在首尾处都平滑掉,避免了矩形窗的突然切断。

代价是主瓣变宽了一点:窗函数压低了旁瓣,却也稍微牺牲了分辨相邻频率的能力。工程中要根据场景选窗:汉宁窗适合大多数频谱分析,汉明窗旁瓣更低,布莱克曼窗衰减更狠但主瓣更宽——没有免费的午餐。

装上渐变滤镜后,三棱镜给出的彩虹色带干净了许多,虽然每一条色带略宽,但杂散幻影不再喧宾夺主。窗函数正是工程师手中的“光学镜片”,在泄漏和分辨率之间寻找平衡。

w[n]=0.5−0.5cos⁡(2πnN−1),xw[n]=x[n]⋅w[n]w[n] = 0.5 - 0.5 \cos\left(\frac{2\pi n}{N-1}\right), \quad x_w[n] = x[n] \cdot w[n]
汉宁窗像一块柔光滤镜:边缘不透光,中心全透光,让截断变得温柔,旁瓣的“杂影”大幅减少。
  1. 余弦窗0.5 减去半个余弦,形状是两端为 0、中间为 1 的“山包”。
    w[n]=0.5−0.5cos⁡(2πnN−1)w[n] = 0.5 - 0.5 \cos\left(\frac{2\pi n}{N-1}\right)
  2. 逐点相乘原信号与窗函数对应点相乘,得到加窗后的新序列。
    xw[n]=x[n]⋅w[n]x_w[n] = x[n] \cdot w[n]
  3. 窗长归一化n 的取值范围是 0 到 N-1,保证窗覆盖整个截取区间。
    0≤n≤N−10 \le n \le N-1
  4. 频谱效应加窗后旁瓣显著减小,但主瓣同步变宽,形成“泄漏-分辨率”权衡。
    Xw[k]=∑n=0N−1xw[n]e−j2πkn/NX_w[k] = \sum_{n=0}^{N-1} x_w[n] e^{-j 2\pi kn / N}

频率分辨率

拿着三棱镜看两条波长接近的光带,能不能区分它们取决于棱镜的“口径”——观测窗口越长(N 越大),能分辨的频率间隔就越小。离散采样后,频率轴上的刻度由采样率 fs 和点数 N 共同决定。

DFT 输出相邻两个频点之间的间隔就是频率分辨率:

这个公式揭示了一个常被误解的真相:只提高采样率 fs,不增加采样点数 N,分辨率反而会变差;真正提升分辨率的方法是延长观测时间,也就是让 N 变大。工程中,N 增加会带来更大的计算量和存储量,因此需要在分辨率与成本之间权衡。加窗操作也会让有效分辨率下降,设计系统时必须一并考虑。

频率分辨率是“数字三棱镜”的最小色散刻度。想要看清相邻两个靠得很近的频率,就要把三棱镜做得更宽——用更长的观测窗口换取更细的彩虹刻度。

频率分辨率是“数字三棱镜”的规格参数:决定你能把彩虹拆得多细。理解 Δf = fs/N,你就能在设计特征提取时正确选择采样率和帧长,避免“白白采样却看不清频谱”的尴尬。

Δf=fsN\Delta f = \frac{f_s}{N}
Δf=fsN\Delta f = \frac{f_s}{N}
采样率相当于棱镜的摆放角度,点数相当于棱镜的宽度。想看清更细的色带,最直接的办法是加长窗口,而不是猛调角度。
  1. 采样率fs 表示每秒采集多少个样本,决定频谱覆盖范围 0 到 fs/2。
    fsf_s
  2. 点数N 表示一次 DFT 用了多少个采样样本,等于观测时长乘以 fs。
    NN
  3. 分辨率公式两者相除得到相邻谱线的间隔,间隔越小,分辨能力越强。
    Δf=fsN\Delta f = \frac{f_s}{N}
  4. 观测时长T = N/fs = 1/Δf,可见分辨率本质上由观测时长决定。
    T=NfsT = \frac{N}{f_s}

AI 应用场景

语音特征提取(MFCC)

阶段:特征工程

解决的问题:原始语音波形维度极高且混杂噪声,直接用波形训练 AI 模型效率低。DFT 将波形转换为频域能量分布,配合窗函数抑制泄漏,才能提取出 MFCC 等经典特征。

具体案例:语音助手接收“你好”的录音,先按 25ms 分帧、加汉宁窗,再做 512 点 FFT,得到功率谱,再经梅尔滤波器组压缩成特征向量,送入轻量级神经网络。没有 FFT,这一步的运算量会大到无法实时。

电力谐波故障诊断

阶段:数据预处理

解决的问题:工厂设备异常会引起电压/电流波形畸变,其中蕴藏着 3 次、5 次、7 次谐波。FFT 能快速提取各次谐波幅值,作为故障诊断模型的输入特征,替代人工查看波形。

具体案例:工业现场以 12.8kHz 采样率采集工频电压,截取 1024 点做 FFT,得到 50Hz 基波及整数次谐波的幅度。谐波超标时触发预警,准确锁定某台变频器故障。

车载雷达多普勒测速

阶段:信号处理

解决的问题:雷达回波中目标多普勒频率微弱且与静止背景混叠,需要在高分辨率频谱上找峰值。FFT 对慢时间维脉冲序列做变换,将频率峰值映射为目标速度。

具体案例:车载毫米波雷达对每个距离门收集 256 个脉冲,做 256 点 FFT,峰值频率对应相对速度。配合神经网络进行目标分类,成为自动辅助驾驶感知系统的一部分。

Python 演示

python36 行
import numpy as np  def dft(x):    N = len(x)    X = np.zeros(N, dtype=complex)    for k in range(N):        for n in range(N):            X[k] += x[n] * np.exp(-2j * np.pi * k * n / N)    return X  def fft(x):    N = len(x)    if N <= 1:        return x    if N % 2 != 0:        raise ValueError("只支持 2 的幂次长度")    even = fft(x[::2])    odd = fft(x[1::2])    factor = np.exp(-2j * np.pi * np.arange(N // 2) / N)    return np.concatenate([even + factor * odd, even - factor * odd])  if __name__ == "__main__":    fs = 64    t = np.arange(fs) / fs    signal = 2.0 * np.sin(2 * np.pi * 5 * t) + 0.5 * np.sin(2 * np.pi * 13 * t)    dft_out = dft(signal)    fft_out = fft(signal)    print("DFT 与 FFT 最大误差:", np.max(np.abs(dft_out - fft_out)))    freqs = np.fft.fftfreq(fs, 1.0 / fs)    mag = np.abs(fft_out)    top_idx = np.argsort(mag)[-4:][::-1]    for idx in top_idx:        print("频率:", freqs[idx], "幅度", mag[idx])
目的:分别用直接 DFT 和递归 FFT 计算同一组合信号的频谱,对比两者结果并打印幅值最大的频率成分,验证分治算法的正确性。
  1. X[k] += x[n] * np.exp(-2j * np.pi * k * n / N)按 DFT 定义逐项累加,这是“逐色称重”
  2. if N % 2 != 0:FFT 需要每次把序列对半分,奇数长度无法继续递归
  3. even = fft(x[::2])递归计算偶数下标子序列的频谱
  4. factor = np.exp(-2j * np.pi * np.arange(N // 2) / N)预计算旋转因子 W_N^k,减少重复运算
  5. np.concatenate([even + factor * odd, even - factor * odd])蝶形合并,一加一减得到完整频谱
  6. mag = np.abs(fft_out)取复数频谱的模长,得到每个频率成分的幅度

常见误区

误区我认为 DFT 只能用于严格的周期信号,日常采集的有限长数据不能直接做 DFT,必须先造一个周期信号。

正解DFT 的数学推导确实基于周期延拓:它对有限长序列做周期性复制,但这只是处理技巧,不等同于信号真的周期。三棱镜不会关心光来自哪里,它只对眼前这段光束折射;同理,DFT 只要拿到 N 个采样点就可以运算。

为何常见:教材常从周期序列的傅里叶级数 DFS 引入 DFT,导致学习者把“数学上的延拓假设”误当成“应用条件”。

误区我觉得只要把采样率 fs 翻倍,频谱图就能看得更细,分辨出更接近的两个频率。

正解分辨率公式是 Δf = fs / N。fs 翻倍而 N 不变时,Δf 反而变大,分辨率下降;只有增加 N(也就是延长观测时长)才能真正细化频谱。棱镜的分辨率取决于窗口宽度,而不是你拍照时按快门的频率。

为何常见:直觉上“更多采样=更精细信息”容易误导人,忽略了频谱刻度由 fs 和 N 的比值共同决定。

误区我只要对信号加上汉宁窗,泄漏就会消失,频谱变成理想的细线。

正解窗函数只能压低旁瓣、抑制泄漏,不可能完全消除;而且压低旁瓣的代价是主瓣变宽,可能让两个相邻频率更难区分。这就像柔光镜能减少杂散光,但也会让色带边缘稍微模糊。

为何常见:演示中加窗后频谱“干净”很多,容易让人误以为效果是完美的,忽略了主瓣展宽这个副作用。

误区我直接从 FFT 结果中读最大值,以为那个数值就是该频率正弦波的幅度。

正解FFT 输出是复数谱,包含正负频率和归一化系数。要得到单频正弦波的幅度,通常取模后乘以 2/N(单边谱)。就好比三棱镜出口的光强并不是彩虹的绝对亮度,还要扣除棱镜玻璃自身的吸收系数。

为何常见:许多代码只画幅度谱而不做标定,初学者照着做便以为绝对值就是真实幅值,忽略了 DFT 的数学约定。

面试题

Q1. DFT 的输入信号类型是什么?

单选题 · easy

  • A.连续时间信号
  • B.有限长离散序列← 正确答案
  • C.无限长周期信号
  • D.模拟电压数值

答案:B。DFT 处理的是等间隔采样、长度有限的离散序列。连续信号需先经过 ADC 采样,无限长信号需要先截断成有限长,就像三棱镜只对眼前这一段光束工作。

Q2. DFT 逆变换公式中复指数的指数符号是?

单选题 · easy

  • A.正号指数← 正确答案
  • B.负号指数
  • C.无指数项
  • D.随机符号

答案:A。逆变换用正号 e^{+j2πkn/N},正变换用负号。一正一负成对出现,保证“拆开再装回”能还原信号,就像棱镜把光拆开,反着操作能合回去。

Q3. 频率分辨率 Δf 的定义是?

单选题 · easy

  • A.Δf = fs/N← 正确答案
  • B.Δf = N/fs
  • C.Δf = fs×N
  • D.Δf = 1/fs

答案:A。频率分辨率等于采样率除以 DFT 点数,这是频谱图上相邻两条谱线的间隔。增加采样率但不增加点数,分辨率不会提升,反而可能变差。

Q4. 频谱泄漏的根本原因是?

单选题 · mid

  • A.采样频率过低
  • B.时域信号截断← 正确答案
  • C.DFT 点数太多
  • D.存在噪声干扰

答案:B。对有限长信号做 DFT 本质是乘以矩形窗进行截断,时域相乘导致频域卷积,谱线被 sinc 型旁瓣“涂抹”开。采样率过低主要造成混叠而非泄漏。

Q5. 以下哪些措施可以抑制频谱泄漏?

多选题 · mid

  • A.改用汉宁窗← 正确答案
  • B.提高采样率
  • C.加窗并增加点数← 正确答案
  • D.改用矩形窗

答案:AC。汉宁窗能压低旁瓣,增加观测点数配合窗函数能更好接近真实频谱。提高采样率只改变频率轴的刻度,不消除截断效应;矩形窗旁瓣高,反而加剧泄漏。

Q6. FFT 的核心计算思想是?

单选题 · mid

  • A.分治递归← 正确答案
  • B.随机抽样
  • C.逐点搜索
  • D.频域滤波

答案:A。FFT 把 N 点序列拆成奇偶两半,递归计算子序列的 DFT,再用蝶形运算合并。这与“一箱苹果分两半分别称重再汇总”的策略一致,复杂度从 O(N²) 降到 O(N log N)。

Q7. 若 fs=1000Hz,N=1000,则频率分辨率是?

单选题 · mid

  • A.1 Hz← 正确答案
  • B.10 Hz
  • C.100 Hz
  • D.0.1 Hz

答案:A。Δf = fs / N = 1000 / 1000 = 1 Hz。此时频谱图上相邻谱线间隔 1Hz,能分辨 1Hz 宽的频率差。

Q8. 关于 DFT 基函数的正交性,正确的有?

多选题 · hard

  • A.不同频率基函数内积为零← 正确答案
  • B.相同频率基函数内积为 N← 正确答案
  • C.正交性保证分解系数唯一← 正确答案
  • D.正交性与 N 无关

答案:ABC。不同频率的复指数内积为 0,相同频率内积为 N,这就是正交性。它保证 X[k] 只含对应频率信息,分解唯一。内积结果与点数 N 直接相关,因此 D 错误。

Q9. 关于窗函数,下列叙述正确的有?

多选题 · hard

  • A.汉宁窗旁瓣更低← 正确答案
  • B.加窗一定提高分辨率
  • C.窗函数可抑制频谱泄漏← 正确答案
  • D.矩形窗旁瓣最高← 正确答案

答案:ACD。汉宁窗边缘渐变,旁瓣低于矩形窗,能有效抑制泄漏。但加窗会令主瓣变宽,降低频率分辨率,所以 B 错误。矩形窗旁瓣最高,泄漏最明显。

Q10. N=1024 的 FFT 共有多少级蝶形运算?

单选题 · extreme

  • A.10 级← 正确答案
  • B.512 级
  • C.1024 级
  • D.20 级

答案:A。FFT 每次把序列对半分,分完一层算一级,级数等于 log2(N)。log2(1024) = 10,所以共 10 级蝶形运算。这也是“一箱苹果反复二分”的递归深度。