Ссылки HDL OFDM MATLAB

Этот пример показывает, как смоделировать передатчик OFDM, аддитивный белый Гауссов шум (AWGN) и аппаратные алгоритмы приемника OFDM в MATLAB ® как шаги к разработке реализации Simulink ® для оборудования. Пример HDL OFDM MATLAB References преодолевает разрыв между математическим алгоритмом и его аппаратной реализацией. Этот пример предоставляет ссылки MATLAB на HDL OFDM Transmitter, HDL AWGN и HDL OFDM Receiver алгоритмы. Можно использовать эти ссылки MATLAB, чтобы сгенерировать тестовые векторы для проверки реализации HDL передатчика OFDM HDL, реализации HDL генератора AWGN и моделей HDL приемника OFDM Simulink.

Ссылка на передатчик MATLAB OFDM HDL

В этом разделе описывается ссылка MATLAB на передатчик HDL OFDM.

Эта ссылка MATLAB принимает порядок модуляции, индекс кодовой скорости, количество систем координат и бит данных, которые должны быть переданы как txParam структура или массив структур. txParam имеет эти поля.

  • modOrder - Задайте 2, 4, 16 или 64 для 'BPSK', 'QPSK', '16QAM' и '64QAM', соответственно. Значение по умолчанию является 4 ('QPSK').

  • codeRateIndex - Задайте 0, 1, 2 или 3 для ставок '1/2', '2/3', '3/4' и '5/6' соответственно. Значение по умолчанию 0 ('1/2').

  • numFrames - Задайте положительное целое число. Значение по умолчанию является 5.

  • txDataBits - Задайте двоичные значения в строке или векторе-столбце длины trBlkSize x txParam.numFrames. Значение по умолчанию является вектором-столбцом, содержащей случайным образом сгенерированные двоичные значения длины trBlkSize x txParam.numFrames.

Вычислите размер транспортного блока (trBlkSize) при помощи этих параметров.

  • numSubCar - Количество поднесущих на символ

  • pilotsPerSym - Количество пилотов на символ

  • numDataOFDMSymbols - Количество символов OFDM данных

  • bitsPerModSym - Количество битов на модулируемый символ

  • codeRate - Скорость прокалывания кода

  • dataConvK - Длина ограничения сверточного энкодера

  • dataCRCLen - длина CRC

trBlkSize = ((numSubCar - pilotsPerSym) x numDataOFDMSymbols x bitsPerModSym x codeRate) - (dataConvK-1) - dataCRCLen

Для примера, чтобы сгенерировать сигнал OFDM во временной области 5 систем координат со схемой модуляции 16QAM и скорости кода 1/2, используя случайные биты данных в транспортном блоке, форматируйте входы как структуру.

txParam.modOrder = 16; % Modulation order corresponding to 16-QAM
txParam.codeRateIndex = 0; % Code rate index corresponding to 1/2
txParam.numFrames = 5; % Number of frames to be generated

% Calculate transport block size (trBlkSize) using parameters
numSubCar = 72; % Number of subcarriers per symbol
pilotsPerSym = 12; % Number of pilots per symbol
numDataOFDMSymbols = 32; % Number of data OFDM symbols
bitsPerModSym = log2(txParam.modOrder); % Bits per modulated symbol
codeRate = 1/2; % Punctured code rate
dataConvK = 7; % Constraint length of convolutional code polynomial
dataCRCLen = 32; % Data CRC length
trBlkSize = ((numSubCar-pilotsPerSym)*numDataOFDMSymbols* ...
    bitsPerModSym*codeRate) - (dataConvK-1) - dataCRCLen;
txParam.txDataBits = randi([0 1],txParam.numFrames*trBlkSize,1);

% Generate complex baseband transmitter waveform
fprintf('\n-------------------------\n');
fprintf('\n Transmitting %d frames ...\n',txParam.numFrames);
[txWaveform,txGrid,txDiagnostics] = whdlexamples.OFDMTx(txParam);
fprintf('\n Transmission successful.\n');
fprintf('\n-------------------------\n');
-------------------------

 Transmitting 5 frames ...

 Transmission successful.

-------------------------

