フィルターのクリア

Hi, Has anyone been able to implement ILC (using basis functions) in Matlab? Can someone please share the code of an example. Thank you very much.

10 ビュー (過去 30 日間)
Hi, Has anyone been able to implement ILC (using basis functions) in Matlab? Can someone please share the code of an example. Thank you very much.

採用された回答

Mark Sherstan
Mark Sherstan 2018 年 12 月 12 日
編集済み: Mark Sherstan 2018 年 12 月 12 日
%%%
Update:
Look at the following post for a more developed example:
%%%
Here is an example that should push you in the correct direction. I havent completed it as I dont know what your input signal is or your reference signal is or if you need to add noise, disturbances, pure time delay, etc... but it is basically complete. Refer to the comments to follow what is going on. You need to put in a discrete time transfer function (sys) and sampling time (Ts) into the function. Let me know if you have any further questions!
function [ ] = ILC(sys,Ts)
[Ad Bd Cd Dd] = ssdata(sys);
% Initial condition x0, time range t, pure time delay n0, relative
% degree r, and matrix size N
x0 = 0;
t = 0:Ts:60;
n0 = 0;
r = 1;
N = length(t);
% Define input vector U and reference J
U = [zeros(1,15) 10*ones(1,15) zeros(1,15) 10*ones(1,16)];
Rj = [zeros(1,15) 20*ones(1,15) zeros(1,15) 20*ones(1,16)]';
% G0 not formulated as initial condition is 0
% Formulate G
Gvec = zeros(N,1);
rvec = ((r-1):(N-n0-1))';
for ii = 1:length(rvec)
ApowVec = Ad^rvec(ii);
Gvec(ii) = Cd*ApowVec*Bd;
end
G = tril(toeplitz(Gvec));
% Set up ILC
jmax = 25;
l0 = 0.95;
q0 = 1;
L = l0 * eye(N,N);
Q = q0 * eye(N,N);
I = eye(N);
Uj = zeros(N,1); Ujold = Uj;
Ej = zeros(N,1); Ejold = Ej;
e2k = zeros(jmax,1);
% Run ILC and plot the response for each iteration
for ii = 1:jmax
Uj = Q*Ujold + L*Ejold;
Yj = G*Uj;
Ej = Rj - Yj; Ej(1) = 0;
Ejold = Ej;
Ujold = Uj;
plotter(ii,t,Ej,Yj,Uj,Rj,U)
e2k(ii) = Ej'*Ej;
end
end
function [] = plotter(ii,t,Ej,Yj,Uj,Rj,U)
figure(1)
% Plot the error Ej of the current itteration
subplot(1,3,1);
plot(t,Ej,'LineWidth',1.5);
title('Error, Ej','FontSize',16);
ylabel('Error Response','FontSize',16);
% Plot the input Uj of the current itteration
subplot(1,3,2);
plot(t,Uj,t,U,'-k','LineWidth',1.5);
title({['Iteration: ', num2str(ii)],'Input, Uj'},'FontSize',16);
xlabel('Time (s)','FontSize',16);
ylabel('Input Response','FontSize',16);
% Plot the output Yj of the current itteration
subplot(1,3,3);
plot(t,Yj,t,Rj,'-k','LineWidth',1.5);
title('Output, Yj','FontSize',16);
ylabel('Output Response','FontSize',16);
pause(0.1);
end
  7 件のコメント
Mark Sherstan
Mark Sherstan 2018 年 12 月 12 日
I only covered super vector form, sorry sir.
Hekma Sekandari
Hekma Sekandari 2018 年 12 月 12 日
No problem, thank u very much.
If you have more examples, please share :)

サインインしてコメントする。

その他の回答 (1 件)

TARUN KARAK
TARUN KARAK 2021 年 12 月 2 日
hi, can any one tell me how to code for constraints handling using barrier method with ILC?

カテゴリ

Help Center および File ExchangeMATLAB についてさらに検索

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by