Перемежение

Блочное перемежение

Функции перемежения блоков

Блочный перемежитель принимает набор символов и переставляет их, не повторяя и не опуская никаких символов в наборе. Количество символов в каждом наборе фиксировано для данного перемежителя. Операция перемежителя над набором символов не зависит от его операции над всеми другими наборами символов.

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

Каждая функция перемежителя имеет соответствующую функцию перемежителя. В типичном использовании пар перемежитель/обратный перемежитель, входы обратного перемежителя совпадают с входами перемежителя, за исключением данных, которые переставляются.

Блочный перемежитель принимает набор символов и переставляет их, не повторяя и не опуская никаких символов в наборе. Количество символов в каждом наборе фиксировано для данного перемежителя.

Набор блочных перемежителей в этом тулбоксе включает общий блочный перемежитель, а также несколько особых случаев. Каждая функция перемежителя особых случаев использует тот же вычислительный код, что и функция перемежителя общих блоков, но предоставляет синтаксис, который больше подходит для специального случая. Функции перемежителя описаны ниже.

Тип перемежителяФункция перемежителяОписание
Общий перемежитель блоковintrlvИспользует таблицу сочетания, заданную явно, в качестве входного параметра.
Алгебраический перемежительalgintrlvПроизводит таблицу сочетаний алгебраически, используя метод Такешиты-Костелло или Уэлча-Костаса. Эти методы описаны в [4].
Спиральный перемежитель сканаhelscanintrlvЗаполняет матрицу строкой данных, а затем отправляет содержимое матрицы в выход по спирали.
Матричный перемежительmatintrlvЗаполняет матрицу с элементами данных по строкам, а затем отправляет содержимое матрицы в выходной столбец по столбцам.
Случайный перемежительrandintrlvВыбирает таблицу сочетаний случайным образом, используя исходный вход состояния, который вы предоставляете.

Типы Блока перемежителей.  Набор блочных перемежителей в этой библиотеке включает общую пару перемежитель/обратный перемежитель, а также несколько особых случаев. Каждый блок специального случая использует тот же вычислительный код, что и его более общий аналог, но предоставляет интерфейс, который больше подходит для специального случая.

Блок Matrix Interleaver выполняет перемежение блоков, заполняя матрицу с входными символами по строкам и затем отправляя содержимое матрицы в выходной столбец по столбцам. Например, если перемежитель использует матрицу 2 на 3 для выполнения внутренних расчетов, то для входа      [1 2 3 4 5 6]блок формирует выход      [1 4 2 5 3 6].

Блок Random Interleaver выбирает таблицу сочетаний случайным образом, используя параметр Initial seed, который вы предоставляете в маске блока. Используя то же Initial seed значение в соответствующем блоке Random Deinterleaver, можно восстановить их исходное упорядоченное расположение у перестановочных символов.

Блок Algebraic Interleaver использует таблицу сочетаний, которая алгебраически выведена. Он поддерживает перемежители Такешиты-Костелло и перемежители Уэлча-Костаса. Эти перемежители описаны в [4].

Улучшите частоту ошибок, используя Блок чередование в MATLAB

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

Три ошибки превышают возможность исправления ошибок кода Хемминга. Однако пример показывает, что, когда код Hamming объединяется с перемежителем, эта система способна восстановить исходное сообщение, несмотря на 6-битный всплеск ошибок. Улучшение эффективности происходит потому, что перемежение эффективно распределяет ошибки между различными кодовыми словами, так что количество ошибок на кодовое слово находится в пределах возможности исправления ошибок кода.

st1 = 27221; st2 = 4831; % States for random number generator
n = 7; k = 4; % Parameters for Hamming code
msg = randi([0 1],k*500,1); % Data to encode
code = encode(msg,n,k,'hamming/binary'); % Encoded data
% Create a burst error that will corrupt two adjacent codewords.
errors = zeros(size(code)); errors(n-2:n+3) = [1 1 1 1 1 1];

