MATLAB.Exponenta
MATLAB и Simulink на русском
Технологии разработки и отладки
		сложных технических систем
Обработка сигналов и изображений\Communications Toolbox

Список функций CommunicationsToolbox: Помехоустойчивое кодирование и декодирование

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

VITDEC
Декодирование сверточного кода
с помощью алгоритма Витерби

Синтаксис:

decoded = vitdec(code,trellis,tblen,opmode,dectype);
decoded = vitdec(code,trellis,tblen,opmode,'soft',nsdec);
decoded = vitdec(...,'cont',...,initmetric,initstates,initinputs);
[decoded, finalmetric, finalstates, finalinputs] = vitdec(...,'cont',...);

Описание:

  • decoded = vitdec(code,trellis,tblen,opmode,dectype)

Производит декодирование вектора code с помощью алгоритма Витерби. MATLAB-структура trellis описывает таблицу переходов используемого сверточного кода. Подробная информация о назначении полей этой структуры приведена на странице с описанием функции istrellis. Входной вектор code может содержать один или несколько символов, каждый из которых состоит из log2(trellis.numOutputSymbols) бит. Результат декодирования — выходной двоичный вектор decoded — содержит столько же символов, сколько и входной вектор code, при этом каждый декодированный символ состоит из log2(trellis.numInputSymbols) бит. Скалярный входной параметр tblen — положительное целое число, задающее глубину просмотра решетки при декодировании.

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

Таблица 1. Возможные значения входного параметра opmode

Значение

Смысл

'trunc' Начальное внутреннее состояние кодера считается нулевым. Декодер производит обратную трассировку от состояния с наилучшей метрикой
'term' Начальное и конечное внутренние состояния кодера считаются нулевыми. Декодер производит обратную трассировку от нулевого внутреннего состояния
'cont' Начальное внутреннее состояние кодера считается нулевым. Декодер производит обратную трассировку от состояния с наилучшей метрикой. Декодированные символы появляются в выходном векторе с задержкой на tblen символов

Строковый параметр dectype задает тип декодирования, используемый декодером. От значения этого параметра зависит и вид требуемых входных данных в векторе code. Возможные значения данного параметра приведены в табл. 2.

Таблица 2. Возможные значения входного параметра dectype

Значение

Смысл

'unquant' Вектор code содержит вещественные числа, при этом 1 соответствует логическому нулю, а –1 представляет логическую единицу (жесткое декодирование)
'hard' Вектор code содержит двоичные данные, то есть каждый из его элементов может быть равен нулю или единице (жесткое декодирование)
'soft' Мягкое декодирование, описание синтаксиса для данного режима приводится ниже. Наличие входного параметра nsdec в этом случае является обязательным

Синтаксис для реализации мягкого декодирования

  • decoded = vitdec(code,trellis,tblen,opmode,'soft',nsdec)

Производит мягкое декодирование вектора code. Входной вектор code должен содержать целые числа в диапазоне от 0 до 2nsdec – 1, при этом значение 0 представляет бит, с наибольшей достоверностью равный нулю, а значение 2nsdec – 1 означает бит, с наибольшей достоверностью равный единице. Промежуточные значения соответствуют промежуточным степеням достоверности принятой двоичной информации.

Дополнительные варианты синтаксиса для реализации блочного декодирования

  • decoded = vitdec(...,'cont',...,initmetric,initstates,initinputs)

То же, что предыдущие варианты синтаксиса, но начальное состояние декодера (текущие метрики, трассы выживших путей и последовательности соответствующих им символов) задаются входными параметрами initmetric, initstates и initinputs соответственно. Вещественные числа в векторе initmetric, длина которого равна числу состояний кодера, задают начальные метрики для всех внутренних состояний. Каждая из матриц initstates и initinputs, совместно задающих начальное состояние памяти кодера, должна иметь trellis.numStates строк и tblen столбцов. Матрица initstates должна содержать целые числа в диапазоне от 0 до trellis.numStates-1. Если схема кодера предполагает наличие нескольких входных битовых потоков, то состояние сдвигового регистра, принимающего первый входной битовый поток, соответствует младшим битам элементов матрицы initstates, а состояние сдвигового регистра, принимающего последний поток, — старшим битам этих величин. Матрица initinputs должна содержать целые числа в диапазоне от 0 до trellis.numInputSymbols-1. Чтобы использовать значения по умолчанию для всех этих входных параметров, можно задать их в виде пустых матриц: [],[],[].

  • [decoded,finalmetric,finalstates,finalinputs] = vitdec(...,'cont',...)

