光纤模式分布 matlab,matlab计算单模光纤模式分布(公布源代码及参考文献)

2023-05-16

最近在使用matlab计算单模光纤纤芯模及包层模模场分布时,有一些问题一直悬而未决,多次咨询原作者后虽解决了部分问题,但是余下的问题原作者也不理我了,特发此贴以广交学习光纤方面的同学、老师及科研人员,希望大家互相学习,互相交流,共同探讨,共同进步。

首先,求解单模光纤纤芯模特征方程,光纤为Corning SMF-28,具体参数见以下代码,参考文献为:

% [1]. Optical Fibre Waveguide Analysis_Charles Tsao_Oxford 1992 ----% %

%     Page 315--------------% %

% [2]. Eigenvalue and field equations of three-layered uniaxial fibers

% and their applications to the characteristics of long-period fiber

% gratings with applied axial strain ---------% %

% Zi-jia Zhang,J.Opt.Soc.Am. A/Vol.22,No,11/November 2005 --------%

% -------------------------------------------------------------------------

首先光纤模型采用的是三层模型,相应代码如下ecothf_HE.m:(用过matlab计算光纤模场分布的都应该能看懂下面的代码)

% -------------------------------------------------------------------------

% The Eigenvalue Equation of the Core Hybrid HE or EH mode for

% a general Three-layered Single mode Fiber  ------------% %

% % --------------------------------Reference---------------------------% %

% [1]. Optical Fibre Waveguide Analysis_Charles Tsao_Oxford 1992 ----% %

%     Page 315--------------% %

% [2]. Eigenvalue and field equations of three-layered uniaxial fibers

% and their applications to the characteristics of long-period fiber

% gratings with applied axial strain ---------% %

% Zi-jia Zhang,J.Opt.Soc.Am. A/Vol.22,No,11/November 2005 --------%

% -------------------------------------------------------------------------

function f = ecothf_HE(U1)

global lambda n1 n2 n3 ra1 ra2

ns1 = n1*n1;

ns2 = n2*n2;

ns3 = n3*n3;

s21 = ns2/ns1;

s23 = ns2/ns3;

kw = 2*pi/lambda;             %  kw = k0

kr1 = kw*ra1;

krs1 = kr1*kr1;

kr2 = kw*ra2;

krs2 = kr2*kr2;

bvs12 = krs1*(ns1-ns2);         % V12^2 = k0^2*ra1^2*(n1^2-n2^2)

bvs23 = krs2*(ns2-ns3);

bus1 = U1*U1;                  % U1^2

nes = ns1-bus1/krs1;           % neff^2 = n1^2-U1^2/(k0*ra1)^2

ne = sqrt(nes);

u1 = U1/ra1;

w2 = kw*sqrt(nes-ns2);        % w2 = k0*sqrt(n2^2-neff^2)

w3 = kw*sqrt(nes-ns3);        % w3 = k0*sqrt(neff^2-n3^2)

bu1 = u1*ra1;                 % U1 = u1*ra1

bw2 = w2*ra1;                 % W2 = w2*ra1

bws2 = bw2*bw2;

bw3 = w3*ra2;                 % W3 = w3*ra2

bws3 = bw3*bw3;               % W3^2 = k0^2*ra2^2*(neff^2-n3^2)

u11 = bu1;

w21 = w2*ra1;

w22 = w2*ra2;

w32 = w3*ra2;

ar = ra2/ra1;                 % ar = alpha2

ars = ar*ar;

%%

j011 = besselj(0,u11);         % j011 = besselj(0,u1*a1)

j111 = besselj(1,u11);         % j111 = besselj(1,u1*a1)

j211 = besselj(2,u11);         % j211 = besselj(2,u1*a1)

i021 = besseli(0,w21);         % i021 = besseli(0,w2*a1)

i121 = besseli(1,w21);         % i121 = besseli(1,w2*a1)

i221 = besseli(2,w21);         % i221 = besseli(2,w2*a1)

i022 = besseli(0,w22);         % i022 = besseli(0,w2*a2)

i122 = besseli(1,w22);         % i122 = besseli(1,w2*a2)

i222 = besseli(2,w22);         % i222 = besseli(2,w2*a2)

k021 = besselk(0,w21);         % k021 = besselk(0,w2*a1)

k121 = besselk(1,w21);         % k121 = besselk(1,w2*a1)

k221 = besselk(2,w21);         % k221 = besselk(2,w2*a1)

k022 = besselk(0,w22);         % k022 = besselk(0,w2*a2)

