Interpolation of a matrix in 2D for complex numbers

23 Ansichten (letzte 30 Tage)
elis02
elis02 am 25 Mai 2023
Beantwortet: elis02 am 27 Mai 2023
Hello
I have a 3D matrix of a field E_x_y_t. say it's 600 x 700 x 2048 (correlated to x y and t)
At some point I'm deleting part of the Field in x and y. No need to touch T:
E_x_y_t([1:length(x)/4, length(x)/4+length(x)/2+1:length(x)],:,:) = [];
E_x_y_t(:,[1:length(y)/4, length(y)/4+length(y)/2+1:length(y)],:) = [];
x = [x(length(x)/4+1:length(x)/4+length(x)/2)];
But what I really need is from this point to make X and Y again 600 x 700 on all the T. (make interpolation of the complex 2d field for each value of time (T) to smaller grid for better resolution).
How can I do it? using interp2 somehow i guess?

Antworten (2)

KSSV
KSSV am 25 Mai 2023
You may use imresize.
Let A be your complex matrix:
B = imresize(A,2) ; % this makes double the size of A, you can specify the dimensions also
You can also use interp2.
[m,n,p] = size(A) ;
[X,Y] = meshgrid(1:n,1:m) ;
[Xi,Yi] = meshgrid(linspace(1,n,100),linspace(1,m,100)) ; % give your desired numbers instead of 100
Br = zeros(100,100,p) ;
Bc = zeros(100,100,p) ;
for i = 1:p
Br(:,:,i) = interp2(X,Y,real(A(:,:,i)),Xi,Yi) ;
Bc(:,:,i) = interp2(X,Y,imag(A(:,:,i)),Xi,Yi) ;
end
B = Br+1i*Bc ;
  4 Kommentare
elis02
elis02 am 25 Mai 2023
Bearbeitet: elis02 am 25 Mai 2023
attaching the code.
see line 224.
the next lines is why i need this :-)
The relavent variable is E_x_y_t.
elis02
elis02 am 27 Mai 2023
So to solve it I'm using interp2 right now:
E_x_y_t([1:length(x)/4, length(x)/4+length(x)/2+1:length(x)],:,:) = [];
E_x_y_t(:,[1:length(x)/4, length(x)/4+length(x)/2+1:length(x)],:) = [];
x = [x(length(x)/4+1:length(x)/4+length(x)/2)];
xq = linspace(x(1),x(end),650);
E_new = zeros(length(xq),length(xq),length(T));
for index = 1:length(T)
E_new(:,:,index) = interp2(x,x.',E_x_y_t(:,:,index),xq,xq.');
end
E_x_y_t = E_new;
clear E_new

Melden Sie sich an, um zu kommentieren.


elis02
elis02 am 27 Mai 2023
To solve this i'm using interp2 right now.
E_x_y_t([1:length(x)/4, length(x)/4+length(x)/2+1:length(x)],:,:) = [];
E_x_y_t(:,[1:length(x)/4, length(x)/4+length(x)/2+1:length(x)],:) = [];
x = [x(length(x)/4+1:length(x)/4+length(x)/2)];
xq = linspace(x(1),x(end),650);
E_new = zeros(length(xq),length(xq),length(T));
for index = 1:length(T)
E_new(:,:,index) = interp2(x,x.',E_x_y_t(:,:,index),xq,xq.');
end
E_x_y_t = E_new;
clear E_new

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