Этот пример показывает, как использовать блок FFT 1536 в демодуляции LTE OFDM.
Сгенерируйте сигнал передатчика.
Удалите циклический префикс.
Подготовьте входы для симуляции БПФ 1536.
Сформируйте ресурсную сетку.
Сравните символы CellRS из сетки с символами lteCellRS
функция.
Сгенерируйте HDL-код.
Сгенерируйте сигнал передатчика.
cfg = lteTestModel('1.1','15MHz'); cfg.TotSubframes = 1; tx = lteTestModelTool(cfg);
Вышеуказанная генерация сигналов передатчика использует БПФ с 2048 точками, что приводит к коэффициенту масштабирования в OFDM модуляции. Если бы использовался БПФ с 1536 точками, форма волны имела бы масштабный коэффициент. Этот пример умножает форму волны на множитель, чтобы достичь правильного масштабирования.
tx = tx*(2048/1536);
Чтобы достичь частоты дискретизации 23.04 Msps, повторите выборку tx
выборки по
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-код для подсистемы.