当前位置: 首页 > article >正文

simulink离散传递函数得到差分方程并用C语言实现

一. 创建连续时间的传递函数

G ( s ) = s 2 + 217 s s 2 + 384 s + 8989 G(s) = \frac{s^2+217s}{s^2+384s+8989} G(s)=s2+384s+8989s2+217s

二. 离散连续时间的传递函数G(s)

2.1 在matlab中用c2d函数双线性变换法离散G(s),

下面是matlab脚本代码

% 创建连续时间传递函数
num = [1 217 0];
den = [1 384 8989];
sys_c = tf(num, den);
% 设置采样时间
Ts = 0.001;
% 离散化传递函数(使用 tustin 方法)
sys_d = c2d(sys_c, Ts, 'tustin');
sys_d
% 查看离散化后的传递函数
disp('离散化后的传递函数:');
disp(sys_d);

2.2 matlab命令行显示结果

运行上面脚本代码后,matlab命令行显示的结果如下图,得到离散传递函数为
H ( z ) = 0.9282 z 2 − 1.6747 z + 0.7465 z 2 − 1.6709 z + 0.6785 H(z) = \frac{0.9282z^2-1.6747z+0.7465}{z^2-1.6709z+0.6785} H(z)=z21.6709z+0.67850.9282z21.6747z+0.7465
在这里插入图片描述
- z 的正幂形式

所有项均乘以最高次幂 z 2 z^2 z2(即将负幂形式清理为正幂形式)
常用于标准传递函数表达中,这样便于与连续系统的形式类比
H ( z ) = 0.9282 z 2 − 1.6747 z + 0.7465 z 2 − 1.6709 z + 0.6785 H(z) = \frac{0.9282z^2-1.6747z+0.7465}{z^2-1.6709z+0.6785} H(z)=z21.6709z+0.67850.9282z21.6747z+0.7465
- z 的负幂形式

所有项均除以最高次幂 z 2 z^2 z2,即 z − 1 z^{-1} z1 表示一个采样时刻的延迟, z − 2 z^{-2} z2 表示两个采样时刻的延迟,
常用于传递函数的数字实现分析中,与差分方程直接相关
H ( z ) = 0.9282 − 1.6747 z − 1 + 0.7465 z − 2 1 − 1.6709 z − 1 + 0.6785 z − 2 H(z) = \frac{0.9282-1.6747z^{-1}+0.7465z^{-2}}{1-1.6709z^{-1}+0.6785z^{-2}} H(z)=11.6709z1+0.6785z20.92821.6747z1+0.7465z2

三. 求出离散传递函数H(z)的差分方程

离散传递函数的标准形式

H ( z ) = Y ( z ) U ( z ) = b 0 + b 1 z − 1 + b 2 z − 2 1 + a 1 z − 1 + a 2 z − 2 H(z) = \frac{Y(z)}{U(z)}= \frac{b_0+b_1z^{-1}+b_2z^{-2}}{1+a_1z^{-1}+a_2z^{-2}} H(z)=U(z)Y(z)=1+a1z1+a2z2b0+b1z1+b2z2
其中:

  • Y(z) 和 𝑈(𝑧) 是输出和输入信号的 Z 变换

  • b 0 b_0 b0, b 1 b_1 b1, b 2 b_2 b2是传递函数分子(与输入信号的关系)

  • a 1 a_1 a1, a 2 a_2 a2是传递函数分母(与输出信号的关系)

3.1 求解传递函数的负幂形式得到差分方程Y(z)

Y ( z ) U ( z ) = 0.9282 − 1.6747 z − 1 + 0.7465 z − 2 1 − 1.6709 z − 1 + 0.6785 z − 2 \frac{Y(z)}{U(z)}= \frac{0.9282-1.6747z^{-1}+0.7465z^{-2}}{1-1.6709z^{-1}+0.6785z^{-2}} U(z)Y(z)=11.6709z1+0.6785z20.92821.6747z1+0.7465z2

  • 去掉分母

Y ( z ) ⋅ ( 1 − 1.6709 z − 1 + 0.6785 z − 2 ) = U ( z ) ⋅ ( 0.9282 − 1.6747 z − 1 + 0.6785 z − 2 ) Y(z) \cdot (1-1.6709z^{-1}+0.6785z^{-2}) = U(z) \cdot (0.9282-1.6747z^{-1}+0.6785z^{-2}) Y(z)(11.6709z1+0.6785z2)=U(z)(0.92821.6747z1+0.6785z2)

  • 左右两边同时展开

