Передатчик QPSK и получатель

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

Реализации

Этот пример описывает реализацию MATLAB® приемопередатчика QPSK.

Скрипт MATLAB с помощью Системы objects™: commQPSKTransmitterReceiver.m.

Для использования реализации Simulink® блоки проверяйте: commqpsktxrx.slx.

Введение

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

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

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

  • Проиллюстрировать использование компонентов синхронизации ключа 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) QPSKReceiver.m: моделирует получатель, включая компоненты для восстановления фазы, синхронизируя восстановление, декодирование, демодуляцию, и т.д.

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

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

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

Передатчик

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

Канал

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

Получатель

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

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

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

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

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

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

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

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

Осциллографы

Этот компонент обеспечивает дополнительную визуализацию путем графического вывода следующих схем:

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

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

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

Система под тестом

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

Внутренний цикл runQPSKSystemUnderTest.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, следующий код выполнен. Когда вы запускаете симуляции, это отображает данные о частоте ошибок по битам и некоторые графические результаты. Отображенные осциллографы, соответственно:

1) Схема совокупности Raised Cosine Receive Filter вывод.

2) Схема совокупности Symbol Synchronizer вывод.

3) Схема совокупности Fine Frequency Compensation вывод.

4) Спектр мощности Raised Cosine Receive Filter вывод.

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.

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

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

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

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

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

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

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

Приложение

Этот пример использует следующий скрипт и функции помощника:

Ссылки

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

Для просмотра документации необходимо авторизоваться на сайте