關於Time-Domain Monitor 對於頻譜能量的計算方式


#1

擺放一個單一的Time-Domain Monitor 於結構中,完成仿真後可以得到其時間上的E與H變化
而其中有有個Spectrum的選項
依據官網的解說,其spectrum的計算方式約略如下
Exw = czt(pinch(E.Ex),E.t,2pif);
Eyw = czt(pinch(E.Ey),E.t,2pif);
Ezw = czt(pinch(E.Ez),E.t,2pif);
Hxw = czt(pinch(H.Hx),H.t,2pif);
Hyw = czt(pinch(H.Hy),H.t,2pif);
Hzw = czt(pinch(H.Hz),H.t,2pif);

spectrum = rectilineardataset(“spectrum”,E.x,E.y,E.z);
spectrum.addparameter(“lambda”,c/f,“f”,f);
spectrum.addattribute(“E”,Exw,Eyw,Ezw);
spectrum.addattribute(“H”,Hxw,Hyw,Hzw);

而我在計算結構中Quality Factor時,當中會需要計算其結構中最終的共振頻率
以下的程式為計算N個Time-Domain Monitor時(我設定N=1),結構中的頻譜分析
field_w = matrix(length(w),6N);
for(i=1:N) {
mname = “t” + num2str(i);
for(j=1:6) {
if(almostequal(j,1)) { component = “Ex”; }
if(almostequal(j,2)) { component = “Ey”; }
if(almostequal(j,3)) { component = “Ez”; }
if(almostequal(j,4)) { component = “Hx”; }
if(almostequal(j,5)) { component = “Hy”; }
if(almostequal(j,6)) { component = “Hz”; }
if(j > 3.5) { extra_factor = sqrt(mu0/eps0); }
else { extra_factor = 1; }
if(havedata(mname,component)) {
field_w(1:length(w),6
(i-1)+j) = extra_factor* czt(pinch(getdata(mname,component)),t,w);
}
}
}
f_spectrum = sum(abs(field_w)^2,2)/abs(sourcenorm(w/(2*pi)))^2;

理論上這兩種解法,我認為應該要極為接近,但實際上經運算過後的頻譜差異其大
目前有看到某些問題想提問
1.
解法一,似乎只針對monitor上的E與H訊號做頻譜轉換,而沒有像解法二有對於sourcenorm()做正規化的步驟,這表示由解法一得到的頻譜強度,會因為輸入源的頻譜分布導致差異?
2.
解法二上,針對H的xyz三維訊號皆需要乘上一個extra_factor,我的認知上,Time-Domain Monitor所記錄的訊號為E與H,在系統中,對於過單一點的能量是否定義為E^2+extra_factor*H^2?因為比較常看到是定義為E^2而不去理會H^2的,如同解法一,會將E跟H分開,不知道單純以能量的觀點,何者較為接近真實?


#2

是的,直接对时间监视器的信号做傅立叶变换并没有对光源频谱作归一化;而分析组中已经归化了。因此导致两种方法计算的频谱强度不同。[quote=“KuanYu, post:1, topic:2533”]
解法二上,針對H的xyz三維訊號皆需要乘上一個extra_factor,我的認知上,Time-Domain Monitor所記錄的訊號為E與H,在系統中,對於過單一點的能量是否定義為E^2+extra_factor*H^2?因為比較常看到是定義為E^2而不去理會H^2的,如同解法一,會將E跟H分開,不知道單純以能量的觀點,何者較為接近真實?
[/quote]

如果要严格计算电磁能量,应该是同时考虑电场和磁场,或者用能量密度计算,应该是正比于E^2+extra_factor*H^2。