【发布时间】:2019-02-23 11:51:52
【问题描述】:
如何应用低通滤波器,截止频率线性变化(或曲线比线性更一般),例如10000hz 到 200hz 的时间,使用 numpy/scipy,可能没有其他库?
例子:
- 在 00:00,000,低通截止 = 10000hz
- 在 00:05,000,低通截止 = 5000hz
- 在 00:09,000,低通截止 = 1000hz
- 然后截止频率在 10 秒内保持在 1000hz,然后截止频率降低到 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))
但是如何使截止值变化?
注意:我已经阅读了Applying time-variant filter in Python,但答案相当复杂(通常适用于多种过滤器)。
【问题讨论】:
-
永远是二阶黄油?
-
@StephenRauch 任何 IIR 或 FIR 都可以,只要截止 C(t) 可以沿时间 t 平滑变化(即 C(t) 不是分段常数函数)。
-
听起来像是wavelet transforms 的工作,但我对他们的经验还不够,无法给出一个好的答案。不幸的是
pywavelets和pywt似乎是死标签。 -
初始采样率是多少?
-
@DanielF 44.1 Khz 或 48 Khz 或 96 Khz 是有用的典型值。
标签: python numpy scipy signal-processing