Sliding a fixed window over an array
조회 수: 26 (최근 30일)
이전 댓글 표시
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:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/515997/image.png)
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.
Thank You,
Ed
댓글 수: 0
답변 (1개)
Sourabh Kondapaka
2021년 2월 17일
편집: Sourabh Kondapaka
2021년 2월 17일
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.
else
% 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;
end
end
end
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);
댓글 수: 2
참고 항목
카테고리
Help Center 및 File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!