在IIR滤波器设计过程中,通常利用模拟滤波器来设计数字滤波器,首先要根据滤波器的性能指标设计出相应的模拟滤波器的系统传递函数G(s),然后由传递函数G(s)经Z变换得到所需要的数字滤波器的离散型传递函数。常用的Z变换方法有冲激响应不变法和双线性变换法。这种方法比较麻烦。下面介绍使用MATLAB工具设计数字滤波器。

一 、Matlab滤波器的设计

  1. 首先,在MATLAB命令行中输入fdatool或者filterDesigner打开滤波器设计工具箱,如下图。为了便于分析,我们设计一个简单的Butterworth2阶低通滤波器。

  2. ResponseType用于选择低通、高通、带通、带阻等类型,这里选择低通滤波“Lowpass”。

  3. 图中Design Method用于选择IIR滤波器还是FIR滤波器,这里我们选择IIR滤波器,类型
    选择Butterworth,当然也可以选择其他类型。

  4. Fiter Order 选择滤波器阶数,这里选择一个2阶滤波。

  5. Frequency Specifications用于设置采样频率以及截止频率,这里填入200以及20,即采
    样率为200Hz,20Hz以上的频率将被滤除掉。

  6. 参数设置好后点击Design filter按钮,将按要求设计滤波器。默认生成的IIR滤波器类型
    是Direct-Form I SOS (可通过 Edit---->Convert Structure 选择)

  7. 在菜单栏上选择Analysis→Filter Coefficients可以查看生成的滤波器系数。
    Analysis→Magnitude and Phase Responses 查看幅频和相频响应。
    8:

  8. 默认情况下,Filter Coefficients把结果分成多个2阶Section显示,其中还有增益。增益的目的是为了保证计算的精度和系统的稳定性。选择[edit]→[Convert to Single Section],这时候系数变成我们熟悉的形式:
    在这里插入图片描述
    这个时候离散型传递函数的形式
    在这里插入图片描述
    注意z是降次排列的。按照上面的公式,滤波器差分方程为:y[n] = 0.06745x[n] + 0.1349x[n-1] + 0.06745*x[n-2] - (-1.14298)*y[n-1] - (0.4128)y[n-2]

二、滤波器效果的仿真验证

滤波器设计完成后还可以生成Simulink模型进行仿真:按照下图中数字标号进行

  1. 第一步点击左边Realize Model图标;
  2. 第二步勾选“Build model using basic elements”这一项,右边四个灰色的项将自动打钩;
  3. 最后点击“Realize Model”,matlab将自动生成滤波器模型,在弹出的窗口中双击模型可以观察该模型的内部结构。
    .在这里插入图片描述
    下面是按照设计要求生成的2阶滤波器直接Ⅰ型的结构:
    在这里插入图片描述
    使用生成的滤波器搭建一个简单的测试模型:将两个幅值为1,频率分别为10Hz、50Hz的正弦波叠加,输入滤波器后观察滤波前后的波形。仿真时间设为1s,仿真参数中求解器类型设为固定步长,求解器选择discrete(它适用于离散无连续状态的系统),步长设为0.005s(200Hz)
    在这里插入图片描述
    打开示波器结果如下图所示:有不同频率叠加的波形,10Hz正弦波和滤波后得到的波形的对比。由于50Hz正弦波频率高于滤波器截止频率20Hz,因此被滤除,同时滤波也产生了一定的滞后和失真。
    在这里插入图片描述
    知道了差分方程的形式就很容易写出相应的C代码来实现数字滤波了。

有时候在PMSM无感高频注入观测转子位置时,需要用到带通滤波器,如果注入的是1K的正
弦波。我们可以设置一个1K的Butterworth2阶带通滤波器。采样频率10K, 带通【0.95K~1.05K】如下图:
在这里插入图片描述
原文参考:https://blog.csdn.net/tap880507/article/details/78930469
Matab设计的滤波器和其他滤波器滤波效果对比:https://download.csdn.net/download/wanrenqi/85026379

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