短时傅里叶变换,为什么我们既想抓住瞬间,又想听清全貌?

admin

前几天晚上,我在厨房录了一段十秒钟的声音,冰箱在角落里嗡嗡响,水龙头没关紧,隔一会儿就“嗒”一声,我本来只是想确认到底是哪个声音在烦我,结果随手打开一个音频分析软件,看见屏幕上出现了一张像彩色热力图一样的东西:底下有一条稳稳的低频横线,中间时不时冒出几道短促的竖纹,那一刻我突然觉得,短时傅里叶变换这东西,真不是实验室里才用得上的名词,它其实特别像我们日常生活中“边看细节边看全局”的一种努力。

先说人话,普通的傅里叶变换,擅长回答“这段声音里有哪些频率”,比如我把十秒钟的厨房录音整段扔进去,它能告诉我:有冰箱的低频嗡嗡声,也有水滴带来的宽频冲击,但它不告诉我“什么时候”,冰箱是一直响,还是后五秒才启动?水滴是第一秒滴的,还是第七秒滴的?整段变换像把一锅汤彻底搅匀再尝味道,你知道里面有盐、有胡椒、有葱花,却不知道先后顺序。

短时傅里叶变换做的事,就是把这锅汤分成一小勺一小勺地尝,它先把长信号切成很多很短的片段,每一段通常叫一帧;为了减少切边带来的突变,还会给每帧加一个窗函数,让片段边缘平滑过渡;然后对每一小段做傅里叶变换;最后把每段的频率结果按时间排起来,于是我们得到的不是一张“频率清单”,而是一张“时频图”:横轴是时间,纵轴是频率,颜色深浅表示某个时刻某个频率的能量强弱,声音什么时候出现、持续多久、频率大概在哪儿,一眼就能看出个大概。

我那段厨房录音就是很好的例子,整段频谱里,冰箱的嗡嗡声大概落在很低的频段,水滴则是“嗒”一下的瞬态,频率铺得很宽,用短时傅里叶变换一看,低频那条线几乎贯穿十秒,说明冰箱一直在工作;而水滴在几个时间点上突然出现,像短竖条一样,间隔还不规则,后来我顺着这个图去检查,果然是水龙头没拧紧,冰箱倒是无辜的,你看,工具本身不神秘,关键是它帮我回答了“什么时候发生了什么”这个很生活的问题。

再举个更常见的例子:语音转文字,我们说话时,声音频率一直在变,一句话里“你好”的元音、辅音、停顿、爆破音都挤在短短一两秒里,如果只做整段傅里叶变换,系统能知道这段话大概有哪些频率成分,却很难判断某个音素在哪个时刻出现,短时傅里叶变换把语音切成二十到四十毫秒左右的小段,再逐段分析,就能得到随时间变化的频谱特征,音乐里也一样:鼓点是短促的瞬态,贝斯是持续的低频,人声有共振峰,做修音、做降噪、做听歌识曲,背后都少不了“分时间看频率”的思路。

但短时傅里叶变换并不是“随便切切就行”,它有一个特别现实的尴尬:窗长怎么选,窗口太短,时间定位很准,你能清楚知道“嗒”一声发生在哪一毫秒,但频率看得糊,低音和高音容易混在一起;窗口太长,频率分得细,你能看清冰箱嗡嗡声到底落在哪个频点,但时间上又变钝了,几个快速鼓点可能被揉成一团,这就是时间分辨率和频率分辨率的取舍,它像拍照:广角能拍下整个房间,但远处细节模糊;长焦能看清一只杯子,但不知道房间全貌,短时傅里叶变换用的是固定长度的窗,所以它天生带着一种“我只能在某个尺度上看世界”的妥协。

我个人很喜欢这个工具,但也想泼一点冷水:别把它神化成“万能分析器”,它适合非平稳信号,适合你想同时观察时间和频率的场景,但它不是读心术,窗长选错了,图再漂亮也可能误导你;重叠率、窗函数、采样率、颜色映射,都会影响你怎么解读,更重要的是,分析之前得先问清楚自己到底想知道什么,我是想找“什么时候滴的水”,还是想找“冰箱的嗡声主频是多少”?如果只关心频率,普通傅里叶变换可能更直接;如果只关心某个瞬间,短时傅里叶变换也未必是最优解,工具没有高低,问题才有。

写到这里,我的个人观点也很明确了:短时傅里叶变换最迷人的地方,不是那几个公式,而是它把“变化”画了出来,它提醒我们,很多事物不是一张静态清单,而是一段有先后、有强弱、有节奏的过程,可它也提醒我们,任何分析都带着尺度选择,你选了多长的窗,就选择了看见什么、忽略什么,生活里其实也一样:复盘一段关系,切片太短,容易陷进某句话的情绪;拉得太长,又可能看不见当下的细节,我们需要的不是一把万能尺子,而是知道自己在用什么尺子量什么。

下次你听到家里某个怪声,不妨先录十秒钟,看看时频图,也许你会发现,冰箱的低频横线和水滴的短竖纹,比耳朵听到的更有故事,而短时傅里叶变换对我来说,就是这样一个朴素又聪明的办法:把长故事切成小段落,再认真听每一段里的频率,它不完美,但它让我们离“既抓住瞬间,又听清全貌”更近了一点。

目录[+]