我正在修改和扩展由meinardmüller和sebastienewert编写的Matlab“Chroma Toolbox”,并将其扩展到python。它的目的是检测在音频记录的每个分析帧中出现的音乐音调。在
第一步是确定音乐的调音,色度工具箱测试音乐是否调到标准A=440Hz,或者调低四分之一、三分之一、一半、三分之二或四分之三的半音。这没关系,但在我的应用程序中,我需要在调优检测中提高分辨率。在
一旦从其中一个选项中选择了调音,就会选择一个相应的滤波器组,该滤波器组用于计算钢琴范围内每个音高处有多少能量。(同时,波形重新采样至22050、4410和882赫兹)
filterbank的系数存储在.mat文件中,由Chroma工具箱提供。例如,在标准调谐中间C(261.63hz)处检测能量的系数为b=[1.,-7.43749873,24.72954997,-47.94740681,59.25189976, -47.77885707,24.55599193,-7.35933913,0.98601284]和a=[0.00314443,-0.02341175,0.07794208,-0.15134062,0.18733283,-0.15134062,0.07794208,-0.02341175,0.00314443],中间C的采样率为4410Hz。在
这些系数在filterfilt调用中使用:我使用scipy.signal.filtfilt公司(b,a,x)其中x是适当采样频率下的波形,低为低音符,高音符为高音符。此步骤在“audio_to_pitch_via_FB.m”文件中完成。在
因为我想允许不同于色度工具箱中设计的调谐水平,所以我需要制作自己的滤波器组,因此需要知道如何计算滤波器系数。为此,我需要一个函数coeffs(freq,fs),它将找到合适的系数,以找到给定频率下的能量,对于采样频率fs的信号。我该怎么做?在
以下是其中一个.mat文件的名称,以防其中包含有用的线索。”音高60度96度22050度Q25_minusQuarter.mat““
生成过滤器的代码在generateMultiratePitchFilterbank.m文件中。ellip函数以相反的方式返回a和b,但在其他方面或多或少是相同的。在
以下配方复制了您引用的数字:
相关问题 更多 >
编程相关推荐