Передатчик и приемник QPSK

Этот пример показывает реализацию передатчика и приемника QPSK с MATLAB ®. В частности, этот пример иллюстрирует способы решения проблем реальной радиосвязи, таких как частота несущей и смещение фазы, восстановление синхронизации и синхронизация системы координат. Для реализации Simulink ® той же системы смотрите пример передатчика и приемника QPSK в Simulink.

Введение

Переданные данные QPSK подвергаются нарушениям, которые моделируют эффекты беспроводной передачи, такие как сложение аддитивного белого гауссова шума (AWGN), введение несущей частоты и смещения фазы и дрейф синхронизации. Чтобы справиться с этими нарушениями, этот пример предоставляет исходный проект практичного цифрового приемника. Приемник включает в себя основанную на корреляции компенсацию грубой частоты, основанную на ФАПЧ компенсацию мелкой частоты, восстановление временных параметров символа на основе ФАПЧ, синхронизацию системы координат и разрешение неоднозначности фазы.

Этот пример служит двум основным целям:

  • Чтобы смоделировать общую систему радиосвязи, которая способна успешно восстановить сообщение, которое было повреждено различными имитированными нарушениями канала.

  • Для иллюстрации использования ключевых компонентов синхронизации Communications Toolbox™, включая грубую и мелкую компенсацию частоты несущей, восстановление синхронизации с обратной связью с набивкой и зачисткой бита, синхронизацию системы координат и разрешение неоднозначности фазы несущей.

Инициализация

Скрипт commqpsktxrx_init.m инициализирует параметры симуляции и генерирует структуру prmQPSKTxRx.

prmQPSKTxRx = commqpsktxrx_init %#ok<*NOPTS> % QPSK system parameters

useScopes = true;   % true if scopes are to be used
printReceivedData = false; %true if the received data is to be printed
compileIt = false;  % true if code is to be compiled
useCodegen = false; % true to run the generated mex file
prmQPSKTxRx = 

  struct with fields:

                ModulationOrder: 4
                  Interpolation: 2
                     Decimation: 1
                           Rsym: 50000
                           Tsym: 2.0000e-05
                             Fs: 100000
                     TotalFrame: 1000
                     BarkerCode: [1 1 1 1 1 -1 -1 1 1 -1 1 -1 1]
                   BarkerLength: 13
                   HeaderLength: 26
                        Message: 'Hello world'
                  MessageLength: 16
                NumberOfMessage: 20
                  PayloadLength: 2240
                      FrameSize: 1133
                      FrameTime: 0.0227
                  RolloffFactor: 0.5000
                  ScramblerBase: 2
            ScramblerPolynomial: [1 1 1 0 1]
     ScramblerInitialConditions: [0 0 0 0]
         RaisedCosineFilterSpan: 10
                    PhaseOffset: 47
                           EbNo: 13
                FrequencyOffset: 5000
                      DelayType: 'Triangle'
                   DesiredPower: 2
                AveragingLength: 50
                   MaxPowerGain: 20
         MaximumFrequencyOffset: 6000
     PhaseRecoveryLoopBandwidth: 0.0100
     PhaseRecoveryDampingFactor: 1
    TimingRecoveryLoopBandwidth: 0.0100
    TimingRecoveryDampingFactor: 1
        TimingErrorDetectorGain: 5.4000
      PreambleDetectorThreshold: 20
                    MessageBits: [11200x1 double]
                        BerMask: [1540x1 double]

Архитектура кода для тестируемой системы

Этот пример моделирует систему цифровой связи, использующую QPSK модуляцию. Функция runQPSKSystemUnderTest.m моделирует это окружение связи. Модель приемопередатчика QPSK в этом скрипте разделена на следующие четыре основных компонента.

1) QPSKTransmitter.m: генерирует поток битов, а затем кодирует, модулирует и фильтрует его.

2) QPSKChannel.m: моделирует канал со смещением несущей, смещением синхронизации и AWGN.

3) QPSCReceiver.m: моделирует приемник, включая компоненты для восстановления фазы, восстановления синхронизации, декодирования, демодуляции и т.д.

4) QPSKScopes.m: опционально визуализирует сигнал с помощью временных возможностей, частотных возможностей и созвездия схем.

Каждый компонент моделируется с помощью Системного объекта. Для просмотра конструкции четырех основных компонентов системного объекта см. runQPSKSystemUnderTest.m.

