我正在为一个模拟音频项目设计一个滤波器组,我想在进行电路仿真之前测试不同的滤波器拓扑(贝塞尔、切比雪夫、巴特沃斯等)。我从一个简单的示例开始来测试该过程 - 一阶低通滤波器。我加载我的 wav 文件(3 秒长),对滤波器的拉普拉斯变换进行 ifft,然后将其与音频进行卷积。
我没有附上音频,但我可以向你保证没有发生低通滤波。音频严重失真。
import numpy as np
from scipy.io import wavfile
import sounddevice as sd
samplerate, data = wavfile.read('sample.wav')
w0 = 2*np.pi*170 #cutoff freq (1/RC)
f = np.fft.fftfreq(len(data), d = 1/samplerate)
transfer = w0 / (1j*2*np.pi*f + w0)
impulse_response = np.fft.ifft(transfer)
filtered_signal = np.convolve(data, impulse_response, mode='same')
filtered_signal = filtered_signal.real
sd.play(filtered_signal.real, samplerate)
sd.wait()
附注我最近发现 LTSpice 接受 wav 文件作为信号输入,当我使用电压源、电阻器和电容器实现此功能时,我得到了预期的结果。不太清楚这里的 DSP。
我相信这就是我问题的答案:
我需要过采样,以便双线性变换可以很好地映射。