LLRFLibsPy库中for_ref_volt2power函数解读

source code:Github

这个函数 for_ref_volt2power 用于将校准后的前向和反射信号(以物理单位表示,单位为伏特)转换为前向和反射功率(单位为瓦特)。它基于LLRF(低电平射频)系统中对腔体的参数和信号的定义。

函数签名

1
2
3
4
5
def for_ref_volt2power(roQ_or_RoQ, QL, 
vf_pcal = None,
vr_pcal = None,
beta = 1e4,
machine = 'linac'):

函数描述

将校准后的前向和反射信号(以物理单位,V)转换为前向和反射功率(W)。

参数

  • roQ_or_RoQ:浮点数,腔体的r/Q(线性加速器)或R/Q(环形加速器),单位为欧姆(Ω)。
  • QL:浮点数,腔体的加载质量因子。
  • vf_pcal:复数的numpy数组,前向波形(校准到物理单位)。
  • vr_pcal:复数的numpy数组,反射波形(校准到物理单位)。
  • beta:浮点数,输入耦合因子(对于常规导电腔体需要;对于超导腔体,可以使用默认值,或者可以指定更准确的结果)。
  • machine:字符串,’linac’(线性加速器)或’circular’(环形加速器),用于选择r/Q或R/Q。

返回值

  • status:布尔值,表示成功(True)或失败(False)。
  • for_power:numpy数组,前向功率波形(如果输入不为None),单位为瓦特。
  • ref_power:numpy数组,反射功率波形(如果输入不为None),单位为瓦特。
  • C:浮点数(复数),校准系数:功率_W = C * 电压_V^2。

函数实现

  1. 输入检查

    • 检查roQ_or_RoQQLbeta是否为正值。如果任何一个参数不符合要求,返回FalseNone
    1
    2
    if (roQ_or_RoQ <= 0.0) or (QL <= 0.0) or (beta <= 0.0):
    return (False,) + (None,)*3
  2. 计算加载电阻

    • 根据机器类型(’linac’或’circular’),计算加载电阻RL
    1
    2
    3
    4
    if machine == 'circular':
    RL = roQ_or_RoQ * QL
    else:
    RL = 0.5 * roQ_or_RoQ * QL
  3. **计算将电压转换为功率的系数C**:

    • 使用给定的公式计算转换系数C
    1
    C = beta / (beta + 1) / (2 * RL)
  4. 如果前向电压和反射电压有效,转换电压为功率

    • 如果vf_pcal不为None,计算前向功率for_power
    • 如果vr_pcal不为None,计算反射功率ref_power
    1
    2
    3
    for_power = ref_power = None
    if vf_pcal is not None: for_power = C * np.abs(vf_pcal)**2
    if vr_pcal is not None: ref_power = C * np.abs(vr_pcal)**2
  5. 返回计算结果

    • 返回True表示计算成功,以及前向功率、反射功率和校准系数C
    1
    return True, for_power, ref_power, C

示例使用

假设我们有以下参数,使用该函数进行功率转换:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
roQ_or_RoQ = 100  # Ohm
QL = 10000
vf_pcal = np.array([1+1j, 2+2j, 3+3j]) # 校准后的前向电压波形
vr_pcal = np.array([0.5+0.5j, 1+1j, 1.5+1.5j]) # 校准后的反射电压波形
beta = 1e4
machine = 'linac'

status, for_power, ref_power, C = for_ref_volt2power(roQ_or_RoQ, QL, vf_pcal, vr_pcal, beta, machine)

if status:
print(f"Forward power: {for_power}")
print(f"Reflected power: {ref_power}")
print(f"Calibration coefficient: {C}")
else:
print("Conversion failed.")

该示例展示了如何使用for_ref_volt2power函数将校准后的前向和反射电压波形转换为前向和反射功率,并输出结果。