Описание отдельных компонентов

Передатчик

Этот компонент генерирует сообщение с использованием символов ASCII, преобразует символы в биты и готовит код Баркера для синхронизации системы координат приемника. Эти данные затем модулируются с использованием QPSK и фильтруются с помощью квадратного корня фильтра приподнятого косинуса.

Канал

Этот компонент имитирует эффекты беспроводной передачи. Это ухудшает переданный сигнал как со смещением фазы, так и со смещением частоты, изменяющейся во времени задержкой для имитации синхроимпульса между передатчиком и приемником и AWGN.

Приемник

Этот компонент регенерирует исходное переданное сообщение. Она разделена на семь подкомпонентов.

1) Автоматическое управление усилением: Устанавливает свою выходную степень на уровень, гарантирующий, что эквивалентные усиления фазы и детекторы временных ошибок остаются постоянными с течением времени. АРУ помещается перед приёмным фильтром приподнятого косинуса, так что амплитуда сигнала может быть измерена с коэффициентом избыточной дискретизации двух. Этот процесс улучшает точность оценки.

2) Грубая частотная компенсация: Использует основанный на корреляции алгоритм, чтобы примерно оценить смещение частоты и затем компенсировать его. Оценочное смещение грубой частоты усредняется так, что точная частотная компенсация может блокироваться/сходиться. Следовательно, смещение грубой частоты оценивается с помощью Системного объекта comm.CoarseFrequencyCompensator и формулы усреднения; компенсация выполняется с помощью Системного объекта comm.PhaseFrequencyOffset.

3) Восстановление синхронизации: Выполняет восстановление синхронизации с обратной связью скаляра обработки, чтобы преодолеть эффекты задержки, введенные каналом, используя Системный объект comm.SymbolSynchronizer. Объект реализует ФАП, чтобы исправить ошибку синхронизации символа в принятом сигнале. Для объекта в этом примере выбран вращательно-инвариантный детектор временных ошибок Гарднера; таким образом, восстановление синхронизации может предшествовать тонкой частотной компенсации. Вход к объекту является системой координат выборок фиксированной длины. Выходом объекта является система координат символов, длина которого может варьироваться из-за набивки и зачистки битов, в зависимости от фактических задержек канала.

4) Точная компенсация частоты: Выполняет скалярную обработку с обратной связью и точно компенсирует смещение частоты, используя Системный объект comm.CarrierSynchronizer. Объект реализует цикл фазовой автоподстройки (ФАП), чтобы отслеживать смещение остаточной частоты и смещение фазы в входном сигнале.

5) Обнаружение преамбулы: Обнаруживает местоположение известного кода Баркера во входе с помощью Системного объекта comm.PreambleDetector. Объект реализует алгоритм, основанный на перекрестной корреляции, чтобы обнаружить известную последовательность символов во входе.

6) Система координат Синхронизация: Выполняет систему координат синхронизацию и, кроме того, преобразует входы символа переменной длины в выходы фиксированной длины, используя Системный объект FrameSynchronizer. Объект имеет вторичный выход, который является булевым скаляром, указывающим, является ли первый вывод системы координат допустимым.

7) Декодер данных: Выполняет разрешение неоднозначности фазы и демодуляцию. Кроме того, декодер данных сравнивает регенерированное сообщение с переданным и вычисляет BER.

Возможности

Этот компонент обеспечивает необязательную визуализацию для построения:

  • Область возможностей, изображающая принятый сигнал до и после квадратного корня, повышенная фильтрация косинуса,

  • Диаграммы созвездия, показывающие принятый сигнал после фильтрации приемника, после восстановления синхронизации и затем после точной компенсации частоты.

Для получения дополнительной информации о компонентах системы см. пример передатчика и приемника QPSK в Simulink Simulink.

Тестируемая система

Основной цикл в системе под тестовый скрипт обрабатывает данные кадр за кадром. Установите переменный MATLAB compileIt true в порядок для генерации кода. Это может быть достигнуто с помощью команды codegen, предоставляемой MATLAB Coder™ продуктом. Команда codegen переводит функции MATLAB ® в файл MEX, создавая код для ускоренного выполнения. Сгенерированный код C запускается в несколько раз быстрее, чем оригинальный код MATLAB. В данном примере задайте useCodegen true, чтобы использовать код, сгенерированный codegen вместо кода MATLAB.

