陷波滤波器(Notch Filter)的离散化设计

陷波滤波器(Notch Filter)的离散化设计

符号说明

w_{bw} - 陷波宽度,单位:rad/s

w_c - 陷波中央频率,单位:rad/s

T_s - 离散化采样时间,单位:s

y(k) - 第k次输出信号

r(k) - 第k次输入信号

概述

本文以如下二阶陷波滤波器的传递函数为例,分别简要介绍双线性变换和零极点匹配方法的离散化:
G(s) = \frac{s^2 + w_c^2}{s^2 + w_{bw}s + w_c^2} \tag{0-1}

双线性变换(Tustin)方法

双线性变换本质是一种数值积分法,采用梯形方法来近似计算积分。经过简要推导可以得到:
s = \frac{2}{T_s} \frac{z-1}{z+1} \tag{1-1}
即使用式(1-1)代入式(0-1)即可得到陷波滤波器的离散化z域方程:
G(z) = \frac{\frac{4}{Ts}\frac{(z-1)^2}{(z+1)^2}+w_c^2}{\frac{4}{Ts}\frac{(z-1)^2}{(z+1)^2}+w_{bw}\frac{2}{Ts}\frac{z-1}{z+1}+w_c^2} \\ = \frac{\overbrace{4+w_c^2T_s^2}^{a_0} + \overbrace{(2T_s^2w_c^2-8)}^{a_1}z^{-1} + \overbrace{(4+w_c^2T_s^2)}^{a_2}z^{-2}}{\underbrace{4+w_c^2T_s^2+2w_{bw}T_s}_{b_0} + \underbrace{(2T_s^2w_c^2-8)}_{b_1}z^{-1} + \underbrace{(4+w_c^2T_s^2-2w_{bw}T_s)}_{b_2}z^{-2}} \tag{1-2}
对式(1-2)作变量替代可得到:
G(z) = \frac{a_0 + a_1z^{-1} + a_2z^{-2}}{b_0 + b_1z^{-1} + b_2z^{-2}} \tag{1-3}
其中:

  • a_0 = 4+w_c^2T_s^2
  • a_1 = 2T_s^2w_c^2-8
  • a_2 = 4+w_c^2T_s^2 = a_0
  • b_0 = 4+w_c^2T_s^2+2w_{bw}T_s
  • b_1 = 2T_s^2w_c^2-8 = a_1
  • b_2 = 4+w_c^2T_s^2-2w_{bw}T_s

由式(1-3)可得出陷波滤波器基于Tustin方法的离散化差分方程为:
y(k) = \frac{a_0}{b_0}r(k)+\frac{a_1}{b_0}r(k-1)+\frac{a_2}{b_0}r(k-2)-\frac{b1}{b0}y(k-1)-\frac{b2}{b0}y(k-2) \tag{1-4}
值得注意的是,若使用后向欧拉法离散,只需要将式(1-1)更换成下式即可:
s = \frac{1-z^{-1}}{T_s} \tag{1-5}

零极点匹配方法

零极点匹配是指将s域中的零极点一一对应到z域的零极点上,并计算出增益即可。零极点对应关系由下式给出:
z_i = e^{s_iT_s} \tag{2-1}
其中下标i表示第i个零点或极点。可将式(0-1)表示成:
G(s) = K_s\frac{(s-jw_c)(s+jw_c)}{(s-p_1)(s-p_2)} \tag{2-2}
其中:

  • K_s = 1
  • p_{1,2} = \alpha \pm \beta,为陷波滤波器的极点
  • \alpha = -\frac{w_{bw}}{2}, \beta = \frac{\sqrt{4w_c^2-w_{bw}^2}}{2}

将式(2-2)中的零极点利用式(2-1)替换,借助欧拉公式,可得到z域下的方程如下:
G(z) = K_z\frac{(z-e^{jw_cT_s})(z-e^{-jw_cT_s})}{(z-e^{p_1T_s})(z-e^{p_2T_s})} \\ = K_z\frac{(z-e^{jw_cT_s})(z-e^{-jw_cT_s})}{(z-re^{j\beta T_s})(z-re^{-j\beta T_s})} \\ = K_z\frac{z^2 - 2cos(w_cT_s)z + 1}{z^2 - 2rcos(\beta T_s)z + r^2} \tag{2-3}
其中:

  • r = e^{\alpha T_s}

