對照引用 Comparison & Reference:
D. M. Sheen , S. M. Ali , M. D. Abouzahara and J. A. Kong "Application of the three-dimensional Finite Difference Time Domain Method to the analysis of planner Microstrip Circuits", IEEE Trans. On Microwave Theory and Techniques, vol. 38, no. 7, pp.849 -857 1990
這裡我們選擇三維,點擊右邊3D。(記住集總電路Lumped circuit,只有三維的情況有支援)
使用電壓源所以不用設定,選無波源(None)
模擬波長我們選擇15mm-10000mm (300KHz-20GHz)的脈波
邊界條件的話給予完美磁性導體邊界。
勾選 ☑設計結構(Design structure)、因為我們要使用電壓源、電阻等集總電路(Lumped)元件,因此勾選 ☑Lumped 。輸出結構時會輸出Data_Lumped.csv,裡面紀錄著我們所使用的元件、數量、位置等。
這裡會用到介電質基板(Substrate),所以勾選 ☑Epsr,輸出結構時會輸出Data_Epsr_Isotropic.csv
要量測電壓、電流,勾選 ☑E,H,V,I (FFT)。
在【指令輸入區塊】中輸入以下元件、然後按下【執行】
確定無誤後,按下【輸出結構】即可輸出記憶體內描述結構的矩陣,好讓執行檔讀取
這時會產生Data_Materials.csv(判斷哪個地方有結構及是什麼材料)
Data_Lumped.csv (紀錄紀錄著我們所使用的集總元件、數量、位置)
Data_Epsr_Isotropic.csv (紀錄著介電質基板的相對電導率relative permittivity )
ibc=(PMLX+4)*gdx;
jbc=(PMLY+4)*gdy;
kbc=(PMLZ+4)*gdz;
%=================矩形 Brick===========================
xstart=ibc;
xend=ibc+50*gdx;
ystart=jbc;
yend=jbc+46*gdy;
zstart=kbc+1*gdz;
zend=kbc+3*gdz;
nindex=2.2;
sigma=0.;
choice='E_Iso'; %E_Iso,PEC,M_Iso,PMC,E_Model1,M_Model1,EM_Model1
gridtype=-1; %
Iso_Brick(choice,gridtype,nindex,sigma,xstart,xend,ystart,yend,zstart,zend)
%=================矩形 Brick===========================
%------------平面導體 1------------
% istart,iend,jstart,jend,kstart,kend,electronicmaterial
x1=ibc+30*gdx;
x2=ibc+36*gdx;
y1=jbc+26*gdy;
y2=jbc+46*gdy;
z1=kbc+3*gdz;
z2=kbc+3*gdz;
Conductivity=1e10;
wires(1,:)=[x1,x2,y1,y2,z1,z2,Conductivity];
%----------------------------------
%------------平面導體 2------------
% istart,iend,jstart,jend,kstart,kend,electronicmaterial
x1=ibc+0*gdx;
x2=ibc+50*gdx;
y1=jbc+20*gdy;
y2=jbc+26*gdy;
z1=kbc+3*gdz;
z2=kbc+3*gdz;
Conductivity=1e10;
wires(2,:)=[x1,x2,y1,y2,z1,z2,Conductivity];
%----------------------------------
%------------平面導體 3------------
% istart,iend,jstart,jend,kstart,kend,electronicmaterial
x1=ibc+14*gdx;
x2=ibc+20*gdx;
y1=jbc;
y2=jbc+20*gdy;
z1=kbc+3*gdz;
z2=kbc+3*gdz;
Conductivity=1e10;
wires(3,:)=[x1,x2,y1,y2,z1,z2,Conductivity];
%----------------------------------
%------------平面導體 4------------
% istart,iend,jstart,jend,kstart,kend,electronicmaterial
x1=ibc+0*gdx;
x2=ibc+50*gdx;
y1=jbc+0*gdy;
y2=jbc+46*gdy;
z1=kbc+0*gdz;
z2=kbc+0*gdz;
Conductivity=1e10;
wires(4,:)=[x1,x2,y1,y2,z1,z2,Conductivity];
%----------------------------------
%------------電壓源 1 Voltage Source 1------------
% direction 1(+x),2(+y),3(+z),4(-x),5(-y),6(-z)
direction=3;
x1=ibc+(14)*gdx;
x2=ibc+(20)*gdx;
y1=jbc+(2)*gdy;
y2=jbc+(2)*gdy;
z1=kbc+(0)*gdz;
z2=kbc+(3)*gdz;
Resistance=50; %(ohmn) 電壓源內阻抗
Magnitude=1;
type=1; %1=正弦波,2=餘弦波
voltage_sources(1,:)=[x1,x2,y1,y2,z1,z2,direction,Resistance,Magnitude,type];
%----------------------------------
%------------電阻 1 Resistor 1------------
% direction 1(x),2(y),3(z)
direction=3;
x1=ibc+(30)*gdx;
x2=ibc+(36)*gdx;
y1=jbc+(46)*gdy;
y2=jbc+(46)*gdy;
z1=kbc+(0)*gdz;
z2=kbc+(3)*gdz;
Resistance=50; %(ohmn)
resistors(1,:)=[x1,x2,y1,y2,z1,z2,direction,Resistance];
%----------------------------------
%------------探測電流 Probe Current I 1------------
% direction 1(+Ix),2(+Iy),3(+Iz),4(-Ix),5(-Iy),6(-Iz)
direction=2;
x1=ibc+(14)*gdx;
x2=ibc+(20)*gdx;
y1=jbc+(10)*gdy;
y2=jbc+(10)*gdy;
z1=kbc+(3)*gdz;
z2=kbc+(3)*gdz;
probe_currents(1,:)=[x1,x2,y1,y2,z1,z2,direction];
%----------------------------------
%------------探測電流 Probe Current I 2------------
% direction 1(+Ix),2(+Iy),3(+Iz),4(-Ix),5(-Iy),6(-Iz)
direction=5;
x1=ibc+(30)*gdx;
x2=ibc+(36)*gdx;
y1=jbc+(36)*gdy;
y2=jbc+(36)*gdy;
z1=kbc+(3)*gdz;
z2=kbc+(3)*gdz;
probe_currents(2,:)=[x1,x2,y1,y2,z1,z2,direction];
%----------------------------------
%------------探測電壓 Probe Voltage 1------------
% direction 1(+Vx),2(+Vy),3(+Vz),4(-Vx),5(-Vy),6(-Vz)
direction=3;
x1=ibc+(14)*gdx;
x2=ibc+(20)*gdx;
y1=jbc+(10)*gdy;
y2=jbc+(10)*gdy;
z1=kbc+(0)*gdz;
z2=kbc+(3)*gdz;
probe_voltages(1,:)=[x1,x2,y1,y2,z1,z2,direction];
%----------------------------------
%------------探測電壓 Probe Voltage 2------------
% direction 1(+Vx),2(+Vy),3(+Vz),4(-Vx),5(-Vy),6(-Vz)
direction=3;
x1=ibc+(30)*gdx;
x2=ibc+(36)*gdx;
y1=jbc+(36)*gdy;
y2=jbc+(36)*gdy;
z1=kbc+(0)*gdz;
z2=kbc+(3)*gdz;
probe_voltages(2,:)=[x1,x2,y1,y2,z1,z2,direction];
%----------------------------------
集總電路只有 Finite-difference time domain支援
這裡想看電磁場在電路的傳播情形,因此勾選暫態場輸出,輸出從0步開始,20步輸出一次,直到5000步。
這裡說一下,若照原本的設定,可能結構會顯示的不明顯。那麼我們就可以調整顏色參數,好讓結構更容易分辨。(參考網頁:顏色調整)
下圖為平面導體(wire)使用表面顏色、邊緣顏色不使用
下圖為平面導體(wire)使用邊緣顏色、表面顏色不使用。可比較容易看出結構
在分析結果之前,我們在這個範例裡談談暫態分析的一些可選項目
暫態分析
這裡我們有勾選
☑暫態場 (TempFields)
那麼在計算過程滿足設定條件就會依序輸出暫態電磁場的檔案,例如這個範例裡,第20步就輸出第一個檔案
Result_Temp_Field_T_p1_0001.csv (20步,時間為20*dt)
Result_Temp_Field_T_p1_0002.csv (40步,時間為40*dt)
.........
【其他 (Other)=>暫態分析(Temp Analysis)】
開啟後會搜尋此次計算共有幾個暫態檔,如下圖
注意,第一步一次要先選擇檔案,雖然載入後會看到如圖一串清單,但此時只有結構會先載入至記憶體裡,而這一串暫態檔並未被載入!只有選擇完讀取的暫態檔後、各方向電場與磁場的分量才會載入。
例如
1.我們選擇Result_Temp_Field_T_p1_0001.csv (此時各電磁場分量被載入)
2.接著在【場圖 Field pattern】的位置上選擇E (一定要先選擇才能判定是要畫哪個場量,當有成功讀取該場量時,中間圖形區域會出現強度分佈。如這個範例我們選擇|E|,此時顯示暫態電場最大值是189.1997,而此時系統的強度幾乎都為189.1997和0)
3.就可以選擇我們要畫圖的方式了。可選 三切面場3DCut, 切面場SlicePatternxyz, 等面值場Isosurface, 表面場SurfacePattern. 可見場圖網頁。
【前(previous)】,【後(next)】,【自動(Auto)】
若現在的選擇是Result_Temp_Field_T_p1_0002.csv
那麼按下【前(previous)】就會讀取Result_Temp_Field_T_p1_0001.csv
那麼按下【後(next)】就會讀取Result_Temp_Field_T_p1_0003.csv
讀取的檔案會自動依照剛剛所設定的場圖、結構等直接載入一樣的設定,可免於自己在設定一次
而按下【自動(Auto)】這個按鈕
是用來自動產生『動畫檔』的,當我們按下後,就會從該檔案自動往後讀檔、接著執行【指令輸入方塊】、然後輸出該作圖的圖形檔Result_Temp_Field_T_p1_0001.png
....
若現在是選擇Result_Temp_Field_T_p1_0007.csv,那麼就會從這個檔案開始,一直往後到最後一個暫態檔,前面1~6將不會被讀取執行。
舉例
原本選擇檔案後執行會畫出下圖左的3DCut電場|E|圖。然後我們可以在指令輸入方塊中輸入
figure(1);colorbar('hide');axis image;
figure(1);title(strcat('步數(Step)=',num2str(n_step),'; 時間(Time)=',num2str(n_step*dt),' 秒 (s)'));
axis([10 ib-10 10 jb-10 8 12])
就可以再次定義我們想要作圖的方式,按下右方的【執行Run】按鈕後,就會執行【指令輸入方塊】中的指令。結果如下圖右,colorbar隱藏起來了,標題也有輸入的步數和時間、及axis的範圍一樣也照我們所給予的
【自動(Auto)】這個按鈕就能自動 選擇下一個暫態檔 => 執行【指令輸入方塊】=>輸出圖形到Result_Temp_Field_T_p1_xxxx.png檔
等到最後一個暫態檔讀取且輸出圖檔完畢後,會出現圖檔合併成動畫檔的對話方塊如下圖
延遲/秒 (delay/s)
指的是動畫圖每張圖之間的相隔時間
迴圈延遲/秒 (loop delay/s)
指的是動畫圖執行完最後一張圖後,再重新返回第一張圖執行的時間
迴圈次數 (loop number)
指的是要讓這動畫圖執行幾次
如此一來,就能很方便的製作出數值模擬中電磁場隨時間變化的傳播的形式,這也是有限差分時域法的一項優點
暫態動畫示範圖
表面場SurfacePattern (Jet)
表面場SurfacePattern (Hot)
切面場SlicePattern (z 1:1:20)
等面值場Isosurface
這裡推薦使用等面值場Isosurface的方式作圖,速度會快很多
使用【分析結果】
系統會讀取Result_ProbedFields.csv。
因為是輸入脈波、此時會跳出一個輸入快速傅立葉(FFT)轉換的切割數方塊。
(為在15mm-10000mm (300KHz-20GHz) 這個範圍的切割數量。)
#在FDTD計算裡,離散傅立葉轉換(DFT)與快速傅立葉轉換(FFT)所計算出來的頻譜會是一樣的,不同的是執行的效率及使用的記憶體等。可參考
對照引用 Comparison & Reference:
C. M. Furse and O. P. Gandhi "Why the DFT is faster than the FFT for Time-to-Frequency Domain Conversion", IEEE Microwave and Guided Wave Letters, vol. 6, no. 10, pp.320 -328 1995
或
optiFDTD (商用軟體)
Discretized Fourier Transform (DFT) and Fast Fourier Transform (FFT) (FDTD)
在做觀察穿透反射頻譜,或散射吸收頻譜的波印亭積分時,由於對空間積分的範圍通常不小且各電磁場分量都會納入計算,因此我們使用離散傅立葉轉換DFT來增加計算效率及節省記憶體。因此需要事先輸入分割數後進行計算。
而在量測E,H,V,I時,由於只對小範圍內或空間一點,或單個方向作觀測,因此使用FFT。
接著就可以選擇 E,H,V,I(FFT)方塊選擇我們所量測的電壓、電流的時域與頻域及相位關係圖了
另外我們也可以直接在【指令輸入方塊】裡面利用可用的變數畫圖、或讀取想要的資訊,下面使用到的變數如Probed_V_Td請參考網頁:程式可用的變數
figure(1);
subplot(3,1,1);
plot(1*dt:dt:nmax*dt,Probed_V_Td(1,:),'b-','linewidth',1.5);
xlabel('time (s)','fontsize',12);
ylabel('(volt)','fontsize',12);
title(['Probed voltage [1] 時域'],'fontsize',12);
grid on;
subplot(3,1,2);
plot(freqFFT,abs(Probed_V_Fd(1,:)),'b-','linewidth',1.5);
title(['Probed voltage [1] 頻域'],'fontsize',12);
xlabel('frequency (Hz)','fontsize',12);
ylabel('magnitude','fontsize',12);
grid on;
subplot(3,1,3);
plot(freqFFT,angle(Probed_V_Fd(1,:))*180/pi,'r-','linewidth',1.5);
title(['Probed voltage [1] 相位'],'fontsize',12);
xlabel('frequency (Hz)','fontsize',12);
ylabel('phase (degrees)','fontsize',12);
grid on;
figure(2);
subplot(3,1,1);
plot(1*dt:dt:nmax*dt,Probed_V_Td(2,:),'b-','linewidth',1.5);
xlabel('time (s)','fontsize',12);
ylabel('(volt)','fontsize',12);
title(['Probed voltage [2] 時域'],'fontsize',12);
grid on;
subplot(3,1,2);
plot(freqFFT,abs(Probed_V_Fd(2,:)),'b-','linewidth',1.5);
title(['Probed voltage [2] 頻域'],'fontsize',12);
xlabel('frequency (Hz)','fontsize',12);
ylabel('magnitude','fontsize',12);
grid on;
subplot(3,1,3);
plot(freqFFT,angle(Probed_V_Fd(2,:))*180/pi,'r-','linewidth',1.5);
title(['Probed voltage [2] 相位'],'fontsize',12);
xlabel('frequency (Hz)','fontsize',12);
ylabel('phase (degrees)','fontsize',12);
grid on;
一樣能畫出
計算S參數 (Scattering parameters)
Smn=bm/an
a=入射能量 (incident power)
b=反射能量 (reflection power)
an=0.5*(Vn+Zn x In)/sqrt(|real(Zn)|)
bm=0.5*(Vm-Zm x Im)/sqrt(|real(Z*m)|)
在指令輸入方塊裡面輸入以下程式碼即可計算出
R(1)=50;
R(2)=50;
port_a1=0.5*( Probed_V_F(1,:)+R(1).* Probed_I_F(1,:))./sqrt(real(R(1)));
port_a2=0.5*( Probed_V_F(2,:)+R(2).* Probed_I_F(2,:))./sqrt(real(R(2) ));
port_b1=0.5*( Probed_V_F(1,:)-conj(R(1)).* Probed_I_F(1,:))./sqrt(real(R(1)));
port_b2=0.5*( Probed_V_F(2,:)-conj(R(2)).* Probed_I_F(2,:))./sqrt(real(R(2)));
figure(1);
subplot(2,1,1);plot(freqFFT,20*log10(abs(port_b1./port_a1)));title(['s11']);
subplot(2,1,2);plot(freqFFT,angle(port_b1./port_a1)*180/pi);title(['s11']);
figure(2);
subplot(2,1,1);plot(freqFFT,20*log10(abs(port_b2./port_a1)));title(['s21']);
subplot(2,1,2);plot(freqFFT,angle(port_b2./port_a1)*180/pi);title(['s21']);