Внутренний цикл runQPSKSystemUnderTest.m использует четыре Системных объектов, упомянутые ранее. В этом файле существует цикл for-loop вокруг тестируемой системы для обработки одной системы координат за раз.

for count = 1:prmQPSKTxRx.FrameCount
    transmittedSignal = qpskTx(); rcvdSignal =
    qpskChan(transmittedSignal, count); [RCRxSignal, timingRecSignal,
    freqRecSignal, BER] = qpskRx(rcvdSignal); % Receiver if useScopes
      runQPSKScopes(qpskScopes, rcvdSignal, RCRxSignal, timingRecSignal,
      freqRecSignal); % Plots all the scopes
    end
end

Выполнение и результаты

Чтобы запустить скрипт System Under Test и получить значения BER для моделируемой связи QPSK, выполняется следующий код. Когда вы запускаете симуляции, он отображает данные о вероятности битовой ошибки и некоторые графические результаты. Отображаемые возможности являются сигналами созвездия Приподнятого выхода Приёмного Фильтра Косина, выхода Symbol Synchronizer и выхода Точной Компенсации Частот и степени спектра Приёмного выхода Приёма Косина.

if compileIt
    codegen -report runQPSKSystemUnderTest.m -args {coder.Constant(prmQPSKTxRx),coder.Constant(useScopes),coder.Constant(printReceivedData)} %#ok
end
if useCodegen
    BER = runQPSKSystemUnderTest_mex(prmQPSKTxRx,useScopes,printReceivedData);
else
    BER = runQPSKSystemUnderTest(prmQPSKTxRx,useScopes,printReceivedData);
end
fprintf('Error rate = %f.\n',BER(1));
fprintf('Number of detected errors = %d.\n',BER(2));
fprintf('Total number of compared samples = %d.\n',BER(3));
Error rate = 0.000238.
Number of detected errors = 366.
Total number of compared samples = 1536920.

Альтернативные опции выполнения

Как уже упоминалось в разделе Система в процессе тестирования, при помощи переменных в начале примера можно взаимодействовать с кодом, чтобы исследовать различные аспекты системных объектов и опций кодирования.

По умолчанию переменные useScopes и printReceivedData заданы значения true и false, соответственно. The useScopes переменная позволяет открывать возможности MATLAB во время выполнения примера. Используя возможности, можно увидеть, как ведут себя моделируемые подкомпоненты, а также получить лучшее понимание того, как система функционирует во времени симуляции. Когда вы задаете для этой переменной значение false, возможности не откроются во время выполнения примера. Когда вы задаете printReceivedData на true можно также увидеть декодированные полученные пакеты, напечатанные в командном окне. Другие две переменные, compileIt и useCodegen, связаны со скоростью эффективности и могут использоваться для анализа компромиссов проекта.

Когда вы устанавливаете compileIt на true, этот пример скрипта будет использовать Coder™ возможности MATLAB, чтобы скомпилировать скрипт runQPSKSystemUnderText для ускоренного выполнения. Эта команда создаст файл MEX (runQPSKSystemUnderTest_mex) и сохранит его в текущей папке. Если установить значение true для useCodegen, чтобы запустить файл MEX, то пример сможет запустить систему, реализованную в MATLAB намного быстрее. Эта функция необходима для реализации систем в реальном времени и является важным инструментом симуляции. Чтобы максимизировать скорость симуляции, установите useScopes к ложным и useCodegen true, чтобы запустить файл mex.

Для других вариантов исследования опции пример передатчика и приемника QPSK в Simulink.

Сводные данные

Этот пример моделирует цифровую связь по каналу AWGN. Это показывает, как смоделировать несколько частей системы QPSK, таких как модуляция, восстановление частоты и фазы, восстановление синхронизации и синхронизация системы координат. Он измеряет производительность системы путем вычисления BER. Также показано, что сгенерированный код C запускается в несколько раз быстрее, чем оригинальный код MATLAB.

Приложение

В этом примере используются следующие скрипты и вспомогательные функции:

Ссылки

1. Райс, Майкл. Цифровые коммуникации - подход в дискретном времени. 1-й эд. Нью-Йорк, Нью-Йорк: Prentice Hall, 2008.