% With Interleaving
%------------------
inter = randintrlv(code,st2); % Interleave.
inter_err = bitxor(inter,errors); % Include burst error.
deinter = randdeintrlv(inter_err,st2); % Deinterleave.
decoded = decode(deinter,n,k,'hamming/binary'); % Decode.
disp('Number of errors and error rate, with interleaving:');
[number_with,rate_with] = biterr(msg,decoded) % Error statistics

% Without Interleaving
%---------------------
code_err = bitxor(code,errors); % Include burst error.
decoded = decode(code_err,n,k,'hamming/binary'); % Decode.
disp('Number of errors and error rate, without interleaving:');
[number_without,rate_without] = biterr(msg,decoded) % Error statistics

Ниже приводятся выходы из примера.

Number of errors and error rate, with interleaving:

number_with =

     0


rate_with =

     0

Number of errors and error rate, without interleaving:

number_without =

     4


rate_without =

    0.0020

Улучшите частоту ошибок, используя Блок чередование в Simulink

В следующем примере показано, как использовать перемежитель для улучшения частоты ошибок, когда канал производит пакеты ошибок.

Прежде чем запускать модель, вы должны создать двоичный вектор, который симулирует всплески ошибок, как описано в Улучшите Вероятность Ошибок Используя Блок Перемежение в Simulink. Блок Signal From Workspace импортирует этот вектор из рабочего пространства MATLAB в модель, где блок Logical Operator выполняет XOR вектора с сигналом.

Чтобы открыть завершенную модель, введите doc_interleaver в MATLAB® командная строка. Чтобы создать модель, соберите и сконфигурируйте эти блоки:

  • Bernoulli Binary Generator, в поддиапазоне «Случайные источники данных» библиотеки Comm Sources

    • Установите флажок рядом с Frame-based outputs.

    • Установите Samples per frame значение 4.

  • Hamming Encoder, в Блок подлибрарии библиотеки Выявления ошибок и Коррекции. Используйте параметры по умолчанию

  • Buffer, в подлибрарии Buffers библиотеки Signal Management в DSP System Toolbox™

    • Установите Output buffer size (per channel) значение 84.

  • Random Interleaver, в подлибрарии блок библиотеки Interleaving in Communications Toolbox™

    • Установите Number of elements значение 84.

  • Logical Operator (Simulink), в библиотеке Математические Операции

    • Установите Operator значение XOR.

  • Signal From Workspace, в библиотеке Sources продукта DSP System Toolbox

    • Установите Signal значение errors.

    • Установите Sample time значение 4/7.

    • Установите Samples per frame значение 84.

  • Random Deinterleaver, в подлибрарии блок библиотеки Interleaving в Communications Toolbox

    • Установите Number of elements значение 84.

  • Buffer, в подфрагменте Buffers библиотеки Signal Management в DSP System Toolbox

    • Установите Output buffer size (per channel) значение 7.

  • Hamming Decoder, в Блок подлибрарии библиотеки Выявления ошибок и Коррекции. Используйте параметры по умолчанию.

  • Error Rate Calculation, в библиотеке Comm Sinks

    • Установите Receive delay значение (4/7)*84.

    • Установите Computation delay значение 100.

    • Установите Output data значение Port.

  • Display (Simulink), в библиотеке Simulink Sinks. Используйте параметры по умолчанию.

На вкладке Simulation, в разделе Simulate, установите Stop time равным length(errors). Раздел Simulate появляется на нескольких вкладках.

Создание вектора ошибок.  Перед запуском модели используйте следующий код, чтобы создать двоичный вектор в рабочем пространстве MATLAB. Модель использует этот вектор, чтобы симулировать пакеты ошибок. Вектор содержит блоки трех 1с, представляющие пакеты ошибок, с случайными интервалами. Расстояние между двумя последовательными блоками 1с является случайным целым числом от 1 до 80.

