How to estimate the parameters of Hammerstein model online?

I want to estimate the parameters of Hammerstein model online, the matlab code is as follows. But, the estimated paramters are wrong,
they can not be used by the controller. Please help me!
function [A,B,Ca,Cb]=arma3(A0,B0,C0,C1,y,u,m) na=m(1); nb=m(2); nc=m(3); if isempty(A0)|isempty(B0) p=2*eye(na+nb+nc); %6 2:3:3 th=zeros(na+nb+nc,1);%6 else th=zeros(1,na+nb+nc+nc); p0000*eye(na+nb+nc+nc);
% th(1:length(A0)+length(B0)+length(C0))=[A0,B0,C0]; end
lthy=length(y); lthu=length(u); lambda=0.9999;
%Piv=inv(p); %nmax=max(na,nb); ndata = length(y);
for i=4 :ndata % for i=(1+nmax):ndata ydata =-[y(i-1);y(i-2)]; % udata = [u(i);u(i-1);u(i-2)]'; udata = [u(i);u(i-1);u(i-2)]';
% rdata=[u(i)^(2);u(i)*u(i-1);u(i)*u(i-2);u(i)*u(i-3);... % u(i)^(3);u(i)^(2)*u(i-1);u(i-2)*u(i)^(2);u(i-3)*u(i)^(2)]; % rdata=[u(i)^(2);u(i-1)^(2);u(i-2)^(2)];
rdata=[u(i)^(2);u(i-1)^(2);u(i-2)^(2);... u(i)^(3);u(i-1)^(3);u(i-2)^(3)];
zeta = [ydata(:); udata(:);rdata]; nrm=(lambda+zeta'*p*zeta); p = (p - p*zeta*zeta'*p/nrm)/lambda; th = (th' + p*zeta*(y(lthy) - zeta'*th'))'; end %th=sum(zeta*y(lthy))./sum(zeta*zeta'); %th=th+0.14*zeta'*(y(lthy) - zeta'*th');
if (na > 1) A = [1,th(1:length(A0)-1)]; %A = [1,th(1:na-1)]; else A = 1; end
if (nb > 0) B = th(length(A0):length(A0)+length(B0)-1);
%B = th(na:na+nb-1); else B = []; end if (nc > 0) Ca = th(length(A0)+length(B0):length(A0)+length(B0)+length(C0)-1);
%B = th(na:na+nb-1); else C = []; end if (nc > 0) Cb th(length(A0)+length(B0)+length(C0):length(A0)+length(B0)+length(C0)+length(C0)-1);
% B = th(na:na+nb-1); else C = []; end
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload

Polytechforum.com is a website by engineers for engineers. It is not affiliated with any of manufacturers or vendors discussed here. All logos and trade names are the property of their respective owners.