恢复 5G 主数据块
本例演示如何使用 5G 库同步、解调和解码 gNodeB 信号。该示例对 MIB 和第一个系统信息块 (SIB1) 进行解码。
解码 MIB 和 SIB1 需要一个能够解调和解码大多数下行链路信道和信号的综合接收器。
让我们从连接库、声明辅助函数和解决这一问题的方法开始。
In [ ]:
Pkg.add(["CSV"])
In [ ]:
# Подключение библиотек
using DataFrames, CSV, Plots
include("Fun_CSV.jl");
# Подключение вспомогательной функции запуска модели
function run_model( name_model, path_to_folder )
Path = path_to_folder * "/" * name_model * ".engee"
if name_model in [m.name for m in engee.get_all_models()] # Проверка условия загрузки модели в ядро
model = engee.open( name_model ) # Открыть модель
model_output = engee.run( model, verbose=true ); # Запустить модель
else
model = engee.load( Path, force=true ) # Загрузить модель
model_output = engee.run( model, verbose=true ); # Запустить модель
engee.close( name_model, force=true ); # Закрыть модель
end
return model_output
end
# Пути до папок с файлами
path_csv = "/user/5G/";
path_model = "$(@__DIR__)";
实施系统的模型如下。该模型可分为三个部分:
- 生成输入信号,并在生成的信号上叠加通信信道效应、
- 频率偏移校正,然后进行 SSS 搜索、
- PBCH 搜索、BCH 解码和 MIB 检测。

让我们运行模型并记录数据。
In [ ]:
run_model("MIB_5G", path_model)
Out[0]:
然后,我们将从 CSV 中读取记录的信号,并更详细地分析通信系统及其实现原理。在本演示中,我们将不关注输入信号的生成,而是考虑接收路径本身。
接收器执行 PSS 搜索,并根据接收信号的频移粗略估计频率偏移,前提是可能的偏移间隔为半个子载波。
然后将接收到的频移信号与三个可能的 PSS(NID)序列中的每一个进行相关处理,并提取最强的相关峰值。
此外,该峰值还表明在接收信号中检测到了三种 PSS(NID)中的哪一种,以及在哪一点上出现了最佳信道条件。
In [ ]:
NID = CSV.read(path_csv * "NID.csv", DataFrame);
print("Cамый сильный пик корреляции: " * string(NID[1,2]))
低于半个子载波的频移估计值是通过将 SSB 中每个 OFDM 符号的循环前缀与 OFDM 符号的相应有用部分相关联计算得出的。
这种相关性的相位与信号的频移成正比。
In [ ]:
Frequency_offset = CSV.read(path_csv * "Frequency_offset.csv", DataFrame);
print("Смещение частоты на первом кадре: " * string(Frequency_offset[1,2])* " Гц")
Waveform = Complex_CSV(path_csv * "Waveform.csv");
plot(real(Waveform))
plot!(imag(Waveform))
Out[0]:
然后,接收器从生成的网格中提取与 SSS 相关的元素,并将它们与每个可能的本地生成的 SSS 序列相关联。
将最强 PSS 序列和 SSS 序列的索引结合起来,就得到了物理层网格的标识,这是处理 PBCH DM-RS 和 PBCH 所必需的。
In [ ]:
SSS_search = CSV.read(path_csv * "SSS_search.csv", DataFrame);
print("SSS: " * string(SSS_search[1,2]))
MIB 是由 gNB 以设定频率广播的强制性系统信息。在初始小区选择过程中,UE 假定 gNB 每 20 ms 发射一次 SSB。UE 通过解码 SS-PBCH 块波束中的 PBCH 获取 MIB。
In [ ]:
MIB = str2num_CSV(path_csv * "MIB.csv");
In [ ]:
print("MIB: " * string(Int8.(MIB))) ;
输出
我们已经考虑了 5G 库的特点以及在 Engee 环境中与该库的功能进行交互的可能性。