📄 maxicode.c
字号:
randloc += 1; } if ( difval > data[randloc]) { this_error = difval - data[randloc]; } else { this_error = data[randloc] - difval; } save_val = data[randloc]; data[randloc] = difval; // cause error at location k save_val2 = data[1]; data[1] = 1; printf("Data [randloc=%d,1] = %d %d \n", randloc, data[randloc], data[1]); syndromes( data, msg_len, ecclen/2); eras_dec_rs( data, erase_posit, 0, msg_len, ecclen/2 ); if ( (data[randloc] != save_val) | ( data[1] != save_val2)) { printf(" Error at k = %d data[randloc] = %d save = %d \n", k , data[randloc], save_val ); printf(" Error2 at k = %d data[1] = %d save = %d \n", k , data[1], save_val2 ); } data[randloc] = save_val; data[1] = save_val2; } printf("Test two random errors at different locations \n"); // two random errors at random locs for ( k = 0 ; k < 100 ; k += 1) { randint = random(); randint2 = random(); randint = randint & NN; randint2 = randint2 & NN; difval = randint % (NN+1); difval2 = randint2 % (NN+1); randloc = random(); randloc = randloc % 62; randloc2 = random(); randloc2 = randloc % 62; if (randloc == randloc2) { randloc = (randloc+ 1)% (NN+1); } if ( difval > data[randloc]) { this_error = difval - data[randloc]; } else { this_error = data[randloc] - difval; } save_val = data[randloc]; data[randloc] = difval; // cause error at location k save_val2 = data[1]; if ( difval2 > data[randloc2]) { this_error2 = difval2 - data[randloc2]; } else { this_error2 = data[randloc2] - difval2; } save_val2 = data[randloc2]; data[randloc2] = difval2; // cause error at location k printf("Data [randloc,randloc2] = %d %d \n", data[randloc], data[randloc2]); syndromes( data, msg_len, ecclen/2); eras_dec_rs( data, erase_posit, 0, msg_len, ecclen/2 ); if ( (data[randloc] != save_val) || ( data[randloc2] != save_val2)) { printf(" Error at k = %d data[randloc] = %d save = %d \n", k , data[randloc], save_val ); printf(" Error2 at k = %d data[randloc2] = %d save = %d \n", k , data[randloc2], save_val2 ); } data[randloc] = save_val; data[randloc2] = save_val2; } for(j =0; j < 20; j += 1) { printf("data[%d] = %d \n", 42 + j, data[42+j]); } // three random errors at random locs printf("Testing random triple errors \n"); for ( k = 0 ; k < 500 ; k += 1) { randint = random(); randint2 = random(); randint3 = random(); randint = randint & NN; randint2 = randint2 & NN; randint3 = randint3 & NN; difval = randint %NN; difval2 = randint2 % NN; difval3 = randint3 % NN; randloc = random(); randloc = randloc % 61; randloc2 = random(); randloc2 = randloc % 61; if ( randloc2 > randloc) { if (randloc2 - randloc != 1) { if ((randloc2 - randloc) % 2 == 0) { randloc3 = (randloc2 - randloc)/2; } else { randloc3 = ( 1 + randloc2 - randloc)/2; } } } else // randloc2 < or = randloc1 { if (randloc2 != 0) { randloc3 = randloc2 - 1; } else { randloc3 = (randloc + 1) % NN; } } if (randloc == randloc2) { randloc = (randloc+ 1)%NN; } if ( randloc == randloc3) { randloc = 37; } if ( difval > data[randloc]) { this_error = difval - data[randloc]; } else { this_error = data[randloc] - difval; } save_val = data[randloc]; data[randloc] = difval; // cause error at location k // data[randloc] = save_val ^ 1; if ( difval2 > data[randloc2]) { this_error2 = difval2 - data[randloc2]; } else { this_error2 = data[randloc2] - difval2; } save_val2 = data[randloc2]; data[randloc2] = difval2; // cause error at location k // data[randloc2] = save_val2 ^ 1; save_val3 = data[randloc3]; data[randloc3] = difval3; // cause error at location k // data[randloc2] = save_val3 ^ 1; printf("Data [randloc=%d,randloc2=%d,randloc3=%d] = %d %d %d\n", randloc, randloc2, randloc3, data[randloc], data[randloc2], data[randloc3] ); syndromes( data, msg_len, ecclen/2); eras_dec_rs( data, erase_posit, 0, msg_len, ecclen/2 ); if (data[randloc] != save_val) { printf(" Error at k = %d data[randloc] = %d save = %d \n", k , data[randloc], save_val ); } if( data[randloc2] != save_val2) { printf(" Error2 at k = %d data[randloc2] = %d save = %d \n", k , data[randloc2], save_val2 ); } if ( data[randloc3] != save_val3 ) { printf(" Error3 at k = %d data[randloc3] = %d save = %d \n", k , data[randloc3], save_val3 ); } data[randloc] = save_val; data[randloc2] = save_val2; data[randloc3] = save_val3; } for(j =0; j < 20; j += 1) { printf("data[%d] = %d \n", 42 + j, data[42+j]); } // three random errors at random locs, error at 76 printf("Begin random quad errors \n"); for ( k = 0 ; k < 100 ; k += 1) { randint = random(); randint2 = random()+ 17; randint3 = random()-12; randint4 = random()+74; randint = randint & NN; randint2 = randint2 & NN; randint3 = randint3 & NN; randint4 = randint4 & NN; difval = randint % NN; difval2 = randint2 % NN; difval3 = randint3 % NN; difval4 = randint4 % NN; save_val = data[33]; data[33] = difval; // cause error at location k save_val2 = data[34]; data[34] = difval2; // cause error at location k save_val3 = data[35]; data[35] = difval3; // cause error at location k save_val4 = data[36]; data[36] = difval4; // cause error at location k printf("Data [33,34,35,36] = %d %d %d %d\n", data[33], data[34], data[35], data[36] ); syndromes( data, msg_len, ecclen/2); printf("Done with syndromes \n"); eras_dec_rs( data, erase_posit, 0, msg_len, ecclen/2 ); printf("Returned from eras_dec_rs \n"); if ( (data[33] != save_val) || ( data[34] != save_val2) || ( data[35] != save_val3 ) || ( data[36] != save_val4)) { printf(" Error at k = %d data[33] = %d save = %d \n", k , data[33], save_val ); printf(" Error2 at k = %d data[34] = %d save = %d \n", k , data[34], save_val2 ); printf(" Error3 at k = %d data[35] = %d save = %d \n", k , data[randloc3], save_val3 ); printf(" Error4 at k = %d data[36] = %d save = %d \n", k , data[36], save_val4); } data[33] = save_val; data[34] = save_val2; data[35] = save_val3; data[36] = save_val4; } for(j =0; j < 20; j += 1) { printf("data[%d] = %d \n", 42 + j, data[42+j]); }}void copy_ecc_bytes(){ int j; for(j = 0; j < 10; j += 1) { data[j+10] = ecc_results[j]; }}void test_ecc_primary() {int j; int save_val; int save_val2; int save_val3; int save_val4; int k; int this_error; int this_error2; int this_error3; int randint; int randint2; int randint3; int randint4; int randloc2; int randloc3; int randloc4; int randloc; int difval; int difval2; int difval3; int difval4; set_debug = 0; data[0] = 4; data[1] = 13; data[2] = 63; data[3] = 1; data[4] = 24; data[5] = 9; data[6] = 59; data[7] = 3; data[8] = 15; data[9] = 4; set_debug = 0; codeindex = 10; generateEC( data, 10, 10 ); /* do the error correction, 10 */ for(j = 0; j < 10; j += 1) { data[j+10] = ecc_results[j]; } syndromes( data, 20, 5 ); // total data = 20 codes, 5 syndromes */ // 10 data + 10 ecc for (j = 0; j < 10; j += 1) { erase_posit[j] = 0; } // eras_dec_rs ( data, erasures, number_of_erasures, data length // syndrome_length); eras_dec_rs( data, erase_posit, 0 , 20, 5 ); for(j =0; j < 10; j += 1) { printf("data[%d] = %d \n", 10 + j, data[10+j]); } codeindex = 10; generateEC( data, 10, 10 ); /* do the error correction, 64 */ copy_ecc_bytes(); data[0] = 5; // cause an error in the recieved data... syndromes( data, 20, 5); // total data = 10 codes, 5 syndromes */ for (j = 0; j < 10; j += 1) { erase_posit[j] = 0; } printf("before data[9] = %d \n", data[9]); eras_dec_rs( data, erase_posit, 0, 20, 5 ); printf("after data[9] = %d \n", data[9]); data[0] = 4; for ( k = 0 ; k < 10 ; k += 1) { this_error = data[k] - 5; save_val = data[k]; data[k] = 5; // cause error at location k syndromes( data, 20, 5); eras_dec_rs( data, erase_posit, 0, 20, 5 ); if (data[k] != save_val) { printf(" Error at k = %d data[k] = %d save = %d \n", k , data[k], save_val ); } data[k] = save_val; } // test random single errors at data[5] printf("Testing random single errors \n"); for ( k = 0 ; k < 100 ; k += 1) { randint = random(); randint = randint & NN; difval = randint; if ( difval > data[5]) { this_error = difval - data[5]; } else { this_error = data[5] - difval; } save_val = data[5]; data[5] = difval; // cause error at location k syndromes( data, 20, 5); eras_dec_rs( data, erase_posit, 0, 20, 5 ); if (data[5] != save_val) { printf(" Error at k = %d data[k] = %d save = %d \n", k , data[5], save_val ); } data[5] = save_val; } // simple double errors printf("Testing random double errors data[0] = random data[1] = 1 \n"); data[0] = 4; // 4 data[1] = 13; // 13 data[2] = 63; data[3] = 1; data[4] = 24; data[5] = 9; data[6] = 59; data[7] = 3; data[8] = 15; data[9] = 4; // one random error at 0 and error of 1 at 1 set_debug = 0; for ( k = 0 ; k < 100 ; k += 1) { randint = random(); randint = randint & NN; difval = randint; if ( difval > data[0]) { this_error = difval - data[0]; } else { this_error = data[0] - difval; } save_val = data[0]; data[0] = difval; // cause error at location k save_val2 = data[1]; data[1] = 1; printf("Data [0,1] = %d %d \n", data[0], data[1]); syndromes( data, 20, 5); eras_dec_rs( data, erase_posit, 0, 20, 5 ); if ( (data[0] != save_val) | ( data[1] != save_val2)) { printf(" Error at k = %d data[0] = %d save = %d \n", k , data[0], save_val ); printf(" Error2 at k = %d data[1] = %d save = %d \n", k , data[1], save_val2 ); } data[0] = save_val; data[1] = save_val2; } // random error at random loc and error at 1 printf("Testing two random errors at data[0] and data[1] \n"); for ( k = 0 ; k < 100 ; k += 1) { randint = random(); randint = randint & NN; difval = randint ; randloc = random(); randloc = randloc % 10; if (randloc == 1) { randloc += 1; } if ( difval > data[randloc]) { this_error = difval - data[randloc]; } else { this_error = data[randloc] - difval; } save_val = data[randloc]; data[randloc] = difval; // cause error at location k save_val2 = data[1]; data[1] = 1; printf("Data [randloc,1] = %d %d \n", data[randloc], data[1]);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -