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矩阵(实数),更新后的机械方程状态。

步骤

  1. 输入检查:
    检查 half_bwTsbeta 是否大于0,如果不满足条件,返回失败状态和4个空值。

  2. 电路方程计算:
    通过欧拉方法离散化腔体的电路方程,计算本时间步的腔体电压 vc_step 和反射电压 vr_step

    1
    2
    3
    vc_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
  3. 机械方程更新和失谐计算:
    如果 mech_exe 为真并且提供了机械模式的状态空间矩阵,更新机械方程的状态 state_m 并计算新的失谐值 dw。否则,使用上一个时间步的状态 state_m0 和外部失谐值 detuning0

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if (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
  4. 返回结果:
    返回模拟的结果,包括状态、腔体电压、反射电压、失谐值和更新后的机械状态。

    1
    return True, vc_step, vr_step, dw, state_m

总结

这个函数主要模拟了RF腔体在一个时间步内的响应过程,包括电路方程和机械方程的更新。通过输入参数和状态空间矩阵,可以计算腔体的电压和失谐值,从而为进一步的分析和控制提供数据支持。