1 MB - ИППИ РАН

реклама
Декодер кодов Рида-Соломона
Ф.В. Грошев
ИППИ РАН
[email protected]
А.А. Давыдов
ИППИ РАН
[email protected]
Аннотация*
11 1 1 1 ... 1 1 
 01   2  3 ...  13  14 
,
H 
2
4
6
11
13
 01   ...   
 01 3  6  9 ...  9  12 


4
где   примитивный элемент поля GF (2 ) и
В статье рассматривается реализация
декодера кода Рида-Соломона с исправлением
стираний и ошибок. Приведенный алгоритм
является переработанной и дополненной версией
алгоритма
Питерсона
[3].
Приводятся
результаты тестовых испытаний декодера.
1. Введение
Помехозащищенные коды Рида-Соломона
(далее
РС
коды)
позволяют
улучшить
технические параметры в системах передачи
данных. С увеличением скоростей передачи
информации по каналам связи становиться все
более актуальна задача эффективной реализации
декодеров РС кодов на современной элементной
базе.
2. Постановка задачи
Цель данной работы - спроектировать
алгоритм
декодирования
с
исправлением
стираний и ошибок обобщенного расширенного
4
[16,12,5] кода РС над полем GF (2 ) . Алгоритм
должен быть реализован в виде программы для
DSP процессора (DSP – digital signal processing,
цифровая обработка сигналов).
Декодер предназначен для дальнейшего
встраивания в конструкцию, декодирующую
каскадные низкоплотностные коды большой
длины [4], [5], где код РС используется как
компонентный код.
На вход декодера подаются вычисленные
синдромы и вектор позиций стираний. На выходе
формируются решение декодера («отказ от
декодирования», «исправлено») и вектор с
позициями и значениями ошибок и стираний.
3. Обозначения и преобразования
Проверочная матрица [16,12,5] кода РС имеет
вид
*
Эта работа поддержана государственным контрактом РФ
№.02.514.11.4025 от 1 Мая 2007 г.
элементы
суть локаторы
0,1,  ,  ,..., 
соответствующих позиций. Столбец из единицы и
нулей соответствует расширенному коду РС.
Для построения обобщенного кода РС
вводится вектор случайных коэффициентов
b  (b0 , b1 ,..., b15 ) , где bi  0 . Проверочная
матрица обобщенного кода РС имеет вид
 b0 b1 b2 b3 b4 ... b14 b15 
2
14
 0 b b  b  2 b  3 ... b  13 b  14 
3
15
1 2
4
14
.
H 
4
13
2
6
11
 0 b1 b2 b3 b4 ... b14 b15 
 0 b b  3 b  6 b  9 ... b  9 b  12 
 1 2 3 4

15
14
Обозначим через v  (v0 , v1 ,..., v15 ) принятое
слово. Синдромы S j вычисляются следующим
образом
15
15
i 0
i 1
S0   bi i , S j   (i 1) j bi i , j  1, 2,3 .
Опишем связи между номерами позиций N и их
локаторами Loc ( N ) .
если N  0
0,
Loc( N )   N 1
.
, если N  0

Обозначим
Numb( L)
номер
позиции
локатором L .
если L  0
0,
.
Numb( L)  
log [ L]  1, если L  0
Введем обозначения:
 - количество стираний, 0    4 .
t - количество ошибок, 0  t  2 .
с
4. Алгоритм декодирования кода РС
U w - локатор стирания, N w - номер стертoй
позиции,
Z w - величина ошибки в стертом
символе, w  1,...,  .
X k - локатор ошибки, Tk - номер
ошибочной позиции, Yk - величина ошибки,
k  1,..., t .
Стирания задаются номерами стертых позиций
N w , w  1,...,  . Локаторы стираний U w
вычисляются по номерам стертых позиций.
Шаг 0. Вычисление синдромов S0 , S1 , S2 , S3 и
получение локаторов стираний по номерам
стертых позиций
Для
декодирования
используется
нелинейная система из 4-х уравнений

 bN
w 1
t
w
Z w   bT Yk  S0