The whdlexamples.OFDMTx функция возвращает аргументы txWaveform, txGrid, и txDiagnostics.

  • txWaveform - сгенерированный сигнал временной области и возвращается как вектор-столбец длины ((fftLen + cpLen) x txParam.numFrames x numSymPerFrame), где:

  1. fftLen - длина БПФ.

  2. cpLen - длина циклического префикса.

  3. txParam.numFrames количество сгенерированных систем координат OFDM.

  4. numSymPerFrame количество символов OFDM на систему координат.

Если txParam - массив структур, затем в выражении txParam.numFrames заменяется суммой всех numFrames атрибуты, существующие в массиве. Система координат сгенерированной формы волны временной области txWaveform аналогичен выходному сигналу Simulink HDL OFDM. Подробное объяснение структуры системы координат смотрите в примере HDL OFDM Transmitter.

  • txGrid - выход сетки передатчика и возвращается как матрица размера numSubCar-by- (txParam.numFrames x numSymPerFrame), где numSubCar - количество активных поднесущих.

  • txDiagnostics является структурой или массивом структур и состоит из этих трех полей:

  1. headerBits представляет биты заголовка как вектор-столбец размера 14, которая включает 3 бита для индекса длины БПФ, 2 бита для типа модуляции символов, 2 бита для индекса скорости кода и 7 резервных бит.

  2. dataBits представляет фактические биты данных, переданные в заданном количестве систем координат (txParam.numFrames). Это поле является двоичной строкой или вектором-столбцом длины, равной (txParam.numFrames x trbBlkSize). Будь то dataBits является строка или вектор-столбец зависит от размерности txParam.dataBits. Размер по умолчанию является вектором-столбцом длины, равной txParam.numFrames x trbBlkSize.

  3. ofdmModOut представляет выход модулятора OFDM как вектор-столбец длины, равную (fftLen + cpLen) x txParam.numFrames x numSymPerFrame.

OFDMTx

whdlexamples.OFDMTx функция используется для генерации формы волны передатчика OFDM с синхронизацией, ссылкой, заголовком, пилотами и сигналами данных. Эта функция возвращает txWaveform, txGrid, и txDiagnostics использование параметров передатчика txParam. Эта функция внутренне вызывает эти отдельные функции.

  • generateOFDMSyncSignal - Эта функция генерирует сигнал синхронизации SyncSignal. Эта функция использует последовательность Задова-Чу с корневым индексом 25 и длиной 62.

  • generateOFDMRefSignal - Эта функция генерирует уставку refSignal для заданной длины БПФ fftLen. Эта функция использует BPSK-модулированную псевдослучайную двоичную последовательность.

  • generateOFDMPilotSignal - Эта функция генерирует пилот-сигнал pilot. Эта функция использует BPSK-модулированную псевдослучайную двоичную последовательность.

  • OFDMSymbolModulate - эта функция модулирует входные биты к комплексным символам модуляции на основе заданной схемы модуляции BPSK, QPSK, 16QAM и 64QAM.

Постройте график ресурсной сетки формы волны передатчика. График указывает изменения величины каждого элемента ресурсной сетки.

plotResourceGrid(txGrid);

Ссылка HDL AWGN MATLAB

В этом разделе описывается ссылка MATLAB на HDL AWGN.

Эта ссылка MATLAB используется для оценки эффективности алгоритмов HDL OFDM передатчика и приемника. HDL AWGN MATLAB генерирует AWGN путем принятия отношения сигнал/шум (ОСШ) в децибеле (дБ) и наборах начальных чисел. Для получения дополнительной информации смотрите реализацию генератора AWGN. Сгенерированный AWGN добавляется к выходу HDL OFDM Transmitter.

FFTLen = 128;
CPLen = 32;
usedSubCarr = 72; % Out of 128 subcarriers, 72 subcarriers are loaded with data

SNRdB = 30;
SNRdBSimInput = SNRdB*ones(length(txWaveform)+633,1);
seedsURNG1 = [121 719 511]; % Seeds for TausURNG1
seedsURNG2 = [2343 323 833]; % Seeds for TausURNG2
txScaleFactor = FFTLen/sqrt(usedSubCarr);

awgnNoise = whdlexamples.hdlawgn(SNRdBSimInput,seedsURNG1,seedsURNG2);

rxWaveform = txWaveform + (1/txScaleFactor)*awgnNoise(634:end);
fprintf('\n Applying the AWGN channel at %d dB...\n', SNRdB);
 Applying the AWGN channel at 30 dB...

Ссылка на Приемник OFDM MATLAB