errors=zeros(1,10^4);
n=1;
while n<10^4-80;
n=n+floor(79*rand(1))+3;
errors(n:n+2)=[1 1 1];
end

Чтобы определить отношение числа 1с к общему количеству символов в векторе errors войти

sum(errors)/length(errors)

Ваш ответ должен быть приблизительно 3/43, или 0698, поскольку после каждой последовательности из трех 1с ожидаемое расстояние до следующей последовательности 1с составляет 40. Следовательно, вы ожидаете увидеть три 1с в 43 терминах последовательности. Если бы в модели не было коррекции ошибок, вероятность битовой ошибки составляла бы приблизительно 0,0698.

Когда вы запускаете симуляцию с моделью, вероятность ошибки составляет приблизительно 0.19, что показывает улучшение из-за коррекции и перемежения ошибок. Эффект перемежения можно увидеть, удалив блоки Случайный перемежитель и Случайный перемежитель из модели, соединив линии и запустив другую симуляцию. Вероятность битовой ошибки выше без чередования, потому что код Хемминга может исправить только одну ошибку в каждом кодовом слове.

Сверточное перемежение

Функции сверточного перемежения

Сверточный перемежитель состоит из набора регистров сдвига, каждый с фиксированной задержкой. В типичном сверточном перемежителе задержки являются неотрицательными целыми кратными фиксированному целому числу (хотя общий мультиплексированный перемежитель допускает неограниченные значения задержки). Каждый новый символ из вектора входа поступает в следующий регистр сдвига, и самый старый символ в этом регистре становится частью вектора выхода. Сверточный перемежитель имеет память; то есть его операция зависит не только от текущих символов, но и от предыдущих символов.

Схема ниже изображает структуру общего сверточного перемежителя, показывая набор регистров сдвига и их значения задержки D (1), D (2),..., D (N). k-й регистр сдвига содержит D (k) символов, где k = 1,2,...,N. Функции сверточного перемежения в этом тулбоксе имеют входные параметры, которые указывают количество регистров сдвига и задержку для каждого регистра сдвига.

Communications Toolbox реализует функции сверточного перемежения с помощью Simulink® блоки, системные объекты и функции MATLAB.

Набор сверточных перемежителей в этом продукте включает общую пару перемежитель/обратный перемежитель, а также несколько особых случаев. Каждая функция специального случая использует тот же вычислительный код, что и его более общий аналог, но предоставляет синтаксис, который больше подходит для специального случая. Особые случаи описаны ниже.

Тип перемежителяПеремежениеОписание
Общий мультиплексированный перемежительmuxintrlvРазрешает неограниченные значения задержки для набора регистров сдвига.
Сверточный перемежительconvintrlvЗначения задержки для набора регистров сдвига являются неотрицательными целыми множителями на фиксированное целое число, которое вы задаете.
Спиральный перемежительhelintrlvЗаполняет массив входа символами по спирали и опустошает строку массива по строкам.

helscanintrlv функции и helintrlv обе функции используют спиральный массив для внутренних расчетов. Однако эти две функции имеют некоторые важные различия:

  • helintrlv использует массив с неограниченным количеством строк, размещает входные символы в массиве вдоль столбцов, выводит некоторые символы, которые не из текущего входа, и оставляет некоторые входные символы в массиве, не помещая их в выход.

  • helscanintrlv использует матрицу фиксированного размера, размещает входные символы в массиве между строками и выводит все входные символы, не используя значений по умолчанию или значений из предыдущего вызова.

Типы сверточных перемежителей.  Набор сверточных перемежителей в этой библиотеке включает общую пару перемежитель/перемежитель, а также несколько особых случаев. Каждый блок специального случая использует тот же вычислительный код, что и его более общий аналог, но предоставляет интерфейс, который больше подходит для специального случая.

Самый общий блок в этой библиотеке является General Multiplexed Interleaver блоком, который позволяет произвольные значения задержки для набора регистров сдвига. Для реализации предыдущей схемы с использованием этого блока используйте параметр Interleaver delay [D (1 ); D (2  );...; D (N)].

