У меня есть задача кодирования и декодирования некоторых байтов звука с использованием метода контрольной суммы четности и 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 с использованием коррекции стирания Рида-Соломона. Мы будем признательны за любую помощь, чтобы выполнить эту задачу как можно скорее.
заранее спасибо