В этом разделе описывается ссылка MATLAB на HDL OFDM Receiver.

Эта ссылка MATLAB включает в себя синхронизацию времени, оценку и коррекцию CFO, демодуляцию OFDM, восстановление заголовка, оценку и коррекцию CPE и восстановление данных.

The whdlexamples.OFDMRx функция принимает rxWaveformПереданная форма волны прошла через канал AWGN.

The whdlexamples.OFDMRx функция возвращает декодированные биты rxBits и массив структур, rxDiagnostics, состоящий из этих восьми полей.

  • estCFO - Оценка смещения частоты несущей

  • rxConstellationHeader - Демодулированные символы созвездия заголовков

  • rxConstellationData - Демодулированные символы созвездия данных

  • softLLR - Демодулированные мягкие биты LLR

  • decodedCodeRateIndex - Декодированный индекс кодовой скорости из заголовка

  • decodedModOrder - Декодированный порядок модуляции из заголовка

  • headerCRCErrorFlag - Состояние CRC заголовка

  • dataCRCErrorFlag - Состояние данных CRC

OFDMRx

The whdlexamples.OFDMRx функция используется для демодуляции и декодирования принятых rxWaveform. Эта функция внутренне вызывает эти отдельные функции.

  • OFDMFrequencyOffset - эта функция оценивает смещение частоты несущей на основе метода циклического префикса (CP). Циклический фрагмент префикса принятой формы волны временной области коррелируется, чтобы оценить смещение частоты.

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

  • OFDMFrameSync - Эта функция синхронизирует принятую форму волны путем выполнения корреляции с использованием уставки. Этот шаг уменьшает межсимвольную интерференцию при демодуляции принятой формы волны.

  • OFDMDemodulation Эта функция преобразует форму волны во временной области в форму волны в частотном диапазоне для последующего декодирования. Объект dsp.HDLFFT используется для реализации HDL приемника.

  • OFDMChannelEstimation - Эта функция выполняет оценку канала, используя два опорных сигналов. Он использует метод оценки методом наименьших квадратов (LS). Оценки LS усредняются, чтобы улучшить точность оценки канала.

  • OFDMChannelEqualization - Эта функция выполняет эквализацию с нулем (ZF), используя оцененный канал. Затем принимаемую форму волны, свободную от канала, используют для восстановления заголовка и восстановления данных.

  • OFDMHeaderRecovery - эта функция восстанавливает информацию заголовка путем выполнения демодуляции символов, обращенного перемежения и декодирования Viterbi. Состояние CRC указывает на успешность или отказ восстановления информации заголовка. Этот статус CRC восстановления заголовка задается как выход приемника, чтобы указать потерю или восстановление системы координат. Когда проверка CRC прекращается, состояние CRC заголовка 1. В противном случае это 0.

  • OFDMDataRecovery - Эта функция выполняет демодуляцию символов, перемежение, депункционирование, декодирование Viterbi и дескремблирование. Функция обрабатывает данные только при прохождении проверки CRC заголовка. После дескремблирования декодированных данных проверка CRC выполняется на восстановленных битах данных, чтобы указать, является ли пакет ошибочным. Когда проверка CRC прекращается, состояние CRC заголовка 1. В противном случае это 0.

fprintf('\n Receiving process started...\n');
[rxDataBits,rxDiagnostics] = whdlexamples.OFDMRx(rxWaveform);
fprintf('\n Reception completed\n\n');

% Plot constellation of header and data
scatterplot(rxDiagnostics.rxConstellationHeader(:),1,0,'b.')
title('Header Constellation')
axisObj = gca;
axisObj.XColor = 'w';
axisObj.YColor = 'w';

scatterplot(rxDiagnostics.rxConstellationData(:),1,0,'b.')
title('Data Constellation');
axisObj = gca;
axisObj.XColor = 'w';
axisObj.YColor = 'w';
 Receiving process started...

 Estimating carrier frequency offset ... 

 First four frames are used for carrier frequency offset estimation. 

 Estimated carrier frequency offset is -1.913549e-01 Hz.

 Detected and processing frame 5
------------------------------------------

 Header CRC passed

 Modulation: 16QAM, codeRate=1/2 and FFT Length=128

 Data CRC passed

 Data decoding completed
------------------------------------------

 Reception completed

Проверьте модель Simulink с помощью ссылки MATLAB

