comm.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, с заданным набором имени свойства к заданному значению. Name должен появиться в одинарных кавычках (''). Можно задать несколько аргументов пары "имя-значение" в любом порядке как 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