温故知新(五)——三参数陷波滤波器离散化推导及MATLAB实现


1 三参数陷波滤波器

三参数型滤波器主要有以下一个参数:
wn:滤波器带宽,单位rad/s=> * 2pi可转化为Hz;
k1:陷波因子1;
k2:陷波因子2;
可以得到二阶三参数的陷波滤波器传递函数为:
在这里插入图片描述
可以看到输入信号为X(s),经过陷波滤波器的传递函数后,输出信号为Y(s)。

2 双线性变换

本文采用双线性变换,其本质是一种数值积分法,采用梯形方法来近似计算积分。经过简要推导可以得到:
在这里插入图片描述
将式(2)带入式(1)可得,
在这里插入图片描述
将式(3)利用字符进行替换可得,
在这里插入图片描述
其中,
在这里插入图片描述
利用z变换的信号滞后特点可以得到以下形式:
在这里插入图片描述
最终可以得到离散形式如下:
在这里插入图片描述
通过式(7)的就可以得到输入信号经过陷波滤波器后的输出信号的完整离散形式。

3 三参数计算

虽然该陷波滤波器的形式种存在三种参数,但是,参数如何设置呢?实质上,真正意义上的三参数陷波滤波器只得是以下三个参数:
wn:滤波器带宽,单位rad/s=>*2可转化为Hz;
f:陷波带宽,衰减到-3db时频率差值;
depth:陷波深度(中心频率处的衰减倍数);
其中,陷波带宽是容易理解的,而陷波深度,对于上述传递函数应该是一个小于1的值,这样才能把对应频率的输入信号进行可靠的衰减。
经过推导,可以得到三参数之间的关系:
在这里插入图片描述
为了方程有解,需要满足:
在这里插入图片描述
至此,陷波滤波器推导完成,下面给出m函数的脚本,其中给出了双线性和零极点匹配两种离散化的结果。

clear all;
close all;
clc;

fc = 379;
fbw = 40;

wn = 2 * pi * fc;
delta_f = 200;%陷波宽度
depth = 0.001;%陷波深度
%陷波宽度设置为200Hz,陷波深度depth设置为100;
k1 = (sqrt(16*pi^2*delta_f^2/wn^2+4)+1)/(-4*depth^2+2)
k2 = depth*k1
Ts = 0.0001;
a = [1 2*k2*wn wn^2];
b = [1 2*k1*wn wn^2];
sys = tf(a, b)
sysd_tustin = c2d(sys, Ts, 'tustin');
sysd_matched = c2d(sys, Ts, 'matched');
%% figure
figure(1);
P=bodeoptions;
P.FreqUnits = 'Hz';
bode(sys, P);
grid on;
title('sys');
figure(2);
bode(sysd_tustin, P);
grid on;
title('sysd\_tustin\_test');
figure(3);
bode(sysd_matched, P);
grid on;
title('sysd\_matched\_test');

运行结果如下:
S域:
在这里插入图片描述
双线性变换:
在这里插入图片描述
零极点匹配:
在这里插入图片描述
不同的离散方法在不同的情况下会出现偏差,调试时应选择适合的方法。


4 写在最后

对于陷波滤波器在Simulink中的实现可以选择直接使用m函数的脚本,也可以使用模型搭建。
上文中我已经给出了差分方程的形式,可以利用Simulink的delay模块进行延时实现不同时刻的信号叠加。除此之外,实现的方式是多种多样的,也可以通过传递函数,使用直接II型的结构实现这类较为简单的二阶系统。

  • 8
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LEODWL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值