MATLAB: How to obtain an array of maxima from a moving maximum

indexingMATLABmoving maximum

I would like to get the moving maximum of an array, however I would like the output array to be the same length as the input array and also only place the maximum value for any given window in the same index it was found in the input array. If the next window has the same maximum data point, I would like to input a zero for that index in the output array. An example is below:
A = [4 8 6 1 2 3 1 9 4 5]; % Input data array
windowLength = 3; % Window length for the moving maximum.
The desired output from the example above is:
M = [0 8 6 0 0 3 0 9 0 0];
I tried using both dsp.MovingMaximum and movmax but neither the desired output array.

Best Answer

They don't work because you're wanting a specialized operation. Here is a way that works:
A = [4 8 6 1 2 3 1 9 4 5]; % Input data array
output = zeros(1, length(A));
windowLength = 3; % Window length for the moving maximum.
for k = 1 : length(A) - windowLength + 1
thisWindow = A(k : k + windowLength - 1)
windowMax = max(thisWindow)
for k2 = k : k + windowLength - 1
if thisWindow(k2-k+1) == windowMax
output(k2) = A(k2);
end
end
end
output % Show in command window.