[MN-dev] [mndiff]: r149 - in trunk/noe: ldpc.c ldpc.h
michael
subversion at mplayerhq.hu
Sun Apr 12 05:22:04 CEST 2009
Author: michael
Date: Sun Apr 12 05:22:04 2009
New Revision: 149
Log:
Optional support for fast to encode matrixes.
Modified:
trunk/noe/ldpc.c
trunk/noe/ldpc.h
Modified: trunk/noe/ldpc.c
==============================================================================
--- trunk/noe/ldpc.c Sat Apr 11 23:42:47 2009 (r148)
+++ trunk/noe/ldpc.c Sun Apr 12 05:22:04 2009 (r149)
@@ -34,7 +34,7 @@
#define MAX_NZC 32
typedef struct LDPCContext{
- unsigned int (*parity_matrix)[2][MAX_NZC];
+ int (*parity_matrix)[2][MAX_NZC];
int (*inv_matrix)[2];
int parity_len;
int data_len;
@@ -151,6 +151,8 @@ LDPCContext *EXT(initLDPC)(int data_len,
memset(tab, 0, parity_len);
for(j=0; j<nzc; j++){
int minrow=999999;
+
+ if(i<data_len || seed>0){
for(y=0; y<parity_len; y++){
if(row[y] < minrow)
minrow= row[y];
@@ -158,6 +160,13 @@ LDPCContext *EXT(initLDPC)(int data_len,
do{
y= get_random(&kiss)%parity_len;
}while(tab[y] || (row[y] > minrow + (SIZE == 2)));
+ }else{
+ y= i + j - data_len;
+ if(y >= parity_len){
+ c->parity_matrix[i][0][j] = -1;
+ continue;
+ }
+ }
tab[y]=1;
c->parity_matrix[i][0][j] = y;
c->parity_matrix[i][1][j] = EXT(log)[get_random(&kiss)%(SIZE-1)+1];
@@ -222,8 +231,10 @@ int EXT(init_matrixLDPC)(LDPCContext *c,
x= erasure_pos[i];
for(j=0; j<nzc; j++){
y= c->parity_matrix[x][0][j];
+ if(y>=0){
inv_matrix[i + y*2*parity_len]= EXT(exp)[c->parity_matrix[x][1][j]];
row_weight[y]++;
+ }
}
col_weight[i]= nzc;
}
@@ -266,8 +277,10 @@ int EXT(decodeLDPC)(LDPCContext *c, LDPC
unsigned int v= code[i];
for(j=0; j<c->nzc; j++){
int y= c->parity_matrix[i][0][j] + c->parity_len;
+ if(y>=c->parity_len){
int p= -EXT(exp)[c->parity_matrix[i][1][j]];
syndrom[y]^= p & v;
+ }
}
}
@@ -288,8 +301,10 @@ int EXT(decodeLDPC)(LDPCContext *c, LDPC
unsigned int v= EXT(log)[ code[i] ];
for(j=0; j<c->nzc; j++){
int y= c->parity_matrix[i][0][j] + c->parity_len;
+ if(y>=c->parity_len){
int p= c->parity_matrix[i][1][j];
syndrom[y]= sum(syndrom[y], EXT(exp)[p + v]);
+ }
}
}
Modified: trunk/noe/ldpc.h
==============================================================================
--- trunk/noe/ldpc.h Sat Apr 11 23:42:47 2009 (r148)
+++ trunk/noe/ldpc.h Sun Apr 12 05:22:04 2009 (r149)
@@ -26,6 +26,8 @@ struct LDPCContext;
/**
*
+ * @param seed if 0 then a matrix will be generated that can be encoded quicker
+ * at the expense of worse error recovery capabilities.
* @param nzc number of non zero elements per column, 0 means choose automatically.
*/
struct LDPCContext *EXT(initLDPC)(int data_len, int parity_len, uint32_t seed, int nzc);
More information about the Mndiff-dev
mailing list