exponenta event banner

Передатчик и приемник 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. Функция runQPSKSystemUnterTest.m моделирует эту коммуникационную среду. Модель приемопередатчика QPSK в этом сценарии разделена на следующие четыре основных компонента.

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

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

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

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

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

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

Передатчик

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

Канал

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

Приемник

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

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

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

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

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

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

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

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

Объемы

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

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

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

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

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

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

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

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

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

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

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 соответственно. useScopes позволяет открывать области MATLAB во время выполнения примера. С помощью областей можно просмотреть поведение моделируемых подкомпонентов, а также получить более полное представление о том, как система функционирует во время моделирования. Если для этой переменной задано значение false, области не будут открываться во время выполнения примера. При установке printReceivedData true, можно также увидеть декодированные полученные пакеты, напечатанные в окне команд. Две другие переменные, compableIt и useCodegen, относятся к быстродействию и могут использоваться для анализа конструктивных компромиссов.

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

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

Резюме

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

Приложение

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

Ссылки

1. Райс, Майкл. Цифровая связь - дискретно-временной подход. 1-й ред. Нью-Йорк, Нью-Йорк: Прентис Холл, 2008.