文章目录
-
- 初始化
- 模式估计
- 自定义光纤
初始化
pyMMF中提供了阶跃(Step-Index, SI)光纤和抛物线渐变折射率(Gradient-Index Fiber, GRIN)光纤的模型,前者的纤芯折射率为常数,后者则不然,纤芯折射率随着径向发生变化
n
(
r
)
=
n
1
1
−
(
r
a
)
2
n(r)=n_1\\sqrt{1-(\\frac{r}{a})^2}
n(r)=n11−(ar)2
。
【IndexProfile】是用于表示光线折射率剖面的类,其初始化函数分别是网格划分的格点数npoints和仿真尺寸areaSize。在确定剖面的仿真信息之后,即可初始化光纤,两种不同折射率模型对应的初始化方法为
- 【initParabolicGRIN】GRIN光纤初始化方法
- 【initStepIndex】SI光纤初始化方法
二者输入参数均包含纤芯折射率n1,半径a和数值孔径NA。在GRIN光纤中,还有一个参数alpha,表示折射率变化的抛物线参数,默认2.0。初始化后,这两种类型的光纤剖面折射率分布差异如下

import pyMMF
import matplotlib.pyplot as plt
grin = pyMMF.IndexProfile(256, 30)
grin.initParabolicGRIN(1.45, 7, 0.2)
si = pyMMF.IndexProfile(256, 30)
si.initStepIndex(1.45, 7, 0.2)
plt.subplot(121)
plt.title("GRIN")
plt.imshow(grin.n.reshape(256, 256), cmap='jet', extent=[–15, 15, –15, 15])
plt.subplot(122)
plt.title("SI")
plt.imshow(si.n.reshape(256, 256), cmap='jet', extent=[–15, 15, –15, 15])
plt.show()
【n】即为IndexProfile中的折射率分布情况,但默认以一维数组的形式存储。
模式估计
在GRIN和SI光纤中,由于折射率分布不同,其能容纳的模式数也不相同。记归一化频率
V
=
2
π
a
λ
NA
V=\\frac{2\\pi a}{\\lambda}\\operatorname{NA}
V=λ2πaNA,则SI和GRIN光纤中的模式估算公式分别为
V
2
2
\\frac{V^2}{2}
2V2和
V
2
4
\\frac{V^2}{4}
4V2。
pyMMF中提供了这两种光纤的模式估计函数
- 【estimateNumModesGRIN】
- 【estimateNumModesSI】
二者输入参数均为输入参数为波长wl、半径a、数值孔径NA以及偏振标志pola。测试结果如下
pyMMF.estimateNumModesGRIN(0.633, 7, 0.2)
# 25
pyMMF.estimateNumModesSI(0.633, 7, 0.2)
# 49
自定义光纤
【initFromRadialFunction】可通过自定义函数来初始化轴对称折射率剖面,其输入参数是一个以
r
r
r为自变量的函数,例如
- SI光纤等效于 lambda r : n1 if r<=a else n2
- GRIN光纤等效于 lambda r : n2 if r>a else n1 * np.sqrt(1 – (NA / n1 * r / a)**2)
G.657光纤是一种抗弯曲单模光纤,通过下陷包层来增强模场约束,其具体的折射率结构曾W形态
- 纤芯:
n
1
n_1
n1 - 内包层:
n
3
<
n
2
n_3<n_2
n3<n2 - 外包层:
n
2
n_2
n2
其折射率分布为

def n_W_profile(r, n1=1.468, n2=1.444, n3=1.430, a1=4.5, a2=9.0):
if r <= a1:
return n1 # 纤芯
elif r <= a2:
return n3 # 下陷包层
else:
return n2 # 外包层
profile = pyMMF.IndexProfile(npoints=256, areaSize=40)
profile.initFromRadialFunction(n_W_profile)
plt.imshow(profile.n.reshape(256,256), cmap='jet', extent=[–20,20,–20,20])
plt.colorbar(label='n')
plt.show()
