Can I smooth 1D data taken from pages of 3D array without using for loops?

I am looking to take a 3D array (~1000x1000x18) and take the vector along each page at each x,y point [e.g. (1,1,:); (1,2,:) etc.] and smooth or fit it to find the max value at each point. Each of the vectors are noisy cosine squared and I want to be able to get a true max at each value. Right now the noise is such that max(X,[],3) gives a different result than I want. So I want to smooth or fit each vector of data to get a better max of each vector out.
I can think of a brute force way to do that using for loops to pull each vector out one at a time but was wondering if this a nicer way.

1 Comment

Do the cosines have different peak locations, or just different amplitudes?

Sign in to comment.

 Accepted Answer

You could apply a 1D convolution along the 3rd dimension as follows,
kernel=reshape(kernel,1,1,[]);
convn(yourarray,kernel,'same')

2 Comments

FFT low pass filtering processing might be even better, since your square cosine is highly bandlimited
F=fft(yourarray,[],3).*lowpass_mask;
f=ifft(F,[],3);
result = max(f,[],3);

Sign in to comment.

More Answers (0)

Categories

Find more on Interpolation in Help Center and File Exchange

Asked:

on 4 Feb 2014

Commented:

on 5 Feb 2014

Community Treasure Hunt

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

Start Hunting!