HDL OFDM ссылки MATLAB

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

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 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 Transmitter форма волны выхода. Для подробного объяснения структуры системы координат смотрите HDL пример Передатчика OFDM.

  • 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 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 — Эта функция восстанавливает информацию о заголовке путем выполнения демодуляции символа, устранения чередования и декодирования Viterbi. Состояние CRC указывает на успешность или неуспешность восстановления информации о заголовке. Это состояние CRC восстановления заголовка дано как выход приемника, чтобы указать на потерю системы координат или восстановление. Когда проверка CRC перестала работать, состоянием CRC заголовка является 1. В противном случае это - 0.

  • OFDMDataRecovery — Эта функция выполняет демодуляцию символа, устранение чередования, depuncturing, декодирование 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

В этом разделе, 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 10m 7.9205s

Проверьте 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 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 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');

Похожие темы

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