HDL OFDM ссылки MATLAB

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

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

В этом разделе описываются ссылку 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 * txParam.numFrames. Значением по умолчанию является вектор-столбец, содержащий случайным образом сгенерированные двоичные значения длины trBlkSize * txParam.numFrames.

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

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

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

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

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

  • codeRate — Проколотый уровень кода

  • dataConvK — Продолжительность ограничения сверточного энкодера

  • dataCRCLen — Продолжительность CRC

trBlkSize =
((numSubCar-pilotsPerSym)*numDataOFDMSymbols*bitsPerModSym*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',sum(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) + (txFilterLen - 1)), где

  • fftLen длина БПФ.

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

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

  • txFilterLen длина фильтра передатчика.

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

2. txGrid сетка передатчика выход и возвращена как матрица размерности numSubCar- (txParam.numFrames x numSymPerFrame).

3. txDiagnostics структура или массив структур и состоит из этих трех полей.

  • headerBits — Это поле представляет биты заголовка как вектор-столбец размера 22, который включает 3 бита для индекса длины БПФ, 2 бита для типа модуляции символа, 2 бита для индекса уровня кода и 15 запасных битов.

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

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

OFDMTx

whdlexamples.ofdmTx функция используется, чтобы сгенерировать форму волны передатчика OFDM с синхронизацией, ссылкой, заголовком, пилотами и сигналами данных. Эта функция возвращает txWaveform, txGrid, и диагностика с помощью параметров передатчика 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 путем принятия отношения сигнал-шум (SNR) в децибеле (дБ) и наборах seed. Для получения дополнительной информации смотрите Реализацию HDL Генератора 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

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

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

Эта ссылка MATLAB включает синхронизацию времени, оценку CFO и коррекцию, демодуляцию 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 — Эта функция выполняет демодуляцию символа, декодирование Viterbi, depuncturing, и дескремблирование. Данные обрабатываются только, когда проверка 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(:))
title('Header Constellation')

scatterplot(rxDiagnostics.rxConstellationData(:))
title('Data Constellation');
 Receiving process started...

 Estimating carrier frequency offset ... 

 First four frames are used for carrier frequency offset estimation. 

 Estimated carrier frequency offset is -2.218976e-04 KHz.

 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

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

Модель 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 9m 10.754s

Проверьте HDL Simulink передатчик OFDM с HDL MATLAB передатчик 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 Block 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 Block Tx (Imaginary Part)');
ylim([-0.2 0.2]);
xlabel('Time-Domain Samples');
ylabel('Amplitude');

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

В этом разделе постройте действительные и мнимые части HDL MATLAB, который 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');

Проверьте HDL Simulink приемник OFDM с HDL MATLAB приемник 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');

Похожие темы

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