Сверточное декодирование потоковых выборок

В этом примере показано, как использовать блок LTE Convolutional Decoder для декодирования данных и как сравнить аппаратно-удобный проект с результатами LTE Toolbox™. Рабочий процесс следует следующим шагам:

  1. Сгенерируйте LTE сверточно закодированные сообщения в MATLAB ®, используя LTE Toolbox.

  2. Вызов Communications Toolbox™ выполняет модуляцию BPSK, передачу через канал AWGN и демодуляцию BPSK. Результатом являются мягкие битовые значения, которые представляют логарифмические коэффициенты логарифмической правдоподобности (LLR).

  3. Квантуйте мягкие биты согласно соотношению сигнал/шум (ОСШ).

  4. Преобразуйте входные данные с рамкой в поток выборок и импортируйте поток в Simulink ®.

  5. Чтобы декодировать выборки с помощью аппаратно-удобной архитектуры, выполните модель Simulink, которая содержит блок LTE Convolutional Decoder.

  6. Экспорт потока декодированных бит в рабочее пространство MATLAB.

  7. Преобразуйте поток сэмплирования назад в данные с системой координат и сравните системы координат с исходными входными кадрами.

Вычислите ОСШ канала и создайте Системных объектов модулятора, канала и демодулятора. EbNo - отношение энергии на один незакодированный бит к спектральной плотности шума в дБ. EcNo - отношение энергии на бит канала к спектральной плотности шума в дБ. Скорость кода сверточного энкодера составляет 1/3. Поэтому каждый переданный бит содержит 1/3 бита информации.

EbNo = 10;
EcNo = EbNo - 10*log10(3);

modulator = comm.BPSKModulator;
channel = comm.AWGNChannel('EbNo',EcNo);
demodulator = comm.BPSKDemodulator('DecisionMethod','Log-likelihood ratio');

Сгенерируйте входные данные систем координат. Закодируйте данные, модулируйте сообщение и добавьте эффекты канала к полученному созвездию. Демодулируйте переданное созвездие и сгенерируйте мягкие битовые значения. Для модели, удобной для аппаратного обеспечения, преобразуйте мягкие биты в тип данных с фиксированной точкой. Оптимальный размер шага мягкого битового квантования является функцией спектральной плотности шума, No.

rng(0);
messageLength = 100;
numframes = 2;
numSoftBits = 5;

txMessages     = cell(1,numframes);
rxSoftMessages = cell(1,numframes);

No            = 10^((-EcNo)/10);
quantStepSize = sqrt(No/2^numSoftBits);

for k = 1:numframes

    txMessages{k}  = randi([0 1],messageLength,1,'int8');
    txCodeword = lteConvolutionalEncode(txMessages{k});

    modOut   = modulator.step(txCodeword);
    chanOut  = channel.step(modOut);
    demodOut = -demodulator.step(chanOut)/4;

    rxSoftMessagesDouble = demodOut./quantStepSize;
    rxSoftMessages{k} = fi(rxSoftMessagesDouble,1,numSoftBits,0);

end

Сериализуйте входные данные для модели Simulink. Оставьте достаточно времени между системами координат, чтобы каждая система координат был полностью декодируема до начала следующего. Блок LTE Convolutional Decoder принимает (2 * messageLength) + 140 циклов для завершения декодирования системы координат.

Блок LTE Convolutional Decoder ожидает, что входные данные будут содержать три закодированных бита с чередованием.

  • Удобный для аппаратного обеспечения вход: G0_1 G1_1 G2_1 G0_2 G1_2 G2_2 ... G0_n G1_n G2_n

  • Вход LTE Toolbox: G0_1 G0_2 ... G0_n G1_1 G1_2 ... G1_n G2_1 G2_2 ... G2_n

idleCyclesBetweenSamples = 0;
idleCyclesBetweenFrames  = 2 * messageLength + 140;
samplesizeIn             = 3;
interleaveSamples        = true;

[sampleIn,ctrlIn] = whdlFramesToSamples(rxSoftMessages,...
                    idleCyclesBetweenSamples,...
                    idleCyclesBetweenFrames,...
                    samplesizeIn,...
                    interleaveSamples);

Запустите модель Simulink. Из-за добавленных циклов бездействия между системами координат потоковые входные переменные включают в себя достаточно циклов, чтобы модель могла завершить декодирование обеих систем координат.

sampletime= 1;
simTime = size(ctrlIn,1);
modelname = 'ltehdlConvolutionalDecoderModel';
open(modelname);
sim(modelname);

Модель Simulink экспортирует sampleOut и ctrlOut назад в рабочее пространство MATLAB. Десериализуйте выходные выборки и сравните с декодированной системой координат.

rxMessages = whdlSamplesToFrames(sampleOut,ctrlOut);

fprintf('\nLTE Convolutional Decoder\n');
for k = 1:numframes
    numBitsDiff = sum(double(txMessages{k})-double(rxMessages{k}));
    fprintf(['  Frame %d: Behavioral and ' ...
        'HDL simulation differ by %d bits\n'], k, numBitsDiff);
end
Maximum frame size computed to be 100 samples.

LTE Convolutional Decoder
  Frame 1: Behavioral and HDL simulation differ by 0 bits
  Frame 2: Behavioral and HDL simulation differ by 0 bits

См. также

Блоки

Функции

Похожие темы