关于光源对实际光谱的归化及source spectrum问题

孙老师,您好。关于光源source我有两个问题:
1.https://kx.lumerical.com/t/topic/10358,该网页中,您提到:

“例如太阳光”这个网页失效了。
然后对于“FDTD归化结果实际光源的功率谱/FDTD光源功率分布”这句话我不太理解。
FDTD归化结果已经对FDTD光源的傅里叶频谱作了归化,我认为FDTD归化结果=FDTD电场对光源频谱的归化,所以我觉得不用除以FDTD光源功率分布。此外,因为FDTD归化结果是包含光源的振幅的,比如输入振幅1,输出电场归化结果为1,输入振幅2,输出电场归化结果为2,所以这个式子应该除以光源振幅。
所以我觉得想要得到实际光谱的输出电场结果,应该是“FDTD归化结果/FDTD光源振幅
实际光源的功率谱”,您看对吗?
2.FDTD的source设置成plane wave时,运行完之后source包含三个结果,即Field,Spectrum,time signal。我想知道,为什么Spectrum的纵坐标既不等于振幅1(即cwnorm情况下),也不等于各频率的傅里叶系数(即nonorm情况下),它的纵坐标代表什么呢?

以及,这个网页:https://kx.lumerical.com/t/field-profile/10780中,

我根据您的方法,先对time monitor中的spectrum作图,然后将这串E(f)乘以source的dt,得到E’(f),之后再将E’(f)除以abs(sourcenorm(f)),发现并没有得到和DFT中的E(频域上恒为1)一样的值,请问这是为什么?

我把你两个帖子合一起了.
最近由于网站变化,早期的连接现在基本不能工作了.

太阳光网页应该是指这个 https://support.lumerical.com/hc/en-us/articles/360034926473-solar-Script-command

这个归化的确是比较困惑.
FDTD归化结果已经对FDTD光源的傅里叶频谱作了归化
这个只是将结果对光源波长的依赖性归化掉了,参见 关于光源的归化问题:频谱和功率


但是即使对E和H归化了, 光源实际注入的功率很小. 你可以提取透射率监视器的E和H, 用Poyinting计算能流密度,再积分计算功率,你会发现功率很小,一般在10^(-12)到10^(-16)瓦之间.如果不对功率归化,你计算的就不是透射率,即出射功率与入射功率之比.

