В этом примере показано, как использовать блок LTE Convolutional Decoder для декодирования данных и как сравнить аппаратно-удобный проект с результатами LTE Toolbox™. Рабочий процесс следует следующим шагам:
Сгенерируйте LTE сверточно закодированные сообщения в MATLAB ®, используя LTE Toolbox.
Вызов Communications Toolbox™ выполняет модуляцию BPSK, передачу через канал AWGN и демодуляцию BPSK. Результатом являются мягкие битовые значения, которые представляют логарифмические коэффициенты логарифмической правдоподобности (LLR).
Квантуйте мягкие биты согласно соотношению сигнал/шум (ОСШ).
Преобразуйте входные данные с рамкой в поток выборок и импортируйте поток в Simulink ®.
Чтобы декодировать выборки с помощью аппаратно-удобной архитектуры, выполните модель Simulink, которая содержит блок LTE Convolutional Decoder.
Экспорт потока декодированных бит в рабочее пространство MATLAB.
Преобразуйте поток сэмплирования назад в данные с системой координат и сравните системы координат с исходными входными кадрами.
Вычислите ОСШ канала и создайте Системных объектов модулятора, канала и демодулятора. 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
lteConvolutionalDecode
(LTE Toolbox)