коммуникация. TurboDecoder

Декодируйте входной сигнал с помощью параллели, конкатенированной, декодируя схему

Описание

Система Turbo Decoder object™ декодирует входной сигнал с помощью параллели, конкатенированной, декодируя схему, которая использует декодер по опыту вероятности (APP) как составляющий декодер. И составляющие декодеры используют ту же структуру решетки и алгоритм.

Декодировать входной сигнал с помощью турбо схемы декодирования:

  1. Задайте и настройте свой турбо объект декодера. Смотрите Конструкцию.

  2. Вызовите step, чтобы декодировать двоичный сигнал согласно свойствам comm.TurboDecoder. Поведение step характерно для каждого объекта в тулбоксе.

Примечание

При запуске в R2016b, вместо того, чтобы использовать метод step, чтобы выполнить операцию, заданную Системным объектом, можно вызвать объект с аргументами, как будто это была функция. Например, y = step(obj,x) и y = obj(x) выполняют эквивалентные операции.

Конструкция

H = comm.TurboDecoder создает Системный объект, H. Этот объект использует декодер составляющей по опыту вероятности (APP), чтобы итеративно декодировать конкатенированные параллелью convolutionally закодированные входные данные.

H = comm.TurboDecoder(Name, Value) создает турбо объект декодера, H, с заданным набором имени свойства к заданному значению. Имя должно находиться внутри одинарных кавычек (' '). Можно задать несколько аргументов пары "имя-значение" в любом порядке как Name1,Value1,…,NameN,ValueN.

H = comm.TurboDecoder(TRELLIS, INTERLVRINDICES, NUMITER) создает турбо объект декодера, H, с набором свойств TrellisStructure к TRELLIS, набором свойств InterleaverIndices к INTERLVRINDICES и набором свойств NumIterations к NUMITER.

Свойства

TrellisStructure

Структура решетки составляющего сверточного кода

Задайте решетку как структуру MATLAB, которая содержит описание решетки составляющего сверточного кода. Используйте функцию istrellis, чтобы проверять, является ли структура допустимой структурой решетки. Значением по умолчанию является результат poly2trellis(4, [13 15], 13).

InterleaverIndicesSource

Источник interleaver индексов

Задайте источник interleaver индексов как один из Property | Input port. Когда вы устанавливаете это свойство на Input port, объект использует interleaver индексы, заданные в качестве входа к методу шага. Когда вы устанавливаете это свойство на Property, объект использует interleaver индексы, которые вы задаете в свойстве InterleaverIndices. Когда вы устанавливаете это свойство на Input port, объектные сигналы переменного размера процессов.

Значение по умолчанию: Property

InterleaverIndices

Индексы Interleaver

Укажите, что отображение раньше переставляло входные биты в энкодере как вектор-столбец целых чисел. Это отображение является вектором с числом элементов, равным длине, L, вывода метода шага. Каждый элемент должен быть целым числом между 1 и L без повторных значений.

Значение по умолчанию: (64:-1:1).'.

Algorithm

Декодирование алгоритма

Задайте алгоритм декодирования, который объект использует для декодирования в качестве одного из True APP | Max* | Max. Когда вы устанавливаете это свойство на True APP, объектные реализации, верные по опыту декодирование вероятности. Когда вы устанавливаете это свойство на любое другое значение, объект использует приближения, чтобы увеличить скорость вычислений.

Значение по умолчанию: True APP

NumScalingBits

Количество масштабирующихся битов

Задайте количество битов составляющее использование декодеров, чтобы масштабировать входные данные, чтобы не терять точность во время вычислений. Составляющие декодеры умножают вход на 2 NumScalingBits и делят предварительный вывод на тот же фактор. Свойство NumScalingBits должно быть скалярным целым числом между 0 и 8. Это свойство применяется, когда вы устанавливаете свойство Algorithm на Max*.

Значение по умолчанию: 3

NumIterations

Количество декодирования итераций

Задайте количество декодирования итераций, используемых для каждого вызова метода step. Объект выполняет итерации, и обеспечьте обновления логарифмических отношений правдоподобия (LLR) незакодированных выходных битов. Вывод метода шага является трудным решением вывод итогового обновления LLR.

Значение по умолчанию: 6

Методы

шагДекодируйте входной сигнал с помощью параллели, конкатенированной, декодируя схему
Характерный для всех системных объектов
release

Позвольте изменения значения свойства Системного объекта

Примеры

развернуть все

Моделируйте передачу и прием данных о BPSK по каналу AWGN с помощью турбо кодирования и декодирования.

Установите Eb/No (дБ) и структурируйте параметры длины. Установите генератор случайных чисел на его состояние по умолчанию гарантировать, что результаты повторяемы.

EbNo= -6;
frmLen = 256;
rng default

Вычислите шумовое отклонение от отношения Eb/No. Сгенерируйте случайные interleaver индексы.

noiseVar = 10^(-EbNo/10);
intrlvrIndices = randperm(frmLen);

Создайте турбо пару энкодера и декодера использование структуры решетки, данной poly2trellis(4,[13 15 17],13) и intrlvrIndices.

hTEnc = comm.TurboEncoder('TrellisStructure',poly2trellis(4, ...
    [13 15 17],13),'InterleaverIndices',intrlvrIndices);

