V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
sydneyzh
V2EX  ›  问与答

将音频文件的 Spectral Frequency( Spectrogram)转化为 Spectral Pitch 的算法是什么?

  •  
  •   sydneyzh · 2015-07-29 03:20:33 +08:00 · 2264 次点击
    这是一个创建于 3401 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用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 条附言  ·  2015-07-29 04:08:11 +08:00
    已有点懂了。
    因单一pitch对应的时域函数被窗函数截断,其频域应包含无穷分量,所以spectral freq图密密麻麻的一片。
    求pitch就是freq解卷积得窗函数大小的过程。
    不知是否是这样?
    2 条回复    2015-07-29 09:13:14 +08:00
    Futura
        1
    Futura  
       2015-07-29 05:02:05 +08:00 via Android
    append说的不对,fft做的声谱本来就是实时截取一秒内的有限点做的
    zhuang
        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 的结果,与窗口函数的选取有关。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2683 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 15:35 · PVG 23:35 · LAX 07:35 · JFK 10:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.