LLRFLibsPy库中sim_ncav_step_simple函数解读

source code: Github

这个函数 sim_ncav_step_simple 用于模拟腔体在一个时间步长内的响应,使用简单的离散腔体方程(欧拉方法进行离散化)。下面是对这个函数的详细解读。

函数签名

1
def sim_ncav_step_simple(half_bw, detuning, vf_step, vb_step, vc_step0, Ts, beta = 1e4):

函数描述

模拟腔体在一个时间步长内对前向电压和束流驱动电压的响应。该函数适用于具有恒定质量因数(QL)和失谐的常规导电腔体,采用欧拉方法进行离散化。

参数

  • half_bw:浮点数,腔体的半带宽(常量),单位为弧度/秒。
  • detuning:浮点数,腔体的失谐(常量),单位为弧度/秒。
  • vf_step:复数,本时间步的前向电压。
  • vb_step:复数,本时间步的束流驱动电压。
  • vc_step0:复数,上一个时间步的腔体电压。
  • Ts:浮点数,采样时间,单位为秒。
  • beta:浮点数,输入耦合因子(常规导电腔体需要;对于超导腔体,可以使用默认值,或者可以指定更准确的结果)。

返回值

  • status:布尔值,表示成功(True)或失败(False)。
  • vc_step:复数,本时间步的腔体电压。
  • vr_step:复数,本时间步的腔体反射电压。

函数实现

  1. 输入检查

    • 检查 half_bwTsbeta 是否为正值。如果任何一个参数不符合要求,返回 FalseNone
    1
    2
    if (half_bw <= 0.0) or (Ts <= 0.0) or (beta <= 0.0):
    return False, None, None
  2. 进行一步计算

    • 使用欧拉方法离散化腔体方程,计算本时间步的腔体电压 vc_step 和反射电压 vr_step
    1
    2
    3
    vc_step = (1 - Ts * (half_bw - 1j*detuning)) * vc_step0 + \
    2 * half_bw * Ts * (beta * vf_step / (beta + 1) + vb_step)
    vr_step = vc_step - vf_step
    • 公式解释:
      • vc_step 通过考虑上一个时间步的腔体电压 vc_step0、当前时间步的前向电压 vf_step 和束流驱动电压 vb_step 计算得到。
      • vr_step 是当前时间步的腔体电压 vc_step 减去前向电压 vf_step
  3. 返回计算结果

    • 返回 True 表示计算成功,以及本时间步的腔体电压 vc_step 和反射电压 vr_step
    1
    return True, vc_step, vr_step

示例使用

假设我们有以下参数,使用该函数进行模拟:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
half_bw = 2 * np.pi * 100  # 100 Hz 半带宽
detuning = 2 * np.pi * 10 # 10 Hz 失谐
vf_step = 1 + 0j # 前向电压
vb_step = 0 + 0j # 束流驱动电压
vc_step0 = 0 + 0j # 上一个时间步的腔体电压
Ts = 1e-3 # 1 毫秒采样时间
beta = 1e4 # 输入耦合因子

status, vc_step, vr_step = sim_ncav_step_simple(half_bw, detuning, vf_step, vb_step, vc_step0, Ts, beta)

if status:
print(f"Cavity voltage: {vc_step}")
print(f"Reflected voltage: {vr_step}")
else:
print("Simulation failed.")

该示例展示了如何使用 sim_ncav_step_simple 函数计算腔体在一个时间步长内的电压响应,并输出结果。