- •Пояснительная записка к курсовому проекту
- •1 Общие сведения о задании и декодировании циклических
- •3 Разработка структурной электрической схемы кодека
- •3.1 Разработка структурной электрической схемы кодера
- •3.2 Разработка структурной электрической схемы декодера
- •4.1 Разработка функциональной электрической схемы кодера
- •4.2 Разработка функциональной электрической схемы декодера
- •5.1 Выбор и обоснование элементной базы
- •5.2 Разработка принципиальных схем функциональных блоков кодека
1 Общие сведения о задании и декодировании циклических
КОДОВ
Циклические коды являются подклассом в классе линейных кодов, удовлетворяющим дополнительному свойству цикличности [1]. Линейные коды, удовлетворяющие этому свойству, - циклические, т.е. такие коды, которые вместе с каждым кодовым словом (a0,a1,...,an-1,an) содержат также и его циклическую перестановку (a1,a2,...,an,a0). При таком определении для построения кода достаточно задать одно кодовое слово. Отдельные кодовые слова образуются из исходного путем циклического сдвига и всех линейных комбинаций циклических сдвигов.
Циклический код задается порождающим (генераторным) полиномом g(x) степени r. Например, число проверочных разрядов r=3 в коде, задаваемом полиномом g(x)=x3+x+1. Для того чтобы полином был генераторным полиномом циклического кода, необходимо, чтобы он был делителем полинома вида xn+1, где n – длина кода. При делении полиномов действия производятся по правилам арифметики по модулю два, в которой вычитание равносильно сложению.
Для построения циклического кода необходимо знать разложение полинома xn+1 на множители.
Если n=2m-1, то многочлен xn+1 представляется как произведение неприводимых многочленов степени не выше m. Каждый из этих многочленов, а также их произведения могут быть использованы как порождающие полиномы циклического кода.
Наряду с полиномиальным способом задания циклического кода, можно построить его порождающую матрицу, которая имеет в качестве строк векторы g(x), xg(x), … , xk-1g(x)
(1.1)
где g0…gr – коэффициенты генераторного полинома.
Проверочная матрица строится на основе полинома h(x)=(xn+1)/g(x) степени k и имеет вид
(1.2)
где h0…hk – коэффициенты полинома h(x), называемого проверочным полиномом.
Умножение сообщения на порождающую матрицу эквивалентно умножению сообщения, представленного в виде полинома, на генераторный полином. Пусть сообщения имеет вид
А(х)=а0+а1х1+а2х2+ а3х3+ … + а k-1хk-1, (1.3)
тогда
(а0а1… а k-1)G=[а0g0, (а0g1+а1g0), (а0g2+а1g1+а2g0), …], (1.4)
что эквивалентно умножению полиномов
а(х)·g(x)= а0g0+(а0g1+а1g0)х + … . (1.5)
Принято считать, что при всех операциях такие многочлены передаются начиная с коэффициентов высших порядков.
Из способа кодирования следует, что любое кодовое слово должно делиться на g(x).
Рассмотренный способ кодирования не позволяет разделить информационные и проверочные символы, а код, который при этом получается, неразделимый код. Использование неразделимых кодов по многим причинам неудобно. Циклический неразделимый код можно сделать разделимым.
Для построения разделимого циклического кода к исходной информационной последовательности требуется дописать n-k нулей, что эквивалентно умножению ее полинома на xn-k, после чего результат необходимо разделить на генераторный полином
[A(x)xn-k]/g(x)=c+R(x)/ g(x), (1.6)
где R(x) – некоторый остаток.
Умножив обе части на g(x) и перенеся остаток в левую часть, получается
A(x)xn-k+R(x)=c·g(x). (1.7)
Так как с – целое, то A(x)xr+R(x) делится на g(x), и, следовательно, является кодовым словом. Таким образом, для того, чтобы закодировать сообщение, необходимо приписать к информационным символам остаток от деления. При таком способе кодирования множество кодовых слов остается тем же самым, а изменяется только таблица соответствия сообщений и кодовых слов.
Видно, что для получения неразделимого циклического кода требуется устройство, реализующее операцию умножения полиномов, один из которых постоянен, а другой – произвольный, а для образования разделимого циклического кода необходимо устройство деления полиномов. Данные операции реализуются с помощью линейных автоматов – линейных переключающих схем, реализованных на регистрах сдвига с обратными связями и без них.
Из алгоритмов кодирования видно, что схемная реализация кодирующего устройства базируется на схемах умножения и деления полиномов, изображенные на рисунках 1.1 и 1.2.
Рисунок 1.1 Схемы умножения на фиксированный полином g(x)
a – схема с вынесенными сумматорами;
б – схема со встроенными сумматорами.
Рисунок 1.2 – Схема деления на фиксированный полином g(x)
Общий вид схемы, реализующей деление многочлена v(x) на g(x), приведен на рисунке 1.2.
Пример.
Пусть требуется разделить v(x)=x8+x6+x3+x+1 → [110100101] на g(x)=x4+x+1 → [11001]. Соответствующая схема приведена на рисунке 1.3а. Вначале устройство памяти содержит нули. Выходной символ принимает значения, равные 0 на первых четырёх (r) сдвигах, пока первый входной символ не достигнет конца регистра сдвига. Эти первые сдвиги не имеют аналогий при делении столбиком (см. рисунок 1.3в). Для каждого коэффициента частного ai необходимо (как при делении столбиком) вычесть из делимого многочлен aig(x). Это вычитание осуществляется с помощью обратной связи. Так, после четвёртого шага содержимое регистра сдвига соответствует многочлену, обозначенному на рисунке 1.3в буквой A. Обратной связи соответствует многочлен, обозначенный буквой B, а входу - многочлен C, сносимый при делении столбиком. После пятого шага содержимому регистра сдвига соответствует многочлен, обозначенный D. После всех девяти (n) сдвигов на выходе - младший коэффициент частного от деления, а в регистре сдвига - остаток.
Схема, с помощью которой реализуется умножение на h(x), а затем деление на g(x), приведена на рисунке 1.4 (степени многочленов h(x) и g(x) равны).
Кодирующие устройства циклических кодов приведены на рисунке 1.1а,б, рисунке 1.4а,б. Кодирование разделимым кодом можно осуществить с помощью схем с k или r ячейками. Тот или иной способ выбирается из соображений меньших аппаратурных затрат (см. рисунок 1.5).
При кодировании, в соответствие с рисунком 1.5, вначале ключ 1 - в положении 1, ключ 2 - замкнут. Информационные символы непосредственно передаются на выход и одновременно поступают в кодирующее устройство, в котором за k шагов образуется n-k=r контрольных символов. Затем ключ 1 - в положении 2, ключ 2 - размыкается. Регистр делает еще r шагов, выдавая контрольные символы на выход.
Рисунок 1.3 – Деление на многочлен g(x)=x4+x+1
Рисунок 1.4 – Схема умножения на h(x) и последующего деления на g(x)
а) схема кодирования по h(x);
б) схема кодирования по g(x)
Рисунок 1.5 – Схемы кодирования
Ошибки, возникшие при передаче, могут быть исправлены линейными кодами тремя методами: декодированием по синдрому, мажоритарным декодированием, декодированием по максимуму правдоподобия. При использовании циклических кодов реализация этих методов может быть упрощена за счет перехода к последовательному режиму работы.
Из основного проверочного соотношения
(а0а1… а n-1)HT=0, (1.8)
где
следует система уравнений для мажоритарного декодирования
а
(1.9)
а0hr-1,0+а1hr-1,1+…+а n-1hr-1,n-1=0.
Выбрав из них те, для которых hi0≠0, получим
а
(1.10)
а0=а1hi21+…+а n-1hi2n-1.
Отсюда следует, что символ а0 можно определить по принципу большинства, полагая а0=0, если правая часть большинства уравнений последней системы равна нулю, и а0=1 в противном случае. Такую же процедуру можно проделать для символов а0, а1, …,аn-1.
В случае, если код циклический, система проверочных уравнения для символов а0, а1, …,аn-1 получается из системы для символа а0 циклическим сдвигом. Для декодирования символа аi достаточно произвести циклическую перестановку кодового слова на i позиций и использовать ту же самую систему проверок (для линейных кодов (нециклических) для декодирования каждого символа должна быть найдена своя система проверок).
Система проверок, как и при декодировании линейных кодов, может быть разделенной, λ-связанной и квазиразделенной.
Обобщенная структурная схема синдромного декодера циклического кода представлена на рисунке 1.6.
Рисунок 1.6 – Структурная схема синдромного декодера
Последовательность A*(x) записывается в n–разрядный буферный регистр, так что через n тактов все слово оказывается записанным в регистр. Одновременно, последовательность поступает в контрольное устройство (делитель на g(x)), которое производит вычисление синдрома AHT. Ранее было показано, что все кодовые слова циклического кода должны делиться на порождающий полином g(x). Если принятое слово принадлежит коду, то остаток от его деления на полином равен нулю, ненулевой остаток свидетельствует об ошибке. По виду остатка можно определить ошибку. Контрольное устройство вместе с селектором и производит эти операции. В контрольном устройстве производится вычисление остатка от деления A*(x) на g(x). Селектор анализирует полученный остаток и выдает корректирующий сигнал в тот момент, когда ошибочный символ покидает буферный регистр, одновременно в контрольное устройство выдается сигнал, что осталась некоторая более простая конфигурация ошибок. Если после 2n сдвигов, т.е. когда последний символ покидает буферный регистр, состояние контрольного устройства будет ненулевым, это означает, что произошла некорректируемая ошибка.
2 РАСЧЕТ ПАРАМЕТРОВ КОДА ФАЙРА
По условию курсового проекта даны следующие исходные данные:
- длина пакета ошибок p=5 бит;
- порождающий полином g(x)=(x9+1)(x5+x2+1);
- скорость передачи информации B=1544 Кбит/с;
- пропускная полоса канала ΔFк=8 МГц;
- отношение мощности сигнала к мощности шумов Рс/Рш=12 дБ;
- вид модуляции ДОФМ;
- способ обработки информации – когерентный;
- способ передачи информации – пакетный, tпак=n;
- способ реализации кодека – аппаратурный;
Коды Файра предназначены для исправления одиночных пакетов ошибок с разрядностью b и обнаружения пакетов ошибок с разрядностью lош [2]. Положение пакета ошибок в кодовой комбинации может быть произвольным. Рассмотрим циклические коды с последовательным кодированием и декодированием.
Для циклических кодов, исправляющих пакеты ошибок, образующий многочлен G(x) представляет собой произведение неприводимого многочлена степени m на другой многочлен, вид которого определяется типом кода, а старшая степень с - длиной исправляемого пакета ошибок. Образующий многочлен G(x) двоичного кода Файра определяется по формуле
g(x)=(xc+1)g1(x), (2.1)
где g1(x) – неприводимый многочлен степени m;
c=2b-1, с не делится на (2m-1).
Период многочлена (xс+1) равняется с, т.е. через i=с остатки от деления хi на (xс+1) будут повторяться. Период многочлена G(x) и, соответственно, максимальное число символов в кодовой комбинации п равно общему наименьшему кратному с и (2m-1), т. е.
n = с (2m – 1). (2.2)
Число контрольных разрядов в слове
r=c+m. (2.3)
Для исправления пакетов ошибок длины b требуется не менее (3b-1) контрольных разрядов. Используя коды Файра, можно исправлять одиночный пакет ошибок длиной b и одновременно обнаруживать любой пакет ошибок длиной lош>b при условии
b+lош-1 < с, b < m. (2.4)
Т.о., для неприводимого полинома g1(x)= x5+x2+1, старшая степень которого m=5 и длины исправляемого пакета ошибок b=5, соответственно с=2b-1=2·5-1=9 и образующий полином кода Файра будет иметь вид
g(x)=(xc+1)g1(x)=(x9+1)(x5+x2+1)=x14+x11+x9+x5+x2+1. (2.5)
Число символов в кодовой комбинации n=с(2m–1)=9·(25-1)=279, а число проверочных символов r=c+m=9+5=14. В итоге получаем код (279;265).
Входная скорость передачи информации равна B=1544 Кбит/с. Полоса частот канала связи ΔFк=8 МГц. Скорость передачи циклического кода R=265/279. Следовательно, выходная скорость B=B·n/k=1544·279/265=1625,7 Кбит/с. Для определения вероятности ошибочного приема двоичного символа (Рк) по кривой потенциальной помехоустойчивости для типа модуляции ДОФМ допустимое отношение Рс/Рш=12 дБ уменьшаем на 8%, т.е. на 1 дБ; принимаем уменьшение Рс/Рш на 1 дБ. Таким образом, для определения Рк принимаем расчетное отношение Р'с/Р'ш=11 дБ (см. рисунок 2.1).
По кривой потенциальной помехоустойчивости ДОФМ находим, что Рк=0,4·10-3 [3]. Найденное значение Рк подставим в формулу расчета вероятности первой ошибки декодирования
, (2.6)
получаем P1e=7,383·10-5 при tисп=1 и n=31, т.к. неприводимый полином, входящий в состав порождающего полинома кода Файра позволяет корректировать одиночную ошибку на длине слова равной 31, а пакет корректируется уже за счет перемежения..
Рисунок 2.1 – Вероятность ошибочного приема двоичного символа
в ДСК (двоичный симметричный канал) при когерентном способе обработки информации для типа модуляции ДОФМ
