写一个单输入单输出系统的prediction error method系统参数辨识方法,用matlab函数
时间: 2023-12-14 19:38:32 浏览: 27
单输入单输出系统的参数辨识可以使用最小二乘法来进行。具体步骤如下:
1. 定义系统模型
假设系统模型为:
y(t) = b1*u(t) + b2*u(t-1) + ... + bm*u(t-m+1)
其中,y(t)为系统输出,u(t)为系统输入,b1 ~ bm为待辨识参数,m为系统阶数。
2. 收集实验数据
在实验过程中,输入u(t)和对应的输出y(t)需要被记录下来。
3. 构造数据矩阵
将输入u(t)和输出y(t)按顺序放入矩阵中,如下所示:
U = [u(m), u(m-1), ..., u(1);
u(m+1), u(m), ..., u(2);
...
u(N-1), u(N-2), ..., u(N-m+1)]
Y = [y(m);
y(m+1);
...
y(N-1)]
其中,N为数据点数。
4. 求解待辨识参数
利用最小二乘法,求解出待辨识参数b1 ~ bm。具体方法是:
B = inv(U'*U)*U'*Y
其中,B为待辨识参数向量。
5. 验证模型
将待辨识参数代入系统模型中,得到预测输出y_pred(t),与实际输出y(t)进行比较,计算出预测误差e(t):
y_pred(t) = b1*u(t) + b2*u(t-1) + ... + bm*u(t-m+1)
e(t) = y(t) - y_pred(t)
6. 编写MATLAB函数
下面是一个MATLAB函数,用于实现单输入单输出系统的prediction error method系统参数辨识方法:
```matlab
function [B, e] = pem(U, Y, m)
% 单输入单输出系统参数辨识函数
% 输入:
% U:输入矩阵(m x N-m+1)
% Y:输出向量(N-m+1 x 1)
% m:系统阶数
% 输出:
% B:待辨识参数向量(m x 1)
% e:预测误差向量(N-m+1 x 1)
% 构造数据矩阵
U = flipud(buffer(U, m, m-1));
Y = Y(m:end);
% 求解待辨识参数
B = inv(U'*U)*U'*Y;
% 验证模型
y_pred = U*B;
e = Y - y_pred;
end
```
使用方法如下:
```matlab
% 生成数据
N = 1000;
u = randn(N, 1);
y = filter([1, 2, 3], 1, u) + randn(N, 1)*0.1;
% 参数辨识
m = 3;
[B, e] = pem(u, y, m);
% 绘制结果
figure;
subplot(211);
plot(1:N, y, 'b', 1:N-m+1, u(m:end), 'r');
legend('y', 'u');
subplot(212);
plot(1:N-m+1, e);
title('Prediction Error');
```