I implemented the ERLS algorithm, but it don't identify true. would you help me?
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
clear all close all clc
global N delay Ts format long % ======================== system model ========================== % % continuous model
num = [0.00057 , 380]; den = [0.000000021437 , 0.00007633 , 1];
G = tf(num,den); pole(G); zero(G); syms z;
Ts = 0.02e-03;
Gd = c2d(G,Ts) pole(Gd); zero(Gd);
b = Gd.num{1,1}; a = Gd.den{1,1};
% identification parameters teta = [a(2:3),b(2:3)]' N = 800;
% ======================== RLS with step input ========================== %
% Rand_signal = [0.0025*randn(1,N/4) -0.0025*randn(1,N/4) zeros(1, N/2) ] ; % Rand_signal = [0.091*randn(1,200) zeros(1,600) ] ; % figure(1) % plot([0:N-1]*Ts,Rand_signal)
Rand_signal = [0.091*randn(1,N/4) -0.091*randn(1,N/4) zeros(1, N/2) ] ; % Rand_signal = [0.091*randn(1,200) zeros(1,600) ] ; figure(1) plot([0:N-1]*Ts,Rand_signal)
u = 0.126*ones(1,N) + Rand_signal; figure(2) plot([0:N-1]*Ts,u)
y = system_equation(a,b,u);
teta_hat(:,2) = zeros(4,1); % 4 parameters should be identified M=16; H=1; landa= 0.999; L=4; % R = 1e-6*eye(4,4); %sigma*eye(N).eye(N) R=1e-3*eye(4,4);
r = zeros(4,1); %Rh=z h=zeros(L,N); %solution vector alpha=H; %step size m=1;
for t = 3:N
phi = [-y(t-1) -y(t-2) u(t-1) u(t-2)]';
R= landa*R+ phi*phi';
y_hat (t) = phi'*teta_hat(:,t-1);
error(t) = y(t) - phi'*teta_hat(:,t-1);
z = landa*r+error(t)*phi;
r= z; %residual vector
for k=1:1 %itrations [~,p]=max(abs(r)); while abs(r(p))<=alpha/2*R(p,p) && m<=M m=m+1; alpha=alpha/2; end if m>M % number of bits coeffiecient break end h(p,t)=h(p,t)+sign(r(p))*alpha; r=r-sign(r(p))*alpha*R(:,p); end
h;
teta_hat(:,t) = teta_hat(:,t-1) + h(:,t);
end
teta_hat;
plot1(teta,teta_hat,y,y_hat)
error; cost_function_step = 0.5*(error*error'); norm(teta_hat(:,end)-teta); function y = system_equation(a,b,u)
global N delay
y = zeros(1,N);
% initial conditions y(1) = 0; y(2) = -a(2)*y(1); y(3) = -a(2)*y(2)-a(3)*y(1)+b(2)*u(1)+b(1)*u(2);
for i = 4:N y(i) = -a(2)*y(i-1)-a(3)*y(i-2)+b(2)*u(i-1)+b(3)*u(i-2); end
end
0 Kommentare
Antworten (0)
Siehe auch
Kategorien
Mehr zu Whos finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!