Расчет импульсного отклика по частотной кривой - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь создать фильтр с частотной характеристикой, напоминающей спектрограмму данного фрагмента звука.Это будет использоваться в качестве фильтра потерь для синтезатора физического моделирования.

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()

Первый график относится к входному звуку: first plot Второй график представляет собой частотную характеристику фильтра: second plot ЭтоФильтр имеет усиление на самых низких частотах и ​​не представляет частоты входного звука.Это нежелательно, поскольку предполагается, что этот фильтр потерь моделирует ухудшение энергии в струне, поэтому любое усиление предотвращает естественное затухание звука.Правильно ли я использую функцию firls от scipy?

...