
(
1)用Matlab表示式(1):
>> Nrm=[800*800];
>> Den=[1 800 800*800];
>> G=tf(Nrm,Den)
Transfer frnction:
640000
--------------------
s^2 + 800 s + 640000
用Matlab将连续的传递函数用转换成离散的传递函数,即Z变换,采样时间设为0.0001,离散化方法选用‘zof’:
>> D=c2d(G,0.0001,'zoh')
Transfer frnction:
0.003115 z + 0.003033
----------------------
z^2 - 1.917 z + 0.9231
Sampling time: 0.0001
从上面可知式(1)的Z变换为:

(
2)将式(2)交叉相乘得:

(
3)将式(3)中两边乘以,得:

(
4) 将式(
4)中的
用

替代,依次类推,即可得到差分方程:

(
5)用C语言编程表示为:
static s32 C0=0,C1=0,C2=0,R0=0,R1=0,R2=0; //bRtterworth低通滤波器用
.....
//截止频率800Hz的二阶BRtterworth低通滤波器,采样频率0.0001
R0=AbsolRtePosition-OffsetPosition;
//C0=(3115*(s64)R1+3033*(s64)R2+1917000*(s64)C1-923100*(s64)C2)/1000000;
C0=(3266*(s64)R1+3180*(s64)R2+2010200*(s64)C1-967960*(s64)C2)>>22;
C2=C1;
C1=C0;
R1=R0;
R2=R1;
RelativePosition=C0;
......