matlab信号长度,如何在simulink中测量信号长度?

我有"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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值