基于LLRFLibsPy库的脉冲模式下射频超导腔仿真示例

source code: Github

这段代码模拟了腔体(cavity)和机械模式(mechanical modes)的响应行为。包括RF信号源、I/Q调制器、放大器和腔体在内的各个部分。以下是详细的解读:

主要部分和功能

  1. 通用参数设置

    • Ts:仿真时间步长,1微秒。
    • t_fillt_flat:腔体填充阶段和平顶阶段的时间长度(以样本数为单位)。
  2. RF信号源

    • fsrcAsrc:RF信号源的频率偏移和振幅。
    • sim_rfsrc 函数:模拟RF信号源的行为,通过相位累积生成复数信号。
  3. I/Q调制器

    • pulsed:指示是否为脉冲模式。
    • base_pulbase_cw:分别是脉冲和连续波模式下的基带信号。
    • sim_iqmod 函数:模拟I/Q调制器,基于输入信号和模式生成输出信号。
  4. 放大器

    • gain_dB:放大器增益,以dB为单位。
    • sim_amp 函数:根据输入信号和增益生成放大后的信号。
  5. 腔体模型

    • mech_modes:机械模式参数,包括频率、品质因数和耦合系数。
    • 腔体相关参数(f0betaroQQLRLwhibdw0)。
    • beam_pulbeam_cw:分别是脉冲和连续波模式下的束流驱动信号。
    • cav_ss_mechss_discrete:分别生成机械模式的状态空间矩阵和离散化后的状态空间矩阵。
    • sim_cav 函数:模拟腔体和机械模式的行为,包括电压和失谐的计算。
  6. RF系统仿真器

    • sim_lenpul_len:仿真长度和脉冲长度(以样本数为单位)。
    • 初始化信号数组:sig_srcsig_iqmsig_ampsig_vcsig_vrsig_dw
    • 仿真循环:
      • 生成RF信号源。
      • 执行I/Q调制。
      • 放大信号。
      • 添加微音效应。
      • 模拟腔体的行为。
      • 收集仿真结果。
  7. 绘制结果

    • 绘制信号的实部和虚部。
    • 绘制腔体电压幅值、相位和失谐。

核心函数说明

  1. **sim_rfsrc**:

    1
    2
    3
    def sim_rfsrc(fsrc, Asrc, pha_src, Ts):
    pha = pha_src + 2.0 * np.pi * fsrc * Ts
    return Asrc*np.exp(1j*pha), pha

    模拟RF信号源,通过相位累积生成复数信号。

  2. **sim_iqmod**:

    1
    2
    3
    4
    5
    6
    def sim_iqmod(sig_in, pulsed=True, base_pul=None, base_cw=0, buf_id=0):
    if pulsed:
    sig_out = sig_in * base_pul[buf_id if buf_id < len(base_pul) else -1]
    else:
    sig_out = sig_in * base_cw
    return sig_out

    模拟I/Q调制器,基于输入信号和模式生成输出信号。

  3. **sim_amp**:

    1
    2
    def sim_amp(sig_in, gain_dB):
    return sig_in * 10.0**(gain_dB / 20.0)

    根据输入信号和增益生成放大后的信号。

  4. **sim_cav**:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    def sim_cav(half_bw, RL, dw_step0, detuning0, vf_step, state_vc, Ts, beta=1e4,
    state_m0=0, Am=None, Bm=None, Cm=None, Dm=None,
    pulsed=True, beam_pul=None, beam_cw=0, buf_id=0):
    if pulsed:
    vb = -RL * beam_pul[buf_id if buf_id < len(beam_pul) else -1]
    else:
    vb = beam_cw
    status, vc, vr, dw, state_m = sim_scav_step(half_bw,
    dw_step0,
    detuning0,
    vf_step,
    vb,
    state_vc,
    Ts,
    beta=beta,
    state_m0=state_m0,
    Am=Am,
    Bm=Bm,
    Cm=Cm,
    Dm=Dm,
    mech_exe=True)
    state_vc = vc
    return vc, vr, dw, state_vc, state_m

    模拟腔体和机械模式的行为,包括电压和失谐的计算。

代码解读

通用参数

1
2
3
Ts = 1e-6  # 仿真时间步长,1微秒
t_fill = 510 # 腔体填充阶段时间长度,样本数
t_flat = 1300 # 平顶阶段时间长度,样本数

RF信号源

1
2
3
fsrc = -460  # 频率偏移
Asrc = 1 # 振幅
pha_src = 0 # 初始相位

sim_rfsrc函数生成复数信号:

1
2
3
def sim_rfsrc(fsrc, Asrc, pha_src, Ts):
pha = pha_src + 2.0 * np.pi * fsrc * Ts
return Asrc*np.exp(1j*pha), pha

I/Q调制器

1
2
3
4
5
6
pulsed = False  # 脉冲模式
buf_size = 2048 * 8 # 缓冲区大小
base_pul = np.zeros(buf_size, dtype=complex) # 脉冲模式基带信号
base_cw = 1 # 连续波基带信号
base_pul[:t_flat] = 1.0 # 设置脉冲模式下的基带信号
buf_id = 0 # 缓冲区索引

sim_iqmod函数模拟I/Q调制器:

1
2
3
4
5
6
def sim_iqmod(sig_in, pulsed=True, base_pul=None, base_cw=0, buf_id=0):
if pulsed:
sig_out = sig_in * base_pul[buf_id if buf_id < len(base_pul) else -1]
else:
sig_out = sig_in * base_cw
return sig_out

放大器

1
gain_dB = 20 * np.log10(12e6)  # 放大器增益

sim_amp函数根据输入信号和增益生成放大后的信号:

1
2
def sim_amp(sig_in, gain_dB):
return sig_in * 10.0**(gain_dB / 20.0)

腔体模型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mech_modes = {'f': [280, 341, 460, 487, 618],
'Q': [40, 20, 50, 80, 100],
'K': [2, 0.8, 2, 0.6, 0.2]}

f0 = 1.3e9 # RF工作频率
beta = 1e4 # 输入耦合系数
roQ = 1036 # 腔体r/Q
QL = 3e6 # 加载品质因数
RL = 0.5 * roQ * QL # 加载电阻
wh = np.pi * f0 / QL # 半带宽
ib = 0.008 # 平均束流电流
dw0 = 2 * np.pi * 0 # 初始失谐
beam_pul = np.zeros(buf_size, dtype=complex) # 脉冲束流驱动信号
beam_cw = 0 # 连续波束流驱动信号
beam_pul[t_fill:t_flat] = ib # 设置脉冲模式下的束流驱动信号

生成机械模式状态空间矩阵和离散化矩阵:

1
2
status, Am, Bm, Cm, Dm = cav_ss_mech(mech_modes)
status, Ad, Bd, Cd, Dd, _ = ss_discrete

example-sim-cavity-mech2-1.png

example-sim-cavity-mech2-2.png

这段代码通过逐步模拟RF信号源、I/Q调制器、放大器和腔体的行为,来研究腔体在不同机械模式下的响应情况。最终,代码绘制了模拟过程中获得的信号和参数,以便分析腔体的电压幅值、相位和失谐等特性。