请选择 进入手机版 | 继续访问电脑版

EDABOSS电子论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1031|回复: 0

[转帖] 借助Matlab将连续的传递函数转换为差分方程

[复制链接]

83

主题

19

回帖

275

E币

技术员

Rank: 2

积分
185
发表于 2017-4-5 14:42:20 | 显示全部楼层 |阅读模式
设一截止频率为800Hz的二阶Brtterworth低通滤波器的传递函数为:
4122915271014332.jpg                   (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变换为:
4122915271097971.jpg              (2
将式(2)交叉相乘得:
4122915271069162.jpg   (3
将式(3)中两边乘以,得:
       4122915271076949.jpg 4
将式(4)中的 4122915281082349.jpg 4122915281041765.jpg 替代,依次类推,即可得到差分方程:
4122915281021781.jpg          (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;
......

积分规则
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|EDABOSS电子论坛

GMT+8, 2024-4-17 07:26 , Processed in 0.045575 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表