<div id="content_views" class="htmledit_views">
<p id="main-toc"><strong>目录</strong></p>
窄带陷波滤波器(Notch filter)原理
陷波滤波器指的是可以将某一频率迅速衰减的滤波器,直接上效果图,如下图所示在常数100的信号上叠加了一个幅值为10的100Hz的频率,通过Notch filter后就得到了稳定的信号100,相当于抑制了振荡。可以用来抑制系统的共振点或者消除周期性的振荡等。
蓝色滤波前的信号,黄色滤波后的信号
设计一个Notch filter
传递函数如下:
传递函数的伯德图:
从伯德图可以看出在某一个频率点会衰减,我们需要根据振荡的频率去调整w0=2*pi*f (这里f是振荡频率),达到过滤掉振荡的效果。Q的值影响的是稳定的速度。
Q=1.9的伯德图和仿真效果
Q= 0.9的伯德图和仿真效果(衰减变小):
生成代码
前面是s域的仿真,要能生成代码在硬件里面运行,需要把s域转成z域。这里生成代码的方式有以下两种,一种直接用离散传递函数,一种把离散传递函数转成差分方程。经对比,离散域传递函数会涉及到除法计算,有些单片机执行效率可能不高,而差分方法只有乘加,不涉及除法,计算效率会更高
离散传递函数生成代码配置
通过.m脚本实现s的传递函数转z. 15e-006是采样频率。
G_z = c2d(G_s,15e-006,'tustin');
这里有个小坑,Matlab的命令窗口只显示小数点后4位,可能会因为数据的精度影响到滤波效果,还需要对Matlab进行数据小数位数的设置,设置如下:
设置好后一般的除法可以显示到小数位后15位,但是传递函数形式的数据还是只显示4位。因此用如下指令取到传递函数的分子和分母的系数。
G_z_Numerator= G_z.Numerator{1};
G_z_Denominator=G_z.Denominator{1};
display(G_z_Numerator);
display(G_z_Denominator);
这样就得到了离散传递函数的参数,我们把得到的分子和分母的系数放到模型中仿真
差分方程生成代码
方程推导
差分方程只需要把离散传递函数转一下就好了,转的步骤如下:
传递函数转差分方程步骤:
1. 改写成如下形式
Y(z)X(z)=0.9948z2−1.989z+0.9948z2−1.989z+0.9896Y(z)X(z)=0.9948z2−1.989z+0.9948z2−1.989z+0.9896
构建差分方程模型
通过Simulink构建方程模型。
离散传递函数和差分方程仿真效果一样(这里Q值有些不同)
总结
总结下学习心得,通过对Notch filter的学习
1.了解Notch filter的工程意义应用场合和参数调试
2. 实际工程利用Matlab如何把s传递函数转为z传递函数再转成差分方程,方便生成代码
参考模型:
NotchFilter陷波滤波器仿真-快应用文档类资源-优快云下载