用adobe audition生成的图
Spectral Frequency vs Time
http://m1.yea.im/1Ba.png
Spectral Pitch vs Time
http://m1.yea.im/1Bb.png
图示是巴赫G弦咏叹调的最开头,只有小提琴和钢琴伴奏两个音部。
我以为调子pitch 和 frequency 是一一对应的关系,但为什么调子分量能被提取出来?
1
Futura 2015-07-29 05:02:05 +08:00 via Android
append说的不对,fft做的声谱本来就是实时截取一秒内的有限点做的
|
2
zhuang 2015-07-29 09:13:14 +08:00 1
这种由 spectrum 获取 frequency 的行为对应的数学描述是傅里叶变换,时域和频域转换,应用在音频采样上就是离散傅里叶变换(Discrete Fourier Transformation)。实际应用中的算法叫做快速傅里叶变换即 FFT。
一个 Pitch 通常包含一个最低的 base frequency,同时有多个更高频率的 overtones。求 pitch 的重点在这个最低的频率上面。(印象中这是根据人类心理声学模型得出的结论,同等功率的低频和高频信号,低频信号的心理感知强度更大。) 傅里叶变换的结果是频域函数,求 pitch 还需要对信号做分解。 至于为什么可以获得 pitch 信息,或者说如何获得 pitch 信息,下面是解释。数字信号这部分忘得差不多了,所以可能有不对的地方。 声音模拟信号经过采样和量化之后,存储方式一般都是 Amplitude - Time 形式,比如 PCM 格式。(主要是方便持久化和根据数字信号重建模拟信号) 而频率随时间会变化,根据要获取某一时刻的频率(比如 pitch)的精度,可以确定相对应的采样时长,window 函数负责将原始信号截取为各个独立的采样区间。 解析精度 frequency resolution 由信号的采样率和窗口采样数决定,比如 44.1kHz 的信号,用 8 采样的窗口,只能获得 44.1/8=5.5Hz 的解析精度,即无法分辨频率相差小于 5.5Hz 的信号。 此时的采样时长为 8/44.1=0.18s,提高采样窗口可以提高频率的分辨率,但也会增加采样时长,对于变化快的信号,采样的准确性也会下降。 还是以 5.5Hz 解析精度为例,离散傅里叶变换的结果是离散的映射关系: F(0) 的值代表 0~2.75 Hz 信号的强度 F(1) 的值代表 2.75~8.25 Hz 信号的强度 F(2) 的值代表 13.75~19.25 Hz 信号的强度 以此类推。 如何确定 pitch 实际上是人为找到一个标准,是找 F(n) 强度尽量大的,还是找 n 尽量小的,甚至还要考虑心理声学模型的修正。不过对于“歌曲识别”之类的应用场景来说无所谓,只要前后标准一致就好了。 第二张图里某些时刻的 pitch 对应多个值,形成了竖线,我猜大概是 spectral leakage 的结果,与窗口函数的选取有关。 |