如何将一个传递函数变成代码

怎样将一个转达函数变成代码

在做信号处理、控制等软件步骤时,常常会必要将一个s域的转达函数变成实践可实行的代码。假如不是常常碰到,估测得查材料查半天赋能找到办法。为了便利本人和各位今后碰到相反的成绩不再走冤枉路,今天把整个排序做一个纪录和分析。

做信号处理,离不开强壮的matlab,以是这里做的分析以matlab和C言语作为例子。假如要转换成别的言语,不同不大。

全体转换的排序为:S域转达函数—>经过matlab转换为Z域转达函数—->转换为C代码。

起首,拿到一个S域的转达函数,其表达办法相似于如下图片所示:

一连转达函数

那么怎样将这个转达函数转换为Z域转达函数(数字化)呢?用matlab的c2d函数。

c2d最常用的参数情势为:

sysd = c2d(sys,Ts,method)

此中sys表现一连体系转达函数,Ts表现采样时间,method表现转换的办法。

method可以选5种:

  1. ‘zoh’,表现零阶坚持器,这也是默许的办法。
  2. ‘foh’,表现三角近似法(修正的零阶坚持器)。
  3. ‘impulse’,表现脉冲呼应安定法。
  4. ‘tustin’,表现双线性变动法。
  5. ‘matched’,表现零极点婚配法。

那么sys又是怎样取得的呢?

控制体系中的转达函数G(s)通常形貌为:

转达函数表达式

在matlab中,用tf函数来取得:

sys = tf(num,den)

num=[b0 b1 b2 …. bm] 是分子,den=[a0 a1 a2 …. an]是分母。

好了,回到最初的例子,将其表达式转换为matlab模子:

H=tf([1 1],[1 4 5])

matlab后果

然后将其变为数字体系的转达函数,采样时间为1ms:

HD=c2d(H,0.001,‘zoh’)

取得的散伙数字域转达函数

其他几种变动办法,各位可以本人试一下,看看后果有何不同。

好了,取得了Z域转达函数,接下去就是要把转达函数变为可实行的C代码,代码中x表现输入,y表现输入。把分子和分母都除以z^2可得:

DSP情势的转达函数

依照这个公式带入

用C言语的数组x[3],y[3],分散来存储输入和输入的值,x[0]=x(n),x[1]=x(n-1)..以此类推,外表的公式可以表现为:

y[0]=x[0]*0+x[1]*0.0009985-x[2]*0.0009975+y[1]*1.996-y[2]*0.996;

x[2]=x[1];

x[1]=x[0];

y[2]=y[1];

y[1]=y[0];

代码中,y[0]就表现如今运算周期的输入,x[0]表现如今周期的输入。

到此,一个S域转达函数就被我们给搬到了C代码中。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享