How to interpolate only on a certain direction?

3 Ansichten (letzte 30 Tage)
Alessandro Longo
Alessandro Longo am 10 Jan. 2018
Kommentiert: Matt J am 11 Jan. 2018
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 Kommentare
Adam
Adam am 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 am 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

Melden Sie sich an, um zu kommentieren.

Antworten (1)

Matt J
Matt J am 10 Jan. 2018
Bearbeitet: Matt J am 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 Kommentare
Matt J
Matt J am 11 Jan. 2018
Yes it does...
Matt J
Matt J am 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???

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Interpolation finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by