k122 = besselk(1,w22);         % k122 = besselk(1,w2*a2)

k222 = besselk(2,w22);         % k222 = besselk(2,w2*a2)

k032 = besselk(0,w32);         % k032 = besselk(0,w3*a2)

k132 = besselk(1,w32);         % k132 = besselk(1,w3*a2)

k232 = besselk(2,w32);         % k232 = besselk(2,w3*a2)

% besselj'(n,x) = 0.5*(besselj(n-1,x)-besselj(n+1,x))

% besseli'(n,x) = 0.5*(besseli(n-1,x)+besseli(n+1,x))

j11 = 0.5*(j011-j211);         % besselj'(1,u1*a1) = 0.5*(besselj(0,u1*a1)-besselj(2,u1*a1))

i21 = 0.5*(i021+i221);         % besseli'(1,w2*a1) = 0.5*(besseli(0,w2*a1)+besseli(2,w2*a1))

i22 = 0.5*(i022+i222);         % besseli'(1,w2*a2) = 0.5*(besseli(0,w2*a2)+besseli(2,w2*a2))

k21 = -0.5*(k021+k221);         % besselk'(1,w2*a1) = -0.5*(besselk(0,w2*a1)+besselk(2,w2*a1))

k22 = -0.5*(k022+k222);         % besselk'(1,w2*a2) = -0.5*(besselk(0,w2*a2)+besselk(2,w2*a2))

k32 = -0.5*(k032+k232);         % besselk'(1,w3*a2) = -0.5*(besselk(0,w3*a2)+besselk(2,w3*a2))

p1 = i122*k121-i121*k122;

q1 = i122*k21-i21*k122;

r1 = i22*k121-i121*k22;

s1 = i22*k21-i21*k22;

kb = k32/(bw3*k132);           % Kb = besselk'(1,w3*a2)/(W3*besselk(1,w3*a2))

jus = bus1*j111*j111;          % jus = U1^2*(besselj(2,u1*a1))^2

ju = sqrt(jus);

aw = 1/(ar*bw2);               % au = 1/(alpha2*U2)

aws1 = ars*bws2;               % aus1 = alpha2^2*U2^2

qw1 = q1/bw2;

rw1 = r1*aw;

sw1 = s1*aw;

was2 = 4/(pi*pi*aws1*bws2);

jp = j11*p1;                   % jp = besselj'(1,u1*a1)*p1

kp = kb*p1;                    % kp = k3*p2 = K*p1

kq = kb*q1;                    % kq = k3*q2 = K*q1

psq = jp-s21*qw1*ju;

psr = kp+s23*rw1;

pq = jp-qw1*ju;

pr = kp+rw1;

deltas = nes;                      % deltas = delta^2 = (neff)^2

delta = sqrt(deltas);

x1 = n1*bus1*bws2/(delta*bvs12);

x2 = n3*ars*bws2*bws3/(delta*bvs23);

xs1 = x1*x1;

xs2 = x2*x2;

f1 = (p1*p1-2*ns2*x1*x2/(aws1*bws2))*jus;

f2 = xs1*xs2*(j11*(kp-rw1)+ju*(kq-sw1)/bw2);

f3 = (j11*(kp-s23*rw1)+ju*s21*(kq-s23*sw1)/bw2);

f4 = -xs1*psq*pq;

f5 = -xs2*psr*pr*jus;

f= f1+f2*f3+f4+f5;

另外编写了一个ecothp_HE.m文件求解上面的方程,首先绘函数f的图形,找到f=0点的大致区间,再求根,具体代码如下:

%-------------------------------------------------------------------------

% coremode_HE11:eigenvalue of core modes of three layer fiber ,ploting f

%--------------------------------------------------------------------------

clear all

close all

clc

format long

global lambda n1 n2 n3 ra1 ra2 U_HE11

n1 = 1.4681;

n2 = 1.4628;

n3 = 1;

ra1 = 4.15e-6;

ra2 = 62.5e-6;

lambda = 1.55e-6;

ns1 = n1*n1;

ns2 = n2*n2;

ns3 = n3*n3;

kw = 2*pi/lambda;

kws = kw*kw;

kr1 = kw*ra1;

krs1 = kr1*kr1;

bvs1 = krs1*(ns1-ns2);      % v1^2 = k0^2*ra1^2*(n1^2-n2^2)

bv1 = sqrt(bvs1);

N = 1000;             % the total caculation counts

Umax = bv1;           % For the three-layer SMF,the effective index(ne) of

% the core modes should lie between n1 and n2,

% i.e. n1 > ne > n2.So,U1 lies between bv1 and

