我如何在Simulink中翻转时间序列数据?

问题描述 投票:1回答:1

我一直在尝试在Simulink中将两组时间序列数据相乘AtBt,并且我希望结果像这样:

ans = sum(A(1:t)*B(t:-1:1))

例如,t = 3时的结果应为

ans =At1*Bt1 + (At2*Bt1 + At1*Bt2) + (At3*Bt1 + At2*Bt2 + At3*Bt1)

我从一个Simulink模型中获得了这两个数据集,我想继续使用相同的模型进行仿真。

要实现这一点,我想我需要翻转这两个数据集之一。因此,我尝试了Matlab函数flip(),但当参数为时间序列时,它不起作用。

然后,我尝试首先将这些数据作为数组输出到Matlab工作区,然后翻转它们,然后将它们输入回到我的Simulink模型中,但这并不能很好地工作,因为在这些数组中没有存储时间信息的任何列。

最后,我发现DSP工具箱中有一个名为“翻转”的块,但问题是我没有此工具箱,可能我们不会购买,并且不确定该块是否作品。

matlab simulink s-function
1个回答
0
投票

如果这是您所需要的,那么编写一个函数来做到这一点:

function C = multiply_timeseries(A, B)

Alen = length(A.Data);
Blen = length(B.Data);

if ~(Alen == Blen)
    error("A and B length should be the same")
end

C = timeseries(zeros(1,Alen,'like',A.Data), A.Time);

for t = 1:Alen
    C.Data(t) = sum( A(1:t) * B(t:-1:1) );
end

end

修改以上内容以适合您的需求。

© www.soinside.com 2019 - 2024. All rights reserved.