我一直在尝试在Simulink中将两组时间序列数据相乘At
和Bt
,并且我希望结果像这样:
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工具箱中有一个名为“翻转”的块,但问题是我没有此工具箱,可能我们不会购买,并且不确定该块是否作品。
如果这是您所需要的,那么编写一个函数来做到这一点:
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
修改以上内容以适合您的需求。