From: drowe67 Date: Thu, 19 Apr 2018 03:30:18 +0000 (+0000) Subject: bitperchar option to make feeding ofdm_mod easier X-Git-Url: http://git.whiteaudio.com/gitweb/?a=commitdiff_plain;h=1a83feffea370e6b070e9409dc95d42cd2fdcc67;p=freetel-svn-tracking.git bitperchar option to make feeding ofdm_mod easier git-svn-id: https://svn.code.sf.net/p/freetel/code@3502 01035d8c-6547-0410-b346-abe4f91aad63 --- diff --git a/codec2-dev/src/c2dec.c b/codec2-dev/src/c2dec.c index b80c026a..cbcd2ee7 100644 --- a/codec2-dev/src/c2dec.c +++ b/codec2-dev/src/c2dec.c @@ -53,12 +53,13 @@ int main(int argc, char *argv[]) short *buf; unsigned char *bits; float *softdec_bits; + char *bitperchar_bits; int nsam, nbit, nbyte, i, byte, frames, bits_proc, bit_errors, error_mode; int nstart_bit, nend_bit, bit_rate; int state, next_state; float ber, r, burst_length, burst_period, burst_timer, ber_est; unsigned char mask; - int natural, softdec, bit, ret; + int natural, softdec, bit, ret, bitperchar; #ifdef DUMP int dump; #endif @@ -72,6 +73,7 @@ int main(int argc, char *argv[]) { "berfile", required_argument, NULL, 0 }, { "natural", no_argument, &natural, 1 }, { "softdec", no_argument, &softdec, 1 }, + { "bitperchar", no_argument, &bitperchar, 1 }, #ifdef DUMP { "dump", required_argument, &dump, 1 }, #endif @@ -98,6 +100,8 @@ int main(int argc, char *argv[]) exit(1); } + mode = -1; + // Attempt to detect a .c2 file with a header struct c2_header in_hdr; char *ext = strrchr(argv[2], '.'); @@ -152,19 +156,21 @@ int main(int argc, char *argv[]) ber = 0.0; burst_length = burst_period = 0.0; burst_timer = 0.0; - natural = softdec = 0; + natural = softdec = bitperchar = 0; report_energy = 0; #ifdef DUMP dump = 0; #endif codec2 = codec2_create(mode); + assert(codec2 != NULL); nsam = codec2_samples_per_frame(codec2); nbit = codec2_bits_per_frame(codec2); buf = (short*)malloc(nsam*sizeof(short)); nbyte = (nbit + 7) / 8; bits = (unsigned char*)malloc(nbyte*sizeof(char)); softdec_bits = (float*)malloc(nbit*sizeof(float)); + bitperchar_bits = (char*)malloc(nbit*sizeof(char)); frames = bit_errors = bits_proc = 0; nstart_bit = 0; nend_bit = nbit-1; @@ -218,10 +224,15 @@ int main(int argc, char *argv[]) //printf("%d %d\n", nstart_bit, nend_bit); //fprintf(stderr, "softdec: %d natural: %d\n", softdec, natural); - if (softdec) + if (softdec) { ret = (fread(softdec_bits, sizeof(float), nbit, fin) == (size_t)nbit); - else + } + if (bitperchar) { + ret = (fread(bitperchar_bits, sizeof(char), nbit, fin) == (size_t)nbit); + } + if (!softdec && !bitperchar) { ret = (fread(bits, sizeof(char), nbyte, fin) == (size_t)nbyte); + } while(ret) { frames++; @@ -310,6 +321,21 @@ int main(int argc, char *argv[]) codec2_set_softdec(codec2, softdec_bits); } + if (bitperchar) { + /* pack bits, MSB received first */ + + bit = 7; byte = 0; + memset(bits, 0, nbyte); + for(i=0; i> bit) & 0x1); + unpacked_bits_float[i] = 1.0 - 2.0*((bits[byte] >> bit) & 0x1); + unpacked_bits_char[i] = (bits[byte] >> bit) & 0x1; bit--; if (bit < 0) { bit = 7; byte++; } } - fwrite(unpacked_bits, sizeof(float), nbit, fout); + if (softdec) { + fwrite(unpacked_bits_float, sizeof(float), nbit, fout); + } + if (bitperchar) { + fwrite(unpacked_bits_char, sizeof(char), nbit, fout); + } } else fwrite(bits, sizeof(char), nbyte, fout); @@ -161,7 +171,8 @@ int main(int argc, char *argv[]) free(buf); free(bits); - free(unpacked_bits); + free(unpacked_bits_float); + free(unpacked_bits_char); fclose(fin); fclose(fout);