То же, что предыдущие варианты синтаксиса, но три дополнительных выходных параметра содержат конечные значения метрик (finalmetric), трассы выживших путей (finalstates) и последовательности соответствующих им символов (finalinputs). Выходной параметр finalmetric является вектором длиной trellis.numStates, содержащим конечные значения метрик для всех внутренних состояний. Выходные параметры finalstates и finalinputs являются матрицами, содержащими trellis.numStates строк и tblen столбцов. Их формат аналогичен формату матриц initstates и initinputs.

Примеры

Пример 1.

В данном примере производится сверточное кодирование случайных данных с последующим добавлением шума. Далее выполняется декодирование зашумленного сигнала, при этом иллюстрируются все три типа декодирования, поддерживаемых функцией vitdec. Обратите внимание на то, что при использовании неквантованных входных данных (dectype = 'unquant'), а также в случае мягкого декодирования (dectype = 'soft') результат работы кодирующей функции convenc имеет не тот вид, который требуется для декодирования с помощью функции vitdec. В этих случаях кодированный вектор ncode перед подачей на вход функции vitdec необходимо подвергнуть дополнительным преобразованиям.

trel = poly2trellis(3,[6 7]); % Описание кода
msg = randint(100,1,2,123); % Случайные данные
code = convenc(msg,trel); % Кодирование
ncode = rem(code + randerr(200,1,[0 1;.95 .05]),2); % Добавляем шум
tblen = 3; % Глубина просмотра при декодировании
% Вариант 1 – жесткое декодирование
decoded1 = vitdec(ncode,trel,tblen,'cont','hard');
% Вариант 2 - жесткое декодирование с неквантованным входом
ucode = 1-2*ncode; % преобразуем 0 в +1, а 1 в -1
decoded2 = vitdec(ucode,trel,tblen,'cont','unquant');
% Вариант 3 – мягкое декодирование
% Производим восьмиуровневое квантование зашумленного сигнала
[x,qcode] = quantiz(1-2*ncode,[-.75 -.5 -.25 0 .25 .5 .75],...
[7 6 5 4 3 2 1 0]); % Значения в векторе qcode лежат в диапазоне от 0 до 2^3-1.
decoded3 = vitdec(qcode',trel,tblen,'cont','soft',3);
% Вычисляем вероятности ошибок с учетом того, что выходной сигнал
% декодера задержан на tblen символов
[n1,r1] = biterr(decoded1(tblen+1:end),msg(1:end-tblen));
[n2,r2] = biterr(decoded2(tblen+1:end),msg(1:end-tblen));
[n3,r3] = biterr(decoded3(tblen+1:end),msg(1:end-tblen));
disp(['The bit error rates are: ',num2str([r1 r2 r3])])

The bit error rates are: 0.020619 0.020619 0.020619

Пример 2.

Данный пример демонстрирует использование дополнительных параметров функции vitdec для того, чтобы декодировать сообщение по частям, вызывая функцию vitdec несколько раз. Объединенный декодированный вектор [decoded4;decoded5] совпадает с результатами декодирования, полученными при обработке всего сообщения целиком (вектор decoded6).

trel = poly2trellis(3,[6 7]);
code = convenc(randint(100,1,2,123),trel);
% Декодируем первую половину сигнала и сохраняем текущее состояние декодера
[decoded4,f1,f2,f3] = vitdec(code(1:100),trel,3,'cont','hard');
% Декодируем вторую половину сигнала, используя сохраненное состояние кодера
decoded5 = vitdec(code(101:200),trel,3,'cont','hard',f1,f2,f3);
% Декодируем весь сигнал целиком
decoded6 = vitdec(code,trel,3,'cont','hard');
isequal(decoded6,[decoded4; decoded5])
ans =

1

Сопутствующие функции: convenc, poly2trellis, istrellis.

Литература

Gitlin, Richard D., Jeremiah F. Hayes, and Stephen B. Weinstein. Data Communications Principles. New York: Plenum, 1992.

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


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

Система Orphus

Яндекс.Метрика