From f2402c3b3dbeee981696550e79555daeb8476d75 Mon Sep 17 00:00:00 2001 From: Zilog80 Date: Mon, 12 Sep 2022 02:26:38 +0200 Subject: [PATCH] demod_mod: reduce % ops --- demod/mod/demod_mod.c | 11 +++---- demod/mod/demod_mod.h | 3 +- demod/multi/demod_base.c | 66 ++++++++++++++++++++++------------------ demod/multi/demod_base.h | 12 ++++++-- imet/imet4iq.c | 36 +++++++++++++--------- mk2a/mk2a1680mod.c | 64 ++++++++++++++++++++++---------------- scan/dft_detect.c | 13 ++++---- 7 files changed, 119 insertions(+), 86 deletions(-) diff --git a/demod/mod/demod_mod.c b/demod/mod/demod_mod.c index 8492d66..e62e41b 100644 --- a/demod/mod/demod_mod.c +++ b/demod/mod/demod_mod.c @@ -668,7 +668,6 @@ int f32buf_sample(dsp_t *dsp, int inv) { if (dsp->opt_iq) { if (dsp->opt_iq == 5) { - ui32_t s_reset = dsp->dectaps*dsp->lut_len; int j; if ( f32read_cblock(dsp) < dsp->decM ) return EOF; for (j = 0; j < dsp->decM; j++) { @@ -678,16 +677,16 @@ int f32buf_sample(dsp_t *dsp, int inv) { z = dsp->decMbuf[j] * cexp(f0*_2PI*I); } else { - z = dsp->decMbuf[j] * dsp->ex[dsp->sample_dec % dsp->lut_len]; + z = dsp->decMbuf[j] * dsp->ex[dsp->sample_decM]; } + dsp->sample_decM += 1; if (dsp->sample_decM >= dsp->lut_len) dsp->sample_decM = 0; - dsp->decXbuffer[dsp->sample_dec % dsp->dectaps] = z; - dsp->sample_dec += 1; - if (dsp->sample_dec == s_reset) dsp->sample_dec = 0; + dsp->decXbuffer[dsp->sample_decX] = z; + dsp->sample_decX += 1; if (dsp->sample_decX >= dsp->dectaps) dsp->sample_decX = 0; } if (dsp->decM > 1) { - z = lowpass(dsp->decXbuffer, dsp->sample_dec, dsp->dectaps, ws_dec); + z = lowpass(dsp->decXbuffer, dsp->sample_decX, dsp->dectaps, ws_dec); } } else if ( f32read_csample(dsp, &z) == EOF ) return EOF; diff --git a/demod/mod/demod_mod.h b/demod/mod/demod_mod.h index ef936f4..aa2cc73 100644 --- a/demod/mod/demod_mod.h +++ b/demod/mod/demod_mod.h @@ -123,8 +123,9 @@ typedef struct { int decM; ui32_t sr_base; ui32_t dectaps; - ui32_t sample_dec; + ui32_t sample_decX; ui32_t lut_len; + ui32_t sample_decM; float complex *decXbuffer; float complex *decMbuf; float complex *ex; // exp_lut diff --git a/demod/multi/demod_base.c b/demod/multi/demod_base.c index 1234e98..4103a94 100644 --- a/demod/multi/demod_base.c +++ b/demod/multi/demod_base.c @@ -123,14 +123,14 @@ static int dft_window(dft_t *dft, int w) { dft->win[n] = 1.0; break; case 1: // Hann - dft->win[n] = 0.5 * ( 1.0 - cos(2*M_PI*n/(float)(dft->N2-1)) ); + dft->win[n] = 0.5 * ( 1.0 - cos(_2PI*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(_2PI*n / (float)(dft->N2-1)); break ; case 3: // Blackmann dft->win[n] = 7938/18608.0 - - 9240/18608.0*cos(2*M_PI*n / (float)(dft->N2-1)) + - 9240/18608.0*cos(_2PI*n / (float)(dft->N2-1)) + 1430/18608.0*cos(4*M_PI*n / (float)(dft->N2-1)); break ; } @@ -308,7 +308,7 @@ static int findstr(char *buff, char *str, int pos) { return i; } -float read_wav_header(pcm_t *pcm) { +int read_wav_header(pcm_t *pcm) { FILE *fp = pcm->fp; char txt[4+1] = "\0\0\0\0"; unsigned char dat[4]; @@ -663,7 +663,7 @@ static int lowpass_init(float f, int taps, float **pws) { ws = (float*)calloc( 2*taps+1, sizeof(float)); if (ws == NULL) return -1; for (n = 0; n < taps; n++) { - w[n] = 7938/18608.0 - 9240/18608.0*cos(2*M_PI*n/(taps-1)) + 1430/18608.0*cos(4*M_PI*n/(taps-1)); // Blackmann + w[n] = 7938/18608.0 - 9240/18608.0*cos(_2PI*n/(taps-1)) + 1430/18608.0*cos(4*M_PI*n/(taps-1)); // Blackmann h[n] = 2*f*sinc(2*f*(n-(taps-1)/2)); ws[n] = w[n]*h[n]; norm += ws[n]; // 1-norm @@ -741,26 +741,26 @@ int f32buf_sample(dsp_t *dsp, int inv) { if (dsp->opt_iq) { if (dsp->opt_iq == 5) { - ui32_t s_reset = dsp->dectaps*dsp->lut_len; + //ui32_t s_reset = dsp->dectaps*dsp->lut_len; int j; if ( f32read_cblock(dsp) < dsp->decM ) return EOF; //if ( f32read_cblock(dsp) < dsp->decM * blk_sz) return EOF; for (j = 0; j < dsp->decM; j++) { - z = dsp->decMbuf[j] * dsp->ex[dsp->sample_dec % dsp->lut_len]; - dsp->decXbuffer[dsp->sample_dec % dsp->dectaps] = z; - dsp->sample_dec += 1; - if (dsp->sample_dec == s_reset) dsp->sample_dec = 0; + z = dsp->decMbuf[j] * dsp->ex[dsp->sample_decM]; + dsp->sample_decM += 1; if (dsp->sample_decM >= dsp->lut_len) dsp->sample_decM = 0; + dsp->decXbuffer[dsp->sample_decX] = z; + dsp->sample_decX += 1; if (dsp->sample_decX >= dsp->dectaps) dsp->sample_decX = 0; } if (dsp->decM > 1) { - z = lowpass(dsp->decXbuffer, dsp->sample_dec, dsp->dectaps, ws_dec); + z = lowpass(dsp->decXbuffer, dsp->sample_decX, dsp->dectaps, ws_dec); } } else if ( f32read_csample(dsp, &z) == EOF ) return EOF; if (dsp->opt_dc) { - z *= cexp(-t*2*M_PI*dsp->Df*I); + z *= cexp(-t*_2PI*dsp->Df*I); } @@ -791,8 +791,8 @@ int f32buf_sample(dsp_t *dsp, int inv) { { double xbit = 0.0; //float complex xi = cexp(+I*M_PI*dsp->h/dsp->sps); - double f1 = -dsp->h*dsp->sr/(2*dsp->sps); - double f2 = -f1; + //double f1 = -dsp->h*dsp->sr/(2*dsp->sps); + //double f2 = -f1; float complex X0 = 0; float complex X = 0; @@ -804,13 +804,13 @@ int f32buf_sample(dsp_t *dsp, int inv) { z0 = dsp->rot_iqbuf[(dsp->sample_in-n + dsp->N_IQBUF) % dsp->N_IQBUF]; // f1 - X0 = z0 * cexp(-tn*2*M_PI*f1*I); // alt - X = z * cexp(-t *2*M_PI*f1*I); // neu + X0 = z0 * cexp(-tn*dsp->iw1); // alt + X = z * cexp(-t *dsp->iw1); // neu dsp->F1sum += X - X0; // f2 - X0 = z0 * cexp(-tn*2*M_PI*f2*I); // alt - X = z * cexp(-t *2*M_PI*f2*I); // neu + X0 = z0 * cexp(-tn*dsp->iw2); // alt + X = z * cexp(-t *dsp->iw2); // neu dsp->F2sum += X - X0; xbit = cabs(dsp->F2sum) - cabs(dsp->F1sum); @@ -821,8 +821,8 @@ int f32buf_sample(dsp_t *dsp, int inv) { { double xbit = 0.0; //float complex xi = cexp(+I*M_PI*dsp->h/dsp->sps); - double f1 = -dsp->h*dsp->sr/(2*dsp->sps); - double f2 = -f1; + //double f1 = -dsp->h*dsp->sr/(2*dsp->sps); + //double f2 = -f1; float complex X1 = 0; float complex X2 = 0; @@ -833,8 +833,8 @@ int f32buf_sample(dsp_t *dsp, int inv) { n--; t = -n / (double)dsp->sr; z = dsp->rot_iqbuf[(dsp->sample_in - n + dsp->N_IQBUF) % dsp->N_IQBUF]; // +1 - X1 += z*cexp(-t*2*M_PI*f1*I); - X2 += z*cexp(-t*2*M_PI*f2*I); + X1 += z*cexp(-t*dsp->iw1); + X2 += z*cexp(-t*dsp->iw2); } xbit = cabs(X2) - cabs(X1); @@ -1112,7 +1112,7 @@ int init_buffers(dsp_t *dsp) { int i, pos; float b0, b1, b2, b, t; float normMatch; - double sigma = sqrt(log(2)) / (2*M_PI*dsp->BT); + double sigma = sqrt(log(2)) / (_2PI*dsp->BT); int p2 = 1; int K, L, M; @@ -1156,7 +1156,7 @@ int init_buffers(dsp_t *dsp) { if (dsp->ex == NULL) return -1; for (n = 0; n < dsp->lut_len; n++) { t = f0*(double)n; - dsp->ex[n] = cexp(t*2*M_PI*I); + dsp->ex[n] = cexp(t*_2PI*I); } @@ -1315,6 +1315,14 @@ int init_buffers(dsp_t *dsp) { dsp->fm_buffer = (float *)calloc( M+1, sizeof(float)); if (dsp->fm_buffer == NULL) return -1; // dsp->bufs[] + if (dsp->opt_iq) + { + double f1 = -dsp->h*dsp->sr/(2.0*dsp->sps); + double f2 = -f1; + dsp->iw1 = _2PI*I*f1; + dsp->iw2 = _2PI*I*f2; + } + return K; } @@ -1419,8 +1427,8 @@ int find_header(dsp_t *dsp, float thres, int hdmax, int bitofs, int opt_dc) { double diffDf = dsp->dDf*0.6; //0.4 if (1 && dsp->opt_iq >= 2) { // update rot_iqbuf, F1sum, F2sum - double f1 = -dsp->h*dsp->sr/(2*dsp->sps); - double f2 = -f1; + //double f1 = -dsp->h*dsp->sr/(2*dsp->sps); + //double f2 = -f1; float complex X1 = 0; float complex X2 = 0; float complex _z = 0; @@ -1429,12 +1437,12 @@ int find_header(dsp_t *dsp, float thres, int hdmax, int bitofs, int opt_dc) { { // update rot_iqbuf double _tn = (dsp->sample_in - _n) / (double)dsp->sr; - dsp->rot_iqbuf[(dsp->sample_in - _n + dsp->N_IQBUF) % dsp->N_IQBUF] *= cexp(-_tn*2*M_PI*diffDf*I); + dsp->rot_iqbuf[(dsp->sample_in - _n + dsp->N_IQBUF) % dsp->N_IQBUF] *= cexp(-_tn*_2PI*diffDf*I); // //update/reset F1sum, F2sum _z = dsp->rot_iqbuf[(dsp->sample_in - _n + dsp->N_IQBUF) % dsp->N_IQBUF]; - X1 += _z*cexp(-_tn*2*M_PI*f1*I); - X2 += _z*cexp(-_tn*2*M_PI*f2*I); + X1 += _z*cexp(-_tn*dsp->iw1); + X2 += _z*cexp(-_tn*dsp->iw2); _n--; } dsp->F1sum = X1; diff --git a/demod/multi/demod_base.h b/demod/multi/demod_base.h index bd8807e..d284e43 100644 --- a/demod/multi/demod_base.h +++ b/demod/multi/demod_base.h @@ -9,6 +9,7 @@ #ifndef M_PI #define M_PI (3.1415926535897932384626433832795) #endif +#define _2PI (6.2831853071795864769252867665590) #ifndef INTTYPES @@ -100,6 +101,10 @@ typedef struct { float complex *rot_iqbuf; float complex F1sum; float complex F2sum; + // + double complex iw1; + double complex iw2; + // char *rawbits; @@ -132,8 +137,9 @@ typedef struct { int blk_cnt; ui32_t sr_base; ui32_t dectaps; - ui32_t sample_dec; + ui32_t sample_decX; ui32_t lut_len; + ui32_t sample_decM; float complex *decXbuffer; float complex *decMbuf; float complex *ex; // exp_lut @@ -153,7 +159,7 @@ typedef struct { int lpFMtaps; // ui32_t float *ws_lpFM; float *lpFM_buf; - float *fm_buffer; + float *fm_buffer; int opt_cnt; @@ -192,7 +198,7 @@ typedef struct { -float read_wav_header(pcm_t *); +int read_wav_header(pcm_t *); 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 ); diff --git a/imet/imet4iq.c b/imet/imet4iq.c index 7dd2817..1afc74d 100644 --- a/imet/imet4iq.c +++ b/imet/imet4iq.c @@ -42,6 +42,7 @@ typedef int i32_t; #ifndef M_PI #define M_PI (3.1415926535897932384626433832795) #endif +#define _2PI (6.2831853071795864769252867665590) #define LP_IQ 1 #define LP_FM 2 @@ -78,7 +79,7 @@ int findstr(char *buff, char *str, int pos) { } static -float read_wav_header(pcm_t *pcm, FILE *fp) { +int read_wav_header(pcm_t *pcm, FILE *fp) { char txt[4+1] = "\0\0\0\0"; unsigned char dat[4]; int byte, p=0; @@ -184,8 +185,9 @@ typedef struct { int decM; ui32_t sr_base; ui32_t dectaps; - ui32_t sample_dec; + ui32_t sample_decX; ui32_t lut_len; + ui32_t sample_decM; float complex *decXbuffer; float complex *decMbuf; float complex *ex; // exp_lut @@ -373,7 +375,7 @@ static int lowpass_init(float f, int taps, float **pws) { ws = (float*)calloc( 2*taps+1, sizeof(float)); if (ws == NULL) return -1; for (n = 0; n < taps; n++) { - w[n] = 7938/18608.0 - 9240/18608.0*cos(2*M_PI*n/(taps-1)) + 1430/18608.0*cos(4*M_PI*n/(taps-1)); // Blackmann + w[n] = 7938/18608.0 - 9240/18608.0*cos(_2PI*n/(taps-1)) + 1430/18608.0*cos(4*M_PI*n/(taps-1)); // Blackmann h[n] = 2*f*sinc(2*f*(n-(taps-1)/2)); ws[n] = w[n]*h[n]; norm += ws[n]; // 1-norm @@ -445,24 +447,25 @@ int f32_sample(dsp_t *dsp, float *out) { if (dsp->opt_nolut) { double _s_base = (double)(_sample*dsp->decM+j); // dsp->sample_dec double f0 = dsp->xlt_fq*_s_base - dsp->Df*_s_base/(double)dsp->sr_base; - z = dsp->decMbuf[j] * cexp(f0*2*M_PI*I); + z = dsp->decMbuf[j] * cexp(f0*_2PI*I); } else { - z = dsp->decMbuf[j] * dsp->ex[dsp->sample_dec % dsp->lut_len]; + z = dsp->decMbuf[j] * dsp->ex[dsp->sample_decM]; } - dsp->decXbuffer[dsp->sample_dec % dsp->dectaps] = z; - dsp->sample_dec += 1; - if (dsp->sample_dec == s_reset) dsp->sample_dec = 0; + dsp->sample_decM += 1; if (dsp->sample_decM >= dsp->lut_len) dsp->sample_decM = 0; + + dsp->decXbuffer[dsp->sample_decX] = z; + dsp->sample_decX += 1; if (dsp->sample_decX >= dsp->dectaps) dsp->sample_decX = 0; } if (dsp->decM > 1) { - z = lowpass(dsp->decXbuffer, dsp->sample_dec, dsp->dectaps, ws_dec); + z = lowpass(dsp->decXbuffer, dsp->sample_decX, dsp->dectaps, ws_dec); } } else if ( f32read_csample(dsp, &z) == EOF ) return EOF; if (dsp->opt_dc && !dsp->opt_nolut) { - z *= cexp(-t*2*M_PI*dsp->Df*I); + z *= cexp(-t*_2PI*dsp->Df*I); } @@ -649,7 +652,7 @@ int init_buffers(dsp_t *dsp) { if (dsp->ex == NULL) return -1; for (n = 0; n < dsp->lut_len; n++) { t = f0*(double)n; - dsp->ex[n] = cexp(t*2*M_PI*I); + dsp->ex[n] = cexp(t*_2PI*I); } } @@ -1303,6 +1306,7 @@ int main(int argc, char *argv[]) { double bitlen; // sample_rate/BAUD_RATE int len; double f1, f2; + double complex iw1, iw2; int n; double t = 0.0; @@ -1503,6 +1507,8 @@ int main(int argc, char *argv[]) { f1 = 2200.0; // bit0: 2200Hz f2 = 1200.0; // bit1: 1200Hz + iw1 = _2PI*I*f1; + iw2 = _2PI*I*f2; N = 2*bitlen + 0.5; buffer = calloc( N+1, sizeof(float)); if (buffer == NULL) return -1; @@ -1523,13 +1529,13 @@ int main(int argc, char *argv[]) { x0 = buffer[(sample_count - n + N) % N]; // f1 - X0 = x0 * cexp(-tn*2*M_PI*f1*I); // alt - X = x * cexp(-t *2*M_PI*f1*I); // neu + X0 = x0 * cexp(-tn*iw1); // alt + X = x * cexp(-t *iw1); // neu F1sum += X - X0; // f2 - X0 = x0 * cexp(-tn*2*M_PI*f2*I); // alt - X = x * cexp(-t *2*M_PI*f2*I); // neu + X0 = x0 * cexp(-tn*iw2); // alt + X = x * cexp(-t *iw2); // neu F2sum += X - X0; xbit = cabs(F2sum) - cabs(F1sum); diff --git a/mk2a/mk2a1680mod.c b/mk2a/mk2a1680mod.c index 0933da3..cdf89cc 100644 --- a/mk2a/mk2a1680mod.c +++ b/mk2a/mk2a1680mod.c @@ -44,6 +44,7 @@ #ifndef M_PI #define M_PI (3.1415926535897932384626433832795) #endif +#define _2PI (6.2831853071795864769252867665590) #define LP_IQ 1 #define LP_FM 2 @@ -111,6 +112,9 @@ typedef struct { float complex *rot_iqbuf; float complex F1sum; float complex F2sum; + // + double complex iw1; + double complex iw2; // char *rawbits; @@ -138,8 +142,9 @@ typedef struct { int decM; ui32_t sr_base; ui32_t dectaps; - ui32_t sample_dec; + ui32_t sample_decX; ui32_t lut_len; + ui32_t sample_decM; float complex *decXbuffer; float complex *decMbuf; float complex *ex; // exp_lut @@ -303,14 +308,14 @@ static int dft_window(dft_t *dft, int w) { dft->win[n] = 1.0; break; case 1: // Hann - dft->win[n] = 0.5 * ( 1.0 - cos(2*M_PI*n/(float)(dft->N2-1)) ); + dft->win[n] = 0.5 * ( 1.0 - cos(_2PI*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(_2PI*n / (float)(dft->N2-1)); break ; case 3: // Blackmann dft->win[n] = 7938/18608.0 - - 9240/18608.0*cos(2*M_PI*n / (float)(dft->N2-1)) + - 9240/18608.0*cos(_2PI*n / (float)(dft->N2-1)) + 1430/18608.0*cos(4*M_PI*n / (float)(dft->N2-1)); break ; } @@ -485,7 +490,7 @@ static int findstr(char *buff, char *str, int pos) { } static -float read_wav_header(pcm_t *pcm, FILE *fp) { +int read_wav_header(pcm_t *pcm, FILE *fp) { char txt[4+1] = "\0\0\0\0"; unsigned char dat[4]; int byte, p=0; @@ -708,7 +713,7 @@ static int lowpass_init(float f, int taps, float **pws) { ws = (float*)calloc( 2*taps+1, sizeof(float)); if (ws == NULL) return -1; for (n = 0; n < taps; n++) { - w[n] = 7938/18608.0 - 9240/18608.0*cos(2*M_PI*n/(taps-1)) + 1430/18608.0*cos(4*M_PI*n/(taps-1)); // Blackmann + w[n] = 7938/18608.0 - 9240/18608.0*cos(_2PI*n/(taps-1)) + 1430/18608.0*cos(4*M_PI*n/(taps-1)); // Blackmann h[n] = 2*f*sinc(2*f*(n-(taps-1)/2)); ws[n] = w[n]*h[n]; norm += ws[n]; // 1-norm @@ -774,31 +779,30 @@ int f32buf_sample(dsp_t *dsp, int inv) { if (dsp->opt_iq) { if (dsp->opt_iq >= 5) { - ui32_t s_reset = dsp->dectaps*dsp->lut_len; int j; if ( f32read_cblock(dsp) < dsp->decM ) return EOF; for (j = 0; j < dsp->decM; j++) { if (dsp->opt_nolut) { double _s_base = (double)(_sample*dsp->decM+j); // dsp->sample_dec double f0 = dsp->xlt_fq*_s_base - dsp->Df*_s_base/(double)dsp->sr_base; - z = dsp->decMbuf[j] * cexp(f0*2*M_PI*I); + z = dsp->decMbuf[j] * cexp(f0*_2PI*I); } else { - z = dsp->decMbuf[j] * dsp->ex[dsp->sample_dec % dsp->lut_len]; + z = dsp->decMbuf[j] * dsp->ex[dsp->sample_decM]; } - dsp->decXbuffer[dsp->sample_dec % dsp->dectaps] = z; - dsp->sample_dec += 1; - if (dsp->sample_dec == s_reset) dsp->sample_dec = 0; + dsp->sample_decM += 1; if (dsp->sample_decM >= dsp->lut_len) dsp->sample_decM = 0; + dsp->decXbuffer[dsp->sample_decX] = z; + dsp->sample_decX += 1; if (dsp->sample_decX >= dsp->dectaps) dsp->sample_decX = 0; } if (dsp->decM > 1) { - z = lowpass(dsp->decXbuffer, dsp->sample_dec, dsp->dectaps, ws_dec); + z = lowpass(dsp->decXbuffer, dsp->sample_decX, dsp->dectaps, ws_dec); } } else if ( f32read_csample(dsp, &z) == EOF ) return EOF; if (dsp->opt_dc && !dsp->opt_nolut) { - z *= cexp(-t*2*M_PI*dsp->Df*I); + z *= cexp(-t*_2PI*dsp->Df*I); } @@ -821,8 +825,8 @@ int f32buf_sample(dsp_t *dsp, int inv) { if (0) { // not L band double xbit = 0.0; //float complex xi = cexp(+I*M_PI*dsp->h/dsp->sps); - double f1 = -dsp->h*dsp->sr/(2*dsp->sps); - double f2 = -f1; + //double f1 = -dsp->h*dsp->sr/(2*dsp->sps); + //double f2 = -f1; float complex X0 = 0; float complex X = 0; @@ -834,13 +838,13 @@ int f32buf_sample(dsp_t *dsp, int inv) { z0 = dsp->rot_iqbuf[(_sample-n + dsp->N_IQBUF) % dsp->N_IQBUF]; // f1 - X0 = z0 * cexp(-tn*2*M_PI*f1*I); // alt - X = z * cexp(-t *2*M_PI*f1*I); // neu + X0 = z0 * cexp(-tn*dsp->iw1); // alt + X = z * cexp(-t *dsp->iw1); // neu dsp->F1sum += X - X0; // f2 - X0 = z0 * cexp(-tn*2*M_PI*f2*I); // alt - X = z * cexp(-t *2*M_PI*f2*I); // neu + X0 = z0 * cexp(-tn*dsp->iw2); // alt + X = z * cexp(-t *dsp->iw2); // neu dsp->F2sum += X - X0; xbit = cabs(dsp->F2sum) - cabs(dsp->F1sum); @@ -851,8 +855,8 @@ int f32buf_sample(dsp_t *dsp, int inv) { double xbit = 0.0; float _sps = dsp->sps * decFM; //float complex xi = cexp(+I*M_PI*dsp->h/dsp->sps); - double f1 = -dsp->h*dsp->sr/(2*_sps); - double f2 = -f1; + //double f1 = -dsp->h*dsp->sr/(2*_sps); + //double f2 = -f1; float complex X1 = 0; float complex X2 = 0; @@ -866,8 +870,8 @@ int f32buf_sample(dsp_t *dsp, int inv) { { t = -n / (double)dsp->sr; z = dsp->rot_iqbuf[(_sample - n + dsp->N_IQBUF) % dsp->N_IQBUF]; - X1 += z*cexp(-t*2*M_PI*f1*I); - X2 += z*cexp(-t*2*M_PI*f2*I); + X1 += z*cexp(-t*dsp->iw1); + X2 += z*cexp(-t*dsp->iw2); } } @@ -1115,7 +1119,7 @@ int init_buffers_Lband(dsp_t *dsp) { float b0, b1, b2, b; float normMatch; double t; - double sigma = sqrt(log(2)) / (2*M_PI*dsp->BT); + double sigma = sqrt(log(2)) / (_2PI*dsp->BT); int p2 = 1; int K, L, M; @@ -1196,7 +1200,7 @@ int init_buffers_Lband(dsp_t *dsp) { if (dsp->ex == NULL) return -1; for (n = 0; n < dsp->lut_len; n++) { t = f0*(double)n; - dsp->ex[n] = cexp(t*2*M_PI*I); + dsp->ex[n] = cexp(t*_2PI*I); } } @@ -1400,6 +1404,14 @@ int init_buffers_Lband(dsp_t *dsp) { dsp->fm_buffer = (float *)calloc( M+1, sizeof(float)); if (dsp->fm_buffer == NULL) return -1; // dsp->bufs[] + if (dsp->opt_iq) + { + double f1 = -dsp->h*dsp->sr/(2.0*dsp->sps); + double f2 = -f1; + dsp->iw1 = _2PI*I*f1; + dsp->iw2 = _2PI*I*f2; + } + return K; } diff --git a/scan/dft_detect.c b/scan/dft_detect.c index fb857b4..b01e33d 100644 --- a/scan/dft_detect.c +++ b/scan/dft_detect.c @@ -206,12 +206,13 @@ static char *rawbits = NULL; // decimation static ui32_t dsp__sr_base; static ui32_t dsp__dectaps; -static ui32_t dsp__sample_dec; +static ui32_t dsp__sample_decX; static int dsp__decM = 1; static float complex *dsp__decXbuffer; static float complex *dsp__decMbuf; static float complex *dsp__ex; // exp_lut static ui32_t dsp__lut_len; +static ui32_t dsp__sample_decM; static float *ws_dec; static double dsp__xlt_fq = 0.0; @@ -675,15 +676,15 @@ static int f32buf_sample(FILE *fp, int inv) { if (option_iq) { if (option_iq == 5) { // baseband decimation - ui32_t s_reset = dsp__dectaps*dsp__lut_len; + //ui32_t s_reset = dsp__dectaps*dsp__lut_len; int j; if ( f32read_cblock(fp) < dsp__decM ) return EOF; for (j = 0; j < dsp__decM; j++) { - dsp__decXbuffer[dsp__sample_dec % dsp__dectaps] = dsp__decMbuf[j] * dsp__ex[dsp__sample_dec % dsp__lut_len]; - dsp__sample_dec += 1; - if (dsp__sample_dec == s_reset) dsp__sample_dec = 0; + dsp__decXbuffer[dsp__sample_decX] = dsp__decMbuf[j] * dsp__ex[dsp__sample_decM]; + dsp__sample_decM += 1; if (dsp__sample_decM >= dsp__lut_len) dsp__sample_decM = 0; + dsp__sample_decX += 1; if (dsp__sample_decX >= dsp__dectaps) dsp__sample_decX = 0; } - z = lowpass(dsp__decXbuffer, dsp__sample_dec, dsp__dectaps, ws_dec); + z = lowpass(dsp__decXbuffer, dsp__sample_decX, dsp__dectaps, ws_dec); } else if ( f32read_csample(fp, &z) == EOF ) return EOF;