怎样将一个转达函数变成代码
在做信号处理、控制等软件步骤时,常常会必要将一个s域的转达函数变成实践可实行的代码。假如不是常常碰到,估测得查材料查半天赋能找到办法。为了便利本人和各位今后碰到相反的成绩不再走冤枉路,今天把整个排序做一个纪录和分析。
做信号处理,离不开强壮的matlab,以是这里做的分析以matlab和C言语作为例子。假如要转换成别的言语,不同不大。
全体转换的排序为:S域转达函数—>经过matlab转换为Z域转达函数—->转换为C代码。
起首,拿到一个S域的转达函数,其表达办法相似于如下图片所示:
一连转达函数
那么怎样将这个转达函数转换为Z域转达函数(数字化)呢?用matlab的c2d函数。
c2d最常用的参数情势为:
sysd = c2d(sys,Ts,method)
此中sys表现一连体系转达函数,Ts表现采样时间,method表现转换的办法。
method可以选5种:
- ‘zoh’,表现零阶坚持器,这也是默许的办法。
- ‘foh’,表现三角近似法(修正的零阶坚持器)。
- ‘impulse’,表现脉冲呼应安定法。
- ‘tustin’,表现双线性变动法。
- ‘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代码中。