关于虚拟参考反馈校正(VRFT)matlab实现问题

本人现在在做无模型自适应控制相关的研究,想用这个VRFT的方法去整定伪梯度初值,手动调出来(猜出来)的参数具有很好的控制效果,但是当用VRFT时得到的参数和我手动的差距很大而且控制不住系统。
控制器是全格式动态线性化下的控制器

% u=up.data;
% y=yp.data;
y=z;
N=3000;
y(N+1)=y(N);
ts=0.01;
t = linspace(0, ts*N, N);
%reference model
a=0.9;
numm=[1-a];%[1.3 -0.689];
denm=[1 -a];
sysm=tf(numm,denm,ts);
f=sysm*(1-sysm);%filter
f1=1-sysm-(1-sysm)*sysm;
nsysm=tf(denm,numm,ts);%逆模型
for k=1:1:N
    r_bar(k)=(y(k+1)-(1-a)*y(k))/a;%这里要用到k+1,离线情况下需要调整
    e_v(k)=r_bar(k)-y(k);
end

e_l=lsim(f1,e_v);%滤波
u_l=lsim(f,u);
plot(t(1:N),e_l);
%增量式的beta形式
beta1=tf([1 0],[1 -1],ts);
beta2=tf([1],[1 -1],ts);
beta3=tf([1],[1 -1 0],ts);
%pid
% fai1_l=beta1*e_l;
% fai2_l=lsim(beta2,e_l);
% fai3_l=lsim(beta3,e_l);
%ffdl
fai1_l=lsim(beta1,e_l);
fai2_l=lsim(beta2,e_l);
fai3_l=lsim(beta3,e_l);
a1=0;
a2=0;
a3=0;
b1=0;
b2=0;
b3=0;
for k=1:1:N
    a1=a1+fai1_l(k)*fai1_l(k);
    a2=a2+fai2_l(k)*fai2_l(k);
    a3=a3+fai3_l(k)*fai3_l(k);
    b1=b1+fai1_l(k)*u_l(k);
    b2=b2+fai2_l(k)*u_l(k);
    b3=b3+fai3_l(k)*u_l(k);
end
theta1=b1/a1;
theta2=b2/a2;
theta3=b3/a3;

请问这个代码哪里有问题呀,感觉是滤波或者最小二乘那块出问题了,还是因为模型不匹配?

VRFT是一种基于数据驱动的,模型辨识方法,和系统辨识一样,也需要输入输出信号含有足够多的信息,这样才能辨识准确,因此需要重点检查输入输出数据频率成分是否足够丰富。