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):linac
或circular
,用于选择 r/Q 或 R/Q。plot
(boolean):启用/禁用绘图。
函数返回值:
status
(boolean):成功(True)或失败(False)。Pfor
(dictionary):以失谐为键,在不同 QL 下的前向功率。Pref
(dictionary):以失谐为键,在不同 QL 下的反射功率。
代码解释:
输入检查:
- 检查
f0
、vc0
、ib0
、Q0
、roQ_or_RoQ
是否为正值,以及QL_vec
的长度是否大于等于 1。如果任何一个条件不满足,返回False
、None
和None
。
- 检查
初始化失谐向量:
- 如果
detuning_vec
为None
,则将其设为[0.0]
。
- 如果
计算必要的参数:
- 根据
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
。
- 根据
计算每个失谐的前向和反射功率:
- 对于每个失谐
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)
$$
- 前向功率计算公式:
- 对于每个失谐
绘制结果:
- 如果
plot
参数为True
,调用plot_rf_power_req
函数绘制前向和反射功率的结果。
- 如果
返回结果:
- 返回
True
、前向功率字典Pfor
和反射功率字典Pref
。
- 返回
示例代码:
1 | # 设置参数 |
在这个示例中,我们计算并绘制了特定参数下的前向和反射功率。