w 1
k
k 1

Если
t
j
U wbN Z w
w
Введем
стираний

k 1
j
X k bT Yk
k
усеченный
'
 ( x )   (1  U w x ) 
w 1
локаторов
'
j 0
синдром
учитывающий только
следующим образом.

  j S u  j ,
ошибки,
Su ,
записывается
u  0,1,..., 3   .
j 0
Под искажениями понимаются ошибки  и
стирания t в совокупности. Введем обозначения:
g    t - число искажений, 0  g  4 .
локатор
-
искажения,
- значение
Di
искажения на позиции с локатором
Li , Pi -
номер искаженной позиции, i  1,..., g .
Система уравнений для декодирования может
быть переписана в виде
g
 bP Di  S0 .
i 1
S0  S1  S2  S3  0 , то искажений нет
отказываемся от декодирования  стоп.
Если   0 , вычисляем
1.
Вычисление
 0 , 1 ,...,   '
коэффициентов
усеченного
многочлена
локаторов стираний  ( x ) .
0  1 .
Если   0 , то переходим к шагу 2.
 '  min{ ,3} .
'
'
j 1
j 1
1   U j ,   '  U j .
Если
 '  3 , то  2  U1U 2  U1U3  U 2U3 .
  4 , то считаем, что есть только
стирания, а ошибок нет, задаем t  0 и
Если
переходим к шагу 6.
Шаг
2.
Вычисление
синдрома ошибок
модифицированного

i
Su 
g
 LuibP Di  Su , u  1, 2, 3 .
i 1
i 1
Шаг
Модифицированный
Li
i 0
если N w  0 w  1,...,  .
0,
U w  Loc( N w )   N 1
w
, если N w  0

  j x j , 0  1 ,
 '  min{ , 3} .
Su 
15
 стоп.
Если   4 , то продолжаем вычисления. Иначе
 S j , j  1, 2, 3 .
многочлен
15
S0   bi i , S j   (i 1) j bi i , j  1, 2,3
  j S  u  j , u  0,1,...,3   .
j 0
Шаг 3. Принятие решения о количестве ошибок
i
Обозначим Ai  bP Di . Тогда систему можно
или отказе от декодирования.
записать так

A2
Если
... 
Ag

S0

L2 A2
... 
Lg Ag

S1

L2 A2
2
... 
Lg Ag
2

S2

L2 A2
3
... 
Lg Ag
3

S3
i
 A1
L A
 1 1
 2
 L1 A1
 L3 A
 1 1
S0  S1  ...  S3  0 , то считаем, что
есть только стирания, а ошибок нет, задаем
и переходим к шагу 6.
Если
  1 , вычисляем   S12  S0 S2 .
Если
  0 , вычисляем 1  S22  S1S3 ,
t 0
2  S0 S3  S1S2 .
D4  A4 / bP4 , Su*  Su*  Lu4 A4 , u  0,1, 2 .
Если
S0  0 &(   0 &   0 & 1  0 & 2  0 ||   1&   0 ||   2)
то считаем, что произошла одна ошибка, и
переходим к шагу 4.
Если   0 &   0 &  2  0 , то считаем, что
произошли две ошибки, и переходим к шагу 5.
Если ни одно из предыдущих условий не
выполняется, то отказываемся от декодирования
 стоп.
Шаг 4. Локатор одиночной ошибки
t  1, L 1 
S1
.
S0
то отказываемся от декодирования  стоп.
если L 1  0

0,
P 1  Numb( L 1 )  

log [ L 1 ]  1, если L 1  0
Переходим к шагу 6.
Шаг 5. Локаторы двух ошибок


t  2, B  2 , C  1 .


16 16  256 байт)
квадратное уравнение x  Bx  C  0 .
2
Если уравнение не имеет решения, то
отказываемся от декодирования  стоп.
Если уравнение имеет различные решения, то
суть
локаторы
L1, L2 .
Вычисляем
если Li  0
0,
,
Pi  Numb( Li )  
log
[
L
]

1,
если
L

0
i
  i
