Engee 文档
Notebook

恢复 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__)";

实施系统的模型如下。该模型可分为三个部分:

  1. 生成输入信号,并在生成的信号上叠加通信信道效应、
  2. 频率偏移校正,然后进行 SSS 搜索、
  3. PBCH 搜索、BCH 解码和 MIB 检测。

image_2.png

让我们运行模型并记录数据。

In [ ]:
run_model("MIB_5G", path_model)
Building...
Progress 100%
Out[0]:
Dict{String, DataFrame}()

然后,我们将从 CSV 中读取记录的信号,并更详细地分析通信系统及其实现原理。在本演示中,我们将不关注输入信号的生成,而是考虑接收路径本身。

接收器执行 PSS 搜索,并根据接收信号的频移粗略估计频率偏移,前提是可能的偏移间隔为半个子载波。

然后将接收到的频移信号与三个可能的 PSS(NID)序列中的每一个进行相关处理,并提取最强的相关峰值。

此外,该峰值还表明在接收信号中检测到了三种 PSS(NID)中的哪一种,以及在哪一点上出现了最佳信道条件。

In [ ]:
NID = CSV.read(path_csv * "NID.csv", DataFrame);
print("Cамый сильный пик корреляции: " * string(NID[1,2])) 
Cамый сильный пик корреляции: 0.0

低于半个子载波的频移估计值是通过将 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))
Смещение частоты на первом кадре: 48.8418354250601 Гц
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])) 
SSS: 102

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))) ;
MIB: Int8[0, 30, 0, 3, 0, 4, 0, 0]

输出

我们已经考虑了 5G 库的特点以及在 Engee 环境中与该库的功能进行交互的可能性。