Упреждающее исправление ошибок с использованием коррекции стирания Рида-Соломона

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

Насколько я знаю, код RS добавляет t символов к k символам данных. Таким образом, он может найти и исправить до t/2 символов или, если места ошибки известны, так называемые стирания. Он может исправить до t. Для этой задачи я должен использовать поле Галуа GF(28) для представления каждого символа в виде байта. Операции сложения и вычитания основаны на XOR. Таким образом, я должен использовать коды Рида-Соломона, способные исправить до t=3 стираний. Вычисление одного кода Рида-Соломона в настоящее время выполняется следующим образом.

C0 | C1 |........| Ck-1 | Ck | Ck+1 | Ck+2

поэтому байты кода можно рассматривать как вектор c=[c0,c1,...,ck+2], а один код C вычисляется из k байтов данных следующим образом d=[d0,d1,...,dk-1], поэтому для моего процесса кодирования и декодирования требуется следующая матрица Вандермонда F

1  1    12     13   ...   1k-1
1  2    22     23   ...   2k-1
             ...
1 k+2 (k+2)2 (k+2)3 ... (k+2)k-1
1 k+3 (k+3)2 (k+3)3 ... (k+3)k-1

поэтому простое умножение матрицы на вектор с использованием F и D дает C=F.D.

до сих пор то, что я сделал для кодирования, выглядит следующим образом:

#else

void fox_encode(Buffer* bufin, Buffer* bufout, FoxEncData* algorithm_data){

    // Your encoder for Task 2.C.3 goes in here !!!

    while (bufin->size >= 1){
        guint8 databyte = bufin->data[0];       //Pick up a byte from input buffer
        buffer_push_byte (bufout, databyte);    //Send it 3 times
        buffer_push_byte (bufout, databyte);
        buffer_push_byte (bufout, databyte);
        buffer_pop (bufin, 1);                  //Remove it from the input buffer
    }
}

#endif

Мне нужен код для завершения этого кода для кодирования и декодирования моих классов fox_encode и fox_decode с использованием коррекции стирания Рида-Соломона. Мы будем признательны за любую помощь, чтобы выполнить эту задачу как можно скорее.

заранее спасибо


person Fox    schedule 18.02.2012    source источник
comment
пожалуйста, исправьте форматирование   -  person CAFxX    schedule 18.02.2012
comment
Какой конкретный вопрос?   -  person Oliver Charlesworth    schedule 18.02.2012
comment
Нужен код для завершения вышеуказанного кода для обнаружения ошибок с помощью Reed-SOlomon Erasure Correction, также нужен код для декодирования с использованием того же метода.   -  person Fox    schedule 18.02.2012
comment
Так вы просто хотите, чтобы кто-то дал вам код для кодирования/декодирования RS? Вы пробовали поиск в Интернете?   -  person Oliver Charlesworth    schedule 18.02.2012
comment
да, если возможно .. Потому что я пробовал себя и веб-источники, но ничего полезного не нашел, я сделал с первой частью, которая использует контрольную сумму четности, но для этого метода (RS) я понятия не имею, как кодировать и декодировать. Спасибо   -  person Fox    schedule 18.02.2012
comment
Любая помощь, ребята, будет оценена, пожалуйста????!!!   -  person Fox    schedule 19.02.2012


Ответы (2)


Вы можете взглянуть на мою реализацию RS(255,255-k) C, которая доступна по адресу моя домашняя страница.

Он обрабатывает как ошибки, так и стирания, а также исправляет любые шаблоны байтовых ошибок/стираний, ограниченные:

(2 * число ошибок + число стираний) ‹ = k.

person Jens    schedule 05.01.2015

На Wikiversity есть хорошее руководство, в котором подробно описано, как обращаться с обоими подчистки и ошибки.

Вот схема того, что вам нужно реализовать для процесса декодирования стираний:

  1. Вычислите синдромы. Затем проверьте, все ли коэффициенты равны 0, сообщение не нуждается в исправлении, иначе продолжайте.
  2. Вызовите алгоритм Форни с синдромом и позициями стирания в качестве входных данных для вычисления полинома величины стирания (т. е. значений, которые нужно вычесть из полинома сообщения, чтобы получить исходное сообщение).
  3. Вычтите message - erasure_magnitude_polynomial, чтобы восстановить исходное сообщение (если оно находится в пределах границ Singleton).

Помимо алгоритма Форни, который может быть немного сложным, все остальные части очень просты и понятны. Действительно, самые сложные части, такие как алгоритм Берлекампа-Месси и поиск Чиена, необходимы только тогда, когда вы хотите декодировать ошибки, а вычисление синдромов Форни необходимо только в том случае, если вы хотите исправить как стирания, так и ошибки (т. е. опечатки) — хотя я читал какую-то статью, в которой описывается, что вычисление синдромов Форни можно обойти, но я никогда не видел такого кода.

person gaborous    schedule 03.07.2017