Более конкретным является Convolutional Interleaver блок, в котором значение задержки для k-го регистра сдвига (k-1) умножает на параметр Register length step блока. Количество регистров сдвига в этом блоке является значением параметра Rows of shift registers.

Наконец, блок Helical Interleaver поддерживает специальный случай сверточного перемежения, который заполняет массив символами по спирали и опустошает строку массива по строкам. Чтобы сконфигурировать этот перемежитель, используйте параметр Number of columns of helical array, чтобы задать ширину массива, и используйте параметры Group size и Helical array step size, чтобы определить, как символы помещаются в массив. Для получения дополнительной информации и примера см. страницу с описанием блока Helical Interleaver.

Задержки сверточных перемежителей

После того, как последовательность символов проходит через сверточный перемежитель и соответствующий сверточный перемежитель, восстановленная последовательность отстает от исходной последовательности. Задержка, измеренная в символах, между исходной и восстановленной последовательностями, показана в таблице ниже. Имена переменных во втором столбце (delay, nrows, slope, col, ngrp, и stp) см. входы на странице с описанием каждой функции.

Задержки пар перемежителя/обратного перемежителя

Пара перемежителя/перемежителяЗадержка между исходной и восстановленной последовательностями
muxintrlv, muxdeintrlvlength(delay)*max(delay)
convintrlv, convdeintrlvnrows*(nrows-1)*slope
helintrlv, heldeintrlvcol*ngrp*ceil(stp*(col-1)/ngrp)

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

Количество регистров сдвига × Максимальная задержка среди всех регистров сдвига

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

Примечание

Для правильной синхронизации задержка в вашей модели между выходом перемежителя и входом обратного перемежителя должна быть целым числом, кратным количеству регистров сдвига. Можно использовать блок DSP System Toolbox Delay, чтобы при необходимости настроить задержки вручную.

Блок Сверточного Перемежителя

В частном случае, реализованном парой Convolutional Interleaver/Convolutional Deinterleaver, количество регистров сдвига является Rows of shift registers параметром, в то время как максимальная задержка среди всех регистров сдвига является

B × (N-1)

где B - Register length step параметр, а N - Rows of shift registers параметр.

Блок Спирального Перемежителя

В частном случае, реализованном парой Helical Interleaver/Helical Deinterleaver, задержка между восстановленной последовательностью и исходной последовательностью является

CNs(C1)N

где C - Number of columns in helical array параметр, N - Group size параметр, а s - Helical array step size параметр.

Эффект задержек на восстановление сверточно чередующихся данных с использованием MATLAB.  Если вы используете сверточный перемежитель, за которым следует соответствующий сверточный перемежитель, то ненулевая задержка означает, что восстановленные данные (то есть выход от перемежителя) не совпадают с исходными данными (то есть входом к перемежителю). Если вы сравниваете два набора данных непосредственно, то необходимо учесть задержку при помощи соответствующих операций усечения или заполнения.

Вот несколько типичных способов компенсировать задержку D в паре перемежитель/обратный перемежитель:

  • Перемежите версию исходных данных, которая заполнена D дополнительными символами в конце. Перед сравнением исходных данных с восстановленными данными опускайте первые символы D восстановленных данных. В этом подходе все исходные символы появляются в восстановленных данных.

  • Перед сравнением исходных данных с восстановленными данными опускайте последние символы D исходных данных и первые символы D восстановленных данных. В этом подходе некоторые исходные символы остаются в регистрах сдвига deinterleaver и не появляются в восстановленных данных.

Следующий код иллюстрирует эти подходы путем вычисления частоты ошибок символа для операции перемежения/перемежения.

x = randi([0 63],20,1); % Original data
nrows = 3; slope = 2; % Interleaver parameters
D = nrows*(nrows-1)*slope; % Delay of interleaver/deinterleaver pair
hInt   = comm.ConvolutionalInterleaver('NumRegisters', nrows, ...
                    'RegisterLengthStep', slope);
