如何组合多个阻带滤波器的滤波器系数-Matlab

如何组合多个阻带滤波器的滤波器系数-Matlab,matlab,filter,signal-processing,Matlab,Filter,Signal Processing,我想将几个阻带滤波器组合成一个滤波器,以了解当多个频带被移除时,滤波器如何改变相位 这为两个过滤器提供了一个解决方案,但是如果有两个以上的过滤器带呢 这是一张显示每个单独滤波器的增益和相位的图像 因此,我的问题是: 如果我在五个单独的操作中过滤数据,阶段会发生什么 我可以将过滤步骤合并为单个步骤吗 我正在使用Matlab中的butter和freqz函数 [b,a] = butter(order,cutoff/(fs/2),'high'); [h,w] = freqz(b,a,fs); 谢谢

我想将几个阻带滤波器组合成一个滤波器,以了解当多个频带被移除时,滤波器如何改变相位

这为两个过滤器提供了一个解决方案,但是如果有两个以上的过滤器带呢

这是一张显示每个单独滤波器的增益和相位的图像

因此,我的问题是:

  • 如果我在五个单独的操作中过滤数据,阶段会发生什么
  • 我可以将过滤步骤合并为单个步骤吗
  • 我正在使用Matlab中的butter和freqz函数

    [b,a] = butter(order,cutoff/(fs/2),'high');
    [h,w] = freqz(b,a,fs);
    
    谢谢

  • 在卷积过程中,相位效应累积,总相位效应是所有滤波器相位效应的总和

  • 是的,您只需要将所有过滤器进行卷积即可获得新的过滤器:conv(conv(filter1,filter2),filter3)

  • 相位和磁场(dB)将相加。如果您想在Matlab上看到,您需要查看过滤器,例如:

    % computes the coefficients
    [b1,a1]=butter(8,0.6);          
    [b2,a2]=butter(8,0.4,'high');   
    [b3,a3]=butter(8,0.2,'high');   
    % creates the filters
    H1=dfilt.df2t(b1,a1);
    H2=dfilt.df2t(b2,a2);
    H3=dfilt.df2t(b3,a3);
    % creates the cascate filter
    Hcas=dfilt.cascade(H1,H2,H3)   
    % plot    
    Hcas.freqz()
    

    请注意,如果在绘制结果之前对其进行修改,您可能会更清楚地看到结果;相位的不连续性实际上并不存在:它只是从
    freqz
    返回的相位始终在
    [-pi,pi]
    范围内的结果。您可能还希望通过绘制
    20*log10(abs(h))
    dB re 1
    中绘制响应。谢谢,好的建议。很有趣。如果我卷积滤波器系数,然后相位图应该显示每个阻带从0到-2pi,然后从-2pi到-4pi的阶跃,等等?我试试看。不,如果你把滤波器的相位响应以图形的方式求和,你可以在单相图中观察到5个相位快照