· 2 min read

什么FFT 其实显示你

你听到的每一个声音都是正弦波的总和. "快变形记"将这个和数分解. 这就是它的意义,如何运作,为什么一个60年的算法仍然到处存在.

问题

在钢琴上演奏和弦——比如C和E一起演奏. 耳闻一声. 但那个声音是两个频率叠加的:261.6赫兹和329.6赫兹. 不同的发细胞在不同频率产生共鸣, 向大脑发出不同的信号.

"快速傅里叶变形记"(Fast Fourier Transform)也做同样的事情,但用数字代替毛细胞. 给它一个信号(一个随时间推移的振幅样本的序列),它返回一个频率及其优点的清单. 它回答:存在哪些频率,每个频率有多少?

到底发生了什么

随时间而取样的信号是数字列表:每个样本点的振幅. 在44,100赫兹的1秒录音是44,100个数字。 这些数字描述了时域中的信号——振幅作为时间函数.

FFT将其转换为频域——振幅作为频率的一种函数. 同样的信息,不同的代表。 如笛卡尔和极地坐标之间的切换:没有创建或破坏,只是重新表达.

数学核心:每个周期信号都可以写成不同频率的正弦和余弦波的总和. 这是傅里叶定理(1807). FFT计算这个和数的系数——每个频率中有多少在信号中.

为什么"快"

计算傅里叶变身的天真方法需要 用于N样品的N2操作. 对于1024个样本,大约100万个操作. Cooley-Tukey算法(1965年)将它简化为N&log2(N)——大约10,000个操作用于相同的输入. 百度加速. 对于100万个样本,速度为50000x.

诀窍:将N点变换为两个N/2点变换,递归. 这要求N是2的功率(或者你用0的垫板). 每分一个,问题就减半。 "蝴蝶"行动结合了两半:

X[k]     = Even[k] + W · Odd[k]
X[k+N/2] = Even[k] - W · Odd[k]

W是复杂指数(在复杂平面中旋转)的地方. 同样两个子结果给你两个输出点. 这就是为什么算法是"快速的"——它重复了每次计算两次.

PinePaper的执行是一本教科书Cooley-Tukey radex-2 DIT(及时的定律). 40行 JavaScript. 中国植物物种名录. 我们从零开始写它,而不是导入一个图书馆,因为我们希望学生能够阅读来源,理解每一行.

那些条子是什么意思

当你看到一个频谱分析器——跳转到音乐的栏杆——每个栏杆代表一个频率的bin. 高度是当前信号中该频率的大小(强度).

  • ** 纯正弦波** 产生一个高的栏杆的频率,没有别的.
  • ** A平方波**在基本和每个奇异的谐音(第3,第5,第7...)产生条,下降为1/n. 这就是为什么方波发出"buzzy"的声音——它们含有纯正弦没有的高频能量.
  • 白色的噪音** 产生大约相等的栏杆 各地。 每个频率都以同样概率存在.
  • ** 人声** 产生一个基本(你听到的音)+成形剂——从你声道的形状中共振峰,区分元音.

窗口:为什么边缘物质

有个捉. FFT假设信号会永远重复. 但我们的样本是有限的——它开始和停止。 如果两个端点的信号不恰好为零,突然的截断会产生人为的高频含量. 这被称为光谱泄漏.

固定器:将信号乘以窗口函数,在边缘平稳地将滴入到零. 常见窗口 :

  • ** Hann** (Cosine Bell): 通用性好, 失去一些频率分辨率
  • ** Hamming **:与Hann相似,但边缘未达到零,侧球压制略好
  • ** Blackman**:主叶较窄,侧壁压制性更好,频率分辨率降低

选择总是在频率分辨率(如何精确地识别一个频率)和光谱渗漏(有多少能量会流进邻居的垃圾桶)之间进行权衡. 没有完美的窗户。 这是不确定性原则的后果——你不能任意地同时准确了解时间和频率.

FFT住的地方

你经常与 FFT 结果互动:

  • MP3和AAC压缩:将音频转换为频率域,丢弃低于听觉阈值的频率,压缩剩余内容. 变形是失声压缩的全部基础.
  • JPEG压缩:2D版本(DCT)将8×8像素块转换为频率域,将高频组件量化. 因此JPEG文物作为块块出现.
  • WiFi和5G:OFDM编码将数据分成多个频率子载体. FFT在时间域传输和频率域数据符号之间转换.
  • MRI成像:磁共振扫描仪的原始信号位于频率空间. 反向FFT重建空间图像. 从字面上来说:你所见过的每一个核磁共振都是反向的傅里叶变换.
  • Shazam:计算光谱(FFT over slipping windows),提取峰值,与一个数据库匹配图案. FFT是识别每首歌曲的第一步.

60年的算法,在你口袋里,每天运行数十亿次.

函数图

试试看

打开 PinePaper,选择光谱分析器生成器. 产生方波. 看栏杆——你会看到奇异的谐音脱落为1/n. 切换到锯齿——现在所有的谐音都存在,掉到1/n. 切换到噪音——平频谱,每个频率都同样可能.

更改窗口功能 。 观察汉恩如何以更大的峰值为代价平滑光谱. 切换到布莱克曼(Blackman)——更窄的峰顶但下方的侧球.

你没在看FFT 你在测量信号 观察变换所揭示的 即是知解之别.

参考资料

  • Brigham, E.O. (1988年) (英语). 快速傅里叶变换及其应用. 普伦提斯·霍尔.
  • Cooley, J.W. & Tukey, J.W. (1965) (英语). 计算复杂Fourier系列机器的算法。 *计算数学 *,19(90),297-301.
  • Fourier, J. (1822) (英语). * Théorie analytique de la chaleur* (法语). 巴黎:菲尔明·迪多特.
  • 哈里斯, F.J. (1978) (英语). 与Discrete Fourier Transform(英语:Discrete Fourier Transform)一起使用视窗进行和谐分析. * IEEE*、66(1)、51-83号记录.
  • Oppenheim, A.V. & Schafer, R.W.(2009年)。 * 散件-时间信号处理* (第3版). 普伦提斯·霍尔.
  • Shannon, C.E. (1949) (英语). 噪声中的联系 * IRE的收益*,37(1),10-21.
  • Smith, S.W.(1997年)。 * 科学家和工程师数字信号处理指南*。 加州技术出版社.
  • Wang, A., et al. (2003年). 工业-斯坦格思音频搜索算法. * 2003年ISMIR收益。 (夏扎姆的音频指纹算法
  • Wallace, G.K.(1991年)。 JPEG Still Pictures 压缩标准. * ACM通讯*,34(4),30-44.

*PinePaper的FFT是一个Cooley-Tukey radex-2的实现,与汉恩,哈明,布莱克曼的窗口,加上低通和高通滤波器. 在 [pinepaper.studio/editor] (/editor) 免费尝试. *

Ready to create?

Start making animated GIFs, videos, and graphics — free, no signup.

Open PinePaper Editor