Shifting data in time

10 ビュー (過去 30 日間)
Roos Bulthuis
Roos Bulthuis 2017 年 10 月 30 日
回答済み: Piotr Osinski 2019 年 2 月 7 日
Hello! I have a data set containing several trials as shown in the figure. I now want to take the average of these trials, but as you can see, the trials are shifted, so when I take the average, it is not a good representation. I now want to shift the trials such that their maximum is at the same position so I can compute the average maximum.
Is there anyone with a good suggestion for this?
  1 件のコメント
KL
KL 2017 年 10 月 30 日
It would be easier if you provided some sample data.

サインインしてコメントする。

回答 (3 件)

Roos Bulthuis
Roos Bulthuis 2017 年 10 月 30 日
Thanks for your quick replies. I am actually looking for some lines of code that I can incorporate within a Matlab function, is that possible with the Simulink suggestion you gave? I have not used Simulink that much to know all the possibilities.
A sample data set is attached to this post. As you can see, it is a matrix with 5 entries of length 683. As the entries do not all have the same length, they are padded with NaN.
So far I thought I could find the position of the maximum for each entry, then find the position that is furthest in time and find the difference between this position and the position of the maximum for the other entries. And then delay the signal by this amount. But how can I do that? Can I just pad each entry with NaN in the front?

KL
KL 2017 年 10 月 30 日
I suppose you want to synchronize all the maximums, try this in that case,
m = max(temp_data);
[a b c] = find(temp_data==m);
new_data = temp_data;
new_data(:,2) = circshift(new_data(:,2),a(1)-a(2));
new_data(:,3) = circshift(new_data(:,3),a(1)-a(3));
new_data(:,4) = circshift(new_data(:,4),a(1)-a(4));
new_data(:,5) = circshift(new_data(:,5),a(1)-a(5));
plot(new_data)
  4 件のコメント
Roos Bulthuis
Roos Bulthuis 2017 年 10 月 30 日
When computing the average it actually already trims down the signal. But I am just wondering whether this will be a problem for further analysis as I do not know yet whether a shorter signal will provide me with different results. But I think anyways that your suggestion is best, so thanks a lot!
KL
KL 2017 年 10 月 30 日
Pleasure, good luck solving the next steps.

サインインしてコメントする。


Piotr Osinski
Piotr Osinski 2019 年 2 月 7 日
Hi, you can use Signal Processing Toolbox (https://de.mathworks.com/help/signal/ug/align-signals-with-different-start-times.html).
At first find highest delay between signals with by itereating through every pair of signals :
delaynm = finddelay(signalN, signalM);
Then allign them to the maximal delayed signal maxDelSignal:
[maxDelSignal, signalN] = alignsignals(maxDelSignal, signalN);
Pad with NaNs or zeros to the signal with maximal size:
signalN(mSaxize) = NaN;
Now you have alligned signals and can simply compute mean value of the signals and find max.

カテゴリ

Help Center および File ExchangeMultirate Signal Processing についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by