我是靠谱客的博主 义气电源,最近开发中收集的这篇文章主要介绍传递函数的离散化(二)—— C实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

    传递函数要编程实现,就必须先进行离散化。前面我们介绍了一阶传函的离散化,其过程比较简单。那么对于二阶及二阶以上的传递函数怎么离散化呢?我们可以把传函转化为状态方程,这样就可以变成多个一阶的传递函数,然后再进行离散化。

一:传递函数离散化的步骤

1.传函转化为状态方程
2. 状态方程离散化

1.1 传函转化为状态方程

这里我们举一个简单的例子,把下面的传函转化为状态方程的形式:
G ( s ) = 2 s + 1 s 2 + 7 s + 9 G_{(s)}=frac{2s+1}{s^{2}+7s+9} G(s)=s2+7s+92s+1
这里我们借助matlab工具求解,代码如下:

>> num=[2 1];
>> den=[1 7 9];
>> sys=tf(num,den)

sys =
 
     2 s + 1
  -------------
  s^2 + 7 s + 9
 
Continuous-time transfer function.

>> [A B C D]=tf2ss(num,den)

A =

    -7    -9
     1     0


B =

     1
     0


C =

     2     1


D =

     0

>> 

所以状态方程为:
[ x 2 ˙ x 1 ˙ ] = [ − 7 − 9 1 0 ] [ x 2 x 1 ] + [ 1 0 ] u   y = [ 2 1 ] [ x 2 x 1 ] begin{bmatrix} dot{x_{2}}\ dot{x_{1}} end{bmatrix}=begin{bmatrix} -7 & -9\ 1 &0 end{bmatrix}begin{bmatrix} x_{2}\ x_{1} end{bmatrix}+begin{bmatrix} 1\ 0 end{bmatrix}u \ \y=begin{bmatrix} 2 & 1end{bmatrix}begin{bmatrix} x_{2}\ x_{1}end{bmatrix} [x2˙x1˙]=[7190][x2x1]+[10]u y=[21][x2x1]
化简下:
x 2 ˙ = − 7 x 2 − 9 x 1 + u x 1 ˙ = x 2 y = x 1 + 2 x 2 dot{x_{2}}=-7x_{2}-9x_{1}+u \dot{x_{1}}=x_{2} \y=x_{1}+2x_{2} x2˙=7x29x1+ux1˙=x2y=x1+2x2

1.2 状态方程离散化

我们把上面的状态方程离散化,写出matlab function模块仿真下,代码如下:

function y = fcn(u,Ts)

persistent x1 x2;
if isempty(x1)
    x1=0;
end
if isempty(x2)
    x2=0;
end

x1 = x1 + Ts*x2;
x2 = x2 + Ts*(-9*x1-7*x2+u);
y = x1+2*x2;

end

二:传递函数离散化的仿真验证

我们把上面例子中的传递函数,状态方程和离散化的代码进行仿真验证下查看其阶跃响应:
在这里插入图片描述
三种方式的阶跃响应结果完全重合如下:
在这里插入图片描述
参考模型:https://download.csdn.net/download/wanrenqi/84389722

最后

以上就是义气电源为你收集整理的传递函数的离散化(二)—— C实现的全部内容,希望文章能够帮你解决传递函数的离散化(二)—— C实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(74)

评论列表共有 0 条评论

立即
投稿
返回
顶部