Как перевернуть данные временных рядов в Simulink? - PullRequest
1 голос
/ 12 марта 2020

Я пытался умножить 2 набора данных временных рядов в 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)

Я получил эти 2 набора данных от одной из моих моделей Simulink, и я хочу продолжить симуляцию с той же моделью.

Думаю, для достижения этой цели Мне нужно перевернуть один из этих 2 наборов данных. Поэтому я попробовал функцию Matlab flip(), но она не работает, когда аргумент является временной серией.

Затем я попытался сначала вывести эти данные в рабочее пространство Matlab в виде массивов и перевернуть их, а затем ввести их Вернемся к моей модели Simulink, но это не сработало, потому что в этих массивах нет никаких столбцов, хранящих информацию о времени.

Наконец, я обнаружил, что в DSP есть блок «Flip» Набор инструментов, но дело в том, что у меня нет этого набора инструментов, возможно, мы не купим его, и я не уверен, работает ли этот блок.

1 Ответ

0 голосов
/ 12 марта 2020

Если это то, что вам нужно, напишите для этого функцию:

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

Измените приведенное выше в соответствии со своими потребностями.

...