Interpolation of a matrix in 2D for complex numbers

22 vues (au cours des 30 derniers jours)
elis02
elis02 le 25 Mai 2023
Réponse apportée : elis02 le 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?

Réponses (2)

KSSV
KSSV le 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 commentaires
elis02
elis02 le 25 Mai 2023
Modifié(e) : elis02 le 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 le 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

Connectez-vous pour commenter.


elis02
elis02 le 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

Catégories

En savoir plus sur Interpolation dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by