Sliding window: array gets smaller

I am currently working on implementing a sliding window into my code. This is is what i have got so far:
windowLength = 10;
for i = 1:length(green)-windowLength
greenDC(i) = mean(green(i:i+windowLength-1));
redDC(i) = mean(red(i:i+windowLength-1));
greenAC(i) = std(green(i:i+windowLength-1));
redAC(i) = std(red(i:i+windowLength-1));
%other codes
end
My problem is now, that i want to plot my results i get later in the code over the time axis t. But after my sliding window the arrays get smaller by 10 and now my time array is to big for the plotting to work.
Does anybody know how to solve this problem? Or is my sliding window completly wrong?
I already tried to interpolate the time, but its not working.
thanks in advance!

7 commentaires

Rik
Rik le 28 Oct 2022
Is there a reason you want to avoid movmean or movstd?
KALYAN ACHARJYA
KALYAN ACHARJYA le 28 Oct 2022
Have you checked imfilter() funtion to slide the window (effiecint way)?
Adam Danz
Adam Danz le 28 Oct 2022
The number of elements in your smoothed array size should only differ by "windowLength". You can shorten the length of your time vector by the same number of units for plotting. Smoothed data at time t(n) represents data smoothed between the interval of t0(n) and t0(n)+windowLength-1.
Milena
Milena le 29 Oct 2022
@Rik I didnt get good results with movmean and movstd, so I decided to build a for loop and try it again
Rik
Rik le 30 Oct 2022
What exactly do you mean? Were the values you got unexpected? Or did you run into errors?
Milena
Milena le 1 Nov 2022
The error I calculated got bigger with movmean than without
Rik
Rik le 1 Nov 2022
And how did you determine that this was due to an incorrect implementation and not inherent to your data?

Connectez-vous pour commenter.

Réponses (1)

Image Analyst
Image Analyst le 28 Oct 2022
If you want to shrink the window, try this (untested)
windowLength = 10;
for i = 1:length(green)
index2 = min([length(green), i + windowLength - 1]);
greenDC(i) = mean(green(i:index2));
redDC(i) = mean(red(i:index2));
greenAC(i) = std(green(i:index2));
redAC(i) = std(red(i:index2));
%other codes
end
You know, imfilter has edge effect options, including shrinking window as it approached the edge of the signal or image.

3 commentaires

DGM
DGM le 28 Oct 2022
Modifié(e) : DGM le 28 Oct 2022
Are you sure about that? AFAIK, imfilter() handles all its edge treatment by padding. There are options for how the padding is generated and the extent of the returned array, but I don't recall anything about kernel truncation options. Same goes for medfilt2(), stdfilt(), etc.
EDIT: maybe you mean movmean(), movmedian(), etc. Those have truncation options.
Image Analyst
Image Analyst le 28 Oct 2022
@DGM, you're right.
Rik
Rik le 29 Oct 2022
Modifié(e) : Rik le 30 Oct 2022
I believe the default behavior of this or a related function changed around R2017b. When I get home I will look up what function exactly and what the change was.
Edit: turns out it was R2017a, where imclose pads the image by half the size of the SE.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Performance and Memory dans Centre d'aide et File Exchange

Question posée :

le 28 Oct 2022

Commenté :

Rik
le 1 Nov 2022

Community Treasure Hunt

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

Start Hunting!

Translated by