Introduce of LLRFLibsPy

LLRFLibsPy介绍

LLRFLibsPy是一个用 Python 实现的 LLRF 领域算法库。它的主要目的是实现常见的 LLRF 算法,有利于开发 LLRF 高级应用程序、自动化和测试软件。

源代码

该代码来自Github,目录如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
LLRFLibsPy
├── doc
│   ├── LLRFLibsPy_document.pdf
│   └── LLRFLibsPy_intro.pdf
├── docs
│   ├── algorithms.html
│   ├── architecture.html
│   ├── generated
│   │   ├── rf_calib.html
│   │   ├── rf_control.html
│   │   ├── rf_det_act.html
│   │   ├── rf_fit.html
│   │   ├── rf_misc.html
│   │   ├── rf_noise.html
│   │   ├── rf_plot.html
│   │   ├── rf_sim.html
│   │   └── rf_sysid.html
│   ├── genindex.html
│   ├── index.html
│   ├── introduction.html
│   ├── module_index.html
│   ├── _modules
│   │   ├── index.html
│   │   ├── rf_calib.html
│   │   ├── rf_control.html
│   │   ├── rf_det_act.html
│   │   ├── rf_fit.html
│   │   ├── rf_misc.html
│   │   ├── rf_noise.html
│   │   ├── rf_plot.html
│   │   ├── rf_sim.html
│   │   └── rf_sysid.html
│   ├── objects.inv
│   ├── py-modindex.html
│   ├── search.html
│   ├── searchindex.js
│   └── _static
│   ├── basic.css
│   ├── bode_plot.png
│   ├── custom_aaqiao.css
│   ├── doctools.js
│   ├── documentation_options.js
│   ├── file.png
│   ├── language_data.js
│   ├── lib_arc.png
│   ├── llrf_logical_arc.png
│   ├── minus.png
│   ├── module_diagram.png
│   ├── noniq_demod.png
│   ├── plus.png
│   ├── psi_logo.png
│   ├── pygments.css
│   ├── rf_gun.png
│   ├── scripts
│   │   ├── bootstrap.js
│   │   ├── bootstrap.js.LICENSE.txt
│   │   ├── bootstrap.js.map
│   │   ├── pydata-sphinx-theme.js
│   │   └── pydata-sphinx-theme.js.map
│   ├── searchtools.js
│   ├── sphinx_highlight.js
│   ├── styles
│   │   ├── bootstrap.css
│   │   ├── bootstrap.css.map
│   │   ├── pydata-sphinx-theme.css
│   │   ├── pydata-sphinx-theme.css.map
│   │   └── theme.css
│   ├── vendor
│   │   └── fontawesome
│   │   └── 6.1.2
│   │   ├── css
│   │   │   └── all.min.css
│   │   ├── js
│   │   │   ├── all.min.js
│   │   │   └── all.min.js.LICENSE.txt
│   │   ├── LICENSE.txt
│   │   └── webfonts
│   │   ├── fa-brands-400.ttf
│   │   ├── fa-brands-400.woff2
│   │   ├── fa-regular-400.ttf
│   │   ├── fa-regular-400.woff2
│   │   ├── fa-solid-900.ttf
│   │   ├── fa-solid-900.woff2
│   │   ├── fa-v4compatibility.ttf
│   │   └── fa-v4compatibility.woff2
│   ├── vprobe_stability.png
│   └── webpack-macros.html
├── example
│   ├── data_adcraw_wfs.mat
│   ├── data_cavid_beam.mat
│   ├── data_dac_offs.mat
│   ├── data_directivity.mat
│   ├── data_Gun_wfs.mat
│   ├── data_iqm_imbal.mat
│   ├── data_ref_sample.mat
│   ├── example_aff_ilc.py
│   ├── example_aff_timerev_lpf.py
│   ├── example_calib_dac_offs.py
│   ├── example_calib_for_ref_nc_cavity.py
│   ├── example_calib_for_ref_sc_cavity.py
│   ├── example_calib_iqm.py
│   ├── example_calib_sys_gain_phase.py
│   ├── example_calib_virtual_probe.py
│   ├── example_demod.py
│   ├── example_feedback_adrc.py
│   ├── example_feedback_analysis.py
│   ├── example_feedback_basic.py
│   ├── example_fit_funcs.py
│   ├── example_noise_psd.py
│   ├── example_noise_time_series.py
│   ├── example_power_req2.py
│   ├── example_power_req.py
│   ├── example_power_to_vacc.py
│   ├── example_rand_sine.py
│   ├── example_resp_matrix_inv.py
│   ├── example_sim_cavity_basic_passband.py
│   ├── example_sim_cavity_basic.py
│   ├── example_sim_cavity_mech2.py
│   ├── example_sim_cavity_mech.py
│   ├── example_sp_ff.py
│   ├── example_sysid_caveq.py
│   ├── example_sysid_prbs_etfe.py
│   ├── __pycache__
│   │   └── set_path.cpython-311.pyc
│   └── set_path.py
├── LICENSE
├── Makefile
├── README.md
└── src
├── __pycache__
│   ├── rf_calib.cpython-311.pyc
│   ├── rf_det_act.cpython-311.pyc
│   ├── rf_fit.cpython-311.pyc
│   ├── rf_misc.cpython-311.pyc
│   ├── rf_noise.cpython-311.pyc
│   └── rf_sysid.cpython-311.pyc
├── rf_calib.py
├── rf_control.py
├── rf_det_act.py
├── rf_fit.py
├── rf_misc.py
├── rf_noise.py
├── rf_plot.py
├── rf_sim.py
└── rf_sysid.py