在远场情况下, 功率谱与光学强度谱是一致的. 要得到实际光源下的电场绝对值,应该是
(FDTD归化结果绝对值* 实际光源的强度谱
文字上有点区别,但是就看实际上你说的强度谱和功率谱是怎么得到的.

这是因为时间监视器的谱没有与光源归化,也没有在计算时除以时间步长. 但是现在好像结果有些变化,Sourcenmorm已经除了N: https://support.lumerical.com/hc/en-us/articles/360034925273-sourcenorm-Script-command 与FFT函数不同. 我测试时间监视器的频谱和对时间信号FFT的结果一样.

目前只能说纵坐标仅代表这个脉冲光源下在这个时间监视器位置的相对量,振幅或者强度量.


放大看
image

光源本身的Spectrum

哦,您是指,FDTD归化结果是T(f)image 表达式的分子,FDTD光源功率分布是sourcepower(f),所以“FDTD归化结果*实际光源的功率谱/FDTD光源功率分布”=“T(f) * 实际光源的功率谱”。我的理解对吗?
所以,单单一个FDTD归化结果,即T(f)的分子这一项,指的是出射功率(cwnorm情况下)对吗?
然后,如果FDTD光源功率分布采用sourcepower(f),因为T(f)分子是出射功率频谱对光源频谱作归化的,所以sourcepower(f)也应该是在cwnorm情况下的用法。对吗?

您是怎么提取出time monitor中的时间信号然后作fft变换的呢?我在https://support.lumerical.com/hc/en-us/articles/360034902353-Field-time-monitor-Simulation-object这个网页看到一段代码,但它好像不是用fft变换,而是读取monitor的数据作图的,相当于直接观察monitor。
仿照这个代码我写了这段代码:

t=getdata("monitor","t"); # time monitor name
Ex=getdata("monitor","Ex");
Ey=getdata("monitor","Ey");
Ez=getdata("monitor","Ez");
E=sqrt(pinch(Ex)^2+pinch(Ey)^2+pinch(Ez)^2);
plot(t,E,"time","signal");
o1=2;            # option 1
o2=1;            # option 2
y=fft(E,o1,o2);       # fft
f=fftw(t,o1,o2)/2/pi;       # frequency signal
plot(f,abs(y),"freq (Hz)","amplitude"); 

结果如图:


很明显,图(2,2)是有问题的。
但我觉得这段代码没问题啊(其实我在matlab中用fft(x)函数也出现了这样的图形),请老师予以指正。

“FDTD归化结果” 原理含义不太清楚,当时可能是指E和H的频谱归化,“T(f) * 实际光源的功率谱”就是实际的透射功率谱. 不过要知道在线性光学里一般都不会要实际的透射功率,而是要相对谱,也就是与光源归化的.进个别情况例外,例如显示器件.

如果用Transmission计算,结果总是归一化的! Transmission T(f)的分子这一项总是用E和H归化后的结果.但是用CW norm和Nonorm的E和H不同,如果自己计算Poyinting矢量再积分,就要注意这些.

这个没有前提,比较泛泛.你可以测试
cwnorm;
sourcepower(f);

nonorm;
sourcepower(f);

两者的结果是不同的,就差在E和H是不是归化(前者)和没有归化(后者).
再次说明,如果用Transmission这个脚本计算或者在监视器里面Visualizer中查看T, 它们总是归一化的!

归一化和归化是不一样的,前者最大值为1,后者就不一定.比如在cwnorm情况下,有器件特别是有汇聚效果或者增强效应的话,E2可达到4到数千数万!

我写的脚本文件和仿真文件供你参考 time_spectrum.lsf (1.2 KB) time_spectrum.fsp (410.6 KB)

当然里面为什么是那样我也不清楚,比如从光源里面得到的频谱和监视器得到的频谱差大概两倍.

你可以根据自己需要修改脚本文件.但是
E=sqrt(pinch(Ex)^2+pinch(Ey)^2+pinch(Ez)^2);
y=fft(E,o1,o2); 这个是强度的傅里叶变换,与单个场量傅里叶变换的绝对值平方可不是一个东西.

(2,2)问题是因为你作平方的原因.你测试一下我的脚本. 平方以后就有倍频了,因为时间信号只是实部部分,这个可以理论上说明为什么.

老师,您这句话“Transmission是归一化的”什么意思呢?谁是归一化的,您说T是归一化,还是用T*光源功率得到的结果是归一化的,归一化的最大值1是什么呢?
而增强效应下,E2达到4到数千数万指的是cwnorm用什么方式计算得到这样的E^2呢?

T是归一化 的,归一化的最大值为1 ,代表这个波长的结果全部透射或者反射.只有功率是归一化的,因为线性系统中要能量守恒,不能凭空产生出功率.但是,场确不一样.

增强当然是相对于原入射光的,否则就不能叫增强.用不用cwnorm都应该是增强.当然绝对值不等.另外, 还需要充分理解脉冲信号的振幅
image

脉冲信号的振幅是E0(x,y,z0),但是它并不是频域的振幅.因为频域是通过时间域得到的,即傅里叶变换.你可以用其它手段计算一下其傅里叶变换是多少.假设平面波振幅为1,傅里叶变换就是积分,积分可以换做求和,离散后需要乘时间步长,这个数非常小,因此
cwnorm;

Enorm=getdata(“T”,“Ex”);

nonorm;

Enonorm=getdata(“T”,“Ex”);

?max(Enorm);

?max(Enonorm);

-0.194534
1.41458e-15

这个与教科书中给出的RMS振幅也不同,你可以看看教科书中的定义,那里是指一个周期内的平均.

明白了,谢谢老师。
此外:

经过我的验证,确实是因为平方导致了倍频。
我用E=sqrt(Ex^2+Ey^2+Ez^2)是为了获取E的大小,然后用E来作傅里叶变换,因为当前入射的是x方向线偏光,所以一般方便地用Ex来计算傅里叶变换,直接用getdata(‘monitor’,‘Ex’),但是如果入射一个x、y和z方向都有分量的平面波,我该怎么用这个E矢量来作傅里叶变换呢?
谢谢老师

关键是你想要什么结果?要物理结果还是数学结果?物理结果应该是用单个分量合适。至于用绝对值,是什么物理意义我就不清楚了。如果是为了找谐振,可以将三个分量直接加起来作傅里叶变换,如能带结构计算那样,可以计算谐振,但其幅值不代表什么物理意义。

不过这个已经不是光源光谱归化问题了。

您意思说不用管矢量方向,将三个分量直接相加就行了吗?
嗯,这个是我偶然想到的一个问题。谢谢老师这么用心的解答。

如果只是想找谐振,可以的。

好的,感谢老师,以上我清楚了。然后当我回顾帖子的时候,如下:

我想了一下,我觉得频域的振幅应该看的是abs(E)?按道理在cwnorm情况下应该是等于脉冲信号输入振幅E0=1;如果分实部和虚部看频谱的E,从上述代码中的result,max(Enorm)得到的是实部大小,似乎缺少了虚部信息,以及准确的频域振幅E。
所以我觉得DFM频谱的振幅可以写成abs(E)。您认为对吗?

这个也跟定义有关,振幅是这么定义的?abs(E)在cwnorm情况下应该是等于脉冲信号输入振幅E0=1 (均匀介质中);提取的E本身就是复数,称之为复振幅,含实部和虚部。