Engee 文档
Notebook

数字通信通道

在这个例子中,我们演示了一个用于创建数字通信通道的块链。 该模型实现了用于曼彻斯特编码的调制器,接收和发送滤波器,具有白噪声,信号解码和错误计数的通道。

该示例使用Engee处理为各个子系统设置不同仿真速率的模型的能力。 在该模型中,存在以不同频率运行的子系统。:

**2.5Hz–-模型"应用级别"的频率(生成器生成从0到10的数字)
**10Hz–-数字调制后比特流的频率(4位数据包)
*80Hz–物理层频率(双极数字信号和曼彻斯特编码为1至8)

错误是在接收端计算的,无论是在数字级别还是位级别。

模型的结构

image.png

该模型包括:

*生成器从0到10的数字
*一个调制器,将它们转换为4位序列
*单极信号到双极信号的转换器
*数字滤波器适用于曼彻斯特编码信号
*通道添加高斯噪声

和一组反向操作:

*配对接收滤波器为曼彻斯特代码
*转换器从双极信号到单极
*比特误差计数单元发送和接收信号之间
*解调器,它使数字从0到10从每组4位。

模型的一般视图

image.png

该模型允许您查看每条通信线路,并查看每个传输阶段的信号。

从脚本启动模型

要自动化分析,您需要关闭模型(如果它在画布上打开)并在程序控制下运行此模型。

In [ ]:
Pkg.add(["Measures"])
In [ ]:
# Запуск модели
model = engee.open("$(@__DIR__)/simple_digital_channel.engee");
results = engee.run( model )
Out[0]:
Dict{String, DataFrames.DataFrame} with 9 entries:
  "Кол-во ошибок передачи"    => 101×2 DataFrame…
  "Приемный фильтр"           => 801×2 DataFrame…
  "Выходной бинарный вектор"  => 26×2 DataFrame…
  "Входной сигнал и задержка" => 26×2 DataFrame…
  "Бинарный вектор"           => 26×2 DataFrame…
  "Входной сигнал"            => 26×2 DataFrame…
  "Сигнал в канале"           => 801×2 DataFrame…
  "Формирующий фильтр"        => 801×2 DataFrame…
  "Реконструкция сигнала"     => 26×2 DataFrame
In [ ]:
#engee.close( "simple_digital_channel", force=true );

图表的输出

连接图书馆

In [ ]:
# Подключение библиотек
using DataFrames, Measures
gr(); # Подключение бэкенда - метода отображения графики

输入和输出信息的分析(一系列数字)

In [ ]:
# Загрузка данных
Sin = results["Входной сигнал и задержка"];
Sout = results["Реконструкция сигнала"];

# Построение графиков
plot(
    plot( Sin.time, Sin.value, st=:step, xlabel="Время", ylabel="Числа", title="Числа на входе", leg=false ),
    plot( Sout.time, Sout.value, st=:step, xlabel="Время", ylabel="Числа", title="Числа на выходе", leg=false ),
    layout=grid(1, 2, widths=(4/8,4/8)), size=(900,300), margin=5mm, guidefont = font( 7 )
)
Out[0]:

输入和输出位数组的分析

In [ ]:
# Загрузка данных
Bin = results["Бинарный вектор"]
Bout = results["Выходной бинарный вектор"]

Bin_a = [v[1] for v in Bin.value]
Bin_b = [v[2] for v in Bin.value]
Bin_c = [v[3] for v in Bin.value]
Bin_d = [v[4] for v in Bin.value]

Bout_a = [v[1] for v in Bout.value]
Bout_b = [v[2] for v in Bout.value]
Bout_c = [v[3] for v in Bout.value]
Bout_d = [v[4] for v in Bout.value]

# Построение графиков
plot( 
    plot( Bin.time, [Bin_a Bin_b.+1.1 Bin_c.+2.2 Bin_d.+3.3], st=:step,
      xlabel="Время", ylabel="Биты", title="Входной массив", leg=false ),
    plot( Bout.time, [Bout_a Bout_b.+1.1 Bout_c.+2.2 Bout_d.+3.3], st=:step,
      xlabel="Время", ylabel="Биты", title="Выходной массив", leg=false ),
    layout=grid(1, 2, widths=(4/8,4/8)), size=(900,300), margin=5mm, guidefont = font( 7 )
)
Out[0]:

让我们显示错误接收的位数。

In [ ]:
# Загрузка данных
ERC = results["Кол-во ошибок передачи"]

# Построение графиков
plot( 
    plot( ERC.time, ERC.value, st=:step, xlabel="Время", ylabel="Сигнал", title="Количество ошибок приема", leg=false ),
    size=(900,400), margin=5mm, guidefont = font( 7 )
)
Out[0]:

让我们研究信道中的噪声

In [ ]:
# Загрузка данных
Fin = results["Формирующий фильтр"];
AWGN_out = results["Сигнал в канале"];
Fout = results["Приемный фильтр"];

# Построение графиков
plot( 
    plot( Fin.time, Fin.value, st=:step, xlabel="Время", ylabel="Сигнал", title="Сигнал из формирующиего фильтра (идеальный)", leg=false ),
    plot( AWGN_out.time, AWGN_out.value, st=:step, xlabel="Время", ylabel="Сигнал", title="Сигнал в канале (с белым шумом)", leg=false ),
    plot( Fout.time, Fout.value, st=:step, xlabel="Время", ylabel="Сигнал", title="Сигнал после принимающего фильтра", leg=false ),
    layout=grid(3, 1),
    size=(900,600), margin=5mm, guidefont = font( 7 )
)
Out[0]:

结论

基于这个例子,可以计算编码冗余参数,检查纠错码,或者检查通信信道在物理层与其他信号编码的操作:频率,相位,使信道成为虚拟展台的一部分,等等。

Engee平台允许您非常清楚地演示数字电子产品的工作,选择参数和调试算法,并用可视化插图备份所有内容。