Interpolation of a matrix in 2D for complex numbers

23 次查看(过去 30 天)
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?

回答(2 个)

KSSV
KSSV 2023-5-25
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 个评论
elis02
elis02 2023-5-25
编辑:elis02 2023-5-25
attaching the code.
see line 224.
the next lines is why i need this :-)
The relavent variable is E_x_y_t.
elis02
elis02 2023-5-27
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

请先登录,再进行评论。


elis02
elis02 2023-5-27
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

类别

Help CenterFile Exchange 中查找有关 Interpolation 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by