我有"matlab function block"的模型,其中我有递归最小二乘法 . 递归算法需要知道输入信号的长度才能正常工作 . 但是当我使用命令N = length(y)时,它返回我的长度N = 1.但我认为它应该给我更高的长度 . Simulink model

Matlab功能块代码“rls_iden6”

function [P,N] = fcn(u,y)
  %% 
  N = length(y);
  sigma=1;       
  C = sigma*eye(2);      %p
  P = ones(2,1);

  z= [y; u];
  lamda=1;
  for n=1:N
  sample_out = y(n);
  C = (C - ( (C*z*z'*C)/( lamda+(z'*C*z) ) ))/lamda;
  P = P + (C*z* (sample_out - (z'*P)));  
  end

我的最终代码看起来应该如下所示,因为它在matlab工作空间中工作 . Simulink应该给我5个参数而不是2个 .

load data_cela.mat
  u=U; %input
  y=Y; %output

  %%
  input = 3;
  output = 2;
  system = input + output;   
  N = length(y);              
  %initial conditions
  sigma = 1;        
  C = sigma*eye(system);      
  P = ones(system,1);        
  lamda = 1;               %forgetting factor

  for n=3:N
      for i=1:2
          W(i) = y(n-i);          %output
      end
      for i=1:3
          V(i) = u(n-i+1);        %input
      end
      z = [V';W'];
      sample_out = y(n);
      pom(n)= z' * P;
      error(n) = y(n) - pom(n); 
      C = (C - ( (C*z*z'*C)/( lamda+(z'*C*z) ) ))/lamda;

      P = P + (C*z* (sample_out - (z'*P) ) );
      change(1:system,n) = P;
  end
  f_param = [P(1:3);-P(4:5)];
  num = [P(1:3,1)];
  den = [1;-P(4:5,1)];
  num1 = num(3,1);
  trasferfunction = tf(num1,den',1)

结果:

0.002879
----------------------
z^2 - 1.883 z + 0.8873