平板光波导中导模的(注意不是泄露模)传播常数β的matlab计算(验证了是对的)

news2024/11/16 13:40:14

参照的是导波光学_王建(清华大学)的公式(3-1-2、3-1-3),算的参数是这本书的图3-3的。


function []=PropagationConstantsMain()
clear;clc;close all
lambda0=1.55;%真空或空气中的入射波长,单位um
k0=2*pi/lambda0;
m=3;%导模阶数(需要人为指定)
n1=1.62;%芯区的折射率
n2=1.515;%衬底的折射率
n3=1;%包层的折射率
w=5;%芯区厚度,单位um
TEorTM='TE';%选定极化
beta0=linspace(k0*n2+1e-5,k0*n1-1e-5,500);%导模的传播常数范围(根据公式自动得出)

%=================%
Fun=@(x)EigEq(x,k0,n1,n2,n3,m,w,TEorTM);
%=================%


figure
y=arrayfun(Fun,beta0);
plot(beta0,y,'ro','MarkerSize',2)
hold on
plot(beta0,zeros(1,length(beta0)),'k--')
hold off
axis tight
xlabel('\beta')

if strcmp(TEorTM,'TE')==1%TE
 title('TE')
elseif strcmp(TEorTM,'TM')==1%TM
 title('TM')
end

op=fzero(Fun,[beta0(1),beta0(end)]);
disp([TEorTM,'极化下',num2str(m),'阶导模的传播常数为:',num2str(op),'   (注意单位)'])


end

function [oup]=EigEq(beta,k0,n1,n2,n3,m,w,TEorTM)
%beta未知
%m是导模阶数
%w是膜(芯区)k=((k0*n1)^2-beta^2)^(1/2);
P=(beta^2-(k0*n2)^2)^(1/2);
q=(beta^2-(k0*n3)^2)^(1/2);

if strcmp(TEorTM,'TE')==1%TE
    oup=k*w-m*pi-atan(P/k)-atan(q/k);
    
elseif strcmp(TEorTM,'TM')==1%TM
    
    oup=k*w-m*pi-atan(P/k*((n1/n2)^2))-atan(q/k*((n1/n3)^2));
end


end

做了笔记的PDF图书:https://petmask.lanzoub.com/i9x3W13pnore
在这里插入图片描述
在这里插入图片描述

注意波导沿着光波传播方向(z向)是无限长的。

Slab waveguide的色散图的计算(未详细验证正确性)


function []=SlabWaveguideDispersionMain()
clear;clc;close all
c_const=299792458;%m/s
lambda0=linspace(0.9,2,1000);%真空或空气中的入射波长范围(人为指定),单位um
k0=2*pi./lambda0;%行数组
w0=c_const.*k0;%行数组
%m=3;%导模阶数(需要人为指定)
n1=2;%芯区的折射率
n2=1;%衬底的折射率
n3=1;%包层的折射率
w=0.75;%芯区厚度,单位um
TEorTM='TE';%选定极化

%============%
figure%限定了导模的范围
plot(w0,n2.*k0,'k--')
hold on
plot(w0,n1.*k0,'k--')
hold on
%============%


m0sto=zeros(length(k0),1);%列数组
m1sto=zeros(length(k0),1);%列数组
m2sto=zeros(length(k0),1);%列数组
m3sto=zeros(length(k0),1);%列数组
m4sto=zeros(length(k0),1);%列数组
k0=k0.';%列数组
parfor jj=1:length(k0)
    Mark=jj/length(k0)
    
    
    K0=k0(jj,1);
    beta0=linspace(K0*n2+1e-5,K0*n1-1e-5,500).';%导模的传播常数范围(根据公式自动得出)
    
    
%=================%
m=0;
Fun=@(x)EigEq(x,K0,n1,n2,n3,m,w,TEorTM);
if sign(EigEq(beta0(1),K0,n1,n2,n3,m,w,TEorTM))==sign(EigEq(beta0(end),K0,n1,n2,n3,m,w,TEorTM))
    m0sto(jj,1)=0;
    
else
    m0sto(jj,1)=fzero(Fun,[beta0(1),beta0(end)]);
end
%=================%

%=================%
m=1;
Fun=@(x)EigEq(x,K0,n1,n2,n3,m,w,TEorTM);
if sign(EigEq(beta0(1),K0,n1,n2,n3,m,w,TEorTM))==sign(EigEq(beta0(end),K0,n1,n2,n3,m,w,TEorTM))
    m1sto(jj,1)=0;
    
