Python中陷波滤波器的设计

2024-04-26 20:36:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用python设计一个IIR陷波器,使用numpy数组和scipy库从导入的wave文件中删除正弦音调(我使用wave模块来实现)。我的文件是由Adobe audition生成的:它是一个纯正弦@1.2 kHZ,采样频率为48、96或192 kHZ,以便为循环fft生成一个“伪周期”数据(如果我还不够清楚,只需询问一下)

下面是我用来实现过滤器系数的代码(我从文章"Second-order IIR Notch Filter Design and implementation of digital signal processing system" by C. M. Wang & W. C. Xiao中获得系数)

f_cut = 1200.0
wn = f_cut/rate    
r = 0.99
B, A = np.zeros(3), np.zeros(3)
A[0],A[1],A[2] = 1.0, -2.0*r*np.cos(2*np.pi*wn), r*r
B[0],B[1],B[2] = 1.0, -2.0*np.cos(2*np.pi*wn), 1.0
filtered = signal.lfilter(B, A, data_flt_R, axis=0)

其中,data_flt_R是一个numpy数组,包含float64类型的右通道,rate是我的采样频率。我用matplotlib模块绘制数据的频率响应和fft,看看是否一切正常。在

^{pr2}$

我得到的是:

enter image description here

我不明白我在fc之前和之后得到的结果和价值。我不应该得到一个看起来像红色但主峰在哪里的地块吗?为什么HF有斜率?这和开窗有关吗?在

此外,如果改变采样频率和/或数据长度(16/24或32位),结果也会改变。有人能启发我吗?在


Tags: 模块文件数据fftnumpysignalnp数组