视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
从传递函数到差分方程的转换
2025-09-29 08:59:35 责编:小OO
文档
从传递函数到差分方程的转换

悬赏分:0 - 解决时间:2008-3-20 21:02

我以前提问过“如何把传递函数转换成差分方程”的形式,后来不少人QQ问我,我觉得有必要把这些写出来,其实很简单的。

1、传递函数的形式

假设传递函数为:G(s)=exp^(-0.004s)*400/(s^2+50s);

其中^后表示指数,如:2^3=8;4^2=16;

在matlab里面建立这个传递函数的命令就是:sys=tf(400,[1,50,0],'inputdelay',0.004);

2、脉冲传递函数

把传递函数离散化就得到脉冲传递函数,这个我就不多说了。。

G(z) =z^(-4) *( 0.0001967 z + 0.0001935)/( z^2 - 1.951 z + 0.9512)

= z^(-4) *[0.0001967z ^(-1)+ 0.0001935z^(-2)]/[ 1 - 1.951 z^(-1) + 0.9512z^(-2)] =Y(z)/U(z)……(2)式

在matlab里面离散化命令是:dsys=c2d(sys,0.001,'z');其中0.001为采样时间;

(2)式可写成:

z^(-4) *[0.0001967 z ^(-1)+ 0.0001935z^(-2)] U(z) = [ 1 - 1.951 z^(-1) + 0.9512z^(-2)] Y(z) (3)式

3、差分方程形式

由(3)式可得

0.0001967 z ^(-5)+ 0.0001935z^(-6)]U(z) = [ 1 - 1.951 z^(-1) + 0.9512z^(-2)] Y(z) (4)式

把(4)式得z^(-n)中的(-n)写成(k-n),如z^(-5)U(z)写成u(k-5),可得:

0.0001967 u(k-5)+ 0.0001935u(k-6)= y(k) - 1.951 y(k-1) + 0.9512y(k-2) (5)式

由(5)式得

y(k) = 1.951 y(k-1) - 0.9512y(k-2)+0.0001967 u(k-5)+ 0.0001935u(k-6)

即差分方程形式

[num,den]=tfdata(dsys,'v')这个命令其实就是取式(2)的分子分母

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

怎么用matlab把传递函数转成差分方程

就是这个问题,目前还没有人回答,本人悬赏的200,地址如下:

http://zhidao.baidu.com/question/338534.html

如果在这个页面回答也可以,想要分的留言

我把问题复制过来,如下:

-----《怎么用matlab把传递函数转成差分方程》-------

悬赏分:120 - 离问题结束还有 16 天 0 小时

以下是PID控制的部分代码(matlab的m文件):

ts=0.001;采样时间=0.001s

sys=tf(400,[1,50,0]);建立被控对象传递函数

dsys=c2d(sys,ts,'z');把传递函数离散化(问题1)

[num,den]=tfdata(dsys,'v');离散化后提取分子、分母

rin=1.0;输入为阶跃信号

u_1=0.0; u_2=0.0; 什么东西的初始状态(问题2)

y_1=0.0; y_2=0.0; 是不是输出的初始状态

error_1=0;初始误差

x=[0 0 0]';PID的3个参数Kp Ki Kd组成的数组

p=100;仿真时间100ms

for k=1:1:p

r(k)=rin;

u(k)=kpidi(1)*x(1)+kp

idi(2)*x(2)+kpidi(3)*x(3)

if u(k)>=10

u(k)=10;

end

if u(k)<=-10

u(k)=-10;

end

yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;(问题3)

error(k)=r(k)-yout(k);

%返回pid参数

u_2=u_1;u_1=u(k);

y_2=y_1;y_1=yout(k);

x(1)=error(k);

x(2)=(error(k)-error_1)/ts;

x(3)=x(3)+error(k)*ts;

error_2=error_1;

error_1=error(k);

end

问题1:把

