exponenta event banner

Ссылки OFDM MATLAB HDL

Этот пример показывает, как моделировать аппаратные алгоритмы OFDM передатчика, аддитивного белого гауссова шума (AWGN) и OFDM приемника в MATLAB ® в качестве шагов к разработке реализации Simulink ® для аппаратного обеспечения. Пример ссылок на МАТЛАБ МДПВП перекрывает разрыв между математическим алгоритмом и его аппаратной реализацией. В этом примере приводятся ссылки MATLAB на алгоритмы передатчика OFDM HDL, AWGN HDL и приемника OFDM HDL. Эти ссылки MATLAB можно использовать для генерации тестовых векторов для проверки реализации HDL передатчика OFDM HDL, реализации HDL генератора AWGN и моделей Simulink приемника OFDM HDL.

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

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

Эта ссылка 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.

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

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.

  • txGrid является выходом сетки передатчика и возвращается в виде матрицы размера numSubCarоколо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 на AWGN HDL.

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

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...

HDL OFDM приемник MATLAB ссылка

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

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

whdlexamples.OFDMRx функция принимает rxWaveformпередаваемый сигнал, проходящий через канал AWGN.

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

  • estCFO - Расчетное смещение несущей частоты

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

  • rxConstellationData - Демодулированные символы совокупности данных

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

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

  • decodedModOrder - Порядок декодирования модуляции из заголовка

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

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

OFDMRx

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

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

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

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

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

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

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

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

  • OFDMDataRecovery - Эта функция выполняет демодуляцию символов, обратное перемежение, депунктирование, декодирование Витерби и дескремблирование. Функция обрабатывает данные только при прохождении проверки 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

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

Модель Simulink состоит из передатчика OFDM, который генерирует сигнал временной области для определенного пользователем порядка модуляции и скорости кодирования. Форма сигнала временной области затем проходит через канал AWGN, который вводит шум AWGN требуемого SNR в дБ. Затем приемник 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 передатчика

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

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');

Проверить генератор HDL AWGN Simulink с помощью 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 приемника с MATLAB HDL OFDM приемника

В этом разделе постройте график декодированных битов приемника 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');

Связанные темы