离散,短时,或快速?傅里叶变换(二)

上一期文章,我们了解了音频制作中,用于洞察频率特性的手段——傅里叶变换。抛开复杂的数学原理,我们可以知道,傅里叶变换提供了把音频从时间域内转换到频率域的可能性。
但是,傅里叶变换的初始定义是理想的数学领域的范畴,要求信号可以无限细分,这在数字音频领域里显然是不可实现的。因此,傅里叶变换也为了服务于更多领域的应用而产生了变种。另外,也有一些特殊的傅里叶变换,对于我们在音频领域的理解有重要帮助。本篇文章就介绍若干个和音频制作相关的概念以及事实,以供参考。
1 数字领域中的傅里叶变换——离散傅里叶变换
在连续信号下的傅里叶变换,称为连续时间傅里叶变换。在数字音频中,声音信号都是采样得到的,此时需要引入离散傅里叶变换(Discrete Fourier Transform,DFT)来应对此类分析。
实际上,离散傅里叶变换和连续傅里叶变换是类似的,结果上也可以认为是一样的。区别在于定义的时候,连续傅里叶变换用积分式来表示,而离散傅里叶变换用求和式来表示,而积分本身就是一种求和,只不过是细分了特别小的时间段,然后累积了特别多的小时间段的运算结果。
不同的时间分割方式,会带来不同的分析结果,会影响时间和频率的分辨率。
2 时频图的运算基础——短时傅里叶变换
在上一期文章中,我提到了iZotope Insight等分析器中可以看到随时间变化的频谱,这是怎么得到的呢?
实际上,我们只需要对整个音频分段,每段时间很短,但也累积了一定数量的采样点。对每一个时间段内的信号做一次傅里叶变换,就可以获得一串频谱的变化,构成我们熟悉的时频图。
这种分段的方式叫做“加窗”。此时加的窗的形状可以有很多种,用来应对各类特点的信号,尽可能让STFT的结果更符合我们作为观察者的需求。比如MATLAB的说明中画的这张图:

最上方蓝色信号x(n)是一个频率逐渐增加的信号,灰色的g(n)是窗函数,这种窗是三角形的,特点是每个窗都和相邻的信号相关,但是每时每刻都突出了中间时间点的信号特性。此时分割出来的每个窗都是一样长的,分割后的信号由x1(n)到x6(n)表示。每个窗口内的信号进行离散傅里叶变换(DFT)计算得到最下面的一系列频谱,这些频谱根据窗口的时间依次显示,就形成了随时间变化的频谱。
3 计算机怎么算?——快速傅里叶变换
虽然离散的傅里叶变换适用于数字信号,但是对于计算机来说,算的还是太慢了。很多信号处理中,进行傅里叶变换只是第一步,后续还有很多处理,而且在一个算法中还可能会用很多次傅里叶变换。此时,如果在傅里叶变换这一步卡太久,就显得很不经济。令人庆幸的是,科学家们提出了一种适用于电脑计算的傅里叶变换算法——快速傅里叶变换(Fast Fourier Transform,FFT)。FFT的实现方法有多种,但是不论怎么算,FFT和DFT的结果是完全一致的,唯一的区别是——FFT的计算要快非常多!甚至由于舍入误差的存在,在计算机中FFT算出来的结果比DFT还准确。
至于FFT具体怎么算的,我们无需考虑(如果实在感兴趣,可以了解一下蝶形算法)。我们只需要认识到一个事实——现今计算机里任何用到傅里叶变换的,几乎都是用FFT。因此,FFT这个词经常出现在音频软件里,
比如这里: 比如这里,Insight 2中提供了FFT的设定:

或者这里,Studio One自带的频谱仪中,也提到了FFT size的设定:

所以,FFT size是什么呢?它会影响什么呢?
还是先给出一个事实:在运算中,音频信号有多少个采样点,计算出FFT的结果就有多少个点。这个在MATLAB中可以轻松验证。
运行代码:
audioSignal = sin(1:1000);
audioSpectrum = fft(audioSignal); 获得结果:

FFT前后的数据长度一致,而FFT后的结果是复数,因为复数保留了频谱的幅度和相位。
这意味着:时间段给的越长,频谱算出来就越精确。但这也意味着,频谱图展现出来的实时性就降低。所以,时间和频率的精确度不能同时达到很高,必须根据需要进行取舍。
当时间窗口给的很小的时候,比如512点,对于一个44100Hz的音频,512点占有的时长是:512/44100=0.0116(秒),也就是11.6毫秒。而对于一个65536的FFT size,这个数字是1.486秒。这就意味着,你的音频信号在512的FFT size下每隔11.6毫秒就可以更新一次状态,而在65536的FFT size下你需要等1.486秒的时间才能看到下一帧的频谱。
如果你特别希望判断一个短时间内出现的声音的频率特点,那么你必须使用小的FFT size,同时,你不得不损失频谱的精细度;如果你要判断的是一段长时间的频谱的整体特性,那么你应该选择更大的FFT size,以获得更精细的频谱精度。


在Adobe Audition中可以通过Ctrl+Shift+↑/↓来控制频谱的时间和频率分辨率,其本质就是改变窗的大小,来实现时间频率精度的转换。当时间分辨率最佳时,频率的分辨率非常低,但是你可以清楚地看到,某个区间内的频率在哪个瞬间出现;当频率分辨率最佳时,时间分辨率很低,你会看到很多不同时出现的频率产生了交叉,但是你可以清楚地看到,信号内到底具有哪些具体频率。



如果没有找到合适的分辨率“甜点”,你可能会被这个时频图误导!比如你看到低频一片黄,以为这段音频的低频“很浑浊”,而选择加一个比如30Hz的低切“控制一下”,其实这个低频就是在60-100Hz附近,这个低切根本不起作用。虽然我们说混音师要“结合眼睛混音”,但是如果你不理解看到的东西的真真假假,恐怕会带来不必要的误解。
其实,就像量子力学的“测不准原理”一样,时间和频率的精确度在傅里叶变换中也是“测不准”的。你无法同时获得精细的时间和频率精度,必须根据你的需要选择一个方向,或者找到一个介中的值。
下一期文章,让我们来了解一些常用的傅里叶变换对和特殊函数,辅助我们更好地了解频谱的信息,以及为未来更多的音频分析思想打好基础。
本文作者:艾夫
音乐制作人、编曲人、混音师、艾楽音乐工作室主理人、华中科技大学光电信息专业硕士。

*文中观点为作者独立观点,不完全代表本号立场,仅供参考交流学习;
*本文部分配图源自网络,不用于商业用途;如有侵权,请联系本号处理。