QPSK的BER计算
错误率计算块按比特计算错误率(bit error rate,BER)。 使用该块,我们可以获得通信系统的BER数据并分析我们系统的有效性。 在这个例子中,我们将看一个简单的QPSK接收机和发射机模型。 如下图所示。
接下来,我们将设置一个辅助函数来运行模型。
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(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("QPSK") # Запуск модели.
BER = collect(BER)
ber[i]=BER.value[end][1]
println("BER: $(ber[i])")
end
让我们绘制BER图。
In [ ]:
using SpecialFunctions
function berawgn_psk(EbNo_dB, M)
EbNo = 10 .^ (EbNo_dB ./ 10)
if M == 2
return 0.5 .* erfc.(sqrt.(EbNo))# аналогично для QPSK с Gray-кодированием
else
k = log2(M)
return 2 * erfc.(sqrt.(k .* EbNo) .* sin(π/M)) / k
end
end
ber_ref = berawgn_psk(EbNoArr, 2)
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]:
结论
正如您在此示例中看到的,信噪比越高,误差越低。
在这里,我们已经弄清楚了如何为一个简单的通信系统模型构建一个BER图,并学习了如何应用这种方法来分析系统。