matlab - 从输入和输出数据估计传递函数系数
问题描述
我想确定 TF 的系数。我有输入和输出响应。我可以构建一个 tf 并验证结果,但我正在考虑一种更好的方法来使用 MATLAB 识别系统。我的方法如下:
Ts=0.1;
input=[0 1 1 1 1 1 1]';
output=[0 1.5 1.45 1.4050 1.3645 1.3281 1.2952]';
% data=iddata(y, u, Ts)
% sys=tfest(data,2,1);
% create iddata object by specifying output signal, input signal, and sampling time
data=iddata(output,input,0.1);
% estimate a transfer function with 2 poles and 1 zero
sys=tfest(data,2,1);
But I don't manage to get the correct coefficients. Any suggestions?
解决方案
我看不出有什么理由使用笔和纸以外的任何东西来完成这项任务。
您可以解析 TF D(z) = Y(z)/U(z)
,它(用 表示时间样本k
)在离散时间域中给出:
y(k) = -a1 * y(k-1) + b0 * u(k) + b1 * u(k-1)
您有三个未知数 -a1
和- 通过填写七个给定 IO 对中的三个并求解三个方程的结果集,您可以轻松找到它们b0
。b1
显然,您可以将其表述为一个线性系统Ax = b
,并相应x = [a1, b0, b1]
地填充 和 的行。然后你可以利用 Matlab 的伪逆来找到系数,以防必须通过最小二乘拟合找到系数。A
b
x = A\b
推荐阅读
- java - 在 java play scheduler 任务中注入一个类实例
- ballerina - 芭蕾舞演员的运行时间问题
- c# - 继承 - 实例化基类构造函数所需的派生类
- c++ - 为什么当 while 循环内的 if 条件结果为假时,我的函数不输出最后一条语句?
- javascript - 如何使用 if else 语句为变量赋值
- vim - 如何将多字节字符简单地视为一个字节序列?
- javascript - 如何获取嵌套值并将其链接到将列传递到材料表的字段
- select - 使用木材从 ACF 中显示选择选项标签
- php - 如何使用mysql在php中显示每家餐厅的评论?
- pypy - 在 PyPy3 下使用 CVXPY