How to multiply a window function to one dimension?

7 views (last 30 days)
Here is a Matlab script to apply a fixed window function along one dimension. Although it works, but is not elegant as a Matlab script. Can it be made more elegant? Thanks.
[L1, L2, L3, L4, L5, L6] = size(fids);
for n1=1:L1
for n3=1:L3
for n4=1:L4
for n5=1:L5
for n6=1:L6
fids(n1,:,n3,n4,n5,n6) = fids(n1,:,n3,n4,n5,n6) .* window;
end
end
end
end
end
Where window is a vector with the size equal to L2.
  3 Comments
José-Luis
José-Luis on 12 Jun 2014
Edited: José-Luis on 12 Jun 2014
Jian, as an aside: It would be nice if you gave some more feedback on the questions you have asked in the past. Please accept answers if they solved your problem or explain why a given answer does not do what you wanted.

Sign in to comment.

Accepted Answer

Chad Greene
Chad Greene on 6 Jun 2014
Edited: Chad Greene on 6 Jun 2014
Since you didn't give us your fids or window data, I'll make them up:
fids = rand(4,5,6,7,8,9);
window = 2*ones(1,5)-3;
Now your entire script you provided in your question can be replaced by this:
fids = bsxfun(@times,fids,window);
  2 Comments
Image Analyst
Image Analyst on 13 Jun 2014
You are incorrect. Chad's fids is a 6 dimensional array.
John
John on 16 Jun 2014
Edited: John on 16 Jun 2014
Hi, Chad:
Thanks for the good answer. I understand it now. Matlab's doc on @times is very primitive.
So, if the vector is to apply to the 4th dimension, your vector should be defined as:
window = 2*ones(1,1,1,7)-3;
Back to the vector in the original question. It has to be arranged as
window = reshape(window, [1,size(window)]);
fids = bsxfun(@times,fids,window);
and if the multiplication is to the 4th dimension, arrange it as:
window = reshape(window, [1,1,1,size(window)]);
Correct?

Sign in to comment.

More Answers (0)

Categories

Find more on Resizing and Reshaping Matrices in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!