当s域中为0时,z域对应为1,因此通过式(2-2)与式(2-3)可得到下式:
G(s)\mid_{s=0} = G(z)\mid_{z=1} \\ \Rightarrow 1 = K_z\frac{2 - 2cos(w_cT_s)}{1-2rcos(\beta T_s) + r^2} \\ \Rightarrow K_z = \frac{1-2rcos(\beta T_s) + r^2}{2-2cos(w_cT_s)} \tag{2-4}
使用变量替代,可将式(2-3)化简得到:
G(z) = \frac{\overbrace{K_z}^{a_0}z^2\overbrace{ - 2K_zcos(w_cT_s)}^{a_1}z + \overbrace{K_z}^{a_2}}{z^2 - \underbrace{2rcos(\beta T_s)}_{b_1}z + \underbrace{r^2}_{-b_2}} \\ = \frac{a_0z^2 + a_1z + a_2}{z^2 - b_1 - b_2} \tag{2-5}
其中:

  • a_0 = K_z
  • a_1 = -2K_zcos(w_cT_s)
  • a_2 = K_z = a_0
  • b_1 = 2rcos(\beta T_s)
  • b_2 = -r^2

由式(2-5)可得出可得出陷波滤波器基于零极点匹配方法的离散化差分方程为:
y(k) = a_0r(k)+a_1r(k-1)+a_2r(k-2)+b_1y(k-1)+b_2y(k-2) \tag{2-6}

参考资料

附录

附两种方法的matlab测试源码

clear all;
close all;
clc;

fc = 100;
fbw = 40;

wc = 2 * pi * fc;
wbw = 2 * pi * fbw;
Ts = 0.001;
a = [1 0 wc^2];
b = [1 wbw wc^2];
sys = tf(a, b);
sysd_tustin = c2d(sys, Ts, 'tustin');
sysd_matched = c2d(sys, Ts, 'matched');

%% tustin test
a0 = 4 + 4 * pi^2 * fc^2 * Ts^2;
a1 = 8 * pi^2 * fc^2 * Ts^2 - 8;
a2 = a0;
b0 = a0 + 4 * pi * fbw * Ts;
b1 = a1;
b2 = a0 - 4 * pi * fbw * Ts;
ad = [a0 a1 a2]./b0;
bd = [b0 b1 b2]./b0;
sysd_tustin_test = tf(ad, bd, Ts);

%% zpm test
alpha = -wbw / 2;
beta = sqrt(4*wc^2-wbw^2) / 2;
r = exp(alpha * Ts);
Kz = (1 - 2 * r * cos(beta * Ts) + r^2) / (2 - 2 * cos(wc * Ts));
a0 = Kz;
a1 = -2 * Kz * cos(wc * Ts);
a2 = Kz;
b0 = 1;
b1 = 2 * r * cos(beta * Ts);
b2 = -r^2;
ad = [a0 a1 a2];
bd = [b0 -b1 -b2];
sysd_matched_test = tf(ad, bd, Ts);

%% figure
figure(1);
P=bodeoptions;
P.FreqUnits = 'Hz';
bode(sys, P);
grid on;
title('sys');
figure(2);
bode(sysd_tustin_test, P);
grid on;
title('sysd\_tustin\_test');
figure(3);
bode(sysd_matched_test, P);
grid on;
title('sysd\_matched\_test');

%% signal test
t = 0:Ts:1;
f0 = 10;
f1 = 0;
f2 = fc;
f3 = 0;

r = sin(2*pi*f0*t) + sin(2*pi*f1*t) + sin(2*pi*f2*t) + sin(2*pi*f3*t);
y_sys_filtered = lsim(sys, r, t);
y_sysd_tustin_filtered = dlsim(sysd_tustin_test.num, sysd_tustin_test.den, r);
y_sysd_matched_filtered = dlsim(sysd_matched_test.num, sysd_matched_test.den, r);


%% display
figure(4);
lw = 2;
plot(t, r);
hold on;
grid on;
plot(t, y_sys_filtered, 'LineWidth',lw);
hold on;
plot(t, y_sysd_tustin_filtered, 'LineWidth',lw);
hold on;
plot(t, y_sysd_matched_filtered, 'LineWidth',lw);
hold on;
legend('Input', 'y\_sys\_filtered', 'y\_sysd\_tustin\_filtered', 'y\_sysd\_matched\_filtered');
title('filtered signal');
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容