【发布时间】:2011-11-15 10:46:38
【问题描述】:
我正在尝试了解 Simulink(连续)传递函数。在documentation for the transfer function block中,表示分子和分母长度相同时具有直接馈通特性。
根据documentation,直接馈通特性表明输出由输入直接控制(而不是由状态变量控制)。
我不明白如何在不使用状态变量或先前输入/输出值来计算相关导数的情况下实现分子和分母具有相同度数(大于零)的传递函数。
背景
这是导致我提出这个问题的思路:
我想实现一个表示具有传递函数的线性系统的 C++ 代码。对于这个实现,我将使用输入 x(t) 并计算输出 y(t)。假设这个系统的传递函数是G(s)。我可以写成Y(s) = G(s) * X(s)。
此外,我会说G(s) = numerator(s) / denominator(s),其中numerator(s) 是M 次拉普拉斯域变量s 的多项式,其系数为c_{M}, c_{M-1}, ..., c_{1}, ..., c_{0}。分母是另一个多项式,但度数为N,系数为d_{N}, ..., d_{0}。
为了解决这个系统,我将其重写为denominator(s) * Y(s) = numerator(s) * X(s)。使用拉普拉斯变换属性并假设所有导数的初始条件为零,我得到
d_{N}*y^{N} + d_{N-1}*y^{N-1} + ... + d_{0}*y = c_{M}*x^{M} + c_{M-1}*x^{M-1} + ... + c_{0}*x
其中y^{k} 是y(t) 的k-导数,x 也是如此。
我使用数值积分器(为简单起见,假设为欧拉)求解这个方程,它让我可以使用 N-1 状态变量计算 y 及其导数。对于x 的k-导数,我使用输入的最后一个k+1 值大致近似它(例如x^{1} = (x(t2) - x(t1)) / (t2-t1)。
简而言之,我需要跟踪 Y 和 M+1 之前的 x 值的 N-1 状态变量。然后我记得当M==N 时,simulink 在没有任何先前值的情况下执行此操作。这怎么可能?
【问题讨论】:
标签: simulink