How to interpolate only on a certain direction?

5 views (last 30 days)
Hello, I have a series of matrix H of dimensions: 2x2x2049, defined for 2049 values of the frequency, from 0 to 3200 Hz. I would interpolate H so that I will have a series of matrix of dimensions 2x2x100000 for 100000 values of the frequency, from 5 to 50 Hz. How can I do this?
  2 Comments
Adam
Adam on 10 Jan 2018
doc interp3
should work for this, provided you give it the same input and output grids for the first two dimensions.
Alessandro Longo
Alessandro Longo on 10 Jan 2018
It does not work. I tried in this way:
[xx,yy,zz] = meshgrid(1:2,1:2,f_swept);
Htrue_interp = interp3(Htrue,xx,yy,zz,'spline');
where Htrue has dimension 2x2x2049 and f_swept is my long vector

Sign in to comment.

Answers (1)

Matt J
Matt J on 10 Jan 2018
Edited: Matt J on 10 Jan 2018
Hr=reshape( permute(H,[3,1,2]) , [],4 ); %convert to 2D array
tmp=interp1(...,Hr,...); %interpolate the columns
Hnew= reshape( ipermute(tmp,[3,1,2]) ,[2,2,100000] ); %convert back to 3D
  3 Comments
Matt J
Matt J on 11 Jan 2018
Take this H as a simpler example
H(:,:,1) =
1 1
1 1
H(:,:,2) =
2 2
2 2
H(:,:,3) =
3 3
3 3
I will upsample it by a factor 2 by interpolation:
tmp=interp1(Hr,linspace(1,3,5));
Hnew= reshape( ipermute(tmp,[3,1,2]) ,[2,2,5] );
The result:
Hnew(:,:,1) =
1 1
1 1
Hnew(:,:,2) =
1.5000 1.5000
1.5000 1.5000
Hnew(:,:,3) =
2 2
2 2
Hnew(:,:,4) =
2.5000 2.5000
2.5000 2.5000
Hnew(:,:,5) =
3 3
3 3
Is this not the kind of thing you want???

Sign in to comment.

Categories

Find more on Interpolation in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!