How to interpolate only on a certain direction?

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

doc interp3
should work for this, provided you give it the same input and output grids for the first two dimensions.
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

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

Asked:

on 10 Jan 2018

Commented:

on 11 Jan 2018

Community Treasure Hunt

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

Start Hunting!