数字通信渠道¶
在本例中,我们演示了创建数字通信信道的区块链。该模型包括一个调制器、用于曼彻斯特编码的接收和发送滤波器、一个白噪声信道、信号解码和误差计数。
该示例利用了 Engee 能够处理模型的优势,在这些模型中,可为各个子系统设置不同的仿真速率。在该模型中,子系统的工作频率各不相同:
2.5 Hz - 模型 "应用级 "的频率(生成器生成的数字从 0 到 10)
- 10 赫兹** - 数字调制后的比特流频率(4 位数据包) 80 Hz - 物理层的频率(双极数字信号和曼彻斯特编码 1 至 8)
在接收端,错误计数在数字和比特两个层面上进行。
模型结构¶
该模型包括
** 生成器**可生成 0 至 10 的数字
- 调制器将其转换为 4 位序列 **转换器,将单极信号转换为双极信号。 数字滤波器将曼彻斯特编码应用于信号。 通道添加高斯噪声
以及一组逆运算:
- 曼彻斯特编码的耦合接收滤波器
- 从双极性信号到单极性信号的转换器
- 发送和接收信号之间的位错误计数单元。
- 解调器**,可将每组 4 比特转换成 0 至 10 的数字。
模型总览¶
通过这种模型,您可以查看每条通信线路的内部情况,了解信号在每个传输阶段的情况。
通过脚本运行模型¶
要自动进行分析,您需要关闭模型(如果模型在画布中打开),并在 _ 软件控制下运行该模型。
In [ ]:
Pkg.add(["Measures"])
In [ ]:
# Запуск модели
if "simple_digital_channel" in [m.name for m in engee.get_all_models()]
model = engee.open( "simple_digital_channel" );
else
model = engee.load( "$(@__DIR__)/simple_digital_channel.engee" );
end
results = engee.run( model )
Out[0]:
In [ ]:
#engee.close( "simple_digital_channel", force=true );
图形输出¶
连接图书馆
In [ ]:
# Подключение библиотек
using DataFrames, Plots, 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平台,您可以以非常直观的方式演示数字电子设备的运行、选择参数和调试算法,并以直观的插图支持所有操作。