在 Matlab 中设计 FIR 和 IIR 滤波器

信息处理 matlab 过滤器设计 有限脉冲响应 无限脉冲响应 带通
2022-02-24 02:28:09

我需要创建 4 个不同的通带滤波器。始终保持不变的是以下内容:

采样频率 =3000Hz

通带频率 =900Hz1200Hz

现在,这些是我应该创建的过滤器:

  1. 24th使用带有汉明窗的加窗方法订购 FIR。

  2. 24th使用频率采样订购 FIR。

  3. 8th使用双线性变换和 Butterworth 原型模拟滤波器对 IIR 进行排序

  4. 8th使用脉冲不变性和巴特沃斯原型模拟滤波器订购 IIR。

我的尝试:

  1. 归一化频率是0.60.8并且滤波器是第 24 阶,因此

    b = fir1(24,[0.6 0.8]);
    
  2. 所需的频率响应是

    H(Ω)=exp12jΩ
    为了
    3π5Ω<4π5
    6π5<Ω7π5
    Ω=2πk25
    因此我有那个H(Ω)0什么时候k=8,9,16,17

Matlab 中创建此过滤器的函数是

B=fir2(N,f,m)

在哪里f是具有采样频率的向量,并且m是这些频率的幅度。但就我而言,我的频率高于1它说f以。。开始0并以1. 我有点猜到结果并产生了这个:

f=[0 0.64 0.72 1];
m=[1 exp(-12*j*0.64) exp(-12*j*0.72) exp(-12*j)];
b=fir2(24,f,m)

我有一种感觉,这是不正确的。

  1. 对于双线性 IIR,我使用了 matlab 的“黄油”功能。

    [b,a] = butter(4,[0.6 0.8],'stop');
    
  2. 对于这一部分,我知道我需要同时使用“黄油”和“impinvar”,但我不知道如何。

编辑/尝试:

[b1,a1] = butter(4,[2*pi*900 2*pi*1200],'s');
[bz,az] = impinvar(b1,a1,3000);

有人可以告诉我我的尝试 1-3 是否正确并用 4 帮助我一点吗?谢谢你。

1个回答

您的调用fir1看起来不错,但您应该自己检查结果。您可以通过仔细阅读各个函数的 mathworks 文档来回答您的其他几个问题。例如,对于fir2,您可以阅读

f 是从 0 到 1 范围内的频点向量,其中 1 对应于奈奎斯特频率。f 的第一个点必须为 0,最后一个点必须为 1。 f 必须按升序排序。重复频率点是允许的,并被视为频率响应中的阶跃。

m 是一个向量,包含在 f 中指定的每个点处的所需幅度响应。

所以你不应该定义m为一个复杂的向量;该例程知道相位滞后,因为它只是滤波器阶数的一半。向量f应定义如下:

f = [0 .6 .6 .8 .8 1]

由于这是家庭作业,我将幅度向量的定义留给你。

butter除了您用作stop过滤器类型之外,您的调用看起来还不错。您需要一个带通滤波器,而不是带阻滤波器,因此只需省略额外的滤波器类型参数,该例程将默认设计一个带通滤波器(因为频率向量中有两个边缘频率)。

对于脉冲不变性方法,您首先必须设计一个模拟巴特沃斯滤波器(使用模拟滤波器butter的最后一个输入参数s),然后使用impinvar创建相应的数字滤波器。mathworks的文档很清楚,我想你学了以后一定会成功的。否则,请在您遇到的问题中添加一个非常具体的问题。