% bv2,i.e. bv1 > U1 > 0.

dU = Umax/N;

U = 0;                % initial value of U1

for k = 1:N

U = U+dU;         % U

xu(k) = U;

fcoHE = ecothf_HE(U);

fco(k) = fcoHE;

end

figure()

plot(xu,fco)

xlabel('U')

ylabel('F(U)')

title('Core-mode HE11 of three-layer fiber','fontweight','bold')

grid on

figure()

fplot(@ecothf_HE,[0,1])

title('HE11 mode between [0,1]','fontweight','bold')

xlabel('U')

ylabel('F(U)')

grid on;

U_HE11 = fzero(@ecothf_HE,[0.3,0.4])

U = U_HE11;          % The first root of eigenvalue equation corresponds to the HE11 mode

parameters(U)

a = fzero(@ecothf_HE,[1.4902,1.4904])

parameters(a)

复制代码

以上代码中调用了parameters.m文件,这是求光纤模场其他的一些参数,如neff,beta等,很简单的代码,如下:

function F = parameters(U1)

format long

global lambda n1 n2 n3 ra1 ra2

n1 = 1.4681;

n2 = 1.4628;

n3 = 1;

ns1 = n1*n1;

ns2 = n2*n2;

ns3 = n3*n3;

ra1 = 4.15e-6;

ras1 = ra1*ra1;

ra2 = 62.5e-6;

lambda = 1.55e-6;

kw = 2*pi/lambda;

kws = kw*kw;

kr1 = kw*ra1;

kr2 = kw*ra2;

krs1 = kr1*kr1;

krs2 = kr2*kr2;

vs1 = krs1*(ns1-ns2);      % v1^2 = k0^2*ra1^2*(n1^2-n2^2)

vs2 = krs1*(ns2-ns3);      % v2^2 = k0^2*ra1^2*(n2^2-n3^2)

v1 = sqrt(vs1);

v2 = sqrt(vs2);

bu = U1;

bus = bu*bu;

u1 = bu/ra1

neff = sqrt(ns1-bus/krs1)

beta = kw*neff

运行ecothp_HE.m后,

从函数f的图形中可以看出,f=0有两个点,也就是f=0有两个根,Corning SMF单模光纤应该只有一个纤芯模,即f=0应该只有一个根,该选择哪一个根作为纤芯模的参数呢???

然后,假设选择第一个根作为光纤参数,即U_HE11 =  1.561149962979787,再计算纤芯模模场分布归一化系数Eco,参考文献为:(见2楼)

[Last edited by syulzh on 2012-11-22 at 09:00]

以上问题均已解决,若有光纤方面的同仁,请加本人qq交流,共同进步。

[Last edited by syulzh on 2013-9-30 at 19:08]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

光纤模式分布 matlab,matlab计算单模光纤模式分布(公布源代码及参考文献) 的相关文章

