我正在尝试构建一个滤波器,该滤波器的频率响应类似于给定音频的频谱图。它将用作物理建模合成器的损耗滤波器。
import soundfile as sf
import scipy.signal as signal
import librosa as rosa
...
audio, rate = sf.read('/Users/.../PianoSound.wav')
spect = rosa.feature.melspectrogram(audio, sr=rate)
spect = np.mean(spect, axis=1)
pyplot.plot(spect)
pyplot.show()
freqs = rosa.core.mel_frequencies(fmax=rate)
freqs = freqs / rate
b = signal.firls(127, freqs, spect)
a = [1]
w, h = signal.freqz(b, a)
pyplot.plot(w, 20 * np.log10(abs(h)))
pyplot.show()
第一个情节是输入声音的情节: 第二个图是滤波器的频率响应: 该滤波器在最低频率处具有增益,并且不代表输入声音的频率。这是不希望的,因为应该使用此损耗滤波器来模拟弦中能量的衰减,因此任何增益量都可以防止声音的自然衰减。我可以正确使用scipy的firls功能吗?