Sunfove
发布于 2025-06-01 / 8 阅读
0
0

FDTD数据导出到Matlab作图

FDTD计算得到的电场分布,但是FDTD通过另存为jpg或者截屏所得到的图片分辨率很低,得到的图片往往不能直接使用。因此,可以通过脚本输入到Maltab,然后再利用Matlab处理图片并输出。

### 1. FDTD原始结果

这里我们选用三角纳米片的电场分布仿真结果进行举例。图1是FDTD直接输出的结果(截图)。

![图1 FDTD结果](https://suncos-01-1254144885.cos.ap-shanghai.myqcloud.com/Hexo/FDTD%E6%95%B0%E6%8D%AE%E5%AF%BC%E5%87%BA%E5%88%B0Matlab%E4%BD%9C%E5%9B%BE1.png)

### 2. FDTD结果导出到Matlab

  FDTD数据导入到Matlab主要参考Lumerical官网的介绍文档[matlabsave](https://kb.lumerical.com/ref_scripts_matlabsave.html)。

  可以通过如下脚本实现电场的读取:

```

E=getresult("z=0","E");

E2=getelectric("z=0");

E1=sqrt(E2);

matlabsave("tri120.mat",E,E1);

```

其中E得到的是一个struct结果:

```

包含以下字段的 struct:

E: [48841×3 double]

Lumerical_dataset: [1×1 struct]

f: 4.2827e+14

lambda: 7.0000e-07

x: [221×1 double]

y: [221×1 double]

z: 0

```

struct中E是一个包含三个x, y, z三个方向的电场分布,是矢量信息,而通过getelectric并开根号得到的是电场的标量数值。值得一说的是,对结构体struct中内容的调用可以采用E.x等命令进行直接读取。

值得注意的是,FDTD和Matlab采用的矩阵规则不同,输出后的结果需要进行非共轭转置,才能够和FDTD的结果进行对应。

x,y, E 等的信息除了利用getdata或getresult获取以外,也可以通过右键单击,将结果输出到脚本,可以得到相同的效果。

![图2 导出x, y 信息](https://suncos-01-1254144885.cos.ap-shanghai.myqcloud.com/Hexo/FDTD%E6%95%B0%E6%8D%AE%E5%AF%BC%E5%87%BA%E5%88%B0Matlab%E4%BD%9C%E5%9B%BE2.png)

### 3. Matlab作图

将电场结果,x,y,z数据导出到matlab中之后,作图可以有多种方案,contour,contourf,pcolor等均可以实现,pcolor更为方便。![图3 pcolor处理结果](https://suncos-01-1254144885.cos.ap-shanghai.myqcloud.com/Hexo/FDTD%E6%95%B0%E6%8D%AE%E5%AF%BC%E5%87%BA%E5%88%B0Matlab%E4%BD%9C%E5%9B%BE3.png)contourf和pcolor的语句如下:

```

% [C,h] = contourf(E,M) %counterf, M越大,越精细

h = pcolor(x,y,E) %pcolor

```

如图3为pcolor输出的结果。作图后,仍需进行如下调整:

```

set(h,'LineStyle','none'); %线型设置为无

colorbar %色标

colormap jet %色标模式选用jet

shading interp % 插值

```

> 参考:[2D image plots](https://kb.lumerical.com/ref_scripts_tutorial_matlab_2d_plotting.html)

   [matlabsave](https://kb.lumerical.com/ref_scripts_matlabsave.html)


评论