【使用UPML的3D FDTD代码进行微带低通滤波器分析】应用三维有限差分时域法分析平面微带电路研究(Matlab代码实现)
欢迎来到本博客❤️❤️博主优势博客内容尽量做到思维缜密逻辑清晰为了方便读者。⛳️座右铭行百里者半于九十。本文目录如下目录⛳️赠与读者1 概述2 运行结果3 参考文献4 Matlab代码、文章下载⛳️赠与读者做科研涉及到一个深在的思想系统需要科研者逻辑缜密踏实认真但是不能只是努力很多时候借力比努力更重要然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学什么是电的时候不要觉得这些问题搞笑。哲学是科学之母哲学就是追究终极问题寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览免得骤然跌入幽暗的迷宫找不到来时的路它不足为你揭示全部问题的答案但若能让人胸中升起一朵朵疑云也未尝不会酿成晚霞斑斓的别一番景致万一它居然给你带来了一场精神世界的苦雨那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。或许雨过云收神驰的天地更清朗.......1 概述使用带有UPML的三维FDTD方法计算平面微带低通滤波器的散射系数S_{11}和S_{21}该方法参考了D. Sheen, S. Ali, M. Abouzahra和J. Kong的原始论文“应用三维有限差分时域法分析平面微带电路”发表于《IEEE微波理论与技术杂志》http://dx.doi.org/10.1109/22.55775。当前代码与原始计算相比进行了一些改进1) 使用UPML代替Mur ABCs2) 采用真实金属铜作为补丁导体材料而不是完美电导体PEC3) 在滤波器传输微带线的两端施加匹配负载以防止物理反射4) 在Ez源面上不施加“磁墙”或“电墙”条件。参考文献摘要直接三维时域有限差分法FDTD被应用于各种微带结构的全波分析。该方法被证明是模拟复杂微带电路元件和微带天线的高效工具。根据时域结果计算了线馈矩形贴片天线的输入阻抗以及低通滤波器和分支线耦合器的频率相关散射参数。这些电路被制造出来对它们的测量结果与FDTD结果进行了比较结果表明它们之间具有良好的一致性2 运行结果部分代码%% Physical constantsepsilon0 8.85418782e-12; mu0 1.25663706e-6;c 1.0/sqrt(mu0*epsilon0);%% Gaussian half-widtht_half 15.0e-12;%% Microstrip transmission lines parameterslineW 2.413e-3;lineH 1.0e-3;lineEr 2.2;Z0 49.2526;%% End timet_end 1.5e-9;%% Total mesh dimensions and grid cells sizes (without PML)nx 80; ny 100; nz 16;dx 0.4064e-3; dy 0.4233e-3; dz 0.2650e-3;%% Number of PML layersPML 5;%% Matrix of materials constantsnumber_of_materials 4;% For material of number x 1,2,3... :% Material(x,1) - relative permittivity, Material(x,2) - relative permeability,% Material(x,3) - specific conductivity% VacuumMaterial(1,1) 1.0; Material(1,2) 1.0; Material(1,3) 0.0;% Metal (Copper)Material(2,1) 1.0; Material(2,2) 1.0; Material(2,3) 5.88e7;% Substrate material (RT/Duroid 5880)Material(3,1) lineEr; Material(3,2) 1.0; Material(3,3) 0.0;% Matched load material is calculated from transmission line parametersMaterial(4,1) 1.0; Material(4,2) 1.0; Material(4,3) lineH/(Z0*lineW*dy);% Add PML layersnx nx 2*PML; ny ny 2*PML; nz nz 2*PML;% Calculate dtdt (1.0/c/sqrt( 1.0/(dx^2) 1.0/(dy^2) 1.0/(dz^2)))*0.9999;number_of_iterations ceil(t_end/dt);%% 3D array for geometryIndex ones(nx, ny, nz);%% Define of low-pass filter geometry% Ground planeIndex((1PML):(nx-PML), (1PML):(ny-PML), PML1) 2;% Rectangular patch (one cell thickness)Index((nx/2-25):(nx/225), (ny/2-3):(ny/23), PML5) 2;% Transmission line from port 1 to rectangular patchIndex((nx/2-10):(nx/2-5), (PML1):ny/2, PML5) 2;% Transmission line from rectangular patch to port 2Index((nx/25):(nx/210), ny/2:(ny-PML), PML5) 2;% Dielectric substrate between ground plane and filter patchIndex((1PML):(nx-PML), (1PML):(ny-PML), (PML2):(PML4)) 3;% Matched load before port 1Index((nx/2-10):(nx/2-5), PML1, (PML2):(PML4)) 4;% Matched load after port 2Index((nx/25):(nx/210), ny-PML, (PML2):(PML4)) 4;%% 3D FDTD physical (fields) and additional arrays are defined as single%% to increase performanceEx zeros(nx, ny1, nz1, single);Gx zeros(nx, ny1, nz1, single);Fx zeros(nx, ny1, nz1, single);Ey zeros(nx1, ny, nz1, single);Gy zeros(nx1, ny, nz1, single);Fy zeros(nx1, ny, nz1, single);Ez zeros(nx1, ny1, nz, single);Gz zeros(nx1, ny1, nz, single);Fz zeros(nx1, ny1, nz, single);Hx zeros(nx1, ny, nz, single);Bx zeros(nx1, ny, nz, single);Hy zeros(nx, ny1, nz, single);By zeros(nx, ny1, nz, single);Hz zeros(nx, ny, nz1, single);Bz zeros(nx, ny, nz1, single);%% FDTD PML coefficients arrays. Here they are already filled with values%% corresponding to free spacem 4; ka_max 1.0; R_err 1.0e-16;eta sqrt(mu0/epsilon0*Material(1,1)/Material(1,2));k_Ex_c ones(nx, ny, nz, single)*2.0*epsilon0;k_Ex_d ones(nx, ny, nz, single)*(-2.0*epsilon0);k_Ey_a ones(nx1, ny, nz, single);k_Ey_b ones(nx1, ny, nz, single)/(2.0*epsilon0);k_Gz_a ones(nx1, ny, nz, single);k_Gz_b ones(nx1, ny, nz, single);k_Hy_a ones(nx, ny, nz, single);k_Hy_b ones(nx, ny, nz, single)/(2.0*epsilon0);k_Hx_c ones(nx1, ny, nz, single)*2.0*epsilon0/mu0;k_Hx_d ones(nx1, ny, nz, single)*(-2.0*epsilon0/mu0);k_Bz_a ones(nx, ny, nz, single);k_Bz_b ones(nx, ny, nz, single)*dt;k_Gx_a ones(nx, ny1, nz, single);k_Gx_b ones(nx, ny1, nz, single);k_Ey_c ones(nx, ny, nz, single)*2.0*epsilon0;k_Ey_d ones(nx, ny, nz, single)*(-2.0*epsilon0);k_Ez_a ones(nx, ny1, nz, single);k_Ez_b ones(nx, ny1, nz, single)/(2.0*epsilon0);k_Bx_a ones(nx, ny, nz, single);k_Bx_b ones(nx, ny, nz, single)*dt;k_Hy_c ones(nx, ny1, nz, single)*2.0*epsilon0/mu0;k_Hy_d ones(nx, ny1, nz, single)*(-2.0*epsilon0/mu0);k_Hz_a ones(nx, ny, nz, single);k_Hz_b ones(nx, ny, nz, single)/(2.0*epsilon0);k_Ex_a ones(nx, ny, nz1, single);k_Ex_b ones(nx, ny, nz1, single)/(2.0*epsilon0);k_Gy_a ones(nx, ny, nz1, single);k_Gy_b ones(nx, ny, nz1, single);k_Ez_c ones(nx, ny, nz, single)*2.0*epsilon0;k_Ez_d ones(nx, ny, nz, single)*(-2.0*epsilon0);k_Hx_a ones(nx, ny, nz, single);k_Hx_b ones(nx, ny, nz, single)/(2.0*epsilon0);k_By_a ones(nx, ny, nz, single);k_By_b ones(nx, ny, nz, single)*dt;k_Hz_c ones(nx, ny, nz1, single)*2.0*epsilon0/mu0;k_Hz_d ones(nx, ny, nz1, single)*(-2.0*epsilon0/mu0);%% General FDTD coefficientsI 1:number_of_materials;K_a(I) (2.0*epsilon0*Material(I,1) - Material(I,3)*dt)./...(2.0*epsilon0*Material(I,1) Material(I,3)*dt);K_b(I) 2.0*dt./(2.0*epsilon0*Material(I,1) Material(I,3)*dt);K_c(I) Material(I,2);Ka single(K_a(Index)); Kb single(K_b(Index)); Kc single(K_c(Index));%% PML coefficients along x-axissigma_max -(m 1.0)*log(R_err)/(2.0*eta*PML*dx);for I0:(PML-1)sigma_x sigma_max*((PML - I)/PML)^m;ka_x 1.0 (ka_max - 1.0)*((PML - I)/PML)^m;k_Ey_a(I1,:,:) (2.0*epsilon0*ka_x - sigma_x*dt)/...(2.0*epsilon0*ka_x sigma_x*dt);k_Ey_a(nx-I,:,:) k_Ey_a(I1,:,:);k_Ey_b(I1,:,:) 1.0/(2.0*epsilon0*ka_x sigma_x*dt);k_Ey_b(nx-I,:,:) k_Ey_b(I1,:,:);k_Gz_a(I1,:,:) (2.0*epsilon0*ka_x - sigma_x*dt)/...(2.0*epsilon0*ka_x sigma_x*dt);k_Gz_a(nx-I,:,:) k_Gz_a(I1,:,:);k_Gz_b(I1,:,:) 2.0*epsilon0/(2.0*epsilon0*ka_x sigma_x*dt);k_Gz_b(nx-I,:,:) k_Gz_b(I1,:,:);k_Hx_c(I1,:,:) (2.0*epsilon0*ka_x sigma_x*dt)/mu0;k_Hx_c(nx-I,:,:) k_Hx_c(I1,:,:);k_Hx_d(I1,:,:) -(2.0*epsilon0*ka_x - sigma_x*dt)/mu0;k_Hx_d(nx-I,:,:) k_Hx_d(I1,:,:);sigma_x sigma_max*((PML - I - 0.5)/PML)^m;ka_x 1.0 (ka_max - 1.0)*((PML - I - 0.5)/PML)^m;k_Ex_c(I1,:,:) 2.0*epsilon0*ka_x sigma_x*dt;k_Ex_c(nx-I-1,:,:) k_Ex_c(I1,:,:);k_Ex_d(I1,:,:) -(2.0*epsilon0*ka_x - sigma_x*dt);k_Ex_d(nx-I-1,:,:) k_Ex_d(I1,:,:);k_Hy_a(I1,:,:) (2.0*epsilon0*ka_x - sigma_x*dt)/...(2.0*epsilon0*ka_x sigma_x*dt);k_Hy_a(nx-I-1,:,:) k_Hy_a(I1,:,:);k_Hy_b(I1,:,:) 1.0/(2.0*epsilon0*ka_x sigma_x*dt);k_Hy_b(nx-I-1,:,:) k_Hy_b(I1,:,:);k_Bz_a(I1,:,:) (2.0*epsilon0*ka_x - sigma_x*dt)/...(2.0*epsilon0*ka_x sigma_x*dt);k_Bz_a(nx-I-1,:,:) k_Bz_a(I1,:,:);k_Bz_b(I1,:,:) 2.0*epsilon0*dt/(2.0*epsilon0*ka_x sigma_x*dt);k_Bz_b(nx-I-1,:,:) k_Bz_b(I1,:,:);end%% PML coefficients along y-axissigma_max -(m 1.0)*log(R_err)/(2.0*eta*PML*dy);for J0:(PML-1)sigma_y sigma_max*((PML - J)/PML)^m;ka_y 1.0 (ka_max - 1.0)*((PML - J)/PML)^m;k_Gx_a(:,J1,:) (2.0*epsilon0*ka_y - sigma_y*dt)/...(2.0*epsilon0*ka_y sigma_y*dt);k_Gx_a(:,ny-J,:) k_Gx_a(:,J1,:);k_Gx_b(:,J1,:) 2.0*epsilon0/(2.0*epsilon0*ka_y sigma_y*dt);k_Gx_b(:,ny-J,:) k_Gx_b(:,J1,:);k_Ez_a(:,J1,:) (2.0*epsilon0*ka_y - sigma_y*dt)/...(2.0*epsilon0*ka_y sigma_y*dt);k_Ez_a(:,ny-J,:) k_Ez_a(:,J1,:);k_Ez_b(:,J1,:) 1.0/(2.0*epsilon0*ka_y sigma_y*dt);k_Ez_b(:,ny-J,:) k_Ez_b(:,J1,:);k_Hy_c(:,J1,:) (2.0*epsilon0*ka_y sigma_y*dt)/mu0;k_Hy_c(:,ny-J,:) k_Hy_c(:,J1,:);k_Hy_d(:,J1,:) -(2.0*epsilon0*ka_y - sigma_y*dt)/mu0;k_Hy_d(:,ny-J,:) k_Hy_d(:,J1,:);sigma_y sigma_max*((PML - J - 0.5)/PML)^m;ka_y 1.0 (ka_max - 1.0)*((PML - J - 0.5)/PML)^m;k_Ey_c(:,J1,:) 2.0*epsilon0*ka_ysigma_y*dt;k_Ey_c(:,ny-J-1,:) k_Ey_c(:,J1,:);k_Ey_d(:,J1,:) -(2.0*epsilon0*ka_y-sigma_y*dt);k_Ey_d(:,ny-J-1,:) k_Ey_d(:,J1,:);k_Bx_a(:,J1,:) (2.0*epsilon0*ka_y-sigma_y*dt)/...(2.0*epsilon0*ka_ysigma_y*dt);k_Bx_a(:,ny-J-1,:) k_Bx_a(:,J1,:);k_Bx_b(:,J1,:) 2.0*epsilon0*dt/(2.0*epsilon0*ka_ysigma_y*dt);k_Bx_b(:,ny-J-1,:) k_Bx_b(:,J1,:);k_Hz_a(:,J1,:) (2.0*epsilon0*ka_y-sigma_y*dt)/...(2.0*epsilon0*ka_ysigma_y*dt);k_Hz_a(:,ny-J-1,:) k_Hz_a(:,J1,:);k_Hz_b(:,J1,:) 1.0/(2.0*epsilon0*ka_ysigma_y*dt);k_Hz_b(:,ny-J-1,:) k_Hz_b(:,J1,:);end%% PML coefficients along z-axissigma_max -(m 1.0)*log(R_err)/(2.0*eta*PML*dz);for K0:(PML-1)sigma_z sigma_max*((PML - K)/PML)^m;ka_z 1.0 (ka_max - 1.0)*((PML-K)/PML)^m;k_Ex_a(:,:,K1) (2.0*epsilon0*ka_z - sigma_z*dt)/...(2.0*epsilon0*ka_z sigma_z*dt);k_Ex_a(:,:,nz-K) k_Ex_a(:,:,K1);k_Ex_b(:,:,K1) 1.0/(2.0*epsilon0*ka_z sigma_z*dt);k_Ex_b(:,:,nz-K) k_Ex_b(:,:,K1);k_Gy_a(:,:,K1) (2.0*epsilon0*ka_z - sigma_z*dt)/...(2.0*epsilon0*ka_z sigma_z*dt);k_Gy_a(:,:,nz-K) k_Gy_a(:,:,K1);k_Gy_b(:,:,K1) 2.0*epsilon0/(2.0*epsilon0*ka_z sigma_z*dt);k_Gy_b(:,:,nz-K) k_Gy_b(:,:,K1);k_Hz_c(:,:,K1) (2.0*epsilon0*ka_z sigma_z*dt)/mu0;k_Hz_c(:,:,nz-K) k_Hz_c(:,:,K1);k_Hz_d(:,:,K1) -(2.0*epsilon0*ka_z - sigma_z*dt)/mu0;k_Hz_d(:,:,nz-K) k_Hz_d(:,:,K1);sigma_z sigma_max*((PML - K - 0.5)/PML)^m;ka_z 1.0 (ka_max - 1.0)*((PML - K - 0.5)/PML)^m;k_Ez_c(:,:,K1) 2.0*epsilon0*ka_z sigma_z*dt;k_Ez_c(:,:,nz-K-1) k_Ez_c(:,:,K1);k_Ez_d(:,:,K1) -(2.0*epsilon0*ka_z - sigma_z*dt);k_Ez_d(:,:,nz-K-1) k_Ez_d(:,:,K1);k_Hx_a(:,:,K1) (2.0*epsilon0*ka_z - sigma_z*dt)/...(2.0*epsilon0*ka_z sigma_z*dt);k_Hx_a(:,:,nz-K-1) k_Hx_a(:,:,K1);k_Hx_b(:,:,K1) 1.0/(2.0*epsilon0*ka_z sigma_z*dt);k_Hx_b(:,:,nz-K-1) k_Hx_b(:,:,K1);k_By_a(:,:,K1) (2.0*epsilon0*ka_z - sigma_z*dt)/...(2.0*epsilon0*ka_z sigma_z*dt);k_By_a(:,:,nz-K-1) k_By_a(:,:,K1);k_By_b(:,:,K1) 2.0*epsilon0*dt/(2.0*epsilon0*ka_z sigma_z*dt);k_By_b(:,:,nz-K-1) k_By_b(:,:,K1);3参考文献文章中一些内容引自网络会注明出处或引用为参考文献难免有未尽之处如有不妥请随时联系删除。4 Matlab代码、文章下载资料获取更多粉丝福利MATLAB|Simulink|Python资源获取