В этом разделе Simulink HDL OFDM Transmitter, генератор AWGN и Simulink HDL OFDM Receiver, реализованный в фиксированной точке, сравниваются с эквивалентными образцами модели MATLAB HDL, реализованными в плавающей точке.

Модель Simulink состоит из передатчика OFDM, который генерирует форму волны во временной области для заданных пользователем порядка модуляции и скорости кода. Форма волны во временной области затем передается через канал AWGN, который вводит шум AWGN желаемого ОСШ в дБ. Затем приемник OFDM используется для демодуляции и декодирования информационных бит. Выходы модели Simulink проверяются с помощью ссылки MATLAB на каждом этапе.

open HDLOFDMTxRx;
sim HDLOFDMTxRx;
### Starting serial model reference simulation build
### Successfully updated the model reference simulation target for: whdlOFDMRx
### Successfully updated the model reference simulation target for: whdlOFDMTx

Build Summary

Simulation targets built:

Model       Action                       Rebuild Reason                         
================================================================================
whdlOFDMRx  Code generated and compiled  whdlOFDMRx_msf.mexa64 does not exist.  
whdlOFDMTx  Code generated and compiled  whdlOFDMTx_msf.mexa64 does not exist.  

2 of 2 models built (0 models already up to date)
Build duration: 0h 10m 7.9205s

Проверьте Simulink HDL OFDM передатчик с MATLAB HDL OFDM передатчик

В этом разделе постройте график действительной и мнимой частей HDL OFDM передатчика MATLAB вывода опорной функции txWaveform и сравните с выходами блока HDL OFDM Transmitter.

matlabTxWaveform = txWaveform;
simulinkTxWaveform = simTxOut;

figure;
plot(real(matlabTxWaveform),'-bo')
hold on
plot(real(simulinkTxWaveform(1:length(matlabTxWaveform))),'-r.')
legend('MATLAB Tx waveform','Simulink Tx waveform');
title('Comparison of MATLAB Tx and Simulink Tx (Real Part)');
ylim([-0.2 0.2]);
xlabel('Time-Domain Samples');
ylabel('Amplitude');

figure;
plot(imag(matlabTxWaveform),'-bo')
hold on
plot(imag(simulinkTxWaveform(1:length(matlabTxWaveform))),'-r.')
legend('MATLAB Tx waveform','Simulink Tx waveform');
title('Comparison of MATLAB Tx and Simulink Tx (Imaginary Part)');
ylim([-0.2 0.2]);
xlabel('Time-Domain Samples');
ylabel('Amplitude');

Проверьте генератор Simulink HDL AWGN с MATLAB HDL AWGN

В этом разделе постройте график действительной и мнимой частей MATLAB HDL AWGN сравнивается с выходом блока Simulink AWGN Generator.

matlabChannelOut= rxWaveform;
simulinkChannelOut = simChannelOut;

figure;
plot(real(matlabChannelOut),'-bo');
hold on;
plot(real(simulinkChannelOut(1:length(matlabChannelOut))),'-r.');
legend('MATLAB channel output','Simulink channel output');
title('Comparison of MATLAB Channel and Simulink Channel (Real Part)');
ylim([-0.2 0.2]);
xlabel('Time-Domain Samples');
ylabel('Amplitude');


figure;
plot(imag(matlabChannelOut),'-bo');
hold on;
plot(imag(simulinkChannelOut(1:length(matlabChannelOut))),'-r.');
legend('MATLAB channel output','Simulink channel output');
title('Comparison of MATLAB Channel and Simulink Channel (Imaginary Part)');
ylim([-0.2 0.2]);
xlabel('Time-Domain Samples');
ylabel('Amplitude');

Проверьте Simulink HDL OFDM Receiver с MATLAB HDL OFDM Receiver

В этом разделе постройте график декодированных битов приемника MATLAB по сравнению с декодированными битами приемника Simulink.

matlabRxOut= rxDataBits;
simulinkRxOut = simRxDataBits;

figure;
plot(rxDataBits,'-bo');
hold on;
plot(simulinkRxOut(1:length(rxDataBits)),'-r.');
legend('MATLAB Rx bits','Simulink Rx bits');
title('MATLAB and Simulink Decoded Bits');
ylim([-0.25 1.25]);
xlabel('Time-domain Samples');
ylabel('Amplitude');

Похожие темы