如何使用numpy/scipy应用低通滤波器,并使截止频率沿时间线性变化(或者采用比线性更一般的曲线),例如从10000Hz到200Hz?
示例:
- 在00:00,000时,低通截止频率为10000Hz - 在00:05,000时,低通截止频率为5000Hz - 在00:09,000时,低通截止频率为1000Hz - 然后截止频率保持在1000Hz,持续10秒钟,然后下降到200Hz
以下是如何实现简单的100Hz低通滤波器的方法:
示例:
- 在00:00,000时,低通截止频率为10000Hz - 在00:05,000时,低通截止频率为5000Hz - 在00:09,000时,低通截止频率为1000Hz - 然后截止频率保持在1000Hz,持续10秒钟,然后下降到200Hz
以下是如何实现简单的100Hz低通滤波器的方法:
from scipy.io import wavfile
import numpy as np
from scipy.signal import butter, lfilter
sr, x = wavfile.read('test.wav')
b, a = butter(2, 100.0 / sr, btype='low') # Butterworth
y = lfilter(b, a, x)
wavfile.write('out.wav', sr, np.asarray(y, dtype=np.int16))
但如何使截止频率变化?
注意:我已经阅读了在Python中应用时变滤波器,但答案相当复杂(而且通常适用于许多类型的滤波器)。
pywavelets
和pywt
似乎已经过时了。 - Daniel F