Matlab - 如何进行近场/远场变换

时间:2015-04-28 11:31:47

标签: matlab fft octave

我想用MATLAB做一个近场 - 远场变换。我正在使用软件工具Feko来建模我的贴片天线并获得near field data。有了这些数据,我可以显示一个显示微带天线近端电场的平面(z = 5mm)。

此刻,我只是将Re(Ex)+ i.Im(Ex),Re(Ey)+ i.Im(Ey)和Re(Ez)+ i.Im(Ez)放在同一矩阵中。

我知道我应该使用fft或类似“平面波谱”的东西,但我不知道如何。

最后,我想显示一个显示远E场的平面(例如z = 500mm)。

欢迎任何帮助我的想法!

谢谢

以下是code与我所做的事情以及解释它的评论。

clear all

%% GET NEAR-FIELD DATAS FROM FEKO AND DELETE COMMENTS

[ficname,pathname] = uigetfile('*.efe','fichier ''.efe'' a convertir ?');
nomfic = [pathname ficname];
i0 = find(ficname=='.');
system(['sed -e "/^#/d;/^*/d" ',' "',nomfic,'"| tr -s " " " " > result.txt']);  
A = load('result.txt');

%% DISPLAY THE E NEAR-FIELD  

X = A(:,1);
Y = A(:,2);
Z = A(:,3);
aux = A(:,4:9);
Ex = sqrt((aux(:,1).^2 + aux(:,2).^2));
Ey = sqrt((aux(:,3).^2 + aux(:,4).^2));
%%Ez = sqrt((aux(:,5).^2 + aux(:,6).^2));
Etot = sqrt(Ex.^2+Ey.^2);

%% Grid interpolation (meshgrid)
patchd = 28 .* 0.001;
patchw = 43 .* 0.001;
pas = 0.5 .* 0.001;

xmin = -patchw/2;
xmax = patchw/2;
pasx = pas;

ymin = -patchd/2;
ymax = patchd/2;
pasy = pas;

[xq,yq] = meshgrid(xmin:pasx:xmax,ymin:pasy:ymax);
EInterp = griddata(X,Y,Etot,xq,yq);

figure(1);
surf(xq,yq,EInterp);
caxis([1 90]);
view(0,90);

%% TRANSFORMATION NEAR-FIELD FAR-FIELD


%% This is where I need to do an FFT on my near-field datas

Ex_im = aux(:,1)+i*aux(:,2);
Ey_im = aux(:,3)+i*aux(:,4);
Ez_im = aux(:,5)+i*aux(:,6);

N = 1024;
E_im = [Ex_im Ey_im];


%%C = fftshift(abs(fft2(E_im,N)));
%%C = fftshift(fft(fftshift(E_im,N)));


%% DISPLAY THE E FAR-FIELD

%% I will see later

%%surf(20*log10(C));

2 个答案:

答案 0 :(得分:0)

这个问题分为两部分。第一个是"如何获得近场的远场?"第二个是"我如何在MATLAB中实现它?"

很多时候matlab都有内置函数来执行这样的专门程序,所以答案可以是使用函数xyz'但在这种情况下,我不知道一个。

由于它不是微不足道的,我建议花一点时间来研究它。首先搜索MATLAB文档,看看它们是否为您提供了一个功能。如果没有其他人已经实现它,那么Mathworks file exchange通常会有第三方工具来执行定义明确但很复杂的任务,例如here会产生一些结果。

如果它已经令您满意,或者您需要生成自己的代码(商业应用程序,作业问题等),那么您必须自己实施它。要从最初的原则开始,你需要一本电磁学教科书 - 我喜欢Collin, Field Theory of Guided Waves - 但这些推导已经完成,所以你可能会发现在this之类的某个地方开始使用它更有用

处理建模方面。然后实现关于使用MATLAB来实现您定义的过程。如果您需要有关该部分的帮助,请确保包含您尝试构建的算法的详细信息以及您迄今为止已成功完成的工作。

答案 1 :(得分:0)

实施平面波谱法时只需要两个场分量。

我想你将在频率范围内使用Ex和Ey在z = 5mm的高度来计算z'= 500mm处的Ex,Ey和Ez。

  • 计算kx,ky和kz:

    kx的范围从-pi / X到pi / X,ky从-pi / Y到pi / Y. X和Y是平面的长度。 kz可以使用以下等式计算。

    Equation of kz

  • 在z = 5mm处计算FEx和FEy:

    这可以使用Matlab轻松完成。

     FEx=ifftshift(ifft2(Ex));
    
     FEy=ifftshift(ifft2(Ey));
    
  • 在z = 5mm处计算FEz:

    Equation of FEz

  • 在z'= 500mm处计算FEx,FEy,FEz:

     FEx_500=FEx.*exp(-1i*kz*(z'-z));
    
     FEy_500=FEy.*exp(-1i*kz*(z'-z));
    
     FEz_500=FEz.*exp(-1i*kz*(z'-z));
    
  • 在z'= 500mm处计算Ex,Ey,Ez:

     Ex_500=fft2(fftshift(FEx_500));
    
     Ey_500=fft2(fftshift(FEy_500));
    
     Ez_500=fft2(fftshift(FEz_500));
    

您可能会感兴趣看一些参考资料:

  1. 针对EMC应用的平面近远场变换的研究

  2. 平面波谱理论应用于电磁兼容性研究的近场测量