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