LLRFLibsPy库中sim_scav_step函数解读
source code: Github
这个函数 sim_scav_step
用于模拟射频(RF)腔体在一个时间步内的响应,包含机械模式的影响。函数的主要任务是通过一个时间步的模拟来更新腔体电压、反射电压和失谐值。以下是对这个函数的详细解读:
参数
half_bw
: 浮点数,腔体的半带宽,单位是弧度/秒。dw_step0
: 浮点数,上一个时间步的失谐值,单位是弧度/秒。detuning0
: 浮点数,外部失谐值(包括调谐器和微音效应),单位是弧度/秒。vf_step
: 复数,本时间步的前向电压,单位是伏特。vb_step
: 复数,本时间步的束流驱动电压,单位是伏特。vc_step0
: 复数,上一个时间步的腔体电压,单位是伏特。Ts
: 浮点数,采样时间,单位是秒。beta
: 浮点数,输入耦合因子,默认值为10000。state_m0
: numpy矩阵(实数),上一个时间步的机械方程状态。Am
,Bm
,Cm
,Dm
: numpy矩阵(实数),机械模式的状态空间矩阵。mech_exe
: 布尔值,是否执行机械模式的一个时间步模拟(用于降采样)。
返回值
status
: 布尔值,表示是否成功。vc_step
: 复数,本时间步的腔体电压。vr_step
: 复数,本时间步的反射电压。dw
: 浮点数,本时间步的失谐值,单位是弧度/秒。state_m
: numpy矩阵(实数),更新后的机械方程状态。
步骤
输入检查:
检查half_bw
、Ts
和beta
是否大于0,如果不满足条件,返回失败状态和4个空值。电路方程计算:
通过欧拉方法离散化腔体的电路方程,计算本时间步的腔体电压vc_step
和反射电压vr_step
。1
2
3vc_step = (1 - Ts * (half_bw - 1j*dw_step0)) * vc_step0 + \
2 * half_bw * Ts * (beta * vf_step / (beta + 1) + vb_step)
vr_step = vc_step - vf_step机械方程更新和失谐计算:
如果mech_exe
为真并且提供了机械模式的状态空间矩阵,更新机械方程的状态state_m
并计算新的失谐值dw
。否则,使用上一个时间步的状态state_m0
和外部失谐值detuning0
。1
2
3
4
5
6
7
8
9
10
11if (state_m0 is None) or \
(Am is None) or \
(Bm is None) or \
(Cm is None) or \
(Dm is None) or \
(not mech_exe):
state_m = state_m0
dw = detuning0
else:
state_m = Am * state_m0 + Bm * (abs(vc_step) * 1.0e-6)**2
dw = Cm * state_m0 + Dm * (abs(vc_step) * 1.0e-6)**2 + detuning0返回结果:
返回模拟的结果,包括状态、腔体电压、反射电压、失谐值和更新后的机械状态。1
return True, vc_step, vr_step, dw, state_m
总结
这个函数主要模拟了RF腔体在一个时间步内的响应过程,包括电路方程和机械方程的更新。通过输入参数和状态空间矩阵,可以计算腔体的电压和失谐值,从而为进一步的分析和控制提供数据支持。