【发布时间】:2013-07-24 08:42:34
【问题描述】:
我正在将 Meinard Müller 和 Sebastien Ewert 的 Matlab“Chroma Toolbox”改编和扩展为 python。它旨在检测音频记录的每个分析帧中存在哪些音高。
第一步是确定音乐的调音,色度工具箱测试音乐是调到标准A=440Hz,还是调低四分之一、三分之一、一半、三分之二、四分之三一个半音。没关系,但在我的应用程序中,我需要在调整检测中获得更高的分辨率。
一旦从其中一个选项中选择了调音,就会选择相应的滤波器组,用于确定钢琴范围内每个音高的能量。 (另外,波形被重新采样为 22050、4410 和 882 Hz)
滤波器组的系数存储在 .mat 文件中,由 Chroma Toolbox 提供。例如,用于检测标准调谐中间 C (261.63 Hz) 处的能量的系数为 b = [ 1., -7.43749873, 24.72954997, -47.94740681, 59.25189976, -47.77885707,24.5599193,-7.3593913,0.98601284和a = [0.00314443,-0.02341175,0.07794208,-0.15134062,0.18733283,-0.15134062,0.07794208,-0.02341175,0.00314443]和中间C的样品率为4410 Hz。
这些系数用于调用 filtfilt:我使用 scipy.signal.filtfilt(b, a, x) 其中 x 是适当采样频率下的波形,低音符为低,高音符为高。此步骤在文件“audio_to_pitch_via_FB.m”中完成。
问题:
因为我想允许与 Chroma Toolbox 中设计的不同的调整级别,所以我需要制作自己的滤波器组,因此需要知道如何计算滤波器系数。为此,我需要一个函数 coeffs(freq, fs),它会找到正确的系数来找到给定频率 freq 的能量,用于采样频率的信号fs。我该怎么做?
这是其中一个 .mat 文件的名称,以防它包含有用的线索。 "MIDI_FB_ellip_pitch_60_96_22050_Q25_minusQuarter.mat"
【问题讨论】:
标签: python scipy filtering signal-processing