传递函数离散化[SYSD,G]=C2D(SYSC,Ts,METHOD)这里面的method有好多种,而且用的method不一样得出的结果也不一样,这些参数究竟有什么区别(不要把matlab的help给我翻译一遍,帮忙解释详细点)

问题2:这些是不是PID控制器输出的初始状态,“rin--①--PID控制器--②--被控对象--③---”是不是就是上面②的地方的信号值?

问题3(关键问题):这个式子是怎么得出来的?从传递函数得出差分方程是个什么步骤,要具体点的或者给本参考书。

又如:在《先进PID控制MATLAB仿真(第二版)》P146有 被控对象G(s)=133/(s^2+25s),采样时间为1ms,采用z变换进行离散化,经过z变换后的离散化对象为yout(k)=-den(2)yout(k-1)—den(3)yout(k-2)十num(2)u(k-1)+num(3)u(k-2)(实在是搞不明白怎么来的)

问题4:不是线性的对象可不可以写成差分方程的形式,比如G(s)=20e^(-0.02s)/(1.6s^2+4.4s+1)带了个纯延迟的该怎么弄。或者换成个3阶对象怎么写成差分方程

补充:找有类似工作要做的朋友加好友讨论讨论。

本人正在做毕业设计《遗传算法用于模糊控制器的优化》,现在可以对普通的二阶被控对象进行隶属度函数和规则的优化,就是由于第三第四个问题卡住了,继续不下去了。全是用代码编写的,没有用到simulink,所以代码很长修改也麻烦,还不知道在代码里面怎么弄带纯延迟或非线性的对象。有谁知道如何把simulink的数据调入m文件或者把m文件的数据传入simulink,欢迎来讨论.

知道多少就回答多少,只要有帮助的,至少给20分。

问题补充:加好友可以在百度里面加,或者QQ378199注明加好友原因。

提问者: maqiu663 - 秀才 三级 最佳答案

1、c2d:假设在输入端有一个零阶保持器,把连续时间的状态空间模型转到离散时间状态空间模型。

[SYSD,G]=C2D(SYSC,Ts,METHOD)里面的method包括:

zoh 零阶保持, 假设控制输入在采样周期内为常值,为默认值。

foh 一阶保持器,假设控制输入在采样周期内为线性。 tustin 采用双线性逼近。

matched 采用SISO系统的零极点匹配法

2、只有U_1是2处的初始状态值,而U_2是用来传递U(k)的,所以U_2是U_1在下一个ts时间内的值

3、从差分方程获取传递函数:

y(k)+a1(k-1)+……+an(k-n)=b0x(k)+b1x(k-1)+……+bmx(k-m)在零初始条件下对,对方程两

边进行Z变换,得到该系统的脉冲传递函数G(Z)=Y(Z)/X(X)=[b0z^m+b1z^(m-1)+……+bm]/[z^n+a1z^(n-1)+……an] 其中m《n

或等效形式G(Z)=Y(Z)/X(X)=[b0+b1z^(-1)+……+bmz^(-m)]/[1+a1z^(-1)+……anz^(-n)] 其中m《n

从脉冲传递函数到差分方程

G(Z)=Y(Z)/X(X)=[b0+b1z^(-1)+……+bmz^(-m)]/[1+a1z^(-1)+……anz^(-n)] 其中m《n 交叉相乘得Y(Z)[1+a1z^(-1)+……anz^(-n)]=X(X)[b0+b1z^(-1)+……+bmz^(-m)]对X(z)

和Y(z)进行z逆变换的到差分方程y(k)+a1y(k-1)+……+any(k-n)=b0x(k)+b1x(k-1)+……+bmx(k-m)

http://218.6.168.52/wlxt/ncourse/jsjkzjs/web/ppt/ch4.files/frame.htm

4、纯延迟系统G(s)=20e^(-0.02s)/(1.6s^2+4.4s+1)

num=[20];

den=[1.6 4.4 1];

sys=tf(num,den,'inputdelay',0.02)

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>下载本文

显示全文
专题