Y ( z ) − 1.6709 z − 1 Y ( z ) + 0.6785 z − 2 Y ( z ) = 0.9282 U ( z ) − 1.6747 z − 1 U ( z ) + 0.6785 z − 2 U ( z ) Y(z) -1.6709z^{-1}Y(z)+0.6785z^{-2}Y(z)= 0.9282U(z)-1.6747z^{-1}U(z)+0.6785z^{-2}U(z) Y(z)1.6709z1Y(z)+0.6785z2Y(z)=0.9282U(z)1.6747z1U(z)+0.6785z2U(z)

  • 移项得到Y(z)

Y ( z ) = 0.9282 U ( z ) − 1.6747 z − 1 U ( z ) + 0.6785 z − 2 U ( z ) + 1.6709 z − 1 Y ( z ) − 0.6785 z − 2 Y ( z ) Y(z) = 0.9282U(z)-1.6747z^{-1}U(z)+0.6785z^{-2}U(z)+ 1.6709z^{-1}Y(z) -0.6785z^{-2}Y(z) Y(z)=0.9282U(z)1.6747z1U(z)+0.6785z2U(z)+1.6709z1Y(z)0.6785z2Y(z)

3.2 将 z − 1 z^{-1} z1表示为时域延迟

从Z-变换的性质, z − 1 z^{-1} z1 表示信号延迟一个采样周期(即𝑘 → 𝑘−1)因此

  • z − 1 Y ( z ) z^{-1}Y(z) z1Y(z) 表示 y [ k − 1 ] y[k−1] y[k1]

  • z − 2 Y ( z ) z^{-2}Y(z) z2Y(z) 表示 y [ k − 2 ] y[k−2] y[k2]

  • 同理 z − 1 U ( z ) z^{-1}U(z) z1U(z) 表示 u [ k − 1 ] u[k−1] u[k1] z − 2 U ( z ) z^{-2}U(z) z2U(z) 表示 u [ k − 2 ] u[k−2] u[k2]

带入差分方程Y(z) 中的得到
Y ( z ) = 0.9282 u [ k ] − 1.6747 u [ k − 1 ] + 0.6785 u [ k − 2 ] + 1.6709 y [ k − 1 ] − 0.6785 y [ k − 2 ] Y(z) = 0.9282u[k]-1.6747u[k−1]+0.6785u[k−2]+ 1.6709y[k−1]-0.6785y[k−2] Y(z)=0.9282u[k]1.6747u[k1]+0.6785u[k2]+1.6709y[k1]0.6785y[k2]

四. 差分方程Y(z) 的C代码实现

  • u[k] :本次输入值

  • Y(z):本次输出值

MCU代码中带入u[k] 时,需乘以采样周期Ts
Y ( z ) = 0.9282 u [ k ] − 1.6747 u [ k − 1 ] + 0.6785 u [ k − 2 ] + 1.6709 y [ k − 1 ] − 0.6785 y [ k − 2 ] Y(z) = 0.9282u[k]-1.6747u[k−1]+0.6785u[k−2]+ 1.6709y[k−1]-0.6785y[k−2] Y(z)=0.9282u[k]1.6747u[k1]+0.6785u[k2]+1.6709y[k1]0.6785y[k2]


http://www.kler.cn/a/447986.html

相关文章:

  • 学生管理系统,增加教师管理,班级管理,角色功能权限管理
  • 了解RPC
  • 常见的哈希函数构造方法
  • 智能工厂的设计软件 认知系统和内涵智能机 之1
  • [Unity] 【VR】【游戏开发】在VR中使用New Input System获取按键值的完整教程
  • 提炼关键词的力量:AI驱动下的SEO优化策略
  • 二叉树_堆
  • 实验二 组合逻辑电路部件实验
  • 青少年编程与数学 02-004 Go语言Web编程 07课题、WebSockets
  • 【java 正则表达式 笔记】
  • 机器学习零基础小白指南---- 线性代数入门
  • 生态学研究中,森林生态系统的结构、功能与稳定性是核心研究
  • Go语言中context 结构原理, 使用场景和用途
  • kotlin中泛型中in和out的区别
  • 使用qemu搭建armv7嵌入式开发环境
  • word文档中有大量空白行删除不掉,怎么办?
  • E46.【C语言】练习:面试题:循环多少次?
  • 探秘 Go 语言赋值表达式的奇妙之旅
  • 类型注解:基本类型
  • Linux驱动开发应用层 2 点亮一个LED
  • python2和python3的区别
  • Mysql学习笔记之SQL-3
  • Nginx:刷新显示404
  • 【数据分析】活动效果评估
  • java中的继承
  • ARM 处理器平台 Ethernet Compliance 测试流程示例