您的当前位置:首页正文

该程序用来分析自由空间中的电磁波传输情况

2023-04-19 来源:好走旅游网


%该程序用来分析自由空间中的电磁波传输情况

%该电磁波为TM 波

%激励源可以是高斯脉冲或者正弦波

%该仿真中加入了PML 边界

clear all

%设置网格多少

IE = 100; % x 方向网格多少

JE = 100; % y 方向网格多少

% %设置脉冲函数中心

ic = IE / 2;

jc = JE / 2;

%初始化设置

ddx = 0.01; %空间网格大小,x 方向和y 方向网格大小相同

dt = ddx / 6e8; %时域网格大小

epsz = 8.8e-12; %介电常数

pi = 3.13159; %常数PI

er=4; %介质柱相对介电常数

%初始化系统变量

dz = zeros(IE,JE); %电场通量D

hx = dz; %x 方向磁场强度

hy = dz; %y 方向磁场强度

ihy = dz; %用于中间变量ihy,是用来计算磁场强度的,是curl_e 的积分

ihx = dz; %用于中间变量ihy,是用来计算磁场强度的,是curl_e 的积分

ga = ones(IE,JE); %电场强度与D 之间的关系矩阵.

ez_inc=zeros(IE);

hx_inc=zeros(IE);

%确定介质柱

radius=0.2;

ia=30;%确定总场与散射场区域

ib=70;

ja=30;

jb=70;

for j=ja:jb

for i=ia:ib

xdist=ic-i;

ydist=jc-j;

dist=sqrt(xdist^2+ydist^2);

if dist<=radius

ga(i,j)=1./er;

end

end

end

%计算PML 参数,若fj1 和fi1 为0,而其他参数为1,则为自由空间中的情况

for i = 1:IE

gi2(i) = 1;

gi3(i) = 1;

fi1(i) = 0;

fi2(i) = 1;

fi3(i) = 1;

end;

for j = 1:JE

gj2(j) = 1;

gj3(j) = 1;

fj1(j) = 0;

fj2(j) = 1;

fj3(j) = 1;

end;

%输入PML Cell 个数,即PML 有多少个单元网格,在此,x 方向和y 方向上的PML 网格相同

npml = input('Please input the number of PML Cell: ');

%x 方向用*i*表示,一方向用*j*表示

%x 方向上的PML 参数设置

for i = 1:npml+1

xnum = npml -i + 1; %从npml 到0

xd = npml;

xxn = xnum / xd; %辅助变量xxn,从1 到0

xn = 0.33 * xxn^3; %成立方衰减

gi2(i) = 1 / ( 1 + xn );

gi2(IE-i+1) = 1 / ( 1 + xn );

gi3(i) = (1 - xn) / (1 + xn);

gi3(IE-i+1) = ( 1 - xn ) / ( 1 + xn );

xxn = ( xnum - 0.5 ) / xd;

xn = 0.25 * xxn^3;

fil(i) = xn;

fil(IE+1-i) = xn;

fi2(i) = 1 / ( 1 + xn );

fi2(IE+1-i) = 1 / ( 1 + xn );

fi3(i) = ( 1-xn ) / ( 1 + xn );

fi3(IE+1-i) = ( 1 - xn ) / ( 1 + xn );

end;

for j = 1:npml+1

xnum = npml - j + 1;

xd = npml;

xxn = xnum / xd;

xn = 0.33 * xxn^3;

gj2(j) = 1 / ( 1 + xn );

gj2(JE+1-j) = 1 / ( 1 + xn );

gj3(j) = ( 1 - xn ) / ( 1 + xn );

gj3(JE-j+1) = ( 1 - xn ) / ( 1 + xn );

xxn = ( xnum - 0.5 ) / xd;

xn = 0.25 * xxn^3;

fj1(j) = xn;

fj1(JE+1-j) = xn;

fj2(j) = 1 / ( 1 + xn );

fj2(JE+1-j) = 1 / ( 1 + xn );

fj3(j) = ( 1 - xn ) / ( 1 + xn );

fj3(JE+1-j) = ( 1 - xn ) / ( 1 + xn );

end;

%高斯脉冲变量设置

t0 = 10;

spread = 10;

T = 0;

%输入nsteps 必须为正整数

nsteps = input('Please input the number of nsteps ');

%设置循环次数,从常数可以得到空间和时间上的传输情况

%通过修改对应的部分数值即可得到书Fig3.2 图

%nsteps = 50

% nsteps = 20;

% nsteps = 30;

% nsteps = 40;

%主循环

for n = 1:nsteps

T = T+1;

%计算入射电场

for i=2:JE

ez_inc(j)=ez_inc(j)+0.5*(hx_inc(j-1)-hx_inc(j));

end

%计算D

for j = 2:JE

for i = 2:IE

dz(i,j) = gi3(i) * gj3(j) * dz(i,j) + gi2(i) * gj2(j) * 0.5 * ( hy(i,j) - hy(i-1,j) - hx(i,j) + hx(i,j-1) );

end;

end;

% 激励元 在此采用正弦波,频率为1.5G,可选为高斯脉冲

% hard source

pulse = exp( -0.5 * (( t0-T ) / spread ) ^ 2 ) ;

dz(IE/2,JE/2) = pulse + dz(IE/2,JE/2);

ez_inc(50)=pulse;

%计算E

for j = 1:JE

for i = 1:IE

ez(i,j) = ga(i,j) * dz(i,j);

end;

end;

%Set the Ez edges to 0, as part of the PML

for j=1:JE

ez(1,j) = 0;

ez(IE,j) = 0;

end;

for i = 1:IE

ez(i,1) = 0;

ez(i,JE) = 0;

end;

%计算Hx

for j = 1:JE-1

for i = 1:IE

curl_e = ez(i,j) - ez(i,j+1);

ihx(i,j) = ihx(i,j) + fi1(i) * curl_e;

hx(i,j) = fj3(j) * hx(i,j) + fj2(j) * 0.5 * ( curl_e + ihx(i,j) );

end;

end;

%计算Hy

for j = 1:JE

for i = 1:IE -1

curl_e = ez(i+1,j) - ez(i,j);

ihy(i,j) = ihy(i,j) + fj1(j) * curl_e;

hy(i,j) = fi3(i) * hy(i,j) + fi2(i) * 0.5 * ( curl_e + ihy(i,j) );

end;

end;

%画图

figure(1);

surfc(1:IE,1:JE,ez)

axis([0 IE 0 JE -0.2 1.])

fmat=getframe(20)

end;

因篇幅问题不能全部显示,请点此查看更多更全内容