连续域函数数字化实现过程
在连续域中进行控制器的参数设计,得到的传递函数如何进行数字实现呢?
以二阶带通滤波器为例,其传递函数为:
2 2
0
BSF
2 2
0 0
( )
/
s
G s
s s Q
w
w w
+
=
+ +
连续域转离散域的公式为:
1
s
1
1
2
1
z
s f
z
-
-
-
=
+
带入式中即可得到系统此时 z 域的传递函数。手算过程比较复杂,且容易计算错误,通过
matlab 计算比较简便且快速,函数如下:
systd=c2d systec s method( ,T , )
其中 systd 为计算得到的离散域函数,systec 为原始连续域传递函数,Ts 为采样周期,
method 可以选择零阶保持器,一阶保持器等,实际程序中使用 zoh 较多,一般不写默认 zoh
即可。
得到的离散域传递函数一般形式为:
2
1 2 3
BSF
2
1 2 3
a z +a z+a
( )
b z +b z+b
G z =
进行简化变形得到:
-1 2
1 2 3
BSF
1 2
1 2 3
a +a z +a z
( )
b +b z +b z
G z
-
- -
=
该传递函数表示:
-1 2
1 2 3
1 2
1 2 3
a +a z +a z
b +b z +b z
y
x
-
- -
=
因此有:
-1 2 1 2
1 2 3 1 2 3
1 2 3 1 2 3
( ) ( -1) ( 2) ( ) ( -1) ( 2)
a x a z x a z x b y b z y b z y
a x k a x k a x k b y k b y k b y k
- - -
+ + = + +
+ + - = + + -
进而得到:
1 2 3 2 3
1
1
( ) ( ( ) ( -1) ( 2) ( -1) ( 2))y k a x k a x k a x k b y k b y k
b
= + + - - + -
根据该公式进行程序编写。
以下为例程:
主函数调用为:
BSF_Second_order(Id_ref,&id_bsf_in[2],&id_bsf_out[2]);
子函数为: