首页 > 解决方案 > 如何在 Simulink 中翻转时间序列数据?

问题描述

我一直在尝试在 Simulink 中将 2 组时间序列数据相乘,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 模型中获得了这 2 个数据集,我想继续使用相同的模型进行仿真。

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

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

最后发现DSP Toolbox里面有个叫“Flip”的block,问题是我没有这个toolbox,估计不会买,不知道这个block好不好用。

标签: matlabsimulinks-function

解决方案


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

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

修改以上内容以满足您的需要。


推荐阅读