随机推荐

  • 使用Java对字符串进行升序排序

    Java对字符串的很多API和功能是JavaWeb能广泛发展的基础 xff0c 下面是一道经典的字符串操作题 xff0c 需要边查JAVASE的API对每个步骤进行操作 题目 xff1a 给一个字符串 xff0c 34 34 12 8 0
  • 2.2 关系代数运算

    2 2 1 关系代数的五个基本操作 考核要求 xff1a 达到 简单应用 层次 知识点 xff1a 五个基本操作的含义和运算应用 1 并 xff1a 两个关系需有相同的关系模式 xff0c 并的对象是元组 xff0c 由两个关系所有元组构成
  • FTP 之 550 permission denied

    做案子時 將WinInet dll封裝 用C 調用 做了四個函數 分別是上傳 下載 刪除 清空文件夾 在開發環境中測試沒有任何問題 但拿到正式環境中卻出現 34 550 c dh MPF dir ABC 34 不存在的錯誤 但實際上的FTP
  • Go——值、指针和引用

    传值还是传引用 在函数和接口章节 xff0c 我们知道Go只有一种参数传递规则 xff0c 那就是值拷贝 xff0c 这种规则包括两种含义 xff1a 函数参数传递时使用的是值拷贝 实例赋值给接口变量 xff0c 接口对实例的引用是值拷贝
  • 读取PC版微信数据库(电脑版微信数据库)内容

    原始网址 https www cnblogs com Charltsing p WeChatPCdb html 联系QQ xff1a 564955427 1 PC版微信的密钥是32位byte xff0c 不同于安卓版 xff08 7位字符串
  • Pytorch-属性统计

    引言 本篇介绍Pytorch属性统计的几种方式 统计属性 求值或位置 normmean sumprodmax min argmin argmaxkthvalue topk norm norm 与 normalize norm指的是范数 xf
  • 高性能异步爬虫

    背景 其实爬虫的本质就是client发请求批量获取server的响应数据 xff0c 如果我们有多个url待爬取 xff0c 只用一个线程且采用串行的方式执行 xff0c 那只能等待爬取一个结束后才能继续下一个 xff0c 效率会非常低 需
  • [operator]deepin 卸载自带搜狗输入法后,输入法消失

    解决这个问题我先是升级了官方的im config套件 xff0c 升级后发现并没有什么用 xff0c 然后使用以下方式 xff0c 做个记录 命令行操作 删除搜狗的残留文件 cd config rm rf SogouPY users rm
  • DPK

    一 概念 dpk文件是Delphi的包文件 xff0c 有dpk文件的组件安装比较方便 一般来说 xff0c 支持不同版本Delphi的组件会有不同的dpk文件 xff0c 一般以7结尾的dpk文件是支持Delphi 7的 如果没有支持De
  • free -g 说明

    free g 说明 xff1a free g 43 buffers cache 说明 xff1a buffer 写缓存 xff0c 表示脏数据写入磁盘之前缓存一段时间 xff0c 可以释放 sync命令可以把buffer强制写入硬盘 cac
  • Google Drive 里的文件下载的方法

    Google Drive 里并不提供创建直接下载链接的选项 xff0c 但是可以通过小小的更改链接形式就能把分享的内容保存到本地 例如 xff0c 一份通过 Google Drive 分享的文件链接形式为 xff1a https drive
  • 关于虚拟机VMware Tools安装中出现的无法自动安装VMCI驱动程序的问题

    问题 解决方法 根据配置文件信息找到所在的虚拟机位置 找到后缀名为vmx的文件 xff0c 右键打开方式中选择使用记事本打开 选择左上角编辑中的查找功能输入图中的查找内容后 xff0c 点击查找下一个 将其原先的TRUE值改为false即可
  • 服务器系统运行内存,服务器系统运行内存使用情况

    服务器系统运行内存使用情况 内容精选 换一换 包年 包月的计费模式也称为包周期计费模式 xff0c 是一种预付费方式 xff0c 按订单的购买周期计费 xff0c 适用于可预估资源使用周期的场景 xff0c 价格比按需计费模式更优惠 包年
  • Ubuntu 18.04 上使用xrdp远程桌面登录蓝屏解决

    所有工具方法来自 http c nergy be blog p 61 13663 免责声明 xff1a 像往常一样 xff0c 使用此风险自负 xff01 本地有台机器装了乌班图18 04版本系统 我们想远程图形化访问它 我第一想法是xrd
  • Go——习惯用法

    1 干净与强迫症 Go在代码干净上有了近乎苛刻的要求 xff0c 主要体现在如下几个方面 xff1a 编译器不能通过未使用的局部变量 xff08 包括未使用的标签 xff09 import 未使用的包同样通不过编译 所有的控制结构 函数和方
  • snprintf()函数使用方法

    众所周知 sprintf不能检查目标字符串的长度 xff0c 可能造成众多安全问题 所以都会推荐使用snprintf 自从snprintf代替了sprintf xff0c 相信大家对snprintf的使用都不会少 xff0c 函数定义如下
  • Openwrt无线中继设置并访问外网

    Openwrt无线中继设置并访问外网 本篇博文参考来自 xff1a http blog csdn net pifangsione article details 13162023 配置目标 主路由器使用AP模式发射Wifi从路由器使用Cli
  • 在 Windows 7 中禁用IPv6协议/IPv6隧道

    How to disable certain Internet Protocol version 6 IPv6 components in Windows Vista Windows 7 and Windows Server 2008 ht
  • python matplotlib绘图大全(散点图、柱状图、饼图、极坐标图、热量图、三维图以及热图)...

    2019 7 14晚 matplotlib七种常见图像输出编程大全 七种图形汇总输出如下 xff1a import numpy as np 导入数据结构nmupy模块 import matplotlib pyplot as plt 导入ma
  • 光纤模式分布 matlab,matlab计算单模光纤模式分布(公布源代码及参考文献)

    最近在使用matlab计算单模光纤纤芯模及包层模模场分布时 xff0c 有一些问题一直悬而未决 xff0c 多次咨询原作者后虽解决了部分问题 xff0c 但是余下的问题原作者也不理我了 xff0c 特发此贴以广交学习光纤方面的同学 老师及科