hTDec = comm.TurboDecoder('TrellisStructure',poly2trellis(4, ...
    [13 15 17],13),'InterleaverIndices',intrlvrIndices, ...
    'NumIterations',4);

Создайте модулятор BPSK и пару демодулятора, где демодулятор выходные параметры мягкие биты определил при помощи метода логарифмического отношения правдоподобия.

hMod = comm.BPSKModulator;
hDemod = comm.BPSKDemodulator('DecisionMethod','Log-likelihood ratio', ...
    'Variance',noiseVar);

Создайте объект канала AWGN и объект коэффициента ошибок.

hChan = comm.AWGNChannel('EbNo',EbNo);
hError = comm.ErrorRate;

Основной цикл обработки выполняет следующие шаги:

  • Сгенерируйте двоичные данные

  • Турбо кодирует данные

  • Модулируйте закодированные данные

  • Передайте модулируемый сигнал через канал AWGN

  • Демодулируйте сигнал с шумом с помощью LLR, чтобы вывести мягкие биты

  • Турбо декодирует демодулируемые данные. Поскольку побитовое отображение от демодулятора напротив ожидаемого турбо декодером, вход декодера должен использовать инверсию демодулируемого сигнала.

  • Вычислите ошибочную статистику

for frmIdx = 1:100
    data = randi([0 1],frmLen,1);
    encodedData = step(hTEnc,data);
    modSignal = step(hMod,encodedData);
    receivedSignal = step(hChan,modSignal);
    demodSignal = step(hDemod,receivedSignal);
    receivedBits = step(hTDec,-demodSignal);
    errorStats = step(hError,data,receivedBits);
end

Отобразите ошибочные данные.

fprintf('Bit error rate = %5.2e\nNumber of errors = %d\nTotal bits = %d\n', ...
    errorStats)
Bit error rate = 2.34e-04
Number of errors = 6
Total bits = 25600

Моделируйте сквозную линию связи, использующую 16-QAM турбокоды использования в канале AWGN. Пакетные размеры случайным образом выбраны из ряда {500, 1000, 1500}. Поскольку пакетный размер отличается, предоставьте interleaver индексы турбо объектам энкодера и декодера как вход к их связанным вызовам объектов.

Установите порядок модуляции и Eb/No (дБ) параметры. Установите генератор случайных чисел на его состояние по умолчанию мочь повторить результаты.

M = 16;
EbNo= -2;
rng default

Вычислите шумовое отклонение от отношения Eb/No и порядка модуляции.

noiseVar = 10^(-EbNo/10)*(1/log2(M));

Создайте турбо пару энкодера и декодера. interleaver индексы предоставляются входным параметром объекту, когда выполняется.

turboEnc = comm.TurboEncoder('InterleaverIndicesSource','Input port');
turboDec = comm.TurboDecoder('InterleaverIndicesSource','Input port','NumIterations',4);

Создайте объект канала AWGN и объект коэффициента ошибок.

awgnChan = comm.AWGNChannel('EbNo',EbNo,'BitsPerSymbol',log2(M));
errRate = comm.ErrorRate;

Цикл обработки выполняет следующие шаги:

  • Выберите случайный пакетный размер и сгенерируйте interleaver индексы

  • Сгенерируйте случайные двоичные данные

  • Турбо кодирует данные

  • Примените 16-QAM модуляцию, нормируйте среднюю степень сигнала.

  • Передайте модулируемый сигнал через канал AWGN

  • Демодулируйте сигнал с шумом при помощи метода логарифмического отношения правдоподобия, выведите мягкие биты, нормируйте среднюю степень сигнала

  • Турбо декодирует данные

  • Вычислите ошибочную статистику

numPkts = 100;
for pktIdx = 1:numPkts
    % Randomly select one of three possible packet sizes
    pktLen = 500*randi([1 3],1,1);
    
    % Determine the interleaver indices given the packet length
    intrlvrIndices = randperm(pktLen);
    
    % Generate random binary data
    data = randi([0 1],pktLen,1);
    
    % Turbo encode the data
    encodedData = turboEnc(data,intrlvrIndices);
   
    % Modulate the encoded data
    modSignal = qammod(encodedData,M,'InputType','bit','UnitAveragePower',true);
    
    % Pass the signal through the AWGN channel
    receivedSignal = awgnChan(modSignal);
    
    % Demodulate the received signal
    demodSignal = qamdemod(receivedSignal,M,'OutputType','llr', ...
        'UnitAveragePower',true,'NoiseVariance',noiseVar);
    
    % Turbo decode the demodulated signal. Because the bit mapping from the
    % demodulator is opposite that expected by the turbo decoder, the
    % decoder input must use the inverse of demodulated signal.
    receivedBits = turboDec(-demodSignal,intrlvrIndices);
    
    % Calculate the error statistics
    errorStats = errRate(data,receivedBits);
end

Отобразите ошибочную статистику.

fprintf('Bit error rate = %5.2e\nNumber of errors = %d\nTotal bits = %d\n', ...
    errorStats)
Bit error rate = 3.51e-04
Number of errors = 33
Total bits = 94000

Алгоритмы

Этот объект реализует алгоритм, входные параметры и выходные параметры, описанные на странице с описанием блока Turbo Decoder. Свойства объектов соответствуют параметрам блоков.

Расширенные возможности

Представленный в R2012a