else
    m1sto(jj,1)=fzero(Fun,[beta0(1),beta0(end)]);
end
%=================%


%=================%
m=2;
Fun=@(x)EigEq(x,K0,n1,n2,n3,m,w,TEorTM);
if sign(EigEq(beta0(1),K0,n1,n2,n3,m,w,TEorTM))==sign(EigEq(beta0(end),K0,n1,n2,n3,m,w,TEorTM))
    m2sto(jj,1)=0;
    
else
    m2sto(jj,1)=fzero(Fun,[beta0(1),beta0(end)]);
end
%=================%


%=================%
m=3;
Fun=@(x)EigEq(x,K0,n1,n2,n3,m,w,TEorTM);
if sign(EigEq(beta0(1),K0,n1,n2,n3,m,w,TEorTM))==sign(EigEq(beta0(end),K0,n1,n2,n3,m,w,TEorTM))
    m3sto(jj,1)=0;
    
else
    m3sto(jj,1)=fzero(Fun,[beta0(1),beta0(end)]);
end
%=================%


%=================%
m=4;
Fun=@(x)EigEq(x,K0,n1,n2,n3,m,w,TEorTM);
if sign(EigEq(beta0(1),K0,n1,n2,n3,m,w,TEorTM))==sign(EigEq(beta0(end),K0,n1,n2,n3,m,w,TEorTM))
    m4sto(jj,1)=0;
    
else
    m4sto(jj,1)=fzero(Fun,[beta0(1),beta0(end)]);
end
%=================%





end

