Анализ модуляций
В данном примере разберем возможности построения созвездий различных модуляций.
Далее показана реализованная демонстрационная модель.

Как мы видим, в данном примере используется 3 вида модуляций.
- Квадратурно-фазововая манипуляция (QPSK – quadrature phase-shift keying, или 4-PSK) использует созвездие из четырёх точек, размещённых на равных расстояниях на окружности.
- Двоичная фазовая манипуляция (BPSK, binary phase shift keying). При такой модуляции используют два фазовых смещения (одно для логической единицы и второе для логического нуля).
- Квадратурная модуляция (QAM – Quadrature Amplitude Modulation) – разновидность амплитудной модуляции сигнала, которая представляет собой сумму двух несущих колебаний одной частоты, но сдвинутых по фазе относительно друг друга на 90° (π/2 радиана).
Для начала объявим отношение энергии информационных битов на символ к спектральной плотности мощности шума.
Eb_No = 10;
Теперь объявим функцию запуска модели и выполним моделирование.
function run_model(name_model)
Path = string(@__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
return model_output
end
run_model("demo_model")
Выполним построения созведия для каждой из модуляций. Начнём с QPSK, после чего построим BPSK и 8-PSK.
qpsk = collect(qpsk);
qpsk_new = [(i...)+0 for i in qpsk.value];
plot(title="QPSK")
plot!(ComplexF64.(qpsk_new), seriestype=:scatter)
plot!([0.75+0.75im, 0.75-0.75im, -0.75+0.75im, -0.75-0.75im], seriestype=:scatter)
bpsk = collect(bpsk);
bpsk_new = [(i...)+0 for i in bpsk.value];
plot(title="BPSK")
plot!(ComplexF64.(bpsk_new), seriestype=:scatter)
plot!([-1+0im, 1+0im], seriestype=:scatter)
qam = collect(qam);
qam_new = [(i...)+0 for i in qam.value];
plot(title="8-PSK")
plot!(ComplexF64.(qam_new), seriestype=:scatter)
plot!(cis.(2pi*[0:7...]/8), seriestype=:scatter)
Как мы видим из приведённых выше созвездий, первые две модуляции имеют более ярко выраженный разнос по точкам. И в первых двух вариантах значительно меньше областей пересечения точек, в связи с чем мы и получили в QPSK и BPSK значения битовой ошибки в четыре раза меньше, чем при использовании 8-PSK.
Вывод
В данном примере мы рассмотрели способы построения и анализа модулируемых сигналов на примере QPSK, BPSK и QAM модуляций.