Применение блока FFT 1536 в демодуляции LTE OFDM

Этот пример показывает, как использовать блок FFT 1536 в демодуляции LTE OFDM.

  1. Сгенерируйте сигнал передатчика.

  2. Удалите циклический префикс.

  3. Подготовьте входы для симуляции БПФ 1536.

  4. Сформируйте ресурсную сетку.

  5. Сравните символы CellRS из сетки с символами lteCellRS функция.

  6. Сгенерируйте HDL-код.

Сгенерируйте сигнал передатчика.

cfg = lteTestModel('1.1','15MHz');
cfg.TotSubframes = 1;
tx = lteTestModelTool(cfg);

Вышеуказанная генерация сигналов передатчика использует БПФ с 2048 точками, что приводит к коэффициенту масштабирования$\frac{1}{2048}$ в OFDM модуляции. Если бы использовался БПФ с 1536 точками, форма волны имела бы масштабный коэффициент. $\frac{1}{1536}$Этот пример умножает форму волны на множитель, чтобы$\frac{2048}{1536}$ достичь правильного масштабирования.

tx = tx*(2048/1536);

Чтобы достичь частоты дискретизации 23.04 Msps, повторите выборку tx выборки по $\frac{3}{4} = \frac{23.04e6}{30.72e6}$

rx = resample(tx,3,4); % rate conversion from 30.72Msps to 23.04Msps

Удалите циклический префикс. Первый символ каждого паза имеет 12 дополнительных выборок CP.

rx(11520+1:11520+12) = []; % discard 12 CP samples in slot 2
rx(1:12) = []; % discard 12 CP samples in slot 1
rx = reshape(rx,108+1536,14); % reshape to form 14 OFDM symbols
rx(1:108,:) = []; % discard remaining 108 CP samples from all symbols

Подготовьте входы для симуляции БПФ 1536.

SampleTime = 4.3e-8; % 1/23.04e6;
data = rx(:);
valid = true(1536*14,1);
data = fi(data,1,22,20);

dataIn = timeseries(data,(0:length(data)-1).'*SampleTime);
validIn = timeseries(valid,(0:length(valid)-1).'*SampleTime);

FFT1536Latency = 3180;

NofClks = FFT1536Latency+length(data); % number of simulation clock cycles
StopTime = (NofClks)*SampleTime;

open_system HDLFFT1536model;
sim HDLFFT1536model;

simOut = dataOut(validOut);
simOut = double(simOut(:)*1536);

Сформируйте ресурсную сетку и удалите поднесущую постоянного тока.

fftOut = fftshift(reshape(simOut,1536,14));
resourceGrid = fftOut(318+1:318+1+900,:);
resourceGrid(900/2+1,:) = [];

Сравните символы CellRS из сетки с символами, возвращенными из lteCellRS функция.

cellRS = lteCellRS(cfg);
cellRSIndices = lteCellRSIndices(cfg);
simCellRS = resourceGrid(cellRSIndices);
figure;
plot(real(simCellRS),imag(simCellRS),'o','MarkerSize',15);
hold on;
plot(real(cellRS),imag(cellRS),'*','MarkerSize',10)
legend('CellRS symbols from the FFT 1536 simulation grid'...
    ,'CellRS symbols from lteCellRS function','Location','southoutside')
axis([-1 1 -1 1]);

Чтобы сгенерировать HDL код для блока БПФ 1536, вы должны иметь HDL Coder™ лицензию. Чтобы сгенерировать HDL-код из блока FFT 1536 в этой модели, щелкните правой кнопкой мыши блок и выберите Create Subsystem from Selection. Затем щелкните правой кнопкой мыши подсистему и выберите HDL-код > Сгенерировать HDL-код для подсистемы.

См. также

Блоки