- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page