#include #include #include #include #include #include #include "fec.h" int main() { unsigned char block[255]; int i; void *rs; struct rusage start, finish; double extime; int trials = 10000; for (i = 0; i < 223; i++) { block[i] = 0x01; } rs = init_rs_char(8, 0x187, 112, 11, 32, 0); encode_rs_char(rs, block, &block[223]); getrusage(RUSAGE_SELF, &start); for (i = 0; i < trials; i++) { #if 0 block[0] ^= 0xff; /* Introduce an error */ block[2] ^= 0xff; /* Introduce an error */ #endif decode_rs_char(rs, block, NULL, 0); } getrusage(RUSAGE_SELF, &finish); extime = finish.ru_utime.tv_sec - start.ru_utime.tv_sec + 1e-6 * (finish.ru_utime.tv_usec - start.ru_utime.tv_usec); printf("Execution time for %d Reed-Solomon blocks using general decoder: %.2f sec\n", trials, extime); printf("decoder speed: %g bits/s\n", trials * 223 * 8 / extime); encode_rs_8(block, &block[223], 0); getrusage(RUSAGE_SELF, &start); for (i = 0; i < trials; i++) { #if 0 block[0] ^= 0xff; /* Introduce an error */ block[2] ^= 0xff; /* Introduce an error */ #endif decode_rs_8(block, NULL, 0, 0); } getrusage(RUSAGE_SELF, &finish); extime = finish.ru_utime.tv_sec - start.ru_utime.tv_sec + 1e-6 * (finish.ru_utime.tv_usec - start.ru_utime.tv_usec); printf("Execution time for %d Reed-Solomon blocks using CCSDS decoder: %.2f sec\n", trials, extime); printf("decoder speed: %g bits/s\n", trials * 223 * 8 / extime); exit(0); }