hDeint = comm.ConvolutionalDeinterleaver('NumRegisters', nrows, ...
                    'RegisterLengthStep', slope);

% First approach.
x_padded = [x; zeros(D,1)]; % Pad x at the end before interleaving.
a1 = step(hInt, x_padded); % Interleave padded data.

b1 = step(hDeint, a1)
% Omit input padding and the first D symbols of the recovered data and
% compare
servec1 = step(comm.ErrorRate('ReceiveDelay',D),x_padded,b1);
ser1 = servec1(1)

% Second approach.
release(hInt); release(hDeint)
a2 = step(hInt,x); % Interleave original data.
b2 = step(hDeint,a2)
% Omit the last D symbols of the original data and the first D symbols of
% the recovered data and compare.
servec2 = step(comm.ErrorRate('ReceiveDelay',D),x,b2);
ser2 = servec2(1)

Выходы показаны ниже. Нулевые значения ser1 и ser2 указать, что скрипт правильно выровнял исходные и восстановленные данные перед вычислением вероятности ошибок символа. Однако заметьте из длин b1 и b2 что два подхода к выравниванию приводят к различным объемам данных с обратным перемежением.

b1 =

     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
    59
    42
     1
    28
    52
    54
    43
     8
    56
     5
    35
    37
    48
    17
    28
    62
    10
    31
    61
    39


ser1 =

     0


b2 =

     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
    59
    42
     1
    28
    52
    54
    43
     8


ser2 =

     0

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

Сверточное перемежение и перемежение с использованием последовательности последовательных целых чисел в MATLAB

Приведенный ниже пример иллюстрирует сверточное перемежение и обращенное перемежение с использованием последовательности последовательных целых чисел. Это также иллюстрирует внутреннюю задержку пары перемежитель/обратный перемежитель.

x = [1:10]'; % Original data
delay = [0; 1; 2]; % Set delays of three shift registers.
hInt = comm.MultiplexedInterleaver('Delay', delay);
hDeint = comm.MultiplexedDeinterleaver('Delay', delay);
y = step(hInt,x) % Interleave.
z = step(hDeint,y) % Deinterleave.

В этом примере, muxintrlv функция инициализирует три регистра сдвига к значениям [], [0], и [0 0], соответственно. Затем функция обрабатывает входные данные [1:10]', выполнением внутренних расчетов, как указано в таблице ниже.

Вход токаРегистр сдвига токаТок ВыходаСодержимое регистров сдвига
111
[]
[0]
[0 0]
220
[]
[2]
[0 0]
330
[]
[2]
[0 3]
414
[]
[2]
[0 3]
522
[]
[5]
[0 3]
630
[]
[5]
[3 6]
717
[]
[5]
[3 6]
825
[]
[8]
[3 6]
933
[]
[8]
[6 9]
10110
[]
[8]
[6 9]

Ниже приведены выходы из примера.

y =

     1
     0
     0
     4
     2
     0
     7
     5
     3
    10


state_y =

    value: {3x1 cell}
    index: 2


z =

     0
     0
     0
     0
     0
     0
     1
     2
     3
     4

Заметьте, что столбец «Current Output» в таблице выше согласен со значениями в векторе y. Кроме того, последняя строка таблицы выше указывает, что последний регистр сдвига, обработанный для данного набора данных, является первым регистром сдвига. Это согласуется со значением 2 для state_y.index, что указывает на то, что любые дополнительные входные данные будут направлены во второй сдвиг регистр. Можно опционально проверить, что значения состояний, перечисленные в state_y.value соответствовать записи «Contents of Shift Registers» в последней строке таблицы путем ввода state_y.value{:} в Командном окне после выполнения примера.

Другой функцией, которая должна быть замечена о выходе примера, является то, что z содержит шесть нулей в начале, прежде чем содержать какие-либо символы из исходного набора данных. Шесть нулей иллюстрируют, что задержка этой пары сверточного перемежителя/обратного перемежителя length(delay)*max(delay) = 3*2 = 6. Для получения дополнительной информации о задержках смотрите Задержки сверточных перемежителей.

