主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;
所实现的系统的模型如下所示。 它可以分为三个部分:
- 输入信号的生成和通信信道对生成信号的影响的叠加,
- 频偏校正后再进行SSS搜索,
- PBCH搜索、BCH解码和MIB检测。
让我们运行模型并从中生成数据。
In [ ]:
run_model("MIB_5G", path_model)
接下来,我们将从CSV中读取编码信号,并更详细地分析通信系统及其实施基础的原理。 在本演示中,我们将不关注输入信号的生成,而是考虑接收路径本身。
接收机基于接收信号的频移执行PSS搜索和频率偏移的粗略估计,条件是可能的偏移被子载波的一半间隔开。
接下来,将接收的频移信号与三个可能的PSS(NID)序列中的每一个相关,并提取最强相关峰值。
此外,峰值指示在接收信号中检测到三个PSS(NID)中的哪一个,以及在什么点信道条件更好。
In [ ]:
NID = CSV.read(path_model * "NID.csv", DataFrame);
print("Cамый сильный пик корреляции: " * string(NID[1,2]))
通过将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))
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]))
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))) ;
结论
我们已经回顾了5G库的特性,以及在Engee环境中与该库的功能交互的可能性。