comm.TurboEncoder

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

Описание

Turbo Encoder Система object™ кодирует сообщение двоичного входа использование параллельной схемы каскадного кодирования. Эта схема кодирования использует два идентичных сверточных энкодера и добавляет биты завершения в конце закодированных битов данных.

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

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

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

Примечание

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

Конструкция

H = comm.TurboEncoder создает Системный объект, H, это кодирует двоичные данные с помощью турбо энкодера.

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

H = comm.TurboEncoder(TRELLIS, INTERLVRINDICES) создает турбо объект энкодера, H. В этой конструкции, TrellisStructure свойство установлено в TRELLIS, и свойство InterleaverIndices установлено в INTERLVRINDICES.

Свойства

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

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

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

Методы

шагЗакодируйте входной сигнал с помощью параллельной схемы каскадного кодирования
Характерный для всех системных объектов
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 Encoder. Свойства объектов соответствуют параметрам блоков.

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

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