Sliding a fixed window over an array
30 views (last 30 days)
Dear Matlab God,
I am in need of help. I want to slide a 80 MHz window through a 1 GHz bandwith array.
Here is an illustation:
As the 80 MHz window sweeps the 1GHz bandwidth, I need find the max and min ponits, subtract them, and store them in an array.
I tiredusing the diff function, but thatonly works for whole number integers.
I think it would be a nested for loop, with a fixed window. Just not sure how to do it.
Sourabh Kondapaka on 17 Feb 2021
Edited: Sourabh Kondapaka on 17 Feb 2021
Hi @Edward Ramirez,
Below is the function which will help in acheiving what you want:
function resultArr = maxMinDiff(arr, windowSize)
% If windowSize is greater than the actual arr, return 0
if windowSize > length(arr)
resultArr = zeros();
% Else compute max - min for each window while sliding it.
% Size of the window which is generated when computing max - min for each window while
% sliding it across the array. The size depends on the actual arr and the window size.
resultArr = zeros(1, length(arr) - windowSize + 1);
% Special case for the first window.
resultArr(1) = max(arr(1:windowSize)) - min(arr(1:windowSize));
%Compute Max/Min for all subsequent sliding windows
for i = 2:length(arr) - windowSize + 1
maxCurrentWindow = max(arr(i:i+windowSize -1));
minCurrentWindow = min(arr(i:i+windowSize -1));
resultArr(i) = maxCurrentWindow - minCurrentWindow;
As I do not access to your data, I'm going ahead with an array containing randomnly generated numbers:
arr = randi(1000,1,10); % Generates random number array (with an upper bound of 1000) of size 1x10
windowSize = 5;
resultArr = maxMinDiff(arr, windowSize);