18 directories, 127 files

LLRF固件/软件库

数字 LLRF 系统经过多年的发展,其架构现已相当成熟,模式也大体相似。尽管将 RF 场稳定性推向极致并应用现代控制算法和机器学习等先进算法仍在指导研发,但 LLRF 硬件、固件和软件的标准化已经开始。DESY 正在提前标准化基于 MicroTCA 平台的 LLRF 硬件。DESY 和 PSI 已经开发了一些基本的固件/软件库:

  1. PSI 固件/软件库

    • psi_fix:标准信号处理组件的 VHDL(用于合成)和 Python(用于快速模拟)中的 bittrue 实现。
    • psi_common:包含通用 VHDL 代码,该代码不是针对特定应用的,可以轻松重复使用。
    • psi_tb:包含对测试台有用的 VHDL 代码。
    • PsiSim:TCL 框架允许使用 modelsim、VHDL 和 Vivado-Simulator 轻松创建回归测试。
    • LLRFLibs:用C语言实现的LLRF算法库。
    • LLRFLibsPy:用Python实现的LLRF算法库。
    • ooEpics:用于 EPICS 模块开发的 C++ 框架。
    • ooPye:用于 EPICS 软 IOC 开发的 Python 框架。
  2. DESY 固件/软件库

    • FWK:固件框架库。
    • ChimeraTK:一个软件框架库

这些库用于构建固件/软件的架构、框架和基础架构,或用于实现与 LLRF 和加速器控制相关的域算法。为了了解开发这些库的动机,首先看看这些库在 LLRF 系统中的作用和位置。

LLRF系统的功能框架

FPGA 和 CPU(LLRF 站可能有多个 FPGA 和 CPU)是承载固件和软件实体的数字处理单元。

LLRF 固件和软件以及库的一般功能架构

LLRF固件库

LLRF固件库分为:

  1. 固件框架库:此类库有助于构建固件项目结构、模拟固件代码并自动执行固件合成。当然,用于访问广泛使用的硬件组件(例如流行的 ADC 芯片、DAC 芯片、PCI express 驱动程序)的平台支持模块也可以编译到库中。
  2. 基本固件库:此库收集了可用于任何固件实现的固件构建组件(例如,FIFO,过滤器……)。
  3. RF 控制固件库:该库旨在实现通用的高级可配置 LLRF 控制模块。这些模块可以组装和配置,以快速获得有效的 LLRF 控制器。

RF 控制固件库:该库旨在实现通用的高级可配置 LLRF 控制模块。这些模块可以组装和配置,以快速获得有效的 LLRF 控制器。

LLRF软件库

软件架构为:

  • 构建了分层架构,底层是“OS & Drivers”层,是针对特定平台的,而“Platform Control Interface”是平台与应用软件分离的封装,作用类似于固件中的“Application Interface”。

  • “低级应用程序”通常是软实时的,用于快速处理。在大多数 LLRF 系统中,这一层很薄,因为大多数实时功能都可以在 FPGA 固件中实现,因此这一层很小,仅实现必要的基于软件的实时功能,如数据流、快速(复杂)诊断/保护和脉冲到脉冲反馈(用于脉冲机器)。

  • “高级应用程序”是执行 LLRF 系统操作自动化的非实时功能。这部分需要大量的 LLRF 领域知识(例如腔模型、控制理论、信号处理理论等),因为高级应用程序需要将 FPGA 的原始结果解释为具有物理意义的值。

将软件库细化可以分为:

  1. 软件框架库:该库定义了通用的软件架构并实现了多线程、硬件访问和网络通信的基础架构。

  2. **LLRF 算法库 (C/C++)**:该库实现了 RF 控制域算法。如果用 C/C++ 语言编写,该库可用于“低级应用程序”以实现快速处理。

  3. LLRF 算法库(Python):该库适用于实现“高级应用程序”,包括 RF 测试和调节自动化软件。Python 是此类应用程序的绝佳语言。除了与 C/C++ 库相同的算法外,Python 库还可以实现噪声分析、反馈控制器设计、分析和仿真的功能。有了这些功能,我们可以进一步减少对 Matlab 进行控制器设计的依赖。