i  1, 2 .
Шаг 6. Вычисление значений искажений
Lw  U w w  1,...,  Pw  N w w  1,..., 
,
,
,
,
*
g    t . Su  Su , u  0,1,..., g  1 ,
  5 g .
Переходим к подшагу 6. :
Подшаг 6.1.
A4 
( L1  L2  L3 ) L3  L1L2
.
Если знаменатель равен нулю, то отказываемся от
декодирования  стоп.
D3  A3 / bP3 , Su*  Su*  Lu3 A3 , u  0,1 .
Подшаг 6.3.
A2 
L1S0*  S1*
*
, D2  A2 / bP , A1  S0  A2
2
L1  L2
D1  A1 / bP1
Шаг 7. Вычисление «синдрома искажений»
(проверка выдачи некодового слова)
g
 0  S0   Ai
i 1
 3 S0*   2 S1*  1S2*  S3*
.
(( L4  1 ) L4   2 ) L4   3
Если знаменатель равен нулю, то отказываемся от
декодирования  стоп.
g
,
 u  Su   Lui Ai ,
i 1
u  1, 2,3 .
Если
Решаем по таблице (объемом
уравнения
A3 
L1L2 S0*  ( L1  L2 )S1*  S2*
Подшаг 6.4.
Если
(   1||   2) & ( L 1  U1 ) ||   2 & ( L 1  U 2 ) ,
решения
Подшаг 6.2.
 0  1   2   3  0 ,
то переходим к
шагу 8, иначе отказываемся от декодирования 
стоп.
Шаг 8. Выдача вектора ошибки.
eP  Di , i  1, 2,..., g , стоп.
i
5. Особенности реализации
При реализации использованы следующие
приемы для ускорения работы декодера:
 операции сложения и умножения в поле
Галуа сделаны таблицами;
 решение квадратного уравнения реализовано
в виде таблицы, которая была вычислена
заранее;
 выполнены все преобразования и упрощены
все выражения;
 на вход декодера подаются предварительно
вычисленные синдромы без принятого
вектора;
 вместо выдачи полного вектора ошибки
выдаются только позиции и значения
ошибок;
6. Результаты проверки
Для проверки работоспособности декодера
написана тестовая программа. Эта программа на
входе позволяет вводить количество стираний и
ошибок для декодера, а так же количество
повторений вызовов декодера. Ошибки и
стирания расставляются во входном векторе
декодера случайно (позиции не повторяются). На
выходе тестовая программа выдает отчет о
количестве
исправлений,
отказов
от
декодирования и декодирований в другие
кодовые слова (ошибки декодирования).
Для случаев, когда   2t  d , d  5 тестовая
программа выдаёт 100% исправлений.
Для случаев, когда   2t  d получены
следующие данные:
Для всех испытаний использовано 1000000
повторений:
отказы от
ошибки
 - число t - число
стираний ошибок декодирования декодирования
3
4
1
2
0
1
1
2
2
3
100%
0%
100%
20,1%
65,2%
0%
100%
0%
79,9%
35,8%
При всех испытаниях декодер не выдаёт не
кодовых слов.
В процессоре ADSP-TS201 работа декодера
занимает следующее количество тактов:
стирания
4
3
2
1
0
0
1
2
3
0
ошибки
0
0
0
0
1
2
1
1
1
2
такты
651
604
535
435
580
701
613
523
325
714
Благодарности
Авторы благодарят С.А. Попова за помощь в
написании тестовой программы.
Литература
[1] Р. Блэйхут, “Теория и практика кодов,
контролирующих ошибки,” Москва, Мир, 1986.
[2] Р.Г. Галлагер, “Теория информации и надежная
связь” Москва, Советское радио, 1974.
[3] У. Питерсон, “Коды, исправляющие ошибки,”
Москва, Мир, 1976.
[4] R. G. Gallager, “Low Density Parity-Check Codes,”
Cambridge, MIT Press, 1963.
[5] T. Høholdt, J. Justesen, “Graph codes with ReedSolomon Component codes,” ISIT 2006, Seattle,
USA, July 9-14, 2006.
Скачать