LLRFLibsPy库中sim_ncav_pulse函数解读
source code: Github
这段代码定义了一个名为 sim_ncav_pulse
的函数,该函数用于模拟脉冲射频驱动和束流电流对腔体的响应。这个函数特别适用于具有恒定质量因数 (QL) 和失谐频率 (detuning) 的常导腔 (normal conducting cavity)。以下是对这段代码的详细解读:
函数定义
1 | def sim_ncav_pulse(Arfc, Brfc, Crfc, Drfc, vf, Ts, |
函数接受以下参数:
Arfc, Brfc, Crfc, Drfc
:用于射频驱动的连续腔体模型的状态空间矩阵。vf
:腔体前向电压的复数 numpy 数组(校准到腔体探头信号参考平面)。Ts
:采样时间,单位为秒。Abmc, Bbmc, Cbmc, Dbmc
:用于束流驱动的连续腔体模型的状态空间矩阵(可选)。vb
:束流驱动电压的复数 numpy 数组(校准到腔体探头信号参考平面)(可选)。
返回值包括:
status
:布尔值,表示成功 (True) 或失败 (False)。T
:时间波形的 numpy 数组,单位为秒。vc
:腔体电压波形的复数 numpy 数组。vr
:腔体反射电压波形的复数 numpy 数组。
参数检查
1 | # check the input |
检查采样时间 Ts
是否大于 0。如果不满足条件,函数返回 False
和三个 None
。如果提供了 vb
,检查其形状是否与 vf
相同,否则返回 False
和三个 None
。
模拟连续系统的响应
1 | # simulate the response of the continous system |
首先计算时间数组 T
。然后使用 signal.lsim
函数模拟射频驱动的连续系统响应,得到腔体电压 vc_rf
。如果束流驱动模型和 vb
都不为 None
,则模拟束流驱动的连续系统响应,得到腔体电压 vc_bm
,并将其加到总的腔体电压 vc
上。
计算腔体反射电压
1 | # get the cavity reflected |
计算腔体反射电压 vr
,其等于总的腔体电压 vc
减去前向电压 vf
。
返回结果
1 | return True, T, vc, vr |
返回成功状态 True
,时间波形 T
,腔体电压波形 vc
和腔体反射电压波形 vr
。
总结
sim_ncav_pulse
函数的作用是模拟常导腔在脉冲射频驱动和束流电流下的响应。函数首先检查输入参数的有效性,然后模拟连续系统的响应,计算总的腔体电压波形和反射电压波形。最后返回成功状态和计算结果。
为了举例说明如何使用 sim_ncav_pulse
函数,我们需要提供一些示例输入参数,包括连续状态空间模型的矩阵和驱动信号的波形。以下是一个示例,演示如何调用 sim_ncav_pulse
函数并解释其输出。
示例代码
1 | import numpy as np |
示例解释
定义连续腔体模型的状态空间矩阵:
- 这里我们假设了一些值,用于创建射频驱动的状态空间模型。
定义采样时间:
Ts = 1e-3
,表示采样时间为1毫秒。
定义前向电压驱动信号:
vf
是一个包含1000个时间步的零向量。- 在时间步100到200之间,电压为1,形成一个脉冲信号。
定义束流驱动模型的状态空间矩阵和驱动信号:
- 这些矩阵和信号是可选的,同样是假设的值。
vb
在时间步150到250之间有一个幅度为0.5的脉冲。
调用
sim_ncav_pulse
函数:- 使用定义好的参数调用函数,得到模拟的结果。
检查状态并打印结果:
- 如果模拟成功,使用
matplotlib
绘制前向电压、腔体电压和反射电压的波形图。 - 如果模拟失败,打印失败信息。
- 如果模拟成功,使用
输出解释
- 前向电压:显示输入到腔体的脉冲信号。
- 腔体电压:显示腔体对前向电压和束流驱动信号的响应。
- 反射电压:显示腔体的反射电压,其值等于总腔体电压减去前向电压。
通过这种方式,您可以看到脉冲射频驱动和束流电流对腔体的响应,并观察到前向电压、腔体电压和反射电压的时域行为。