Сверточное перемежение и перемежение с использованием последовательности последовательных целых чисел в Simulink

Приведенный ниже пример иллюстрирует сверточное перемежение и обращенное перемежение с использованием последовательности последовательных целых чисел. Это также иллюстрирует внутреннюю задержку и эффект начальных условий перемежения блоков.

Чтобы открыть модель, введите doc_convinterleaver в командной строке MATLAB. Чтобы создать модель, соберите и сконфигурируйте эти блоки:

  • Ramp (Simulink), в библиотеке Simulink Sources. Используйте параметры по умолчанию.

  • Zero-Order Hold (Simulink), в дискретной библиотеке Simulink. Используйте параметры по умолчанию.

  • Convolutional Interleaver

    • Установите Rows of shift registers значение 3.

    • Установите Initial conditions значение [-1 -2 -3]'.

  • Convolutional Deinterleaver

    • Установите Rows of shift registers значение 3.

    • Установите Initial conditions значение [-1 -2 -3]'.

  • Две копии To Workspace (Simulink), в библиотеке Simulink Sinks

    • Установите Variable name значение interleaved и restored, соответственно, в двух копиях этого блока.

    • Установите Save format значение Array в каждой из двух копий этого блока.

Соедините блоки как показано на предыдущем рисунке. На вкладке Simulation, в разделе Simulate, установите Stop time равным 20. Раздел Simulate появляется на нескольких вкладках. Запустите симуляцию и выполните следующую команду:

comparison = [[0:20]', interleaved, restored]

comparison =

     0     0    -1
     1    -2    -2
     2    -3    -3
     3     3    -1
     4    -2    -2
     5    -3    -3
     6     6    -1
     7     1    -2
     8    -3    -3
     9     9    -1
    10     4    -2
    11    -3    -3
    12    12     0
    13     7     1
    14     2     2
    15    15     3
    16    10     4
    17     5     5
    18    18     6
    19    13     7
    20     8     8

В этом выходе первый столбец содержит исходную последовательность символов. Второй столбец содержит чередующуюся последовательность, а третий - восстановленную последовательность.

Отрицательные числа в чередующихся и восстановленных последовательностях происходят из начальных условий блоков перемежения, а не из исходных данных. Первый из исходных символов появляется в восстановленной последовательности только после задержки в 12 символов. Задержка комбинации перемежитель-перемежитель является продуктом количества регистров сдвига (3) и максимальной задержки среди всех регистров сдвига (4).

Для аналогичного примера, который также указывает содержимое регистров сдвига на каждом шаге процесса, смотрите Сверточное перемежение и перемежение с использованием последовательности последовательных целых чисел в MATLAB.

Выбранная библиография для перемежения

[1] Berlekamp, E.R., and P. Tong, «Improved Interleavers for Algebraic Block Codes», U.S. Patent 4559625, Dec. 17, 1985.

[2] Clark, George C. Jr., and J. Bibb Cain, Error-Correction Coding for Digital Communications, New York, Plenum Press, 1981.

[3] Форни, Г. Д. Младший, «Burst-Correcting Codes for the Classic Bursty Channel», IEEE Transactions on Communications, vol. COM-19, October 1971, pp. 772-781.

[4] Хигард, Крис и Стивен Б. Уикер, Turbo Coding, Boston, Kluwer Academic Publishers, 1999.

[5] Ramsey, J. L, «Realization of Optimum Interleavers», IEEE Transactions on Information Theory, IT-16 (3), May 1970, pp. 338-345.

[6] Такешита, О. Я. и Д. Дж. Костелло-младший, «Новые классы алгебраических перемежителей для турбокодов», Proc. 1998 IEEE International Symposium on Information Theory, Boston, 16-21 августа 1998 года. стр 419.