QPSK с адаптивным выравниванием
Система связи QPSK с адаптивным выравниванием
Модель представленная в этом примере демонстрирует практическую систему цифровой связи с модуляцией QPSK, которая борется с реальными проблемами беспроводных каналов: частотными смещениями, многолучевыми замираниями и шумами. Основная цель — показать эффективность адаптивного выравнивания канала с использованием RLS-фильтра для компенсации искажений.
Полный тракт передачи данных:
- Генерация битов → Модуляция → Формирование импульса
- Прохождение через реалистичный канал связи
- Прием → Выравнивание → Демодуляция → Оценка ошибок
Ключевые эффекты канала:
- Фазовое и частотное смещение (доплер до 10 Гц + фиксированный сдвиг 120°)
- Многолучевое распространение (два пути с разными задержками и затуханиями)
- Аддитивный белый гауссовский шум (SNR = 30 дБ)
Структура кадра
- Обучающая последовательность (30 символов) — используется для "обучения" адаптивного фильтра
- Полезные данные (50 символов) — реальная информация
- Такая структура имитирует практические системы связи (Wi-Fi, LTE), где периодически передаются пилот-сигналы
Двухэтапная обработка
Кадр → [Обучающая часть] → RLS-фильтр (обучение) → [Данные] → FIR-фильтр (применение весов)
- Этап обучения: RLS-фильтр настраивает коэффициенты на известной обучающей последовательности
- Этап работы: Настроенные веса используются в FIR-фильтре для выравнивания полезных данных

Что демонстрирует модель
-
Жизнеспособность QPSK в сложных условиях — даже при частотных смещениях и замираниях система сохраняет работоспособность
-
Эффективность адаптивного выравнивания — как правильно настроенный фильтр может "очистить" искаженный сигнал
-
Практический подход к синхронизации — использование обучающих последовательностей вместо идеальных предположений
-
Компромисс между эффективностью и накладными расходами — 30 символов обучения на 50 символов данных (37.5% накладных расходов)
Области применения
- Образовательная демонстрация принципов цифровой связи
- Тестирование алгоритмов выравнивания и компенсации
- Оценка помехоустойчивости различных схем модуляции
- Прототипирование решений для беспроводных систем
Теперь перейдём к инициализации и запуску модели, код представленный ниже инициализирует параметры системы связи QPSK с адаптивным выравниванием: задаёт скорость передачи 1 Мбит/с, структуру кадра (100 бит, включая 30 обучающих символов), параметры модуляции и формирующего фильтра, настраивает канал с частотным смещением до 10 Гц и двухлучевым замиранием, а также определяет параметры RLS-фильтра (15 весов и фактор забывания равный 0.95) и готовит обучающую последовательность для настройки выравнивателя.
bitRate = 1000000;
numBitsPerFrame = 100;
bitsPerSymbol = 2;
numTrainSyms = 30;
pulseDelay = 8;
oversampleFactor = 8;
rolloffFactor = 0.2;
modOrder = 2^bitsPerSymbol;
numDataSymsPerFrame = numBitsPerFrame / bitsPerSymbol;
numSymsPerFrame = numDataSymsPerFrame + numTrainSyms;
qpskmod = EngeeComms.QPSKBasebandModulator(PhaseOffset = pi/4);
trainSig = qpskmod(rand(0:modOrder-1,numTrainSyms));
maxDoppler = 10;
numEqWeights = 15;
refTap = 8;
lambda = 0.95;
snrdB = 30;
symbolPeriod = bitsPerSymbol/bitRate;
chanSamplePeriod = symbolPeriod/oversampleFactor * 50/80;
pathDelays = [0 chanSamplePeriod];
pathGains = [0 -6];
numDataSymsPerFrame = numBitsPerFrame / bitsPerSymbol;
numSymsPerFrame = numDataSymsPerFrame + numTrainSyms;
initEqWeights = complex(zeros(numEqWeights));
eqDelay = refTap - 1;
trimTrainSig = trainSig[1:end-eqDelay];
println("Скорость: $(bitRate/1e6) Мбит/с, Кадр: $(numBitsPerFrame) бит")
println("Структура: $(Int.(numDataSymsPerFrame)) данных + $(numTrainSyms) обучающих символов")
println("Канал: Доплер $(maxDoppler) Гц, 2 луча, SNR $(snrdB) дБ")
println("Выравниватель: RLS-фильтр $(numEqWeights) отсчётов, λ=$(lambda)")
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.1)
return model_output
end
run_model("qpsk_freqfade")
WorkspaceArrays.plot_wa(WorkspaceArray{Vector{Float64}}("qpsk_freqfade/Error Rate Calculation.Output_1"))
Вывод
Анализируя график BER мы явно видим, что при наших параметрах канала, ошибка нулевая. Система показывает, что даже относительно простые методы адаптивной фильтрации (RLS + обучение по пилотам) позволяют эффективно бороться с серьезными искажениями в реальных каналах связи, делая высокоскоростную передачу данных возможной в неидеальных условиях. Модель иллюстрирует фундаментальный принцип цифровых коммуникаций: обработка на приемной стороне может компенсировать многие проблемы физического канала, превращая "грязный" аналоговый сигнал в чистые цифровые данные.