MATLAB è Simulink íà ðóññêîì

https://hub.exponenta.ru/
 

Обработка сигналов и изображений\Communications Toolbox

Список функций CommunicationsToolbox: Низкоуровневые функции помехоустойчивого кодирования и декодирования

  В оглавление \ К следующему разделу \ К предыдущему разделу
RANDINTRLV
Случайное блоковое перемежение

Синтаксис:

intrlvd = randintrlv(data,state)

Описание:

intrlvd = randintrlv(data,state)

Переставляет элементы входного массива data случайным образом. Входной параметр state задает начальное состояние генератора случайных чисел, который используется при расчете порядка перестановки. Перестановки, генерируемые для любого фиксированного значения параметра state, являются повторяемыми и обратимыми, однако разные значения state дадут разные перестановки. Если входной параметр data является матрицей, ее столбцы обрабатываются независимо.

Примеры

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

Эти три ошибки превосходят корректирующую способность используемого кода Хэмминга (7, 4). Однако данный пример показывает, что при использовании этого же кода Хэмминга в сочетании с перемежением система оказывается способна правильно восстановить исходное сообщение, несмотря на наличие пакета из шести ошибок. Улучшение помехоустойчивости происходит здесь благодаря тому, что перемежение перераспределяет ошибки во времени, превращая пакетные ошибки в одиночные, так что число ошибок в каждом кодовом слове не превосходит корректирующей способности используемого кода.

st1 = 27221; st2 = 4831; % Начальные состояния генератора случайных чисел
n = 7; k = 4;                            % Параметры кода Хэмминга
msg = randint(k*500,1,2,st1);            % Кодируемые данные
code = encode(msg,n,k,'hamming/binary'); % Кодирование
% Создаем пакет ошибок, затрагивающий два соседних кодовых слова
errors = zeros(size(code)); errors(n-2:n+3) = [1 1 1 1 1 1];

% Вариант с перемежением
%-----------------------
inter = randintrlv(code,st2);     % Перемежение
inter_err = bitxor(inter,errors); % Добавляем пакет ошибок
deinter = randdeintrlv(inter_err,st2); % Деперемежение
decoded = decode(deinter,n,k,'hamming/binary'); % Декодирование
disp('Число и вероятность ошибок при использовании перемежения:');
[number_with,rate_with] = biterr(msg,decoded) % Статистика ошибок

% Вариант без перемежения
%------------------------
code_err = bitxor(code,errors); % Добавляем пакет ошибок
decoded = decode(code_err,n,k,'hamming/binary'); % Декодирование
disp('Число и вероятность ошибок без использования перемежения:');
[number_without,rate_without] = biterr(msg,decoded) % Статистика ошибок

Далее приведен результат работы данного примера.

Число и вероятность ошибок при использовании перемежения:

number_with =

     0


rate_with =

     0

Число и вероятность ошибок без использования перемежения:

number_without =

     4


rate_without =

    0.0020

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

Сопутствующие функции: randdeintrlv

  В оглавление \ К следующему разделу \ К предыдущему разделу

 

Поиск по сайту:


Система Orphus