Engee 文档
Notebook

主5G信息块的恢复

本示例演示如何使用5g库对gNodeB信号进行同步、解调和解码。 在示例中,MIB和系统信息块(SIB1)中的第一个被解码。

解码MIB和SIB1需要能够解调和解码大部分下行链路信道和信号的集成接收机。

让我们从连接库开始,声明辅助函数和路径来解决这个问题。

In [ ]:
# Подключение библиотек
neededLibs = ["CSV"]
for lib in neededLibs
    try
        eval(Meta.parse("using $lib"))
    catch ex
        Pkg.add(lib)
        eval(Meta.parse("using $lib"))
    end
end
In [ ]:
# Пути до папок с файлами
path_model = "$(@__DIR__)/";

# Подключение библиотек
using DataFrames, CSV, Plots
include(path_model*"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;

所实现的系统的模型如下所示。 它可以分为三个部分:

  1. 输入信号的生成和通信信道对生成信号的影响的叠加,
  2. 频偏校正后再进行SSS搜索,
  3. PBCH搜索、BCH解码和MIB检测。
image_2.png

让我们运行模型并从中生成数据。

In [ ]:
run_model("MIB_5G", path_model)
Building...
Progress 0%
Progress 100%

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

接收机基于接收信号的频移执行PSS搜索和频率偏移的粗略估计,条件是可能的偏移被子载波的一半间隔开。

接下来,将接收的频移信号与三个可能的PSS(NID)序列中的每一个相关,并提取最强相关峰值。

此外,峰值指示在接收信号中检测到三个PSS(NID)中的哪一个,以及在什么点信道条件更好。

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

通过将SSB中每个OFDM符号的循环前缀与OFDM符号的相应有用部分相关来计算子载波的一半以下的频移估计。

该相关性的相位与信号的频移成比例。

In [ ]:
Frequency_offset = CSV.read(path_model * "Frequency_offset.csv", DataFrame);
print("Смещение частоты на первом кадре: " * string(Frequency_offset[1,2])* " Гц") 
Waveform = Complex_CSV(path_model * "Waveform.csv");
plot(real(Waveform))
plot!(imag(Waveform))
Смещение частоты на первом кадре: 163.77603980991532 Гц
Out[0]:

接下来,接收机从所得网格中提取SSS相关元素,并将它们与本地生成的每个可能的SSS序列相关。

组合最强PSS和SSS序列的索引给出物理层小区同一性,这对于处理PBCH DM-RS和PBCH是必需的。

In [ ]:
SSS_search = CSV.read(path_model * "SSS_search.csv", DataFrame);
print("SSS: " * string(SSS_search[1,2])) 
SSS: 102

MIB是gNB定期广播的强制性系统信息。 在初始小区选择过程中,UE假定每20ms向gNB发送SSB,UE通过从SS-PBCH块波束解码PBCH来获得MIB。

In [ ]:
MIB = str2num_CSV(path_model * "MIB.csv");
In [ ]:
print("MIB: " * string(Int8.(MIB))) ;
MIB: Int8[0, 30, 0, 3, 0, 4, 0, 0]

结论

我们已经回顾了5G库的特性,以及在Engee环境中与该库的功能交互的可能性。