VPI中加载S参数

核心思想

  • S参数的本质是线性传输矩阵,传输矩阵的矩阵元通过指定滤波器来描述
  • 本例仅考虑s4p的前向传播矩阵元,即S13S14,S23,S24四个参数,这是因为端口3和4仅由端口1和2的线性叠加而成 ;

用s4p参数描述X_Coupler

X_Coupler作为一个经典的传输模型,具有如下的传输结构

X_Coupler Using s4p

该结构仅考虑前向传输,若考虑反向传输,则需要使用S31S41,S32,S42。双向传输需要考虑全部16个S参数。

s4p参数的导入

在VPI的FilterOpt控件中导入s4p文件需要满足如下格式

s4p Text Style

使用该格式后,需要在控件Measured Filter栏目下的DataFormat中填入Frequency Magnitude Phase。需要额外注意的是单位描述,其中Phase项的单位只有角度,而非弧度。INTERCONNECT中导出的弧度数据需要换算后方可载入

提取INTERCONNECT中S参数的python函数如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
def extract_data_from_file(file_path):
port_info = []
transmission_info = []
data_info = []
data_lines = []

with open(file_path, 'r') as file:
for line in file:
# 处理端口信息行
if line.startswith('["port'):
port_info.append(eval(line))
# 处理传输信息行
elif line.startswith('('):
transmission_info.append(eval(line))
# 处理数据行
elif line.strip() and not line.startswith(('(', '[')):
data_lines.append(line.split())

data_len = []
for i in range(int(len(transmission_info)/2)):
data_len.append(transmission_info[2*i+1])
transmission_info = [j for j in transmission_info if j not in data_len]
data_len = [t[0] for t in data_len]

# 提取数据行中的数值数据
numerical_data = []
for line in data_lines:
row_data = []
for element in line:
try:
# 尝试将元素转换为浮点数
row_data.append(float(element))
except ValueError:
# 如果转换失败,忽略该元素
continue
if row_data:
numerical_data.append(row_data)

# 按照传输信息分类数值数据
classified_data = {}
for i in range(len(transmission_info)):
key = tuple(transmission_info[i])
if key not in classified_data:
classified_data[key] = []

classified_data[key] = numerical_data[sum(data_len[:i]):sum(data_len[:i+1])]

return port_info, transmission_info, classified_data

file_path = '4wav_result-0.05_1.txt' # 替换为实际的文件路径
port_info, transmission_info, classified_data = extract_data_from_file(file_path)

print("端口信息:")
for info in port_info:
print(info)

print("\n传输信息:")
for info in transmission_info:
print(info)

print("\n按照传输信息分类的数值数据:")
for key, value in classified_data.items():
print(key)
for data in value[:3]:
print(data)
print("-" * 50)

后面从classified_data字典中获取数据并将Phase从弧度转化为角度的代码就不再赘述了。

构建基于MZI的WDM器件

将向后两个用s4p参数描述的X_Coupler相连,中间加入一个臂的s2p参数(单个FilterOpt描述),整体打包成一个vtmg:

MZI Using 2 s4p X_Coupler

在外部构建vtmu,引入上述MZI的vtmg:

WDM Using S-Parameter

查看结果,消光比ER在15到30 dBm之间

Result