8-PSK 的误码率计算
误码率计算模块计算误码率(BER)。利用该模块,我们可以获得通信系统的误码率数据,并分析系统的效率。在本例中,我们将研究一个简单的 8-PSK 接收机和发射机模型。如下图所示。

接下来,让我们定义一个运行模型的辅助函数。
In [ ]:
# Подключение вспомогательной функции запуска модели.
function run_model( name_model)
Path = (@__DIR__) * "/" * 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
sleep(0.5)
return model_output
end
Out[0]:
接下来,我们初始化模型的信噪比,并声明比特误差变量。
In [ ]:
EbNoArr = collect(-9:3:9);
Eb_No = 0;
ber = zeros(length(EbNoArr));
BER = 0;
现在,让我们在不同的信噪比值下运行模型。
In [ ]:
for i in 1:length(EbNoArr)
Eb_No = EbNoArr[i]
run_model("8-PSK") # Запуск модели.
BER = collect(BER)
ber[i]=BER.value[end][1]
println("BER: $(ber[i])")
end
根据模型和理论计算绘制误码率图。
In [ ]:
using SpecialFunctions
function berawgn_psk(EbNo_dB, M)
EbNo = 10 .^ (EbNo_dB ./ 10)
k = log2(M)
return 2 * erfc.(sqrt.(k .* EbNo) .* sin(π/M)) / k
end
ber_ref = berawgn_psk(EbNoArr, 8)
println("__Eb_No__: $EbNoArr")
println("_ber_ref_: $(round.(ber_ref, digits=3))")
println("ber_model: $(round.(ber, digits=3))")
p1 = plot(EbNoArr, ber_ref, seriestype = :scatter, marker = :rect, label = "Theoretical QPSK", yscale = :log10)
plot!(p1, EbNoArr, ber, seriestype = :scatter, marker = :diamond, label = "Model QPSK")
xlabel!(p1, "Eb/No (dB)")
ylabel!(p1, "BER")
title!(p1, "Bit Error Rate (Log Scale)")
# Второй график: обычный масштаб
p2 = plot(EbNoArr, ber_ref, seriestype = :scatter, marker = :rect, label = "")
plot!(p2, EbNoArr, ber, seriestype = :scatter, marker = :diamond, label = "")
ylabel!(p2, "BER")
title!(p2, "Bit Error Rate (Linear Scale)")
# Общий вывод: два графика рядом
plot(p2, p1, layout = (2, 1), size=(1000,400))
Out[0]:
结论
从这个例子可以看出,信噪比越高,误差越小。
在这里,我们看到了如何绘制通信系统简单模型的误码率,以及如何应用这种方法来分析系统。