LLRFLibsPy库中rf_power_req函数解读

source code: Github

rf_power_req 函数用于计算并绘制给定腔体电压、束流电流和束流相位的稳态前向和反射功率,作为加载 Q 和失谐的函数。束流相位被定义为零时表示在峰值加速。

函数参数:

  • f0 (float):RF 工作频率,单位 Hz。
  • vc0 (float):期望的腔体电压,单位 V。
  • ib0 (float):期望的平均束流电流,单位 A。
  • phib (float):期望的束流相位,单位度。
  • Q0 (float):未加载品质因数(对于超导腔,给一个非常高的值,如 1e10)。
  • roQ_or_RoQ (float):Linac 的 r/Q 或者圆形加速器的 R/Q,单位欧姆(具体见注释)。
  • QL_vec (numpy array):用于功率计算的 QL 向量。
  • detuning_vec (numpy array):在计算功率时使用的失谐。
  • machine (string):linaccircular,用于选择 r/Q 或 R/Q。
  • plot (boolean):启用/禁用绘图。

函数返回值:

  • status (boolean):成功(True)或失败(False)。
  • Pfor (dictionary):以失谐为键,在不同 QL 下的前向功率。
  • Pref (dictionary):以失谐为键,在不同 QL 下的反射功率。

代码解释:

  1. 输入检查

    • 检查 f0vc0ib0Q0roQ_or_RoQ 是否为正值,以及 QL_vec 的长度是否大于等于 1。如果任何一个条件不满足,返回 FalseNoneNone
  2. 初始化失谐向量

    • 如果 detuning_vecNone,则将其设为 [0.0]
  3. 计算必要的参数

    • 根据 machine 类型计算加载电阻 RL_vec。对于 circular 类型,RL_vec = roQ_or_RoQ * QL_vec,对于 linac 类型,RL_vec = 0.5 * roQ_or_RoQ * QL_vec
    • 计算输入耦合系数 beta_vec = Q0 / QL_vec - 1.0
    • 计算半带宽 wh_vec = np.pi * f0 / QL_vec,单位为弧度每秒。
    • 将束流相位从度转换为弧度 phib_rad = phib * np.pi / 180.0
  4. 计算每个失谐的前向和反射功率

    • 对于每个失谐 dw,使用公式计算前向功率 Pfor 和反射功率 Pref
      • 前向功率计算公式:
        $$
        P_{for}[dw] = \frac{(\beta_{vec} + 1)}{\beta_{vec}} \frac{v_{c0}^2}{8 \cdot RL_{vec}} \left( \left(1 + \frac{2 \cdot RL_{vec} \cdot i_{b0} \cdot \cos(phib_{rad})}{v_{c0}}\right)^2 + \left(\frac{dw}{wh_{vec}} + \frac{2 \cdot RL_{vec} \cdot i_{b0} \cdot \sin(phib_{rad})}{v_{c0}}\right)^2 \right)
        $$
      • 反射功率计算公式:
        $$
        P_{ref}[dw] = \frac{(\beta_{vec} + 1)}{\beta_{vec}} \frac{v_{c0}^2}{8 \cdot RL_{vec}} \left( \left(\frac{(\beta_{vec} - 1)}{(\beta_{vec} + 1)} - \frac{2 \cdot RL_{vec} \cdot i_{b0} \cdot \cos(phib_{rad})}{v_{c0}}\right)^2 + \left(\frac{dw}{wh_{vec}} + \frac{2 \cdot RL_{vec} \cdot i_{b0} \cdot \sin(phib_{rad})}{v_{c0}}\right)^2 \right)
        $$
  5. 绘制结果

    • 如果 plot 参数为 True,调用 plot_rf_power_req 函数绘制前向和反射功率的结果。
  6. 返回结果

    • 返回 True、前向功率字典 Pfor 和反射功率字典 Pref

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 设置参数
f0 = 1.3e9 # RF 工作频率,Hz
vc0 = 1.5e6 # 期望的腔体电压,V
ib0 = 0.01 # 期望的平均束流电流,A
phib = 30 # 期望的束流相位,度
Q0 = 1e10 # 未加载品质因数
roQ_or_RoQ = 1036 # r/Q 或 R/Q,Ohm
QL_vec = np.array([1e6, 2e6, 3e6]) # QL 向量
detuning_vec = np.array([-100, 0, 100]) # 失谐向量
machine = 'linac' # 机器类型

# 计算前向和反射功率
status, Pfor, Pref = rf_power_req(f0, vc0, ib0, phib, Q0, roQ_or_RoQ,
QL_vec=QL_vec, detuning_vec=detuning_vec,
machine=machine, plot=True)

if status:
print("前向功率:", Pfor)
print("反射功率:", Pref)
else:
print("计算失败")

example-rf-power-req.png

在这个示例中,我们计算并绘制了特定参数下的前向和反射功率。