M0=[w0.',m0sto];M0(M0(:,2)==0,:)=[];
M1=[w0.',m1sto];M1(M1(:,2)==0,:)=[];
M2=[w0.',m2sto];M2(M2(:,2)==0,:)=[];
M3=[w0.',m3sto];M3(M3(:,2)==0,:)=[];
M4=[w0.',m4sto];M4(M4(:,2)==0,:)=[];

scatter(M0(:,1),M0(:,2),10,'ro');
hold on
scatter(M1(:,1),M1(:,2),10,'ko');
hold on
scatter(M2(:,1),M2(:,2),10,'bo');
hold on
scatter(M3(:,1),M3(:,2),10,'yo');
hold on
scatter(M4(:,1),M4(:,2),10,'kd');
hold off
legend('','','m0','m1','m2','m3','m4')

if strcmp(TEorTM,'TE')==1%TE
 title('TE')
elseif strcmp(TEorTM,'TM')==1%TM
 title('TM')
end
xlabel('\omega_{0}')
ylabel('\beta')
axis tight
%disp([TEorTM,'极化下',num2str(m),'阶导模的传播常数为:',num2str(op),'   (注意单位)'])




%============%
figure%限定了导模的范围
plot(lambda0,n2.*k0,'k--')
hold on
plot(lambda0,n1.*k0,'k--')
hold on
%============%
M0=[lambda0.',m0sto];M0(M0(:,2)==0,:)=[];
M1=[lambda0.',m1sto];M1(M1(:,2)==0,:)=[];
M2=[lambda0.',m2sto];M2(M2(:,2)==0,:)=[];
M3=[lambda0.',m3sto];M3(M3(:,2)==0,:)=[];
M4=[lambda0.',m4sto];M4(M4(:,2)==0,:)=[];

scatter(M0(:,1),M0(:,2),10,'ro');
hold on
scatter(M1(:,1),M1(:,2),10,'ko');
hold on
scatter(M2(:,1),M2(:,2),10,'bo');
hold on
scatter(M3(:,1),M3(:,2),10,'yo');
hold on
scatter(M4(:,1),M4(:,2),10,'kd');
hold off
legend('','','m0','m1','m2','m3','m4')

if strcmp(TEorTM,'TE')==1%TE
 title('TE')
elseif strcmp(TEorTM,'TM')==1%TM
 title('TM')
end
xlabel('\lambda_{0}(um)')
ylabel('\beta')
axis tight




end

function [oup]=EigEq(beta,k0,n1,n2,n3,m,w,TEorTM)
%beta未知
%m是导模阶数
%w是膜(芯区)k=((k0*n1)^2-beta^2)^(1/2);
P=(beta^2-(k0*n2)^2)^(1/2);
q=(beta^2-(k0*n3)^2)^(1/2);

if strcmp(TEorTM,'TE')==1%TE
    oup=k*w-m*pi-atan(P/k)-atan(q/k);
    
elseif strcmp(TEorTM,'TM')==1%TM
    
    oup=k*w-m*pi-atan(P/k*((n1/n2)^2))-atan(q/k*((n1/n3)^2));
end


end

第一个代码加了算有效折射率的


function []=PropagationConstantsMain()
clear;clc;close all
lambda0=9.608016155617717;%真空或空气中的入射波长,单位um
k0=2*pi/lambda0;
m=0;%导模阶数(需要人为指定)
n1=3;%芯区的折射率
n2=1;%衬底的折射率
n3=1;%包层的折射率
w=0.27;%芯区厚度,单位um
TEorTM='TE';%选定极化
beta0=linspace(k0*n2+1e-5,k0*n1-1e-5,500);%导模的传播常数范围(根据公式自动得出)

%=================%
Fun=@(x)EigEq(x,k0,n1,n2,n3,m,w,TEorTM);
%=================%


figure
y=arrayfun(Fun,beta0);
plot(beta0,y,'ro','MarkerSize',2)
hold on
plot(beta0,zeros(1,length(beta0)),'k--')
hold off
axis tight
xlabel('\beta')

if strcmp(TEorTM,'TE')==1%TE
 title('TE')
elseif strcmp(TEorTM,'TM')==1%TM
 title('TM')
end

op=fzero(Fun,[beta0(1),beta0(end)]);
disp([TEorTM,'极化下',num2str(m),'阶导模的传播常数为:',num2str(op),'   (注意单位)'])
disp([TEorTM,'极化下',num2str(m),'阶导模的有效折射率为:',num2str(op/k0)])

end

function [oup]=EigEq(beta,k0,n1,n2,n3,m,w,TEorTM)
%beta未知
%m是导模阶数
%w是膜(芯区)k=((k0*n1)^2-beta^2)^(1/2);
P=(beta^2-(k0*n2)^2)^(1/2);
q=(beta^2-(k0*n3)^2)^(1/2);

if strcmp(TEorTM,'TE')==1%TE
    oup=k*w-m*pi-atan(P/k)-atan(q/k);
    
elseif strcmp(TEorTM,'TM')==1%TM
    
    oup=k*w-m*pi-atan(P/k*((n1/n2)^2))-atan(q/k*((n1/n3)^2));
end


end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/810529.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Godot 4 源码分析 - 动态导入图片文件

用Godot 4尝试编一个电子书软件,初步效果已经出来,并且通过管道通信接口可以获取、设置属性、调用函数,貌似能处理各种事宜了。 其实不然,外因通过内因起作用,如果没把里面搞明白,功能没有开放出来&#x…

Android 13(T) - Media框架(1)- 总览

从事Android Media开发工作三年有余,刚从萌新变成菜鸟,一路上跌跌撞撞学习,看了很多零零碎碎的知识,为了加深对Android Media框架的理解,决定在这里记录下学习过程中想到的一些问题以及一些思考,也希望对初…

国产颗粒更快更稳,价格厚道的光威天策弈系列DDR4内存条值得安排

想要用最少的费用打造出一台性能强悍的电脑,自己动手DIY组装电脑是个更好的选择,特别是今年硬盘和内存方面降价潮此起彼伏,出现了很多神价,高性能内存和硬盘对平台性能提升的效果也是非常显著的。 相比于传统大厂的内存&#xff0…

心法利器[92] | 谈校招:刷题和笔试准备

心法利器 本栏目主要和大家一起讨论近期自己学习的心得和体会,与大家一起成长。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。 2022年新一版的文章合集已经发布,累计已经60w字了,获取方式看这里&…

Linux NUMA架构(非统一内存访问)

NUMA架构 NUMA Architecture| Non Uniform Memory Access Policy/Model | Numa Node Configuration (CPU Affinity) NUMA架构产生的原因 cpu的高速处理功能和内存存储直接的速度会严重影响cpu的性能。传统的计算机单核架构,cpu通过内存总线(内存访问控制器)直接连接到一…

【Linux基础】WSL安装Ubuntu

说明 本文使用的Windows环境是Windows 11 专业版。 WSL现在有二代WSL2,后续都通过WSL2来安装Linux,使用的是Ubuntu发行版,版本是20.04。 安装过程使用了PowerShell,且是管理员权限打开的。 参考适用于 Linux 的 Windows 子系统…

【 Spring AOP学习二】统一功能处理:拦截器异常返回数据格式

目录 一、用户登录权限效验 🍑1、Spring拦截器实现用户统一登录验证(重要) (1)定义一个拦截器 (2)将自定义拦截器加入到系统配置中 🍑2、拦截器实现原理 🍑3、统一…

car tire

汽车轮胎规则参数 小车、轿车轮胎规格参数图解-有驾 半挂车轮胎尺寸多少 货车轮胎尺寸对照表【汽车时代网】

二叉树的最大深度和最小深度(两种方法:递归+迭代)

二叉树的最大深度: class Solution { public:int maxDepth(TreeNode* root) {//DFS 深度优先搜索if(rootNULL) return 0;//深度等于max(左子树的深度,右子树的深度)1;return max(maxDepth(root->left),maxDepth(roo…

QT自定义控件实现并导入

QT自定义控件 介绍 QT Creator自定义控件和designer控件导入 1.安装QT5.7.1 2.将QT编译器目录、lib目录、include目录导入path 使用说明 使用说明按照 1.创建QtDesigner自定义控件工程,打开Qt Creator,创建一个Qt 设计师自定义控件,如下图所示&#xf…

靠着AI自动生成视频撸自媒体收益,赚了包辣条~

友友们,小卷今天给大家分享下如何通过AI自动生成视频,只需要3分钟就能做出一个视频,把视频发到B站、抖音、西瓜上,还能赚包辣条哦~ 文末给大家准备了AI变现的案例及AIGC知识库,记得领取哦! 1.收益 先看看收…

手写SpringBoot模拟核心流程

首先,SpringBoot是基于的Spring,所以我们要依赖Spring,然后我希望我们模拟出来的SpringBoot也支持Spring MVC的那一套功能,所以也要依赖Spring MVC,包括Tomcat等,所以在SpringBoot模块中要添加以下依赖&…

13. Mybatis-Plus

目录 1. MyBatis-Plus 简介 2. 新建项目 3. 添加依赖 4. 配置数据库 5. 编码 1. MyBatis-Plus 简介 通过官网:MyBatis-Plus MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyB…

浅谈 AI 大模型的崛起与未来展望:马斯克的 xAI 与中国产业发展

文章目录 💬话题📋前言🎯AI 大模型的崛起🎯中国 AI 产业的进展与挑战🎯AI 大模型的未来展望🧩补充 📝最后 💬话题 北京时间 7 月 13 日凌晨,马斯克在 Twiiter 上宣布&am…

【MTI 6.S081 Lab】networking

【MTI 6.S081 Lab】networking BackgroudYour Job (hard)实验任务 解决方案 这个实验中,在dns解析时,去请求其dns服务器失败,所以将nettest中的dns服务器改为我自己的。修改的位置大概在nettest.c的235行。 这个实验的设备的具体使用就没去看…

行为型:迭代器模式

定义 迭代器模式提供一种方法按顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。迭代器模式是目的性极强的模式,它主要是用来解决遍历问题。 es6 中的迭代器 JS原生的集合类型数据结构,有Array(数组)和…

【算法基础:动态规划】5.2 线性DP

文章目录 例题列表898. 数字三角形895. 最长上升子序列(n^2两重循环dp)896. 最长上升子序列 II(贪心二分查找)897. 最长公共子序列902. 最短编辑距离899. 编辑距离⭐⭐⭐⭐⭐ 例题列表 898. 数字三角形 每个数字可以从它上面的左…

【雕爷学编程】MicroPython动手做(15)——掌控板之AB按键

知识点:什么是掌控板? 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通信,可作为物联网节点,实现物联网应用。同时掌控板上集成了OLED…

怎么查看gcc的安装路径

2023年7月29日 很简单,通过在命令行输入如下命令就可以了: gcc -print-search-dirs在Windows中 在Linux中 ​​​

Github Copilot在JetBrains软件中登录Github失败的解决方案

背景 我在成功通过了Github Copilot的学生认证之后,在VS Code和PyCharm中安装了Github Copilot插件,但在PyCharm中插件出现了问题,在登录Github时会一直Retrieving Github Device Code,最终登录失败。 我尝试了网上修改DNS&…