Для уменьшения влияния случайных и пакетных ошибок в передаваемом сигнале необходимо использовать кодирование с контролем ошибок. Мы исследовали некоторые возможности такого кодирования с использованием MATLAB Communications Toolbox. Существует два типа доступных кодов: линейных блоков и сверточных кодов. В блочном кодировании алгоритм кодирования преобразует каждый фрагмент (блок) информации в кодовое слово, частью которого является сгенерированная структурированная избыточность. Сверточный код использует дополнительный параметр (память). Это накладывает дополнительное ограничение на код. Сверточные коды работают с последовательными данными, один или несколько битов за раз. Они часто используются для улучшения характеристик радиосвязи и спутниковой связи.
Сверточные коды обычно задаются тремя параметрами (n, k, m): n - количество выходных битов; k - количество входных битов; m - количество регистров памяти. Величина , называемая скоростью кода, является мерой эффективности кода. Обычно параметры k и n находятся в диапазоне от 1 до 8, m - от 2 до 10, а кодовая скорость - от 1/8 до 7/8, за исключением приложений для дальнего космоса, где используются скорости кодирования от 1/100 или даже больше [1, 2].
Даже если сверточный кодер принимает фиксированное количество символов сообщения и выдает фиксированное количество кодовых символов, его вычисления зависят не только от текущего набора входных символов, но и от некоторых из предыдущих входных символов.
В общем, скорость . Вход сверточного кодера (информационная последовательность) представляет собой последовательность двоичных k-кортежей, , где . Выход (последовательность кода) представляет собой последовательность двоичных n-кортежей, , где . Последовательности должны начинаться в конечное (положительное или отрицательное) время и могут заканчиваться или не заканчиваться.
Блок сверточного кодера кодирует последовательность входных двоичных векторов, создавая последовательность выходных двоичных векторов. Этот блок может обрабатывать несколько символов параллельно. Если кодер принимает k входных битовых потоков, то длина входного вектора этого блока составляет для некоторого натурального числа L. Аналогично, если кодер создает n выходных битовых потоков, тогда длина выходного вектора этого блока будет . Входными данными может быть вектор на основе выборки с или вектор столбца на основе фреймов с любым положительным целым числом для L.
Регистры кодировщика начинаются в состоянии «все нули». Мы настроили кодировщик так, чтобы он сбрасывал свои регистры в состояние «все нули» в ходе моделирования: значение None указывает, что кодировщик никогда не сбрасывается; Значение в каждом кадре указывает, что кодер сбрасывается в начале каждого кадра до обработки следующего кадра входных данных; Значение на ненулевом Rst-входе вынуждает блок иметь второй входной порт, отмеченный как Rst. Сигнал в порту Rst является скалярным. Если он ненулевой, кодер сбрасывается перед обработкой данных на первом входном порте.
Блок декодера Витерби декодирует входные символы для получения выходных бинарных символов [4, 5]. Для увеличения производительности данный блок способен подвергать обработке несколько символов параллельно. L - количество кадров, которое блок обрабатывает на каждом шаге (L не может принимать отрицательное значение). Длину входного вектора можно определить по формуле , когда сверточный код использует алфавит из возможных символов. Аналогично, длина выходного вектора этого блока равна , если декодированные данные используют алфавит из возможных выходных символов. Входными данными может быть либо вектор на основе выборки с , либо вектор столбца на основе кадра с любым целым положительным числом для L.
В зависимости от значения у параметра «Тип решения» элементами входного вектора могут быть биполярные, бинарные или целочисленные данные: Unquantized - действительные числа; Жесткое решение - 0, 1; Мягкое решение - целые числа от 0 до , где k - число битов мягкого решения, где 0 - наиболее уверенное решение для логического нуля, а - наиболее уверенное решение для логической единицы. Другие значения представляют менее уверенные решения [6].
Сверточные коды принципиально отличаются от других классов кодов тем, что непрерывная последовательность битов сообщения отображается в непрерывную последовательность выходных битов кодера. Из литературы и практики хорошо известно, что эти коды обеспечивают больший выигрыш при кодировании, чем при блочном кодировании с такой же сложностью. Кодер, работающий со скоростью 1/n бит/символ, может рассматриваться как конечный автомат, который состоит из M-каскадного сдвигового регистра с предписанными соединениями с n сумматорами по модулю 2 и мультиплексором, который сериализует выходы сумматоров.
Список литературы:
Gitlin, Richard D., Jeremiah F. Hayes, and Stephen B. Weinstein. Data Communications Principles. New York: Plenum, 1992.
Clark, George C. Jr. and J. Bibb Cain. Error-Correction Coding for Digital Communications. New York: Plenum Press, 1981.
Pless V., Introduction to the Theory of Error-Correcting Codes, 3rd ed. New York: John Wiley & Sons, 1998.
Heller, Jerrold A. and Irwin Mark Jacobs. " Decoding for Satellite and Space Communication." IEEE Transactions on Communications Technology, vol. COM-19, October 1971. 835-848.
Viterbi, Andrew J. "An Intuitive Justification and a Simplified Implementation of the MAP Decoder for Convolutional Codes." IEEE Journal on Selected Areas in Communications, vol. 16, February 1998. 260-264.
Документация Matlab: https://www.mathworks.com/help/matlab/