From 7b00d3a678343656accf9748d755a85d43a91a5e Mon Sep 17 00:00:00 2001 From: Zilog80 Date: Sun, 14 Jun 2020 14:43:47 +0200 Subject: [PATCH] mod: --softin from test-branch --- demod/mod/README.md | 5 + demod/mod/demod_mod.c | 242 ++++++- demod/mod/demod_mod.h | 20 +- demod/mod/dfm09mod.c | 148 ++--- demod/mod/lms6Xmod.c | 307 ++++++--- demod/mod/lms6Xmod_soft.c | 1328 ------------------------------------- demod/mod/m10mod.c | 200 ++++-- demod/mod/meisei100mod.c | 172 +++-- demod/mod/rs41mod.c | 183 ++--- demod/mod/rs92mod.c | 206 ++++-- ecc/ecc_hamming.pdf | Bin 122133 -> 123995 bytes iq/iq_demod.pdf | Bin 143828 -> 144746 bytes 12 files changed, 1007 insertions(+), 1804 deletions(-) delete mode 100644 demod/mod/lms6Xmod_soft.c diff --git a/demod/mod/README.md b/demod/mod/README.md index 2456c54..3cd0687 100644 --- a/demod/mod/README.md +++ b/demod/mod/README.md @@ -59,4 +59,9 @@ alternative decoders using cross-correlation for better header-synchronization The difference between hard and soft viterbi becomes only apparent at lower SNR. The inner convolutional code does most of the error correction. The concatenated outer Reed-Solomon code kicks in only at low SNR. + soft input:
+ Option `--softin` expects float32 symbols as input, with `s>0` corresponding to `bit=1`.
+ (remark/caution: often soft bits are defined as `bit=0 -> s=+1` and `bit=1 -> s=-1` such that the identity element `0` + for addition mod 2 corresponds to the identity element `+1` for multiplication.) + diff --git a/demod/mod/demod_mod.c b/demod/mod/demod_mod.c index 1d6504d..a432647 100644 --- a/demod/mod/demod_mod.c +++ b/demod/mod/demod_mod.c @@ -24,6 +24,8 @@ /* ------------------------------------------------------------------------------------ */ +#ifndef EXT_FSK + static void raw_dft(dft_t *dft, float complex *Z) { int s, l, l2, i, j, k; float complex w1, w2, T; @@ -126,7 +128,7 @@ static int dft_window(dft_t *dft, int w) { dft->win[n] = 0.5 * ( 1.0 - cos(2*M_PI*n/(float)(dft->N2-1)) ); break ; case 2: // Hamming - dft->win[n] = 25/46.0 + (1.0 - 25/46.0)*cos(2*M_PI*n / (float)(dft->N2-1)); + dft->win[n] = 25/46.0 - (1.0 - 25/46.0)*cos(2*M_PI*n / (float)(dft->N2-1)); break ; case 3: // Blackmann dft->win[n] = 7938/18608.0 @@ -942,6 +944,96 @@ int read_softbit(dsp_t *dsp, hsbit_t *shb, int inv, int ofs, int pos, float l, i return 0; } +int read_softbit2p(dsp_t *dsp, hsbit_t *shb, int inv, int ofs, int pos, float l, int spike, hsbit_t *shb1) { +// symlen==2: manchester2 10->0,01->1: 2.bit + + float sample, sample1; + float avg; + float ths = 0.5, scale = 0.27; + + double sum = 0.0, sum1 = 0.0; + double mid; + //double l = 1.0; + + double bg = pos*dsp->symlen*dsp->sps; + + double dc = 0.0; + + ui8_t bit = 0, bit1 = 0; + + + if (dsp->opt_dc && dsp->opt_iq < 2) dc = dsp->dc; + + if (pos == 0) { + bg = 0; + dsp->sc = 0; + } + + + if (dsp->symlen == 2) { + mid = bg + (dsp->sps-1)/2.0; + bg += dsp->sps; + do { + if (dsp->buffered > 0) dsp->buffered -= 1; + else if (f32buf_sample(dsp, inv) == EOF) return EOF; + + sample = dsp->bufs[(dsp->sample_out-dsp->buffered + ofs + dsp->M) % dsp->M]; + sample1 = dsp->bufs[(dsp->sample_out-dsp->buffered + ofs-1 + dsp->M) % dsp->M]; + if (spike && fabs(sample - avg) > ths) { + avg = 0.5*(dsp->bufs[(dsp->sample_out-dsp->buffered-1 + ofs + dsp->M) % dsp->M] + +dsp->bufs[(dsp->sample_out-dsp->buffered+1 + ofs + dsp->M) % dsp->M]); + sample = avg + scale*(sample - avg); // spikes + } + sample -= dc; + sample1 -= dc; + + if (l < 0 || (mid-l < dsp->sc && dsp->sc < mid+l)) { + sum -= sample; + sum1 -= sample1; + } + + dsp->sc++; + } while (dsp->sc < bg); // n < dsp->sps + } + + mid = bg + (dsp->sps-1)/2.0; + bg += dsp->sps; + do { + if (dsp->buffered > 0) dsp->buffered -= 1; + else if (f32buf_sample(dsp, inv) == EOF) return EOF; + + sample = dsp->bufs[(dsp->sample_out-dsp->buffered + ofs + dsp->M) % dsp->M]; + sample1 = dsp->bufs[(dsp->sample_out-dsp->buffered + ofs-1 + dsp->M) % dsp->M]; + if (spike && fabs(sample - avg) > ths) { + avg = 0.5*(dsp->bufs[(dsp->sample_out-dsp->buffered-1 + ofs + dsp->M) % dsp->M] + +dsp->bufs[(dsp->sample_out-dsp->buffered+1 + ofs + dsp->M) % dsp->M]); + sample = avg + scale*(sample - avg); // spikes + } + sample -= dc; + sample1 -= dc; + + if (l < 0 || (mid-l < dsp->sc && dsp->sc < mid+l)) { + sum += sample; + sum1 += sample1; + } + + dsp->sc++; + } while (dsp->sc < bg); // n < dsp->sps + + + if (sum >= 0) bit = 1; + else bit = 0; + shb->hb = bit; + shb->sb = (float)sum; + + if (sum1 >= 0) bit1 = 1; + else bit1 = 0; + shb1->hb = bit1; + shb1->sb = (float)sum1; + + return 0; +} + /* -------------------------------------------------------------------------- */ #define IF_SAMPLE_RATE 48000 @@ -1275,12 +1367,6 @@ int free_buffers(dsp_t *dsp) { /* ------------------------------------------------------------------------------------ */ -ui32_t get_sample(dsp_t *dsp) { - return dsp->sample_out; -} - -/* ------------------------------------------------------------------------------------ */ - int find_header(dsp_t *dsp, float thres, int hdmax, int bitofs, int opt_dc) { ui32_t k = 0; @@ -1345,3 +1431,145 @@ int find_header(dsp_t *dsp, float thres, int hdmax, int bitofs, int opt_dc) { return EOF; } +/* ------------------------------------------------------------------------------------ */ + + +#else +// external FSK demod: read float32 soft symbols + +float read_wav_header(pcm_t *pcm, FILE *fp) {} +int f32buf_sample(dsp_t *dsp, int inv) {} +int read_slbit(dsp_t *dsp, int *bit, int inv, int ofs, int pos, float l, int spike) {} +int read_softbit(dsp_t *dsp, hsbit_t *shb, int inv, int ofs, int pos, float l, int spike) {} +int read_softbit2p(dsp_t *dsp, hsbit_t *shb, int inv, int ofs, int pos, float l, int spike, hsbit_t *shb1) {} + +int init_buffers(dsp_t *dsp) {} +int free_buffers(dsp_t *dsp) {} + +int find_header(dsp_t *dsp, float thres, int hdmax, int bitofs, int opt_dc) {} + +#endif + + +static float cmp_hdb(hdb_t *hdb) { // bit-errors? + int i, j; + int headlen = hdb->len; + int berrs1 = 0, berrs2 = 0; + + i = 0; + j = hdb->bufpos; + while (i < headlen) { + if (j < 0) j = headlen-1; + if (hdb->buf[j] != hdb->hdr[headlen-1-i]) berrs1 += 1; + j--; + i++; + } + + i = 0; + j = hdb->bufpos; + while (i < headlen) { + if (j < 0) j = headlen-1; + if ((hdb->buf[j]^0x01) != hdb->hdr[headlen-1-i]) berrs2 += 1; + j--; + i++; + } + + if (berrs2 < berrs1) return (-headlen+berrs2)/(float)headlen; + else return ( headlen-berrs1)/(float)headlen; + + return 0; +} + +int find_binhead(FILE *fp, hdb_t *hdb, float *score) { + int bit; + int headlen = hdb->len; + float mv; + + //*score = 0.0; + + while ( (bit = fgetc(fp)) != EOF ) + { + bit &= 1; + + hdb->bufpos = (hdb->bufpos+1) % headlen; + hdb->buf[hdb->bufpos] = 0x30 | bit; // Ascii + + mv = cmp_hdb(hdb); + if ( fabs(mv) > hdb->thb ) { + *score = mv; + return 1; + } + } + + return EOF; +} + +static float corr_softhdb(hdb_t *hdb) { // max score in window probably not needed + int i, j; + int headlen = hdb->len; + double sum = 0.0; + double normx = 0.0, + normy = 0.0; + float x, y; + + i = 0; + j = hdb->bufpos + 1; + + while (i < headlen) { + if (j >= headlen) j = 0; + x = hdb->sbuf[j]; + y = 2.0*(hdb->hdr[i]&0x1) - 1.0; + sum += y * hdb->sbuf[j]; + normx += x*x; + normy += y*y; + j++; + i++; + } + sum /= sqrt(normx*normy); + + return sum; +} + +int f32soft_read(FILE *fp, float *s) { + unsigned int word = 0; + short *b = (short*)&word; + float *f = (float*)&word; + int bps = 32; + + if (fread( &word, bps/8, 1, fp) != 1) return EOF; + + if (bps == 32) { + *s = *f; + } + else { + if (bps == 8) { *b -= 128; } + *s = *b/128.0; + if (bps == 16) { *s /= 256.0; } + } + + return 0; +} + +int find_softbinhead(FILE *fp, hdb_t *hdb, float *score) { + int headlen = hdb->len; + float sbit; + float mv; + + //*score = 0.0; + + while ( f32soft_read(fp, &sbit) != EOF ) + { + hdb->bufpos = (hdb->bufpos+1) % headlen; + hdb->sbuf[hdb->bufpos] = sbit; + + mv = corr_softhdb(hdb); + + if ( fabs(mv) > hdb->ths ) { + *score = mv; + return 1; + } + } + + return EOF; +} + diff --git a/demod/mod/demod_mod.h b/demod/mod/demod_mod.h index bfe3a14..26934fd 100644 --- a/demod/mod/demod_mod.h +++ b/demod/mod/demod_mod.h @@ -144,16 +144,30 @@ typedef struct { } hsbit_t; +typedef struct { + char *hdr; + char *buf; + float *sbuf; + int len; + int bufpos; + float thb; + float ths; +} hdb_t; + float read_wav_header(pcm_t *, FILE *); int f32buf_sample(dsp_t *, int); int read_slbit(dsp_t *, int*, int, int, int, float, int); -int read_softbit(dsp_t *, hsbit_t *, int, int, int, float, int ); +int read_softbit(dsp_t *, hsbit_t *, int, int, int, float, int); +int read_softbit2p(dsp_t *dsp, hsbit_t *shb, int inv, int ofs, int pos, float l, int spike, hsbit_t *shb1); int init_buffers(dsp_t *); int free_buffers(dsp_t *); -ui32_t get_sample(dsp_t *); - int find_header(dsp_t *, float, int, int, int); +int f32soft_read(FILE *fp, float *s); +int find_binhead(FILE *fp, hdb_t *hdb, float *score); +int find_softbinhead(FILE *fp, hdb_t *hdb, float *score); + + diff --git a/demod/mod/dfm09mod.c b/demod/mod/dfm09mod.c index 7396514..5f7b130 100644 --- a/demod/mod/dfm09mod.c +++ b/demod/mod/dfm09mod.c @@ -885,67 +885,6 @@ static int print_frame(gpx_t *gpx) { /* -------------------------------------------------------------------------- */ -// header bit buffer -typedef struct { - char *hdr; - char *buf; - char len; - int bufpos; - float ths; -} hdb_t; - -static float cmp_hdb(hdb_t *hdb) { // bit-errors? - int i, j; - int headlen = hdb->len; - int berrs1 = 0, berrs2 = 0; - - i = 0; - j = hdb->bufpos; - while (i < headlen) { - if (j < 0) j = headlen-1; - if (hdb->buf[j] != hdb->hdr[headlen-1-i]) berrs1 += 1; - j--; - i++; - } - - i = 0; - j = hdb->bufpos; - while (i < headlen) { - if (j < 0) j = headlen-1; - if ((hdb->buf[j]^0x01) != hdb->hdr[headlen-1-i]) berrs2 += 1; - j--; - i++; - } - if (berrs2 < berrs1) return (-headlen+berrs2)/(float)headlen; - else return ( headlen-berrs1)/(float)headlen; - - return 0; -} - -static int find_binhead(FILE *fp, hdb_t *hdb, float *score) { - int bit; - int headlen = hdb->len; - float mv; - - //*score = 0.0; - - while ( (bit = fgetc(fp)) != EOF ) - { - bit &= 1; - - hdb->bufpos = (hdb->bufpos+1) % headlen; - hdb->buf[hdb->bufpos] = 0x30 | bit; // Ascii - - mv = cmp_hdb(hdb); - if ( fabs(mv) > hdb->ths ) { - *score = mv; - return 1; - } - } - - return EOF; -} - int main(int argc, char **argv) { @@ -961,6 +900,7 @@ int main(int argc, char **argv) { int option_lp = 0; int option_dc = 0; int option_bin = 0; + int option_softin = 0; int option_json = 0; // JSON blob output (for auto_rx) int option_pcmraw = 0; int wavloaded = 0; @@ -1042,12 +982,13 @@ int main(int argc, char **argv) { else if ( (strcmp(*argv, "--spike") == 0) ) { spike = 1; } - else if ( (strcmp(*argv, "--auto") == 0) ) { option_auto = 1; } - else if (strcmp(*argv, "--bin") == 0) { option_bin = 1; } // bit/byte binary input - else if ( (strcmp(*argv, "--dist") == 0) ) { option_dist = 1; option_ecc = 1; } - else if ( (strcmp(*argv, "--json") == 0) ) { option_json = 1; option_ecc = 1; } - else if ( (strcmp(*argv, "--ch2") == 0) ) { sel_wavch = 1; } // right channel (default: 0=left) - else if ( (strcmp(*argv, "--ths") == 0) ) { + else if (strcmp(*argv, "--auto") == 0) { option_auto = 1; } + else if (strcmp(*argv, "--bin") == 0) { option_bin = 1; } // bit/byte binary input + else if (strcmp(*argv, "--softin") == 0) { option_softin = 1; } // float32 soft input + else if (strcmp(*argv, "--dist") == 0) { option_dist = 1; option_ecc = 1; } + else if (strcmp(*argv, "--json") == 0) { option_json = 1; option_ecc = 1; } + else if (strcmp(*argv, "--ch2") == 0) { sel_wavch = 1; } // right channel (default: 0=left) + else if (strcmp(*argv, "--ths") == 0) { ++argv; if (*argv) { thres = atof(*argv); @@ -1150,7 +1091,14 @@ int main(int argc, char **argv) { headerlen = strlen(dfm_rawheader); - if (!option_bin) { + #ifdef EXT_FSK + if (!option_bin && !option_softin) { + option_softin = 1; + fprintf(stderr, "reading float32 soft symbols\n"); + } + #endif + + if (!option_bin && !option_softin) { if (option_iq == 0 && option_pcmraw) { fclose(fp); @@ -1198,38 +1146,48 @@ int main(int argc, char **argv) { if ( dsp.sps < 8 ) { fprintf(stderr, "note: sample rate low\n"); } + + + k = init_buffers(&dsp); + if ( k < 0 ) { + fprintf(stderr, "error: init buffers\n"); + return -1; + } + + bitofs += shift; } else { + if (option_bin && option_softin) option_bin = 0; // init circular header bit buffer hdb.hdr = dfm_rawheader; hdb.len = strlen(dfm_rawheader); - hdb.ths = 1.0 - 2.1/(float)hdb.len; // 1.0-max_bit_errors/hdrlen // max 1.1 !! + hdb.thb = 1.0 - 2.1/(float)hdb.len; // 1.0-max_bit_errors/hdrlen // max 1.1 !! hdb.bufpos = -1; hdb.buf = calloc(hdb.len, sizeof(char)); if (hdb.buf == NULL) { fprintf(stderr, "error: malloc\n"); return -1; } + hdb.ths = 0.7; // caution/test false positive + hdb.sbuf = calloc(hdb.len, sizeof(float)); + if (hdb.sbuf == NULL) { + fprintf(stderr, "error: malloc\n"); + return -1; + } } - k = init_buffers(&dsp); - if ( k < 0 ) { - fprintf(stderr, "error: init buffers\n"); - return -1; - }; - - - bitofs += shift; - - while ( 1 ) { if (option_bin) { // aka find_binrawhead() header_found = find_binhead(fp, &hdb, &_mv); // symbols or bits? hdrcnt += nfrms; } - else { // FM-audio: + else if (option_softin) { + header_found = find_softbinhead(fp, &hdb, &_mv); + hdrcnt += nfrms; + } + else { //2 (false positive) // FM-audio: header_found = find_header(&dsp, thres, 2, bitofs, dsp.opt_dc); // optional 2nd pass: dc=0 _mv = dsp.mv; } @@ -1251,7 +1209,7 @@ int main(int argc, char **argv) { frm = 0; while ( frm < nfrms ) { // nfrms=1,2,4,8 - if (option_bin) { + if (option_bin || option_softin) { gpx._frmcnt = hdrcnt + frm; } else { @@ -1271,15 +1229,25 @@ int main(int argc, char **argv) { hsbit.sb = 2*hsbit.hb - 1; } } + else if (option_softin) { + float s1 = 0.0; + float s2 = 0.0; + float s = 0.0; + bitQ = f32soft_read(fp, &s1); + if (bitQ != EOF) { + bitQ = f32soft_read(fp, &s2); + if (bitQ != EOF) { + s = s2-s1; // integrate both symbols // only 2nd Manchester symbol: s2 + hsbit.sb = s; + hsbit.hb = (s>=0.0); + } + } + } else { - if (option_iq >= 2) { - float bl = -1; - if (option_iq > 2) bl = 4.0; - bitQ = read_softbit(&dsp, &hsbit, 0, bitofs, bitpos, bl, 0); - } - else { - bitQ = read_softbit(&dsp, &hsbit, 0, bitofs, bitpos, -1, spike); - } + float bl = -1; + if (option_iq >= 2) spike = 0; + if (option_iq > 2) bl = 4.0; + bitQ = read_softbit(&dsp, &hsbit, 0, bitofs, bitpos, bl, spike); // symlen=2 // optional: // normalize soft bit s_j by // rhsbit.sb /= dsp._spb+1; // all samples in [-1,+1] @@ -1309,7 +1277,7 @@ int main(int argc, char **argv) { } - if (!option_bin) free_buffers(&dsp); + if (!option_bin && !option_softin) free_buffers(&dsp); else { if (hdb.buf) { free(hdb.buf); hdb.buf = NULL; } } diff --git a/demod/mod/lms6Xmod.c b/demod/mod/lms6Xmod.c index 1bab08b..2632790 100644 --- a/demod/mod/lms6Xmod.c +++ b/demod/mod/lms6Xmod.c @@ -3,6 +3,10 @@ * LMS6 * (403 MHz) * + * soft decision test: + * IQ-decoding: --vit2 (soft decision) better performance (low dB) + * FM-decoding: --vit1 (hard decision) better than --vit2 + * * sync header: correlation/matched filter * files: lms6Xmod.c demod_mod.c demod_mod.h bch_ecc_mod.c bch_ecc_mod.h * compile, either (a) or (b): @@ -16,7 +20,8 @@ * * usage: * ./lms6Xmod --vit --ecc - * ( --vit recommended) + * ./lms6Xmod --vit2 --ecc --IQ 0.0 + * ( --vit/--vit2 recommended) * author: zilog80 */ @@ -116,12 +121,11 @@ typedef struct { ui8_t bIn; ui8_t codeIn; ui8_t prevState; // 0..M=64 - int w; // > 255 : if (w>250): w=250 ? - //float sw; + float w; } states_t; typedef struct { - char rawbits[RAWBITFRAME_LEN+OVERLAP*BITS*2 +8]; + hsbit_t rawbits[RAWBITFRAME_LEN+OVERLAP*BITS*2 +8]; states_t state[RAWBITFRAME_LEN+OVERLAP +8][M]; states_t d[N]; } VIT_t; @@ -138,7 +142,7 @@ typedef struct { double lat; double lon; double alt; double vH; double vD; double vV; double vE; double vN; double vU; - char blk_rawbits[RAWBITBLOCK_LEN+SYNC_LEN*BITS*2 +9]; + hsbit_t blk_rawbits[RAWBITBLOCK_LEN+SYNC_LEN*BITS*2 +9]; ui8_t frame[FRM_LEN]; // = { 0x24, 0x54, 0x00, 0x00}; // dataheader int frm_pos; // ecc_blk <-> frm_blk int sf6; @@ -213,12 +217,16 @@ static int vit_initCodes(gpx_t *gpx) { return 0; } -static int vit_dist(int c, char *rc) { - return (((c>>1)^rc[0])&1) + ((c^rc[1])&1); +static float vit_dist2(int c, hsbit_t *rc) { + int c0 = 2*((c>>1) & 1)-1; // {0,1} -> {-1,+1} + int c1 = 2*(c & 1)-1; + float d2 = (c0-rc[0].sb)*(c0-rc[0].sb) + (c1-rc[1].sb)*(c1-rc[1].sb); + return d2; } -static int vit_start(VIT_t *vit, char *rc) { - int t, m, j, c, d; +static int vit_start(VIT_t *vit, hsbit_t *rc) { + int t, m, j, c; + float d; t = L-1; m = M; @@ -236,7 +244,7 @@ static int vit_start(VIT_t *vit, char *rc) { c = vit_code[j]; vit->state[t][j].bIn = j % 2; vit->state[t][j].codeIn = c; - d = vit_dist( c, rc+2*(t-1) ); + d = vit_dist2( c, rc+2*(t-1) ); vit->state[t][j].w = vit->state[t-1][vit->state[t][j].prevState].w + d; } m *= 2; @@ -245,7 +253,7 @@ static int vit_start(VIT_t *vit, char *rc) { return t; } -static int vit_next(VIT_t *vit, int t, char *rc) { +static int vit_next(VIT_t *vit, int t, hsbit_t *rc) { int b, nstate; int j, index; @@ -255,7 +263,7 @@ static int vit_next(VIT_t *vit, int t, char *rc) { vit->d[nstate].bIn = b; vit->d[nstate].codeIn = vit_code[nstate]; vit->d[nstate].prevState = j; - vit->d[nstate].w = vit->state[t][j].w + vit_dist( vit->d[nstate].codeIn, rc ); + vit->d[nstate].w = vit->state[t][j].w + vit_dist2( vit->d[nstate].codeIn, rc ); } } @@ -272,11 +280,11 @@ static int vit_next(VIT_t *vit, int t, char *rc) { static int vit_path(VIT_t *vit, int j, int t) { int c; - vit->rawbits[2*t] = '\0'; + vit->rawbits[2*t].hb = '\0'; while (t > 0) { c = vit->state[t][j].codeIn; - vit->rawbits[2*t -2] = 0x30 + ((c>>1) & 1); - vit->rawbits[2*t -1] = 0x30 + (c & 1); + vit->rawbits[2*t -2].hb = 0x30 + ((c>>1) & 1); + vit->rawbits[2*t -1].hb = 0x30 + (c & 1); j = vit->state[t][j].prevState; t--; } @@ -284,13 +292,20 @@ static int vit_path(VIT_t *vit, int j, int t) { return 0; } -static int viterbi(VIT_t *vit, char *rc) { +static int hbstr_len(hsbit_t *hsbit) { + int len = 0; + while (hsbit[len].hb) len++; + return len; +} + +static int viterbi(VIT_t *vit, hsbit_t *rc) { int t, tmax; - int j, j_min, w_min; + int j, j_min; + float w_min; vit_start(vit, rc); - tmax = strlen(rc)/2; + tmax = hbstr_len(rc)/2; for (t = L-1; t < tmax; t++) { @@ -315,15 +330,15 @@ static int viterbi(VIT_t *vit, char *rc) { // ------------------------------------------------------------------------ -static int deconv(char* rawbits, char *bits) { +static int deconv(hsbit_t *rawbits, char *bits) { int j, n, bitA, bitB; - char *p; + hsbit_t *p; int len; int errors = 0; int m = L-1; - len = strlen(rawbits); + len = hbstr_len(rawbits); for (j = 0; j < m; j++) bits[j] = '0'; n = 0; while ( 2*(m+n) < len ) { @@ -333,10 +348,10 @@ static int deconv(char* rawbits, char *bits) { bitA ^= (bits[n+j]&1) & (polyA[j]&1); bitB ^= (bits[n+j]&1) & (polyB[j]&1); } - if ( (bitA^(p[0]&1))==(polyA[m]&1) && (bitB^(p[1]&1))==(polyB[m]&1) ) bits[n+m] = '1'; - else if ( (bitA^(p[0]&1))==0 && (bitB^(p[1]&1))==0 ) bits[n+m] = '0'; + if ( (bitA^(p[0].hb&1))==(polyA[m]&1) && (bitB^(p[1].hb&1))==(polyB[m]&1) ) bits[n+m] = '1'; + else if ( (bitA^(p[0].hb&1))==0 && (bitB^(p[1].hb&1))==0 ) bits[n+m] = '0'; else { - if ( (bitA^(p[0]&1))!=(polyA[m]&1) && (bitB^(p[1]&1))==(polyB[m]&1) ) bits[n+m] = 0x39; + if ( (bitA^(p[0].hb&1))!=(polyA[m]&1) && (bitB^(p[1].hb&1))==(polyB[m]&1) ) bits[n+m] = 0x39; else bits[n+m] = 0x38; errors = n; break; @@ -795,7 +810,7 @@ static void proc_frame(gpx_t *gpx, int len) { ui8_t block_bytes[FRAME_LEN+8]; ui8_t rs_cw[rs_N]; char frame_bits[BITFRAME_LEN+OVERLAP*BITS +8]; // init L-1 bits mit 0 - char *rawbits = NULL; + hsbit_t *rawbits = NULL; int i, j; int err = 0; int errs = 0; @@ -804,13 +819,17 @@ static void proc_frame(gpx_t *gpx, int len) { if ((len % 8) > 4) { - while (len % 8) gpx->blk_rawbits[len++] = '0'; + while (len % 8) { + gpx->blk_rawbits[len].hb = '0'; + gpx->blk_rawbits[len].sb = -1; + len++; + } } - gpx->blk_rawbits[len] = '\0'; + gpx->blk_rawbits[len].hb = '\0'; flen = len / (2*BITS); - if (gpx->option.vit == 1) { + if (gpx->option.vit) { viterbi(gpx->vit, gpx->blk_rawbits); rawbits = gpx->vit->rawbits; } @@ -922,6 +941,8 @@ static void proc_frame(gpx_t *gpx, int len) { } +/* -------------------------------------------------------------------------- */ + int main(int argc, char **argv) { @@ -930,6 +951,7 @@ int main(int argc, char **argv) { int option_iq = 0; int option_lp = 0; int option_dc = 0; + int option_softin = 0; int option_pcmraw = 0; int wavloaded = 0; int sel_wavch = 0; // audio channel: left @@ -940,7 +962,7 @@ int main(int argc, char **argv) { int k; - int bit, rbit; + hsbit_t hsbit, rhsbit, rhsbit1; int bitpos = 0; int bitQ; int pos; @@ -948,15 +970,17 @@ int main(int argc, char **argv) { int header_found = 0; - float thres = 0.68; + float thres = 0.65; float _mv = 0.0; + float lpIQ_bw = 16e3; + int symlen = 1; int bitofs = 0; int shift = 0; - int bitofs6 = 1; // +1 .. +2 - int bitofsX = 0; // 0 .. +1 + int bitofs6 = 0; // -1 .. +2 + int bitofsX = 0; // -1 .. +1 unsigned int bc = 0; @@ -966,17 +990,21 @@ int main(int argc, char **argv) { pcm_t pcm = {0}; dsp_t dsp = {0}; //memset(&dsp, 0, sizeof(dsp)); -/* + + hdb_t hdb = {0}; + + /* // gpx_t _gpx = {0}; gpx_t *gpx = &_gpx; // stack size ... gpx_t *gpx = NULL; gpx = calloc(1, sizeof(gpx_t)); //memset(gpx, 0, sizeof(gpx_t)); -*/ + */ gpx_t _gpx = {0}; gpx_t *gpx = &_gpx; gpx->auto_detect = 1; gpx->reset_dsp = 0; + #ifdef CYGWIN _setmode(fileno(stdin), _O_BINARY); // _setmode(_fileno(stdin), _O_BINARY); #endif @@ -1010,7 +1038,9 @@ int main(int argc, char **argv) { gpx->option.raw = 1; // bytes - rs_ecc_codewords } else if (strcmp(*argv, "--ecc" ) == 0) { gpx->option.ecc = 1; } // RS-ECC - else if (strcmp(*argv, "--vit" ) == 0) { gpx->option.vit = 1; } // viterbi + else if (strcmp(*argv, "--ecc3") == 0) { gpx->option.ecc = 3; } // RS-ECC + else if (strcmp(*argv, "--vit" ) == 0) { gpx->option.vit = 1; } // viterbi-hard + else if (strcmp(*argv, "--vit2" ) == 0) { gpx->option.vit = 2; } // viterbi-soft else if ( (strcmp(*argv, "--gpsweek") == 0) ) { ++argv; if (*argv) { @@ -1022,8 +1052,9 @@ int main(int argc, char **argv) { else if ( (strcmp(*argv, "-i") == 0) || (strcmp(*argv, "--invert") == 0) ) { option_inv = 1; // nicht noetig } - else if ( (strcmp(*argv, "--ch2") == 0) ) { sel_wavch = 1; } // right channel (default: 0=left) - else if ( (strcmp(*argv, "--ths") == 0) ) { + else if (strcmp(*argv, "--ch2") == 0) { sel_wavch = 1; } // right channel (default: 0=left) + else if (strcmp(*argv, "--softin") == 0) { option_softin = 1; } // float32 soft input + else if (strcmp(*argv, "--ths") == 0) { ++argv; if (*argv) { thres = atof(*argv); @@ -1053,6 +1084,14 @@ int main(int argc, char **argv) { option_iq = 5; } else if (strcmp(*argv, "--lp") == 0) { option_lp = 1; } // IQ lowpass + else if (strcmp(*argv, "--lpbw") == 0) { // IQ lowpass BW / kHz + double bw = 0.0; + ++argv; + if (*argv) bw = atof(*argv); + else return -1; + if (bw > 4.6 && bw < 24.0) lpIQ_bw = bw*1e3; + option_lp = 1; + } else if (strcmp(*argv, "--dc") == 0) { option_dc = 1; } else if (strcmp(*argv, "--min") == 0) { option_min = 1; @@ -1094,71 +1133,113 @@ int main(int argc, char **argv) { if (gpx->option.raw == 4) gpx->option.ecc = 1; // init gpx - memcpy(gpx->blk_rawbits, blk_syncbits, sizeof(blk_syncbits)); memcpy(gpx->frame, frm_sync6, sizeof(frm_sync6)); gpx->frm_pos = 0; // ecc_blk <-> frm_blk gpx->sf6 = 0; gpx->sfX = 0; + //memcpy(gpx->blk_rawbits, blk_syncbits, sizeof(blk_syncbits)); + for (k = 0; k < strlen(blk_syncbits); k++) { // strlen(blk_syncbits)=BLOCKSTART + int hbit = blk_syncbits[k] & 1; + gpx->blk_rawbits[k].hb = hbit + 0x30; + gpx->blk_rawbits[k].sb = 2*hbit-1; + } gpx->option.inv = option_inv; // irrelevant gpx->week = gpsweek; - if (option_iq == 0 && option_pcmraw) { - fclose(fp); - fprintf(stderr, "error: raw data not IQ\n"); - return -1; - } - if (option_iq) sel_wavch = 0; - pcm.sel_ch = sel_wavch; - if (option_pcmraw == 0) { - k = read_wav_header(&pcm, fp); - if ( k < 0 ) { + #ifdef EXT_FSK + if (!option_softin) { + option_softin = 1; + fprintf(stderr, "reading float32 soft symbols\n"); + } + #endif + + if (!option_softin) { + + if (option_iq == 0 && option_pcmraw) { fclose(fp); - fprintf(stderr, "error: wav header\n"); + fprintf(stderr, "error: raw data not IQ\n"); + return -1; + } + if (option_iq == 0 && gpx->option.vit == 2) { // FM-demodulated data not recommended + gpx->option.vit = 1; // for soft-decoding + fprintf(stderr, "info: soft decoding only for IQ\n"); + } + if (option_iq) sel_wavch = 0; + + pcm.sel_ch = sel_wavch; + if (option_pcmraw == 0) { + k = read_wav_header(&pcm, fp); + if ( k < 0 ) { + fclose(fp); + fprintf(stderr, "error: wav header\n"); + return -1; + } + } + + symlen = 1; + + // init dsp + // + dsp.fp = fp; + dsp.sr = pcm.sr; + dsp.bps = pcm.bps; + dsp.nch = pcm.nch; + dsp.ch = pcm.sel_ch; + dsp.br = (float)BAUD_RATE6; + dsp.sps = (float)dsp.sr/dsp.br; + dsp.symlen = symlen; + dsp.symhd = 1; + dsp._spb = dsp.sps*symlen; + dsp.hdr = rawheader; + dsp.hdrlen = strlen(rawheader); + dsp.BT = 1.2; // bw/time (ISI) // 1.0..2.0 // BT(lmsX) < BT(lms6) ? -> init_buffers() + dsp.h = 0.9; // 0.95 modulation index + dsp.opt_iq = option_iq; + dsp.opt_lp = option_lp; + dsp.lpIQ_bw = lpIQ_bw; // 16e3; // IF lowpass bandwidth // soft decoding? + dsp.lpFM_bw = 6e3; // FM audio lowpass + dsp.opt_dc = option_dc; + dsp.opt_IFmin = option_min; + + if ( dsp.sps < 8 ) { + fprintf(stderr, "note: sample rate low (%.1f sps)\n", dsp.sps); + } + + //headerlen = dsp.hdrlen; + + + k = init_buffers(&dsp); // baud difference not significant + if ( k < 0 ) { + fprintf(stderr, "error: init buffers\n"); return -1; } } - - symlen = 1; - - // init dsp - // - dsp.fp = fp; - dsp.sr = pcm.sr; - dsp.bps = pcm.bps; - dsp.nch = pcm.nch; - dsp.ch = pcm.sel_ch; - dsp.br = (float)BAUD_RATE6; - dsp.sps = (float)dsp.sr/dsp.br; - dsp.symlen = symlen; - dsp.symhd = 1; - dsp._spb = dsp.sps*symlen; - dsp.hdr = rawheader; - dsp.hdrlen = strlen(rawheader); - dsp.BT = 1.2; // bw/time (ISI) // 1.0..2.0 // BT(lmsX) < BT(lms6) ? -> init_buffers() - dsp.h = 0.9; // 0.95 modulation index - dsp.opt_iq = option_iq; - dsp.opt_lp = option_lp; - dsp.lpIQ_bw = 8e3; // IF lowpass bandwidth - dsp.lpFM_bw = 6e3; // FM audio lowpass - dsp.opt_dc = option_dc; - dsp.opt_IFmin = option_min; - - if ( dsp.sps < 8 ) { - fprintf(stderr, "note: sample rate low (%.1f sps)\n", dsp.sps); + else { + // init circular header bit buffer + hdb.hdr = rawheader; + hdb.len = strlen(rawheader); + //hdb.thb = 1.0 - 3.1/(float)hdb.len; // 1.0-max_bit_errors/hdrlen + hdb.bufpos = -1; + hdb.buf = NULL; + /* + calloc(hdb.len, sizeof(char)); + if (hdb.buf == NULL) { + fprintf(stderr, "error: malloc\n"); + return -1; + } + */ + hdb.ths = 0.7; // caution/test false positive + hdb.sbuf = calloc(hdb.len, sizeof(float)); + if (hdb.sbuf == NULL) { + fprintf(stderr, "error: malloc\n"); + return -1; + } } - //headerlen = dsp.hdrlen; - - k = init_buffers(&dsp); // baud difference not significant - if ( k < 0 ) { - fprintf(stderr, "error: init buffers\n"); - return -1; - }; - if (gpx->option.vit) { k = vit_initCodes(gpx); @@ -1194,9 +1275,13 @@ int main(int argc, char **argv) { while ( 1 ) { - // FM-audio: - header_found = find_header(&dsp, thres, 6, bitofs, dsp.opt_dc); // optional 2nd pass: dc=0 - _mv = dsp.mv; + if (option_softin) { + header_found = find_softbinhead(fp, &hdb, &_mv); + } + else { // FM-audio: + header_found = find_header(&dsp, thres, 10, bitofs, dsp.opt_dc); // optional 2nd pass: dc=0 + _mv = dsp.mv; + } if (header_found == EOF) break; @@ -1220,19 +1305,49 @@ int main(int argc, char **argv) { while ( pos < rawbitblock_len ) { - bitQ = read_slbit(&dsp, &rbit, 0, bitofs, bitpos, -1, 0); // symlen=1 - + if (option_softin) { + float s = 0.0; + bitQ = f32soft_read(fp, &s); + if (bitQ != EOF) { + rhsbit.sb = s; + rhsbit.hb = (s>=0.0); + } + } + else { + //bitQ = read_softbit(&dsp, &rhsbit, 0, bitofs, bitpos, -1, 0); // symlen=1 + bitQ = read_softbit2p(&dsp, &rhsbit, 0, bitofs, bitpos, -1, 0, &rhsbit1); // symlen=1 + if (gpx->option.ecc == 3) { + if (rhsbit.sb*rhsbit1.sb < 0) { + rhsbit.sb += rhsbit1.sb; + rhsbit.hb = (rhsbit.sb>=0.0); + } + } + } if (bitQ == EOF) { break; } - bit = rbit ^ (bc%2); // (c0,inv(c1)) - gpx->blk_rawbits[pos] = 0x30 + bit; + // optional: + // normalize soft bit s_j by + // rhsbit.sb /= dsp._spb+1; // all samples in [-1,+1] + // or at the end by max|s_j| over all bits in rawframe + // (only if |sj| >> 1 by factor 100) + + hsbit.hb = rhsbit.hb ^ (bc%2); // (c0,inv(c1)) + int sgn = -2*(((unsigned int)bc)%2)+1; + hsbit.sb = sgn * rhsbit.sb; + + if (gpx->option.vit == 1) { // hard decision + hsbit.sb = 2*hsbit.hb -1; + } + + gpx->blk_rawbits[pos] = hsbit; + gpx->blk_rawbits[pos].hb += 0x30; bc++; pos++; bitpos += 1; } - gpx->blk_rawbits[pos] = '\0'; + gpx->blk_rawbits[pos].hb = '\0'; time_elapsed_sec = dsp.sample_in / (double)dsp.sr; proc_frame(gpx, pos); @@ -1276,7 +1391,11 @@ int main(int argc, char **argv) { } - free_buffers(&dsp); + if (!option_softin) free_buffers(&dsp); + else { + if (hdb.buf) { free(hdb.buf); hdb.buf = NULL; } + } + if (gpx->vit) { free(gpx->vit); gpx->vit = NULL; } fclose(fp); diff --git a/demod/mod/lms6Xmod_soft.c b/demod/mod/lms6Xmod_soft.c deleted file mode 100644 index d02b39e..0000000 --- a/demod/mod/lms6Xmod_soft.c +++ /dev/null @@ -1,1328 +0,0 @@ - -/* - * LMS6 - * (403 MHz) - * - * soft decision test: - * IQ-decoding: --vit2 (soft decision) better performance (low dB) - * FM-decoding: --vit1 (hard decision) better than --vit2 - * - * sync header: correlation/matched filter - * files: lms6Xmod.c demod_mod.c demod_mod.h bch_ecc_mod.c bch_ecc_mod.h - * compile, either (a) or (b): - * (a) - * gcc -c demod_mod.c - * gcc -DINCLUDESTATIC lms6Xmod.c demod_mod.o -lm -o lms6Xmod - * (b) - * gcc -c demod_mod.c - * gcc -c bch_ecc_mod.c - * gcc lms6Xmod.c demod_mod.o bch_ecc_mod.o -lm -o lms6Xmod - * - * usage: - * ./lms6Xmod --vit --ecc - * ./lms6Xmod --vit2 --ecc --IQ 0.0 - * ( --vit/--vit2 recommended) - * author: zilog80 - */ - -#include -#include -#include -#include - -#ifdef CYGWIN - #include // cygwin: _setmode() - #include -#endif - - -//typedef unsigned char ui8_t; -//typedef unsigned short ui16_t; -//typedef unsigned int ui32_t; - -#include "demod_mod.h" - -//#define INCLUDESTATIC 1 -#ifdef INCLUDESTATIC - #include "bch_ecc_mod.c" -#else - #include "bch_ecc_mod.h" -#endif - - -typedef struct { - i8_t vbs; // verbose output - i8_t raw; // raw frames - i8_t crc; // CRC check output - i8_t ecc; // Reed-Solomon ECC - i8_t sat; // GPS sat data - i8_t ptu; // PTU: temperature - i8_t inv; - i8_t vit; - i8_t jsn; // JSON output (auto_rx) -} option_t; - - -/* -------------------------------------------------------------------------- */ - -#define BAUD_RATE6 (4800.0) -#define BAUD_RATEX (4797.8) - -#define BITS 8 -#define HEADOFS 0 //16 -#define HEADLEN ((4*16)-HEADOFS) - -#define SYNC_LEN 5 -#define FRM_LEN (223) -#define PAR_LEN (32) -#define FRMBUF_LEN (3*FRM_LEN) -#define BLOCKSTART (SYNC_LEN*BITS*2) -#define BLOCK_LEN (FRM_LEN+PAR_LEN+SYNC_LEN) // 255+5 = 260 -#define RAWBITBLOCK_LEN (300*BITS*2) // (no tail) -#define RAWBITBLOCK_LEN_6 ((BLOCK_LEN+1)*BITS*2) // (+1 tail) LMS6 - -#define FRAME_LEN (300) // 4800baud, 16bits/byte -#define BITFRAME_LEN (FRAME_LEN*BITS) -#define RAWBITFRAME_LEN (BITFRAME_LEN*2) -#define OVERLAP 64 -#define OFS 4 - - -static char rawheader[] = "0101011000001000""0001110010010111""0001101010100111""0011110100111110"; // (c0,inv(c1)) -// (00) 58 f3 3f b8 -// char header[] = "0000001101011101""0100100111000010""0100111111110010""0110100001101011"; // (c0,c1) -static ui8_t rs_sync[] = { 0x00, 0x58, 0xf3, 0x3f, 0xb8}; -// 0x58f33fb8 little-endian <-> 0x1ACFFC1D big-endian bytes - -// (00) 58 f3 3f b8 -static char blk_syncbits[] = "0000000000000000""0000001101011101""0100100111000010""0100111111110010""0110100001101011"; - -static ui8_t frm_sync6[] = { 0x24, 0x54, 0x00, 0x00}; -static ui8_t frm_syncX[] = { 0x24, 0x46, 0x05, 0x00}; - - -#define L 7 // d_f=10 -static char polyA[] = "1001111"; // 0x4f: x^6+x^3+x^2+x+1 -static char polyB[] = "1101101"; // 0x6d: x^6+x^5+x^3+x^2+1 -/* -// d_f=6 -qA[] = "1110011"; // 0x73: x^6+x^5+x^4+x+1 -qB[] = "0011110"; // 0x1e: x^4+x^3+x^2+x -pA[] = "10010101"; // 0x95: x^7+x^4+x^2+1 = (x+1)(x^6+x^5+x^4+x+1) = (x+1)qA -pB[] = "00100010"; // 0x22: x^5+x = (x+1)(x^4+x^3+x^2+x)=x(x+1)^3 = (x+1)qB -polyA = qA + x*qB -polyB = qA + qB -*/ - -#define N (1 << L) -#define M (1 << (L-1)) - -typedef struct { - ui8_t bIn; - ui8_t codeIn; - ui8_t prevState; // 0..M=64 - float w; -} states_t; - -typedef struct { - hsbit_t rawbits[RAWBITFRAME_LEN+OVERLAP*BITS*2 +8]; - states_t state[RAWBITFRAME_LEN+OVERLAP +8][M]; - states_t d[N]; -} VIT_t; - -typedef struct { - int frnr; - int sn; - int week; - int gpstow; int gpssec; - double gpstowX; - int jahr; int monat; int tag; - int wday; - int std; int min; float sek; - double lat; double lon; double alt; - double vH; double vD; double vV; - double vE; double vN; double vU; - hsbit_t blk_rawbits[RAWBITBLOCK_LEN+SYNC_LEN*BITS*2 +9]; - ui8_t frame[FRM_LEN]; // = { 0x24, 0x54, 0x00, 0x00}; // dataheader - int frm_pos; // ecc_blk <-> frm_blk - int sf6; - int sfX; - int typ; - float frm_rate; - int auto_detect; - int reset_dsp; - option_t option; - RS_t RS; - VIT_t *vit; -} gpx_t; - - -/* ------------------------------------------------------------------------------------ */ -static int gpstow_start = -1; -static double time_elapsed_sec = 0.0; - -/* - * Convert GPS Week and Seconds to Modified Julian Day. - * - Adapted from sci.astro FAQ. - * - Ignores UTC leap seconds. - */ -// in : week, gpssec -// out: jahr, monat, tag -static void Gps2Date(gpx_t *gpx) { - long GpsDays, Mjd; - long _J, _C, _Y, _M; - - GpsDays = gpx->week * 7 + (gpx->gpssec / 86400); - Mjd = 44244 + GpsDays; - - _J = Mjd + 2468570; - _C = 4 * _J / 146097; - _J = _J - (146097 * _C + 3) / 4; - _Y = 4000 * (_J + 1) / 1461001; - _J = _J - 1461 * _Y / 4 + 31; - _M = 80 * _J / 2447; - gpx->tag = _J - 2447 * _M / 80; - _J = _M / 11; - gpx->monat = _M + 2 - (12 * _J); - gpx->jahr = 100 * (_C - 49) + _Y + _J; -} -/* ------------------------------------------------------------------------------------ */ - -// ------------------------------------------------------------------------ - -static ui8_t vit_code[N]; -static int vitCodes_init = 0; - -static int vit_initCodes(gpx_t *gpx) { - int cA, cB; - int i, bits; - - VIT_t *pv = calloc(1, sizeof(VIT_t)); - if (pv == NULL) return -1; - gpx->vit = pv; - - if ( vitCodes_init == 0 ) { - for (bits = 0; bits < N; bits++) { - cA = 0; - cB = 0; - for (i = 0; i < L; i++) { - cA ^= (polyA[L-1-i]&1) & ((bits >> i)&1); - cB ^= (polyB[L-1-i]&1) & ((bits >> i)&1); - } - vit_code[bits] = (cA<<1) | cB; - } - vitCodes_init = 1; - } - - return 0; -} - -static float vit_dist2(int c, hsbit_t *rc) { - int c0 = 2*((c>>1) & 1)-1; // {0,1} -> {-1,+1} - int c1 = 2*(c & 1)-1; - float d2 = (c0-rc[0].sb)*(c0-rc[0].sb) + (c1-rc[1].sb)*(c1-rc[1].sb); - return d2; -} - -static int vit_start(VIT_t *vit, hsbit_t *rc) { - int t, m, j, c; - float d; - - t = L-1; - m = M; - while ( t > 0 ) { // t=0..L-2: nextStatestate[t][j].prevState = j/2; - } - t--; - m /= 2; - } - - m = 2; - for (t = 1; t < L; t++) { - for (j = 0; j < m; j++) { - c = vit_code[j]; - vit->state[t][j].bIn = j % 2; - vit->state[t][j].codeIn = c; - d = vit_dist2( c, rc+2*(t-1) ); - vit->state[t][j].w = vit->state[t-1][vit->state[t][j].prevState].w + d; - } - m *= 2; - } - - return t; -} - -static int vit_next(VIT_t *vit, int t, hsbit_t *rc) { - int b, nstate; - int j, index; - - for (j = 0; j < M; j++) { - for (b = 0; b < 2; b++) { - nstate = j*2 + b; - vit->d[nstate].bIn = b; - vit->d[nstate].codeIn = vit_code[nstate]; - vit->d[nstate].prevState = j; - vit->d[nstate].w = vit->state[t][j].w + vit_dist2( vit->d[nstate].codeIn, rc ); - } - } - - for (j = 0; j < M; j++) { - - if ( vit->d[j].w <= vit->d[j+M].w ) index = j; else index = j+M; - - vit->state[t+1][j] = vit->d[index]; - } - - return 0; -} - -static int vit_path(VIT_t *vit, int j, int t) { - int c; - - vit->rawbits[2*t].hb = '\0'; - while (t > 0) { - c = vit->state[t][j].codeIn; - vit->rawbits[2*t -2].hb = 0x30 + ((c>>1) & 1); - vit->rawbits[2*t -1].hb = 0x30 + (c & 1); - j = vit->state[t][j].prevState; - t--; - } - - return 0; -} - -static int hbstr_len(hsbit_t *hsbit) { - int len = 0; - while (hsbit[len].hb) len++; - return len; -} - -static int viterbi(VIT_t *vit, hsbit_t *rc) { - int t, tmax; - int j, j_min; - float w_min; - - vit_start(vit, rc); - - tmax = hbstr_len(rc)/2; - - for (t = L-1; t < tmax; t++) - { - vit_next(vit, t, rc+2*t); - } - - w_min = -1; - for (j = 0; j < M; j++) { - if (w_min < 0) { - w_min = vit->state[tmax][j].w; - j_min = j; - } - if (vit->state[tmax][j].w < w_min) { - w_min = vit->state[tmax][j].w; - j_min = j; - } - } - vit_path(vit, j_min, tmax); - - return 0; -} - -// ------------------------------------------------------------------------ - -static int deconv(hsbit_t *rawbits, char *bits) { - - int j, n, bitA, bitB; - hsbit_t *p; - int len; - int errors = 0; - int m = L-1; - - len = hbstr_len(rawbits); - for (j = 0; j < m; j++) bits[j] = '0'; - n = 0; - while ( 2*(m+n) < len ) { - p = rawbits+2*(m+n); - bitA = bitB = 0; - for (j = 0; j < m; j++) { - bitA ^= (bits[n+j]&1) & (polyA[j]&1); - bitB ^= (bits[n+j]&1) & (polyB[j]&1); - } - if ( (bitA^(p[0].hb&1))==(polyA[m]&1) && (bitB^(p[1].hb&1))==(polyB[m]&1) ) bits[n+m] = '1'; - else if ( (bitA^(p[0].hb&1))==0 && (bitB^(p[1].hb&1))==0 ) bits[n+m] = '0'; - else { - if ( (bitA^(p[0].hb&1))!=(polyA[m]&1) && (bitB^(p[1].hb&1))==(polyB[m]&1) ) bits[n+m] = 0x39; - else bits[n+m] = 0x38; - errors = n; - break; - } - n += 1; - } - bits[n+m] = '\0'; - - return errors; -} - -// ------------------------------------------------------------------------ - -static int crc16_0(ui8_t frame[], int len) { - int crc16poly = 0x1021; - int rem = 0x0, i, j; - int byte; - - for (i = 0; i < len; i++) { - byte = frame[i]; - rem = rem ^ (byte << 8); - for (j = 0; j < 8; j++) { - if (rem & 0x8000) { - rem = (rem << 1) ^ crc16poly; - } - else { - rem = (rem << 1); - } - rem &= 0xFFFF; - } - } - return rem; -} - -static int check_CRC(ui8_t frame[]) { - ui32_t crclen = 0, - crcdat = 0; - - crclen = 221; - crcdat = (frame[crclen]<<8) | frame[crclen+1]; - if ( crcdat != crc16_0(frame, crclen) ) { - return 1; // CRC NO - } - else return 0; // CRC OK -} - -// ------------------------------------------------------------------------ - -static int bits2bytes(char *bitstr, ui8_t *bytes) { - int i, bit, d, byteval; - int len = strlen(bitstr)/8; - int bitpos, bytepos; - - bitpos = 0; - bytepos = 0; - - while (bytepos < len) { - - byteval = 0; - d = 1; - for (i = 0; i < BITS; i++) { - bit=*(bitstr+bitpos+i); /* little endian */ - //bit=*(bitstr+bitpos+7-i); /* big endian */ - if ((bit == '1') || (bit == '9')) byteval += d; - else /*if ((bit == '0') || (bit == '8'))*/ byteval += 0; - d <<= 1; - } - bitpos += BITS; - bytes[bytepos++] = byteval & 0xFF; - } - - //while (bytepos < FRAME_LEN+OVERLAP) bytes[bytepos++] = 0; - - return bytepos; -} - -/* -------------------------------------------------------------------------- */ - - -#define pos_SondeSN (OFS+0x00) // ?4 byte 00 7A.... -#define pos_FrameNb (OFS+0x04) // 2 byte -//GPS -#define pos_GPSTOW (OFS+0x06) // 4/8 byte -#define pos_GPSlat (OFS+0x0E) // 4 byte -#define pos_GPSlon (OFS+0x12) // 4 byte -#define pos_GPSalt (OFS+0x16) // 4 byte -//GPS Velocity (ENU) LMS-6 -#define pos_GPSvE (OFS+0x1A) // 3 byte -#define pos_GPSvN (OFS+0x1D) // 3 byte -#define pos_GPSvU (OFS+0x20) // 3 byte -//GPS Velocity (HDV) LMS-X -#define pos_GPSvH (OFS+0x1A) // 2 byte -#define pos_GPSvD (OFS+0x1C) // 2 byte -#define pos_GPSvV (OFS+0x1E) // 2 byte - - -static int get_SondeSN(gpx_t *gpx) { - unsigned byte; - - byte = (gpx->frame[pos_SondeSN]<<24) | (gpx->frame[pos_SondeSN+1]<<16) - | (gpx->frame[pos_SondeSN+2]<<8) | gpx->frame[pos_SondeSN+3]; - gpx->sn = byte & 0xFFFFFF; - - return 0; -} - -static int get_FrameNb(gpx_t *gpx) { - ui8_t *frnr_bytes; - int frnr; - - frnr_bytes = gpx->frame+pos_FrameNb; - - frnr = (frnr_bytes[0] << 8) + frnr_bytes[1] ; - gpx->frnr = frnr; - - return 0; -} - - -//char weekday[7][3] = { "So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"}; -static char weekday[7][4] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; - -static int get_GPStime(gpx_t *gpx, int crc_err) { - int i; - ui8_t *gpstime_bytes; - int gpstime = 0, // 32bit - day; - float ms; - - gpstime_bytes = gpx->frame+pos_GPSTOW; - - gpstime = 0; - for (i = 0; i < 4; i++) { - gpstime |= gpstime_bytes[i] << (8*(3-i)); - } - - if (gpstow_start < 0 && !crc_err) { - gpstow_start = gpstime; // time elapsed since start-up? - if (gpx->week > 0 && gpstime/1000.0 < time_elapsed_sec) gpx->week += 1; - } - gpx->gpstow = gpstime; // tow/ms - - ms = gpstime % 1000; - gpstime /= 1000; - gpx->gpssec = gpstime; - - day = gpstime / (24 * 3600); - gpstime %= (24*3600); - - if ((day < 0) || (day > 6)) return -1; - - gpx->wday = day; - gpx->std = gpstime / 3600; - gpx->min = (gpstime % 3600) / 60; - gpx->sek = gpstime % 60 + ms/1000.0; - - return 0; -} - -static int get_GPStime_X(gpx_t *gpx) { - int i; - unsigned byte; - ui32_t gpstime, tow_u4; - int day; - float ms; - ui32_t w[2]; // 64bit float - double *f64 = (double*)w; - - w[0] = 0; - for (i = 0; i < 4; i++) { - byte = gpx->frame[pos_GPSTOW + i]; - w[0] |= byte << (8*(3-i)); - } - w[1] = 0; - for (i = 0; i < 4; i++) { - byte = gpx->frame[pos_GPSTOW+4 + i]; - w[1] |= byte << (8*(3-i)); - } - - gpx->gpstowX = *f64; - gpx->gpstow = (ui32_t)(gpx->gpstowX*1e3); // tow/ms - tow_u4 = (ui32_t)gpx->gpstowX; - gpstime = tow_u4; - gpx->gpssec = tow_u4; - - day = gpstime / (24 * 3600); - gpstime %= (24*3600); - - if ((day < 0) || (day > 6)) return -1; - - gpx->wday = day; - gpx->std = gpstime / 3600; - gpx->min = (gpstime % 3600) / 60; - gpx->sek = (gpstime % 60) + *f64 - tow_u4; - - return 0; -} - -static double B60B60 = (1<<30)/90.0; // 2^32/360 = 2^30/90 = 0xB60B60.711x - -static int get_GPSlat(gpx_t *gpx) { - int i; - ui8_t *gpslat_bytes; - int gpslat; - double lat; - - gpslat_bytes = gpx->frame+pos_GPSlat; - - gpslat = 0; - for (i = 0; i < 4; i++) { - gpslat |= gpslat_bytes[i] << (8*(3-i)); - } - if (gpx->typ == 6) lat = gpslat / B60B60; - else /*typ==10*/ lat = gpslat / 1e7; - - gpx->lat = lat; - - return 0; -} - -static int get_GPSlon(gpx_t *gpx) { - int i; - ui8_t *gpslon_bytes; - int gpslon; - double lon; - - gpslon_bytes = gpx->frame+pos_GPSlon; - - gpslon = 0; - for (i = 0; i < 4; i++) { - gpslon |= gpslon_bytes[i] << (8*(3-i)); - } - - if (gpx->typ == 6) lon = gpslon / B60B60; - else /*typ==10*/ lon = gpslon / 1e7; - - gpx->lon = lon; - - return 0; -} - -static int get_GPSalt(gpx_t *gpx) { - int i; - ui8_t *gpsheight_bytes; - int gpsheight; - double alt; - - gpsheight_bytes = gpx->frame+pos_GPSalt; - - gpsheight = 0; - for (i = 0; i < 4; i++) { - gpsheight |= gpsheight_bytes[i] << (8*(3-i)); - } - - if (gpx->typ == 6) alt = gpsheight / 1000.0; - else /*typ==10*/ alt = gpsheight / 100.0; - - gpx->alt = alt; - - if (alt < -200 || alt > 60000) return -1; - return 0; -} - -// LMS-6 -static int get_GPSvel24(gpx_t *gpx) { - ui8_t *gpsVel_bytes; - int vel24; - double vx, vy, vz, dir; - - gpsVel_bytes = gpx->frame+pos_GPSvE; - vel24 = gpsVel_bytes[0] << 16 | gpsVel_bytes[1] << 8 | gpsVel_bytes[2]; - if (vel24 > (0x7FFFFF)) vel24 -= 0x1000000; - vx = vel24 / 1e3; // east - - gpsVel_bytes = gpx->frame+pos_GPSvN; - vel24 = gpsVel_bytes[0] << 16 | gpsVel_bytes[1] << 8 | gpsVel_bytes[2]; - if (vel24 > (0x7FFFFF)) vel24 -= 0x1000000; - vy = vel24 / 1e3; // north - - gpsVel_bytes = gpx->frame+pos_GPSvU; - vel24 = gpsVel_bytes[0] << 16 | gpsVel_bytes[1] << 8 | gpsVel_bytes[2]; - if (vel24 > (0x7FFFFF)) vel24 -= 0x1000000; - vz = vel24 / 1e3; // up - - gpx->vE = vx; - gpx->vN = vy; - gpx->vU = vz; - - - gpx->vH = sqrt(vx*vx+vy*vy); -/* - alpha = atan2(vy, vx)*180/M_PI; // ComplexPlane (von x-Achse nach links) - GeoMeteo (von y-Achse nach rechts) - dir = 90-alpha; // z=x+iy= -> i*conj(z)=y+ix=re(i(pi/2-t)), Achsen und Drehsinn vertauscht - if (dir < 0) dir += 360; // atan2(y,x)=atan(y/x)=pi/2-atan(x/y) , atan(1/t) = pi/2 - atan(t) - gpx->vD2 = dir; -*/ - dir = atan2(vx, vy) * 180 / M_PI; - if (dir < 0) dir += 360; - gpx->vD = dir; - - gpx->vV = vz; - - return 0; -} - -// LMS-X -static int get_GPSvel16_X(gpx_t *gpx) { - ui8_t *gpsVel_bytes; - short vel16; - double vx, vy, vz; - - gpsVel_bytes = gpx->frame+pos_GPSvH; - vel16 = gpsVel_bytes[0] << 8 | gpsVel_bytes[1]; - vx = vel16 / 1e2; // horizontal - - gpsVel_bytes = gpx->frame+pos_GPSvD; - vel16 = gpsVel_bytes[0] << 8 | gpsVel_bytes[1]; - vy = vel16 / 1e2; // direction/course - - gpsVel_bytes = gpx->frame+pos_GPSvV; - vel16 = gpsVel_bytes[0] << 8 | gpsVel_bytes[1]; - vz = vel16 / 1e2; // vertical - - gpx->vH = vx; - gpx->vD = vy; - gpx->vV = vz; - - return 0; -} - - -// RS(255,223)-CCSDS -#define rs_N 255 -#define rs_K 223 -#define rs_R (rs_N-rs_K) // 32 - -static int lms6_ecc(gpx_t *gpx, ui8_t *cw) { - int errors; - ui8_t err_pos[rs_R], - err_val[rs_R]; - - errors = rs_decode(&gpx->RS, cw, err_pos, err_val); - - return errors; -} - -static void print_frame(gpx_t *gpx, int crc_err, int len) { - int err1=0, err2=0; - - if (gpx->frame[0] != 0) - { - //if ((gpx->frame[pos_SondeSN+1] & 0xF0) == 0x70) // ? beginnen alle SNs mit 0x7A.... bzw 80..... ? - if ( gpx->frame[pos_SondeSN+1] ) - { - get_SondeSN(gpx); - get_FrameNb(gpx); - printf(" (%7d) ", gpx->sn); - printf(" [%5d] ", gpx->frnr); - - get_GPSlat(gpx); - get_GPSlon(gpx); - err2 = get_GPSalt(gpx); - if (gpx->typ == 6) - { - err1 = get_GPStime(gpx, crc_err); - get_GPSvel24(gpx); - } - else { - err1 = get_GPStime_X(gpx); //, crc_err - get_GPSvel16_X(gpx); - } - - if (!err1) printf("%s ", weekday[gpx->wday]); - if (gpx->week > 0) { - if (gpx->gpstow < gpstow_start && !crc_err) { - gpx->week += 1; // week roll-over - gpstow_start = gpx->gpstow; - } - Gps2Date(gpx); - fprintf(stdout, "%04d-%02d-%02d ", gpx->jahr, gpx->monat, gpx->tag); - } - printf("%02d:%02d:%06.3f ", gpx->std, gpx->min, gpx->sek); // falls Rundung auf 60s: Ueberlauf - - if (!err2) { - printf(" lat: %.5f ", gpx->lat); - printf(" lon: %.5f ", gpx->lon); - printf(" alt: %.2fm ", gpx->alt); - printf(" vH: %.1fm/s D: %.1f vV: %.1fm/s ", gpx->vH, gpx->vD, gpx->vV); - } - - if (crc_err==0) printf(" [OK]"); else printf(" [NO]"); - - printf("\n"); - - - if (gpx->option.jsn) { - // Print JSON output required by auto_rx. - if (crc_err==0) { // CRC-OK - // UTC oder GPS? - char sntyp[] = "LMS6-"; - if (gpx->typ == 10) sntyp[3] = 'X'; - printf("{ \"type\": \"%s\"", "LMS"); - printf(", \"frame\": %d, \"id\": \"%s%d\", \"datetime\": \"", gpx->frnr, sntyp, gpx->sn ); - //if (gpx->week > 0) printf("%04d-%02d-%02dT", gpx->jahr, gpx->monat, gpx->tag ); - printf("%02d:%02d:%06.3fZ\", \"lat\": %.5f, \"lon\": %.5f, \"alt\": %.5f, \"vel_h\": %.5f, \"heading\": %.5f, \"vel_v\": %.5f", - gpx->std, gpx->min, gpx->sek, gpx->lat, gpx->lon, gpx->alt, gpx->vH, gpx->vD, gpx->vV ); - printf(", \"gpstow\": %d", gpx->gpstow ); - printf(", \"subtype\": \"%c\"", sntyp[3]); // "6":LMS6-403, "X":lms6X, "MK2A":LMS6-1680/Mk2a - printf(" }\n"); - printf("\n"); - } - } - - } - } -} - -static int frmsync_6(gpx_t *gpx, ui8_t block_bytes[], int blk_pos) { - int j; - - while ( blk_pos-SYNC_LEN < FRM_LEN ) { - gpx->sf6 = 0; - for (j = 0; j < 4; j++) gpx->sf6 += (block_bytes[blk_pos+j] == frm_sync6[j]); - if (gpx->sf6 == 4) { - gpx->frm_pos = 0; - break; - } - blk_pos++; - } - - return blk_pos; -} - -static int frmsync_X(gpx_t *gpx, ui8_t block_bytes[]) { - int j; - int blk_pos = SYNC_LEN; - - gpx->sfX = 0; - for (j = 0; j < 4; j++) gpx->sfX += (block_bytes[SYNC_LEN+j] == frm_syncX[j]); - if (gpx->sfX < 4) { // scan 1..40 ? - gpx->sfX = 0; - for (j = 0; j < 4; j++) gpx->sfX += (block_bytes[SYNC_LEN+35+j] == frm_syncX[j]); - if (gpx->sfX == 4) blk_pos = SYNC_LEN+35; - else { - gpx->sfX = 0; - for (j = 0; j < 4; j++) gpx->sfX += (block_bytes[SYNC_LEN+40+j] == frm_syncX[j]); - if (gpx->sfX == 4) blk_pos = SYNC_LEN+40; // 300-260 - } - } - - return blk_pos; -} - -static void proc_frame(gpx_t *gpx, int len) { - int blk_pos = SYNC_LEN; - ui8_t block_bytes[FRAME_LEN+8]; - ui8_t rs_cw[rs_N]; - char frame_bits[BITFRAME_LEN+OVERLAP*BITS +8]; // init L-1 bits mit 0 - hsbit_t *rawbits = NULL; - int i, j; - int err = 0; - int errs = 0; - int crc_err = 0; - int flen, blen; - - - if ((len % 8) > 4) { - while (len % 8) { - gpx->blk_rawbits[len].hb = '0'; - gpx->blk_rawbits[len].sb = -1; - len++; - } - } - gpx->blk_rawbits[len].hb = '\0'; - - flen = len / (2*BITS); - - if (gpx->option.vit) { - viterbi(gpx->vit, gpx->blk_rawbits); - rawbits = gpx->vit->rawbits; - } - else rawbits = gpx->blk_rawbits; - - err = deconv(rawbits, frame_bits); - - if (err) { for (i=err; i < RAWBITBLOCK_LEN/2; i++) frame_bits[i] = 0; } - - - blen = bits2bytes(frame_bits, block_bytes); - for (j = blen; j < FRAME_LEN+8; j++) block_bytes[j] = 0; - - - blk_pos = SYNC_LEN; - - if (gpx->typ == 6) - { - if (gpx->option.ecc) { - for (j = 0; j < rs_N; j++) rs_cw[rs_N-1-j] = block_bytes[SYNC_LEN+j]; - errs = lms6_ecc(gpx, rs_cw); - for (j = 0; j < rs_N; j++) block_bytes[SYNC_LEN+j] = rs_cw[rs_N-1-j]; - } - - while ( blk_pos-SYNC_LEN < FRM_LEN ) { - - if (gpx->sf6 == 0) - { - blk_pos = frmsync_6(gpx, block_bytes, blk_pos); - - if (gpx->sf6 < 4) { - frmsync_X(gpx, block_bytes); // pos(frm_syncX[]) < 46: different baud not significant - if (gpx->sfX == 4) { - if (gpx->auto_detect) { gpx->typ = 10; gpx->reset_dsp = 1; } - break; - } - } - } - - if ( gpx->sf6 && gpx->frm_pos < FRM_LEN ) { - gpx->frame[gpx->frm_pos] = block_bytes[blk_pos]; - gpx->frm_pos++; - blk_pos++; - } - - if (gpx->frm_pos == FRM_LEN) { - - crc_err = check_CRC(gpx->frame); - - if (gpx->option.raw == 1) { - for (i = 0; i < FRM_LEN; i++) printf("%02x ", gpx->frame[i]); - if (crc_err==0) printf(" [OK]"); else printf(" [NO]"); - printf("\n"); - } - - if (gpx->option.raw == 0) print_frame(gpx, crc_err, len); - - gpx->frm_pos = 0; - gpx->sf6 = 0; - } - } - } - - if (gpx->typ == 10) - { - blk_pos = frmsync_X(gpx, block_bytes); - - if (gpx->sfX < 4) { - //blk_pos = SYNC_LEN; - while ( blk_pos-SYNC_LEN < FRM_LEN ) { - gpx->sf6 = 0; - for (j = 0; j < 4; j++) gpx->sf6 += (block_bytes[blk_pos+j] == frm_sync6[j]); - if (gpx->sf6 == 4) { - gpx->frm_pos = 0; - if (gpx->auto_detect) { gpx->typ = 6; gpx->reset_dsp = 1; } - break; - } - blk_pos++; - } - - // check frame timing vs baud - // LMS6: frm_rate = 4800.0 * FRAME_LEN/BLOCK_LEN = 4800*300/260 = 5538 - // LMSX: delta_mp = 4797.8 (longer timesync-frames possible) - if (gpx->frm_rate > 5000.0 || gpx->frm_rate < 4000.0) { // lms6-blocklen = 260/300 sr, sync wird ueberlesen ... - if (gpx->auto_detect) { gpx->typ = 6; gpx->reset_dsp = 1; } - } - } - else - { - if (blen > 100 && gpx->option.ecc) { - for (j = 0; j < rs_N; j++) rs_cw[rs_N-1-j] = block_bytes[blk_pos+j]; - errs = lms6_ecc(gpx, rs_cw); - for (j = 0; j < rs_N; j++) block_bytes[blk_pos+j] = rs_cw[rs_N-1-j]; - } - - for (j = 0; j < rs_K; j++) gpx->frame[j] = block_bytes[blk_pos+j]; - - crc_err = check_CRC(gpx->frame); - - if (gpx->option.raw == 1) { - for (i = 0; i < FRM_LEN; i++) printf("%02x ", gpx->frame[i]); - if (crc_err==0) printf(" [OK]"); else printf(" [NO]"); - printf("\n"); - } - - if (gpx->option.raw == 0) print_frame(gpx, crc_err, len); - } - } - -} - - -int main(int argc, char **argv) { - - int option_inv = 0; // invertiert Signal - int option_min = 0; - int option_iq = 0; - int option_lp = 0; - int option_dc = 0; - int option_pcmraw = 0; - int wavloaded = 0; - int sel_wavch = 0; // audio channel: left - int gpsweek = 0; - - FILE *fp = NULL; - char *fpname = NULL; - - int k; - - hsbit_t hsbit, rhsbit; - int bitpos = 0; - int bitQ; - int pos; - //int headerlen = 0; - - int header_found = 0; - - float thres = 0.65; - float _mv = 0.0; - - int symlen = 1; - int bitofs = 0; - int shift = 0; - - int bitofs6 = 1; // +1 .. +2 - int bitofsX = 0; // 0 .. +1 - - unsigned int bc = 0; - - ui32_t rawbitblock_len = RAWBITBLOCK_LEN_6; - ui32_t mpos0 = 0; - - - pcm_t pcm = {0}; - dsp_t dsp = {0}; //memset(&dsp, 0, sizeof(dsp)); -/* - // gpx_t _gpx = {0}; gpx_t *gpx = &_gpx; // stack size ... - gpx_t *gpx = NULL; - gpx = calloc(1, sizeof(gpx_t)); - //memset(gpx, 0, sizeof(gpx_t)); -*/ - gpx_t _gpx = {0}; gpx_t *gpx = &_gpx; - - gpx->auto_detect = 1; - gpx->reset_dsp = 0; - -#ifdef CYGWIN - _setmode(fileno(stdin), _O_BINARY); // _setmode(_fileno(stdin), _O_BINARY); -#endif - setbuf(stdout, NULL); - - - fpname = argv[0]; - ++argv; - while ((*argv) && (!wavloaded)) { - if ( (strcmp(*argv, "-h") == 0) || (strcmp(*argv, "--help") == 0) ) { - fprintf(stderr, "%s [options] audio.wav\n", fpname); - fprintf(stderr, " options:\n"); - fprintf(stderr, " -v, --verbose\n"); - fprintf(stderr, " -r, --raw\n"); - fprintf(stderr, " --vit (Viterbi)\n"); - fprintf(stderr, " --ecc (Reed-Solomon)\n"); - return 0; - } - else if (strcmp(*argv, "--lms6" ) == 0) { - gpx->typ = 6; - gpx->auto_detect = 0; - } - else if (strcmp(*argv, "--lmsX" ) == 0) { - gpx->typ = 10; - gpx->auto_detect = 0; - } - else if ( (strcmp(*argv, "-v") == 0) || (strcmp(*argv, "--verbose") == 0) ) { - gpx->option.vbs = 1; - } - else if ( (strcmp(*argv, "-r") == 0) || (strcmp(*argv, "--raw") == 0) ) { - gpx->option.raw = 1; // bytes - rs_ecc_codewords - } - else if (strcmp(*argv, "--ecc" ) == 0) { gpx->option.ecc = 1; } // RS-ECC - else if (strcmp(*argv, "--vit" ) == 0) { gpx->option.vit = 1; } // viterbi-hard - else if (strcmp(*argv, "--vit2" ) == 0) { gpx->option.vit = 2; } // viterbi-soft - else if ( (strcmp(*argv, "--gpsweek") == 0) ) { - ++argv; - if (*argv) { - gpsweek = atoi(*argv); - if (gpsweek < 1024 || gpsweek > 3072) gpsweek = 0; - } - else return -1; - } - else if ( (strcmp(*argv, "-i") == 0) || (strcmp(*argv, "--invert") == 0) ) { - option_inv = 1; // nicht noetig - } - else if ( (strcmp(*argv, "--ch2") == 0) ) { sel_wavch = 1; } // right channel (default: 0=left) - else if ( (strcmp(*argv, "--ths") == 0) ) { - ++argv; - if (*argv) { - thres = atof(*argv); - } - else return -1; - } - else if ( (strcmp(*argv, "-d") == 0) ) { - ++argv; - if (*argv) { - shift = atoi(*argv); - if (shift > 4) shift = 4; - if (shift < -4) shift = -4; - } - else return -1; - } - else if (strcmp(*argv, "--iq0") == 0) { option_iq = 1; } // differential/FM-demod - else if (strcmp(*argv, "--iq2") == 0) { option_iq = 2; } - else if (strcmp(*argv, "--iq3") == 0) { option_iq = 3; } // iq2==iq3 - else if (strcmp(*argv, "--IQ") == 0) { // fq baseband -> IF (rotate from and decimate) - double fq = 0.0; // --IQ , -0.5 < fq < 0.5 - ++argv; - if (*argv) fq = atof(*argv); - else return -1; - if (fq < -0.5) fq = -0.5; - if (fq > 0.5) fq = 0.5; - dsp.xlt_fq = -fq; // S(t) -> S(t)*exp(-f*2pi*I*t) - option_iq = 5; - } - else if (strcmp(*argv, "--lp") == 0) { option_lp = 1; } // IQ lowpass - else if (strcmp(*argv, "--dc") == 0) { option_dc = 1; } - else if (strcmp(*argv, "--min") == 0) { - option_min = 1; - } - else if (strcmp(*argv, "--json") == 0) { - gpx->option.jsn = 1; - gpx->option.ecc = 1; - gpx->option.vit = 1; - } - else if (strcmp(*argv, "-") == 0) { - int sample_rate = 0, bits_sample = 0, channels = 0; - ++argv; - if (*argv) sample_rate = atoi(*argv); else return -1; - ++argv; - if (*argv) bits_sample = atoi(*argv); else return -1; - channels = 2; - if (sample_rate < 1 || (bits_sample != 8 && bits_sample != 16 && bits_sample != 32)) { - fprintf(stderr, "- \n"); - return -1; - } - pcm.sr = sample_rate; - pcm.bps = bits_sample; - pcm.nch = channels; - option_pcmraw = 1; - } - else { - fp = fopen(*argv, "rb"); - if (fp == NULL) { - fprintf(stderr, "error: open %s\n", *argv); - return -1; - } - wavloaded = 1; - } - ++argv; - } - if (!wavloaded) fp = stdin; - - - if (gpx->option.raw == 4) gpx->option.ecc = 1; - - // init gpx - memcpy(gpx->frame, frm_sync6, sizeof(frm_sync6)); - gpx->frm_pos = 0; // ecc_blk <-> frm_blk - gpx->sf6 = 0; - gpx->sfX = 0; - //memcpy(gpx->blk_rawbits, blk_syncbits, sizeof(blk_syncbits)); - for (k = 0; k < strlen(blk_syncbits); k++) { // strlen(blk_syncbits)=BLOCKSTART - int hbit = blk_syncbits[k] & 1; - gpx->blk_rawbits[k].hb = hbit + 0x30; - gpx->blk_rawbits[k].sb = 2*hbit-1; - } - - - gpx->option.inv = option_inv; // irrelevant - - gpx->week = gpsweek; - - if (option_iq == 0 && option_pcmraw) { - fclose(fp); - fprintf(stderr, "error: raw data not IQ\n"); - return -1; - } - if (option_iq == 0 && gpx->option.vit == 2) { // FM-demodulated data not recommended - gpx->option.vit = 1; // for soft-decoding - fprintf(stderr, "info: soft decoding only for IQ\n"); - } - if (option_iq) sel_wavch = 0; - - pcm.sel_ch = sel_wavch; - if (option_pcmraw == 0) { - k = read_wav_header(&pcm, fp); - if ( k < 0 ) { - fclose(fp); - fprintf(stderr, "error: wav header\n"); - return -1; - } - } - - symlen = 1; - - // init dsp - // - dsp.fp = fp; - dsp.sr = pcm.sr; - dsp.bps = pcm.bps; - dsp.nch = pcm.nch; - dsp.ch = pcm.sel_ch; - dsp.br = (float)BAUD_RATE6; - dsp.sps = (float)dsp.sr/dsp.br; - dsp.symlen = symlen; - dsp.symhd = 1; - dsp._spb = dsp.sps*symlen; - dsp.hdr = rawheader; - dsp.hdrlen = strlen(rawheader); - dsp.BT = 1.2; // bw/time (ISI) // 1.0..2.0 // BT(lmsX) < BT(lms6) ? -> init_buffers() - dsp.h = 0.9; // 0.95 modulation index - dsp.opt_iq = option_iq; - dsp.opt_lp = option_lp; - dsp.lpIQ_bw = 8e3; // IF lowpass bandwidth - dsp.lpFM_bw = 6e3; // FM audio lowpass - dsp.opt_dc = option_dc; - dsp.opt_IFmin = option_min; - - if ( dsp.sps < 8 ) { - fprintf(stderr, "note: sample rate low (%.1f sps)\n", dsp.sps); - } - - //headerlen = dsp.hdrlen; - - k = init_buffers(&dsp); // baud difference not significant - if ( k < 0 ) { - fprintf(stderr, "error: init buffers\n"); - return -1; - }; - - - if (gpx->option.vit) { - k = vit_initCodes(gpx); - if (k < 0) return -1; - } - if (gpx->option.ecc) { - rs_init_RS255ccsds(&gpx->RS); // bch_ecc.c - } - - - // auto_detect: init LMS6 - bitofs = bitofs6 + shift; - rawbitblock_len = RAWBITBLOCK_LEN_6; - if (gpx->auto_detect) gpx->typ = 6; - - if (gpx->auto_detect == 0) { - if (gpx->typ == 6) { - // set lms6 - rawbitblock_len = RAWBITBLOCK_LEN_6; - dsp.br = (float)BAUD_RATE6; - dsp.sps = (float)dsp.sr/dsp.br; - bitofs = bitofs6 + shift; - } - if (gpx->typ == 10) { - // set lmsX - rawbitblock_len = RAWBITBLOCK_LEN;//_X; - dsp.br = (float)BAUD_RATEX; - dsp.sps = (float)dsp.sr/dsp.br; - bitofs = bitofsX + shift; - } - } - - - while ( 1 ) - { - // FM-audio: - header_found = find_header(&dsp, thres, 10, bitofs, dsp.opt_dc); // optional 2nd pass: dc=0 - _mv = dsp.mv; - - if (header_found == EOF) break; - - // mv == correlation score - if (_mv*(0.5-gpx->option.inv) < 0) { - gpx->option.inv ^= 0x1; // LMS-403: irrelevant - } - - if (header_found) { - - // LMS6: delta_mp = sr * BLOCK_LEN/FRAME_LEN = sr*260/300 - // LMSX: delta_mp = sr * 4800/4797.7 (or sync-reset) - gpx->frm_rate = 4800.0 * dsp.sr/(double)(dsp.mv_pos - mpos0); - mpos0 = dsp.mv_pos; - - - bitpos = 0; - pos = BLOCKSTART; - - if (_mv > 0) bc = 0; else bc = 1; - - while ( pos < rawbitblock_len ) { - - bitQ = read_softbit(&dsp, &rhsbit, 0, bitofs, bitpos, -1, 0); // symlen=1 - if (bitQ == EOF) { break; } - - // optional: - // normalize soft bit s_j by - // rhsbit.sb /= dsp._spb+1; // all samples in [-1,+1] - // or at the end by max|s_j| over all bits in rawframe - // (only if |sj| >> 1 by factor 100) - - hsbit.hb = rhsbit.hb ^ (bc%2); // (c0,inv(c1)) - int sgn = -2*(((unsigned int)bc)%2)+1; - hsbit.sb = sgn * rhsbit.sb; - - if (gpx->option.vit == 1) { // hard decision - hsbit.sb = 2*hsbit.hb -1; - } - - gpx->blk_rawbits[pos] = hsbit; - gpx->blk_rawbits[pos].hb += 0x30; - - bc++; - pos++; - bitpos += 1; - } - - gpx->blk_rawbits[pos].hb = '\0'; - - time_elapsed_sec = dsp.sample_in / (double)dsp.sr; - proc_frame(gpx, pos); - - if (pos < rawbitblock_len) break; - - pos = BLOCKSTART; - header_found = 0; - - if ( gpx->auto_detect && gpx->reset_dsp ) { - if (gpx->typ == 10) { - // set lmsX - rawbitblock_len = RAWBITBLOCK_LEN;//_X; - dsp.br = (float)BAUD_RATEX; - dsp.sps = (float)dsp.sr/dsp.br; - - // reset F1sum, F2sum - for (k = 0; k < dsp.N_IQBUF; k++) dsp.rot_iqbuf[k] = 0; - dsp.F1sum = 0; - dsp.F2sum = 0; - - bitofs = bitofsX + shift; - } - if (gpx->typ == 6) { - // set lms6 - rawbitblock_len = RAWBITBLOCK_LEN_6; - dsp.br = (float)BAUD_RATE6; - dsp.sps = (float)dsp.sr/dsp.br; - - // reset F1sum, F2sum - for (k = 0; k < dsp.N_IQBUF; k++) dsp.rot_iqbuf[k] = 0; - dsp.F1sum = 0; - dsp.F2sum = 0; - - bitofs = bitofs6 + shift; - } - gpx->reset_dsp = 0; - } - - } - } - - - free_buffers(&dsp); - if (gpx->vit) { free(gpx->vit); gpx->vit = NULL; } - - fclose(fp); - - return 0; -} - diff --git a/demod/mod/m10mod.c b/demod/mod/m10mod.c index 1a37f37..4222d4d 100644 --- a/demod/mod/m10mod.c +++ b/demod/mod/m10mod.c @@ -1102,6 +1102,8 @@ static int print_frame(gpx_t *gpx, int pos) { return (gpx->frame_bytes[0]<<8)|gpx->frame_bytes[1]; } +/* -------------------------------------------------------------------------- */ + int main(int argc, char **argv) { @@ -1115,6 +1117,8 @@ int main(int argc, char **argv) { int option_iq = 0; int option_lp = 0; int option_dc = 0; + int option_chk = 0; + int option_softin = 0; int option_pcmraw = 0; int wavloaded = 0; int sel_wavch = 0; // audio channel: left @@ -1129,6 +1133,7 @@ int main(int argc, char **argv) { int bitpos = 0; int bitQ; int pos; + hsbit_t hsbit, hsbit1; //int headerlen = 0; @@ -1144,6 +1149,8 @@ int main(int argc, char **argv) { pcm_t pcm = {0}; dsp_t dsp = {0}; //memset(&dsp, 0, sizeof(dsp)); + hdb_t hdb = {0}; + gpx_t gpx = {0}; @@ -1185,8 +1192,10 @@ int main(int argc, char **argv) { else if ( (strcmp(*argv, "--spike") == 0) ) { spike = 1; } - else if ( (strcmp(*argv, "--ch2") == 0) ) { sel_wavch = 1; } // right channel (default: 0=left) - else if ( (strcmp(*argv, "--ths") == 0) ) { + else if (strcmp(*argv, "--chk3") == 0) { option_chk = 3; } + else if (strcmp(*argv, "--ch2") == 0) { sel_wavch = 1; } // right channel (default: 0=left) + else if (strcmp(*argv, "--softin") == 0) { option_softin = 1; } // float32 soft input + else if (strcmp(*argv, "--ths") == 0) { ++argv; if (*argv) { thres = atof(*argv); @@ -1250,6 +1259,7 @@ int main(int argc, char **argv) { if (!wavloaded) fp = stdin; + // init gpx gpx.option.inv = option_inv; // irrelevant gpx.option.vbs = option_verbose; gpx.option.raw = option_raw; @@ -1257,71 +1267,105 @@ int main(int argc, char **argv) { gpx.option.col = option_color; - // init gpx - - if (option_iq == 0 && option_pcmraw) { - fclose(fp); - fprintf(stderr, "error: raw data not IQ\n"); - return -1; + #ifdef EXT_FSK + if (!option_softin) { + option_softin = 1; + fprintf(stderr, "reading float32 soft symbols\n"); } - if (option_iq) sel_wavch = 0; + #endif - pcm.sel_ch = sel_wavch; - if (option_pcmraw == 0) { - k = read_wav_header(&pcm, fp); - if ( k < 0 ) { + if (!option_softin) { + + if (option_iq == 0 && option_pcmraw) { fclose(fp); - fprintf(stderr, "error: wav header\n"); + fprintf(stderr, "error: raw data not IQ\n"); + return -1; + } + if (option_iq) sel_wavch = 0; + + pcm.sel_ch = sel_wavch; + if (option_pcmraw == 0) { + k = read_wav_header(&pcm, fp); + if ( k < 0 ) { + fclose(fp); + fprintf(stderr, "error: wav header\n"); + return -1; + } + } + + // m10: BT>1?, h=1.2 ? + symlen = 2; + + // init dsp + // + dsp.fp = fp; + dsp.sr = pcm.sr; + dsp.bps = pcm.bps; + dsp.nch = pcm.nch; + dsp.ch = pcm.sel_ch; + dsp.br = (float)BAUD_RATE; + dsp.sps = (float)dsp.sr/dsp.br; + dsp.symlen = symlen; + dsp.symhd = 1; // M10!header + dsp._spb = dsp.sps*symlen; + dsp.hdr = rawheader; + dsp.hdrlen = strlen(rawheader); + dsp.BT = 1.8; // bw/time (ISI) // 1.0..2.0 + dsp.h = 0.9; // 1.2 modulation index + dsp.opt_iq = option_iq; + dsp.opt_lp = option_lp; + dsp.lpIQ_bw = 24e3; // IF lowpass bandwidth + dsp.lpFM_bw = 10e3; // FM audio lowpass + dsp.opt_dc = option_dc; + dsp.opt_IFmin = option_min; + + if ( dsp.sps < 8 ) { + fprintf(stderr, "note: sample rate low (%.1f sps)\n", dsp.sps); + } + + //headerlen = dsp.hdrlen; + + + k = init_buffers(&dsp); + if ( k < 0 ) { + fprintf(stderr, "error: init buffers\n"); + return -1; + } + + bitofs += shift; + } + else { + // init circular header bit buffer + hdb.hdr = rawheader; + hdb.len = strlen(rawheader); + //hdb.thb = 1.0 - 3.1/(float)hdb.len; // 1.0-max_bit_errors/hdrlen + hdb.bufpos = -1; + hdb.buf = NULL; + /* + calloc(hdb.len, sizeof(char)); + if (hdb.buf == NULL) { + fprintf(stderr, "error: malloc\n"); + return -1; + } + */ + hdb.ths = 0.8; // caution 0.7: false positive / offset + hdb.sbuf = calloc(hdb.len, sizeof(float)); + if (hdb.sbuf == NULL) { + fprintf(stderr, "error: malloc\n"); return -1; } } - // m10: BT>1?, h=1.2 ? - symlen = 2; - - // init dsp - // - dsp.fp = fp; - dsp.sr = pcm.sr; - dsp.bps = pcm.bps; - dsp.nch = pcm.nch; - dsp.ch = pcm.sel_ch; - dsp.br = (float)BAUD_RATE; - dsp.sps = (float)dsp.sr/dsp.br; - dsp.symlen = symlen; - dsp.symhd = 1; // M10!header - dsp._spb = dsp.sps*symlen; - dsp.hdr = rawheader; - dsp.hdrlen = strlen(rawheader); - dsp.BT = 1.8; // bw/time (ISI) // 1.0..2.0 - dsp.h = 0.9; // 1.2 modulation index - dsp.opt_iq = option_iq; - dsp.opt_lp = option_lp; - dsp.lpIQ_bw = 24e3; // IF lowpass bandwidth - dsp.lpFM_bw = 10e3; // FM audio lowpass - dsp.opt_dc = option_dc; - dsp.opt_IFmin = option_min; - - if ( dsp.sps < 8 ) { - fprintf(stderr, "note: sample rate low (%.1f sps)\n", dsp.sps); - } - - //headerlen = dsp.hdrlen; - - k = init_buffers(&dsp); - if ( k < 0 ) { - fprintf(stderr, "error: init buffers\n"); - return -1; - }; - - - bitofs += shift; while ( 1 ) { - // FM-audio: - header_found = find_header(&dsp, thres, 2, bitofs, dsp.opt_dc); // optional 2nd pass: dc=0 - _mv = dsp.mv; + if (option_softin) { + header_found = find_softbinhead(fp, &hdb, &_mv); + } + else { // FM-audio: + header_found = find_header(&dsp, thres, 2, bitofs, dsp.opt_dc); // optional 2nd pass: dc=0 + _mv = dsp.mv; + } if (header_found == EOF) break; @@ -1339,15 +1383,31 @@ int main(int argc, char **argv) { while ( pos < BITFRAME_LEN+BITAUX_LEN ) { - if (option_iq >= 2) { - float bl = -1; - if (option_iq > 2) bl = 4.0; - bitQ = read_slbit(&dsp, &bit, 0/*gpx.option.inv*/, bitofs, bitpos, bl, 0); + if (option_softin) { + float s1 = 0.0; + float s2 = 0.0; + float s = 0.0; + bitQ = f32soft_read(fp, &s1); + if (bitQ != EOF) { + bitQ = f32soft_read(fp, &s2); + if (bitQ != EOF) { + s = s2-s1; // integrate both symbols // only 2nd Manchester symbol: s2 + bit = (s>=0.0); // no soft decoding + } + } } else { - bitQ = read_slbit(&dsp, &bit, 0/*gpx.option.inv*/, bitofs, bitpos, -1, spike); // symlen=2 + float bl = -1; + if (option_iq >= 2) spike = 0; + if (option_iq > 2) bl = 4.0; + //bitQ = read_slbit(&dsp, &bit, 0, bitofs, bitpos, bl, spike); // symlen=2 + bitQ = read_softbit2p(&dsp, &hsbit, 0, bitofs, bitpos, bl, spike, &hsbit1); // symlen=1 + bit = hsbit.hb; + if (option_chk == 3 && option_iq) { + //if (hsbit.sb*hsbit1.sb < 0) + bit = (hsbit.sb+0.25*hsbit1.sb)>=0; + } } - if ( bitQ == EOF ) { break; } gpx.frame_bits[pos] = 0x31 ^ (bit0 ^ bit); @@ -1364,7 +1424,13 @@ int main(int argc, char **argv) { // bis Ende der Sekunde vorspulen; allerdings Doppel-Frame alle 10 sek if (gpx.option.vbs < 3) { // && (regulare frame) // print_frame-return? while ( bitpos < 5*BITFRAME_LEN ) { - bitQ = read_slbit(&dsp, &bit, 0/*gpx.option.inv*/, bitofs, bitpos, -1, spike); // symlen=2 + if (option_softin) { + float s = 0.0; + bitQ = f32soft_read(fp, &s); + } + else { + bitQ = read_slbit(&dsp, &bit, 0, bitofs, bitpos, -1, 0); // symlen=2 + } if ( bitQ == EOF) break; bitpos++; } @@ -1374,7 +1440,11 @@ int main(int argc, char **argv) { } } - free_buffers(&dsp); + + if (!option_softin) free_buffers(&dsp); + else { + if (hdb.buf) { free(hdb.buf); hdb.buf = NULL; } + } fclose(fp); diff --git a/demod/mod/meisei100mod.c b/demod/mod/meisei100mod.c index 128eccf..6397c5a 100644 --- a/demod/mod/meisei100mod.c +++ b/demod/mod/meisei100mod.c @@ -212,6 +212,7 @@ int main(int argc, char **argv) { int option_iq = 0; int option_lp = 0; int option_dc = 0; + int option_softin = 0; int option_pcmraw = 0; int sel_wavch = 0; int wavloaded = 0; @@ -267,6 +268,8 @@ int main(int argc, char **argv) { pcm_t pcm = {0}; dsp_t dsp = {0}; //memset(&dsp, 0, sizeof(dsp)); + hdb_t hdb = {0}; + gpx_t gpx = {0}; @@ -308,8 +311,9 @@ int main(int argc, char **argv) { } else return -1; } - else if ( (strcmp(*argv, "--ch2") == 0) ) { sel_wavch = 1; } // right channel (default: 0=left) - else if ( (strcmp(*argv, "--ths") == 0) ) { + else if (strcmp(*argv, "--ch2") == 0) { sel_wavch = 1; } // right channel (default: 0=left) + else if (strcmp(*argv, "--softin") == 0) { option_softin = 1; } // float32 soft input + else if (strcmp(*argv, "--ths") == 0) { ++argv; if (*argv) { thres = atof(*argv); @@ -378,63 +382,98 @@ int main(int argc, char **argv) { if (!wavloaded) fp = stdin; - if (option_iq == 0 && option_pcmraw) { - fclose(fp); - fprintf(stderr, "error: raw data not IQ\n"); - return -1; + #ifdef EXT_FSK + if (!option_softin) { + option_softin = 1; + fprintf(stderr, "reading float32 soft symbols\n"); } - if (option_iq) sel_wavch = 0; + #endif - pcm.sel_ch = sel_wavch; - if (option_pcmraw == 0) { - k = read_wav_header(&pcm, fp); - if ( k < 0 ) { + if (!option_softin) { + + if (option_iq == 0 && option_pcmraw) { fclose(fp); - fprintf(stderr, "error: wav header\n"); + fprintf(stderr, "error: raw data not IQ\n"); + return -1; + } + if (option_iq) sel_wavch = 0; + + pcm.sel_ch = sel_wavch; + if (option_pcmraw == 0) { + k = read_wav_header(&pcm, fp); + if ( k < 0 ) { + fclose(fp); + fprintf(stderr, "error: wav header\n"); + return -1; + } + } + + symlen = 1; + + // init dsp + // + dsp.fp = fp; + dsp.sr = pcm.sr; + dsp.bps = pcm.bps; + dsp.nch = pcm.nch; + dsp.ch = pcm.sel_ch; + dsp.br = (float)BAUD_RATE; + dsp.sps = (float)dsp.sr/dsp.br; + dsp.symlen = symlen; + dsp.symhd = 1; + dsp._spb = dsp.sps*symlen; + dsp.hdr = rawheader; + dsp.hdrlen = strlen(rawheader); + dsp.BT = 1.2; // bw/time (ISI) // 1.0..2.0 + dsp.h = 2.4; // 2.8 + dsp.opt_iq = option_iq; + dsp.opt_lp = option_lp; + dsp.lpIQ_bw = 16e3; // IF lowpass bandwidth + dsp.lpFM_bw = 4e3; // FM audio lowpass + dsp.opt_dc = option_dc; + dsp.opt_IFmin = option_min; + + if ( dsp.sps < 8 ) { + fprintf(stderr, "note: sample rate low (%.1f sps)\n", dsp.sps); + } + + if (baudrate > 0) { + dsp.br = (float)baudrate; + dsp.sps = (float)dsp.sr/dsp.br; + fprintf(stderr, "sps corr: %.4f\n", dsp.sps); + } + + + k = init_buffers(&dsp); + if ( k < 0 ) { + fprintf(stderr, "error: init buffers\n"); + return -1; + } + + bitofs += shift; + } + else { + // init circular header bit buffer + hdb.hdr = rawheader; + hdb.len = strlen(rawheader); + //hdb.thb = 1.0 - 3.1/(float)hdb.len; // 1.0-max_bit_errors/hdrlen + hdb.bufpos = -1; + hdb.buf = NULL; + /* + calloc(hdb.len, sizeof(char)); + if (hdb.buf == NULL) { + fprintf(stderr, "error: malloc\n"); + return -1; + } + */ + hdb.ths = 0.8; // caution/test false positive + hdb.sbuf = calloc(hdb.len, sizeof(float)); + if (hdb.sbuf == NULL) { + fprintf(stderr, "error: malloc\n"); return -1; } } - symlen = 1; - - // init dsp - // - dsp.fp = fp; - dsp.sr = pcm.sr; - dsp.bps = pcm.bps; - dsp.nch = pcm.nch; - dsp.ch = pcm.sel_ch; - dsp.br = (float)BAUD_RATE; - dsp.sps = (float)dsp.sr/dsp.br; - dsp.symlen = symlen; - dsp.symhd = 1; - dsp._spb = dsp.sps*symlen; - dsp.hdr = rawheader; - dsp.hdrlen = strlen(rawheader); - dsp.BT = 1.2; // bw/time (ISI) // 1.0..2.0 - dsp.h = 2.4; // 2.8 - dsp.opt_iq = option_iq; - dsp.opt_lp = option_lp; - dsp.lpIQ_bw = 16e3; // IF lowpass bandwidth - dsp.lpFM_bw = 4e3; // FM audio lowpass - dsp.opt_dc = option_dc; - dsp.opt_IFmin = option_min; - - if ( dsp.sps < 8 ) { - fprintf(stderr, "note: sample rate low (%.1f sps)\n", dsp.sps); - } - - if (baudrate > 0) { - dsp.br = (float)baudrate; - dsp.sps = (float)dsp.sr/dsp.br; - fprintf(stderr, "sps corr: %.4f\n", dsp.sps); - } - - k = init_buffers(&dsp); - if ( k < 0 ) { - fprintf(stderr, "error: init buffers\n"); - return -1; - }; if (option_ecc) { rs_init_BCH64(&gpx.RS); @@ -442,14 +481,16 @@ int main(int argc, char **argv) { gpx.sn = -1; - bitofs += shift; - while ( 1 ) { - // FM-audio: - header_found = find_header(&dsp, thres, 1, bitofs, dsp.opt_dc); // optional 2nd pass: dc=0 - _mv = dsp.mv; + if (option_softin) { + header_found = find_softbinhead(fp, &hdb, &_mv); + } + else { // FM-audio: + header_found = find_header(&dsp, thres, 1, bitofs, dsp.opt_dc); // optional 2nd pass: dc=0 + _mv = dsp.mv; + } if (header_found == EOF) break; @@ -462,9 +503,14 @@ int main(int argc, char **argv) { while (bitpos < RAWBITFRAME_LEN/2-RAWHEADLEN) { // 2*600-48 - - bitQ = read_slbit(&dsp, &bit, 0, bitofs, bitpos, -1, 0); // symlen=1 - + if (option_softin) { + float s = 0.0; + bitQ = f32soft_read(fp, &s); + if (bitQ != EOF) bit = (s>=0.0); // no soft decoding + } + else { + bitQ = read_slbit(&dsp, &bit, 0, bitofs, bitpos, -1, 0); // symlen=1 + } if (bitQ == EOF) { break; } gpx.frame_rawbits[bitpos] = 0x30 + bit; @@ -768,7 +814,11 @@ int main(int argc, char **argv) { printf("\n"); - free_buffers(&dsp); + + if (!option_softin) free_buffers(&dsp); + else { + if (hdb.buf) { free(hdb.buf); hdb.buf = NULL; } + } fclose(fp); diff --git a/demod/mod/rs41mod.c b/demod/mod/rs41mod.c index ab66392..2a01517 100644 --- a/demod/mod/rs41mod.c +++ b/demod/mod/rs41mod.c @@ -87,6 +87,7 @@ typedef struct { float T; float RH; ui32_t crc; ui8_t frame[FRAME_LEN]; + ui8_t dfrm[FRAME_LEN]; ui8_t calibytes[51*16]; ui8_t calfrchk[51]; float ptu_Rf1; // ref-resistor f1 (750 Ohm) @@ -1006,7 +1007,27 @@ static int rs41_ecc(gpx_t *gpx, int frmlen) { errors2 = rs_decode(&gpx->RS, cw2, err_pos2, err_val2); - if (gpx->option.ecc == 2 && (errors1 < 0 || errors2 < 0)) + if (gpx->option.ecc >= 2) // option_softin: mark weak dfrm[] + { // 2nd pass + if (errors1 < 0) { + for (i = 0; i < frmlen/2; i++) gpx->frame[2*i] ^= gpx->dfrm[2*i]; + for (i = 0; i < rs_K; i++) cw1[rs_R+i] = gpx->frame[cfg_rs41.msgpos+2*i ]; + errors1 = rs_decode(&gpx->RS, cw1, err_pos1, err_val1); + if (errors1 < 0) { + for (i = 0; i < frmlen/2; i++) gpx->frame[2*i] ^= gpx->dfrm[2*i]; + } + } + if (errors2 < 0) { + for (i = 0; i < frmlen/2; i++) gpx->frame[2*i+1] ^= gpx->dfrm[2*i+1]; + for (i = 0; i < rs_K; i++) cw2[rs_R+i] = gpx->frame[cfg_rs41.msgpos+2*i+1]; + errors2 = rs_decode(&gpx->RS, cw2, err_pos2, err_val2); + if (errors2 < 0) { + for (i = 0; i < frmlen/2; i++) gpx->frame[2*i+1] ^= gpx->dfrm[2*i+1]; + } + } + } + + if (gpx->option.ecc >= 2 && (errors1 < 0 || errors2 < 0)) { // 2nd pass gpx->frame[pos_FRAME] = (pck_FRAME>>8)&0xFF; gpx->frame[pos_FRAME+1] = pck_FRAME&0xFF; gpx->frame[pos_PTU] = (pck_PTU >>8)&0xFF; gpx->frame[pos_PTU +1] = pck_PTU &0xFF; @@ -1032,6 +1053,14 @@ static int rs41_ecc(gpx_t *gpx, int frmlen) { errors2 = rs_decode(&gpx->RS, cw2, err_pos2, err_val2); } + if (gpx->option.ecc >= 3) + { // 3nd pass: erasures ... + if (errors1 < 0) { + } + if (errors2 < 0) { + } + } + // Wenn Fehler im 00-padding korrigiert wurden, // war entweder der frame zu kurz, oder @@ -1448,7 +1477,7 @@ static void print_frame(gpx_t *gpx, int len) { } if (gpx->option.ecc) { if (ec >= 0) fprintf(stdout, " [OK]"); else fprintf(stdout, " [NO]"); - if (gpx->option.ecc /*== 2*/) { + if (gpx->option.ecc /*>= 2*/) { if (ec > 0) fprintf(stdout, " (%d)", ec); if (ec < 0) { if (ec == -1) fprintf(stdout, " (-+)"); @@ -1467,69 +1496,6 @@ static void print_frame(gpx_t *gpx, int len) { /* -------------------------------------------------------------------------- */ -// header bit buffer -typedef struct { - char *hdr; - char *buf; - char len; - int bufpos; - float ths; -} hdb_t; - -static float cmp_hdb(hdb_t *hdb) { // bit-errors? - int i, j; - int headlen = hdb->len; - int berrs1 = 0, berrs2 = 0; - - i = 0; - j = hdb->bufpos; - while (i < headlen) { - if (j < 0) j = headlen-1; - if (hdb->buf[j] != hdb->hdr[headlen-1-i]) berrs1 += 1; - j--; - i++; - } - - i = 0; - j = hdb->bufpos; - while (i < headlen) { - if (j < 0) j = headlen-1; - if ((hdb->buf[j]^0x01) != hdb->hdr[headlen-1-i]) berrs2 += 1; - j--; - i++; - } - - if (berrs2 < berrs1) return (-headlen+berrs2)/(float)headlen; - else return ( headlen-berrs1)/(float)headlen; - - return 0; -} - -static int find_binhead(FILE *fp, hdb_t *hdb, float *score) { - int bit; - int headlen = hdb->len; - float mv; - - //*score = 0.0; - - while ( (bit = fgetc(fp)) != EOF ) - { - bit &= 1; - - hdb->bufpos = (hdb->bufpos+1) % headlen; - hdb->buf[hdb->bufpos] = 0x30 | bit; // Ascii - - mv = cmp_hdb(hdb); - if ( fabs(mv) > hdb->ths ) { - *score = mv; - return 1; - } - } - - return EOF; -} - - int main(int argc, char *argv[]) { //int option_inv = 0; // invertiert Signal @@ -1538,6 +1504,7 @@ int main(int argc, char *argv[]) { int option_lp = 0; int option_dc = 0; int option_bin = 0; + int option_softin = 0; int option_pcmraw = 0; int wavloaded = 0; int sel_wavch = 0; // audio channel: left @@ -1554,12 +1521,16 @@ int main(int argc, char *argv[]) { byte_count = FRAMESTART; int bit, byte; int bitQ; + int difbyte = 0; + hsbit_t hsbit, hsbit1; int header_found = 0; float thres = 0.7; // dsp.mv threshold float _mv = 0.0; + float lpIQ_bw = 7.4e3; + int symlen = 1; int bitofs = 2; // +0 .. +3 int shift = 0; @@ -1608,12 +1579,14 @@ int main(int argc, char *argv[]) { } else if (strcmp(*argv, "--ecc" ) == 0) { gpx.option.ecc = 1; } else if (strcmp(*argv, "--ecc2") == 0) { gpx.option.ecc = 2; } + else if (strcmp(*argv, "--ecc3") == 0) { gpx.option.ecc = 3; } else if (strcmp(*argv, "--sat") == 0) { gpx.option.sat = 1; } else if (strcmp(*argv, "--ptu") == 0) { gpx.option.ptu = 1; } else if (strcmp(*argv, "--silent") == 0) { gpx.option.slt = 1; } else if (strcmp(*argv, "--ch2") == 0) { sel_wavch = 1; } // right channel (default: 0=left) else if (strcmp(*argv, "--auto") == 0) { gpx.option.aut = 1; } - else if (strcmp(*argv, "--bin") == 0) { option_bin = 1; } // bit/byte binary input + else if (strcmp(*argv, "--bin") == 0) { option_bin = 1; } // bit/byte binary input + else if (strcmp(*argv, "--softin") == 0) { option_softin = 1; } // float32 soft input else if (strcmp(*argv, "--ths") == 0) { ++argv; if (*argv) { @@ -1644,6 +1617,14 @@ int main(int argc, char *argv[]) { option_iq = 5; } else if (strcmp(*argv, "--lp") == 0) { option_lp = 1; } // IQ lowpass + else if (strcmp(*argv, "--lpbw") == 0) { // IQ lowpass BW / kHz + double bw = 0.0; + ++argv; + if (*argv) bw = atof(*argv); + else return -1; + if (bw > 4.6 && bw < 24.0) lpIQ_bw = bw*1e3; + option_lp = 1; + } else if (strcmp(*argv, "--dc") == 0) { option_dc = 1; } else if (strcmp(*argv, "--min") == 0) { option_min = 1; @@ -1694,9 +1675,16 @@ int main(int argc, char *argv[]) { memcpy(gpx.frame, rs41_header_bytes, sizeof(rs41_header_bytes)); // 8 header bytes + #ifdef EXT_FSK + if (!option_bin && !option_softin) { + option_softin = 1; + fprintf(stderr, "reading float32 soft symbols\n"); + } + #endif + if (!rawhex) { - if (!option_bin) { + if (!option_bin && !option_softin) { if (option_iq == 0 && option_pcmraw) { fclose(fp); @@ -1736,7 +1724,7 @@ int main(int argc, char *argv[]) { dsp.h = 0.6; //0.7; // 0.7..0.8? modulation index abzgl. BT dsp.opt_iq = option_iq; dsp.opt_lp = option_lp; - dsp.lpIQ_bw = 8e3; // IF lowpass bandwidth + dsp.lpIQ_bw = lpIQ_bw; // 7.4e3 (6e3..8e3) // IF lowpass bandwidth dsp.lpFM_bw = 6e3; // FM audio lowpass dsp.opt_dc = option_dc; dsp.opt_IFmin = option_min; @@ -1744,37 +1732,48 @@ int main(int argc, char *argv[]) { if ( dsp.sps < 8 ) { fprintf(stderr, "note: sample rate low (%.1f sps)\n", dsp.sps); } + + + k = init_buffers(&dsp); // BT=0.5 (IQ-Int: BT > 0.5 ?) + if ( k < 0 ) { + fprintf(stderr, "error: init buffers\n"); + return -1; + } + + //if (option_iq >= 2) bitofs += 1; // FM: +1 , IQ: +2 + bitofs += shift; } else { + if (option_bin && option_softin) option_bin = 0; // init circular header bit buffer hdb.hdr = rs41_header; hdb.len = strlen(rs41_header); - hdb.ths = 1.0 - 3.1/(float)hdb.len; // 1.0-max_bit_errors/hdrlen + hdb.thb = 1.0 - 3.1/(float)hdb.len; // 1.0-max_bit_errors/hdrlen hdb.bufpos = -1; hdb.buf = calloc(hdb.len, sizeof(char)); if (hdb.buf == NULL) { fprintf(stderr, "error: malloc\n"); return -1; } + hdb.ths = 0.7; // caution/test false positive + hdb.sbuf = calloc(hdb.len, sizeof(float)); + if (hdb.sbuf == NULL) { + fprintf(stderr, "error: malloc\n"); + return -1; + } } - k = init_buffers(&dsp); // BT=0.5 (IQ-Int: BT > 0.5 ?) - if ( k < 0 ) { - fprintf(stderr, "error: init buffers\n"); - return -1; - }; - - //if (option_iq >= 2) bitofs += 1; // FM: +1 , IQ: +2 - bitofs += shift; - while ( 1 ) { if (option_bin) { header_found = find_binhead(fp, &hdb, &_mv); } + else if (option_softin) { + header_found = find_softbinhead(fp, &hdb, &_mv); + } else { // FM-audio: - header_found = find_header(&dsp, thres, 3, bitofs, dsp.opt_dc); // optional 2nd pass: dc=0 + header_found = find_header(&dsp, thres, 4, bitofs, dsp.opt_dc); // optional 2nd pass: dc=0 _mv = dsp.mv; } if (header_found == EOF) break; @@ -1790,6 +1789,7 @@ int main(int argc, char *argv[]) { byte_count = FRAMESTART; bitpos = 0; // byte_count*8-HEADLEN b8pos = 0; + difbyte = 0; while ( byte_count < FRAME_LEN ) { @@ -1797,14 +1797,21 @@ int main(int argc, char *argv[]) { bitQ = fgetc(fp); if (bitQ != EOF) bit = bitQ & 0x1; } + else if (option_softin) { + float s = 0.0; + bitQ = f32soft_read(fp, &s); + if (bitQ != EOF) bit = (s>=0.0); // no soft decoding + } else { - if (option_iq >= 2) { - float bl = -1; - if (option_iq > 2) bl = 1.0; - bitQ = read_slbit(&dsp, &bit, 0/*gpx.option.inv*/, bitofs, bitpos, bl, 0); - } - else { - bitQ = read_slbit(&dsp, &bit, 0/*gpx.option.inv*/, bitofs, bitpos, -1, 0); + float bl = -1; + if (option_iq > 2) bl = 2.0; + //bitQ = read_slbit(&dsp, &bit, 0, bitofs, bitpos, bl, 0); // symlen=1 + bitQ = read_softbit2p(&dsp, &hsbit, 0, bitofs, bitpos, bl, 0, &hsbit1); // symlen=1 + bit = hsbit.hb; + if (gpx.option.ecc == 3) bit = (hsbit.sb+hsbit1.sb)>=0; + + if (bitpos < FRAME_LEN*BITS && hsbit.sb*hsbit1.sb < 0) { + difbyte |= 1< 0.5 ?) + if ( k < 0 ) { + fprintf(stderr, "error: init buffers\n"); + return -1; + }; + + bitofs += shift; + } + else { + // init circular header bit buffer + hdb.hdr = rs92_rawheader; + hdb.len = strlen(rs92_rawheader); + //hdb.thb = 1.0 - 3.1/(float)hdb.len; // 1.0-max_bit_errors/hdrlen + hdb.bufpos = -1; + hdb.buf = NULL; + /* + calloc(hdb.len, sizeof(char)); + if (hdb.buf == NULL) { + fprintf(stderr, "error: malloc\n"); + return -1; + } + */ + // caution ths=0.7: -3 byte offset, false positive + // 2A 2A 2A 2A 2A 10|65 10 .. + // header sync could be extended into the frame + hdb.ths = 0.8; + hdb.sbuf = calloc(hdb.len, sizeof(float)); + if (hdb.sbuf == NULL) { + fprintf(stderr, "error: malloc\n"); return -1; } } - // rs92-sgp: BT=0.5, h=1.0 ? - symlen = 2; - // init dsp - // - dsp.fp = fp; - dsp.sr = pcm.sr; - dsp.bps = pcm.bps; - dsp.nch = pcm.nch; - dsp.ch = pcm.sel_ch; - dsp.br = (float)BAUD_RATE; - dsp.sps = (float)dsp.sr/dsp.br; - dsp.symlen = symlen; - dsp.symhd = symlen; - dsp._spb = dsp.sps*symlen; - dsp.hdr = rs92_rawheader; - dsp.hdrlen = strlen(rs92_rawheader); - dsp.BT = 0.5; // bw/time (ISI) // 0.3..0.5 - dsp.h = 0.8; // 1.0 modulation index abzgl. BT - dsp.opt_iq = option_iq; - dsp.opt_lp = option_lp; - dsp.lpIQ_bw = 8e3; // IF lowpass bandwidth - dsp.lpFM_bw = 6e3; // FM audio lowpass - dsp.opt_dc = option_dc; - dsp.opt_IFmin = option_min; - if (gpx.option.ngp) { // L-band rs92-ngp - dsp.h = 3.8; // RS92-NGP: 1680/400=4.2, 4.2*0.9=3.8=4.75*0.8 - dsp.lpIQ_bw = 32e3; // IF lowpass bandwidth // 32e3=4.2*7.6e3 - } - - if ( dsp.sps < 8 ) { - fprintf(stderr, "note: sample rate low (%.1f sps)\n", dsp.sps); - } - - - k = init_buffers(&dsp); // BT=0.5 (IQ-Int: BT > 0.5 ?) - if ( k < 0 ) { - fprintf(stderr, "error: init buffers\n"); - return -1; - }; - - bitofs += shift; - - while ( 1 ) { - - header_found = find_header(&dsp, thres, 3, bitofs, dsp.opt_dc); - _mv = dsp.mv; + while ( 1 ) + { + if (option_softin) { + for (k = 0; k < hdb.len; k++) hdb.sbuf[k] = 0.0; + header_found = find_softbinhead(fp, &hdb, &_mv); + } + else { + header_found = find_header(&dsp, thres, 3, bitofs, dsp.opt_dc); + _mv = dsp.mv; + } if (header_found == EOF) break; @@ -1560,9 +1608,25 @@ int main(int argc, char *argv[]) { b8pos = 0; while ( byte_count < FRAME_LEN ) { - float bl = -1; - if (option_iq > 2) bl = 4.0; - bitQ = read_slbit(&dsp, &bit, 0/*gpx.option.inv*/, bitofs, bitpos, bl, spike); + + if (option_softin) { + float s1 = 0.0; + float s2 = 0.0; + float s = 0.0; + bitQ = f32soft_read(fp, &s1); + if (bitQ != EOF) { + bitQ = f32soft_read(fp, &s2); + if (bitQ != EOF) { + s = s2-s1; // integrate both symbols // only 2nd Manchester symbol: s2 + bit = (s>=0.0); // no soft decoding + } + } + } + else { + float bl = -1; + if (option_iq > 2) bl = 4.0; + bitQ = read_slbit(&dsp, &bit, 0, bitofs, bitpos, bl, spike); // symlen=2 + } if ( bitQ == EOF) break; if (gpx.option.inv) bit ^= 1; @@ -1586,9 +1650,13 @@ int main(int argc, char *argv[]) { } - free_buffers(&dsp); + if (!option_softin) free_buffers(&dsp); + else { + if (hdb.buf) { free(hdb.buf); hdb.buf = NULL; } + } if (gpx.gps.ephs) free(gpx.gps.ephs); + fclose(fp); return 0; diff --git a/ecc/ecc_hamming.pdf b/ecc/ecc_hamming.pdf index 5dd986c006ca0a2dc9b62e045b4d263a51f75312..31a42c60fcac60b1b95fbdd2549fd4487e62a1cc 100644 GIT binary patch delta 65061 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 Oo&?Xtl$?Q^=5{tR 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 delta 26576 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