Community
cancel
Showing results for 
Search instead for 
Did you mean: 
Yudong_Fang
Beginner
66 Views

RS Decoder

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
66 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

Efim_Zabarsky
Beginner
66 Views

Where from came polynom 11011???
Reply