Intel® Integrated Performance Primitives
Deliberate problems developing high-performance vision, signal, security, and storage applications.

RS Decoder

Yudong_Fang
Beginner
406 Views
I am using the RS Decoder function groups.

Currently, I have these questions and can't find in the IPPSman.pdf document.

1) How can I know the result of RsDecode? I mean how many bits have corrected? or RSDecode fail to decode.

2) How can I use the ErasereList?

Thanks

----------------
Ps, the document only show these words:
This function is declared in the ippdi.h file. The function performs RS decoding defined by the
context pRS for the systematic code in the given codeword and stores the result back at the
address of pCodeWord. The RS decoders ippsRSDecodeBM and ippsRSDecodeEE implement
the Berlekamp-Massey (BM) and Extended Euclidean (EE) decoding algorithms, respectively.
The work buffer pointed by pBuffer must have size not less than the respective function
ippsRSDecodeBMGetBufferSize or ippsRSDecodeEEGetBufferSize returns.
0 Kudos
2 Replies
Ying_H_Intel
Employee
406 Views
Hello Yudong,

According to the RS decoding algorithm,theexpected error-correctingability ist,t = (codeLength - dataLength)/2,iferror bit >t, then no guarantee. So in generall, t bit should be corrected when the functionRSDecode returnippStsNoErr.Butif you feed the code with error bit exceed the t,the functionRSDecoder just go toprocess, don't report error.So the user need to check the erroroneself.

Here is sampe for use the Eraserlist for your reference,

int codeLength=7;
int dataLength=5;
//correct code ={0,1,2,3,4,4,0}
Ipp8u pCodeWord[7] ={0, 7, 2, 3, 4, 4,0};

int pSize=0, pBufferSize=0;

// withour errorList
//const int *pErasureList=NULL;
// int erasureListLength=0;

const int pErasureList[] = {1}; // the positionwhere wrongbit occurs
int erasureListLength=1;

IppStatus status;
int maxDegree=4;
int pGFSize;
IppsGFSpec_8u* pGF=NULL;
int feBitSize=3;
const Ipp8u pPolynomial[5]={1,1,0,1,1};
Ipp8u root=1;

status=ippsGFGetSize_8u(feBitSize, &pGFSize);
printf("%s\n", ippGetStatusString(status));
pGF = (IppsGFSpec_8u *) malloc(pGFSize);

status=ippsGFInit_8u(feBitSize, pPolynomial,pGF);
printf("%s\n", ippGetStatusString(status));

status=ippsRSDecodeGetSize_8u(codeLength, dataLength, &pSize);
printf("%s\n", ippGetStatusString(status));
IppsRSDecodeSpec_8u* pRS = (IppsRSDecodeSpec_8u *) malloc(pSize);

status=ippsRSDecodeInit_8u(codeLength, dataLength, pGF, root, pRS);
printf("%s\n", ippGetStatusString(status));
status=ippsRSDecodeBMGetBufferSize_8u(pRS, &pBufferSize);
printf("%s\n", ippGetStatusString(status));
Ipp8u* pBuffer=(Ipp8u *)malloc(pBufferSize);
status=ippsRSDecodeBM_8u(pErasureList, erasureListLength, pCodeWord, pRS, pBuffer);
printf("%s\n", ippGetStatusString(status));

printf(" output\n");
for(int n=0; n{
printf("%d\n", pCodeWord);

}

printf(" ok\n" );
return 0;
}

See somematlab documentation from Mathworks website
http://www.mathworks.com/support/solutions/en/data/1-716Z2P/?solution=1-716Z2P

Hope it helps
Kind Regards,
Ying

0 Kudos
Efim_Zabarsky
Beginner
406 Views
Where from came polynom 11011???
0 Kudos
Reply