Проект реализует классы модулятора, демодулятора, двоичного сигнала, аддитивного белого гауссовского шума. Для демодуляции сигнала был использован алгоритм оптимального приема QAM сигнала по минимуму расстояния от сигнальной точки зашумленного сигнала, до ближайщей сигнальной точки в созвездии.
QAMbase - базовый абстрактный класс, реализующий генерацию QAM сигналов по заданным в конструкторе параметрам.
Modulator - класс, реализующий модуляцию сигнала по заданной битовой последовательности. Имеет метод modulate(), возвращающий вектор значений сигнала.
Demodulator - класс, реализующий демодуляцию сигнала. Имеет метод demodulate(), возвращающий битовую последовательность (индекс сигнала).
BinarySignal - класс, реализующий входной двоичный сигнал (битовую последовательность). Имеет метод generate_signal(), генерирующий случайную битовую последовательность. Имеет равномерное распределение для генерации.
GaussianNoise - класс, реализующий аддитивный белый гауссовский шум (АБГШ). Имеет единственный метод add_noise(), который высчитывает значение шума в дБ и дисперсию, затем добавляет его к сигналу.
Saver - класс, предназначенный для сохранения выходной информации (значения сигналов, сигнальное созвездие, зависимость ошибки от шума), для последующей визуализации в Matlab.
Для построения графиков используется Matlab. Выходные файлы хранятся в папке OUTPUT вместе с файлом matlab.
Все приведенные ниже изображения были получены для QAM 64 системы.
Для большей наглядности, на изображении сигнального множества было выведено всего 32 сигнала. При большем их количестве график становится трудно воспринимать. Также на изображении сигнального множества хорошо заметен фазовый и амплитудный сдвиг сигналов относительно друг-друга.
Если количество сигналов меньше 64, получение графика вероятностей ошибки может быть сильно затратным по времени. Из за того, что расстояние между сигнальными точками увеличивается, увеличиваются также и решающие облати. Таким образом, вероятность ошибки падает, зашумленному сигналу тяжелее попасть в решающую область не своего исходного сигнала. Остальные модули программы, такие как построение сигнального множества и созведия, модуляция, демодуляция и т.д работают без изменений.