void fm_demod(struct fm_state *fm) { int i, pcm; pcm = polar_discriminant(fm->signal[0], fm->signal[1], fm->pre_r, fm->pre_j); fm->signal2[0] = (int16_t)pcm; for (i = 2; i < (fm->signal_len); i += 2) { switch (fm->custom_atan) { case 0: pcm = polar_discriminant(fm->signal[i], fm->signal[i+1], fm->signal[i-2], fm->signal[i-1]); break; case 1: pcm = polar_disc_fast(fm->signal[i], fm->signal[i+1], fm->signal[i-2], fm->signal[i-1]); break; case 2: pcm = polar_disc_lut(fm->signal[i], fm->signal[i+1], fm->signal[i-2], fm->signal[i-1]); break; } fm->signal2[i/2] = (int16_t)pcm; } fm->pre_r = fm->signal[fm->signal_len - 2]; fm->pre_j = fm->signal[fm->signal_len - 1]; fm->signal2_len = fm->signal_len/2; }
void fm_demod(struct demod_state *fm) { int i, pcm = 0; int16_t *lp = fm->lowpassed; int16_t pr = fm->pre_r; int16_t pj = fm->pre_j; for (i = 0; i < (fm->lp_len-1); i += 2) { switch (fm->custom_atan) { case 0: pcm = polar_discriminant(lp[i], lp[i+1], pr, pj); break; case 1: pcm = polar_disc_fast(lp[i], lp[i+1], pr, pj); break; case 2: pcm = polar_disc_lut(lp[i], lp[i+1], pr, pj); break; case 3: pcm = esbensen(lp[i], lp[i+1], pr, pj); break; } pr = lp[i]; pj = lp[i+1]; fm->lowpassed[i/2] = (int16_t)pcm; } fm->pre_r = pr; fm->pre_j = pj; fm->lp_len = fm->lp_len / 2; }
void fm_demod(struct demod_state *fm) { int i, pcm; int16_t *lp = fm->lowpassed; pcm = polar_discriminant(lp[0], lp[1], fm->pre_r, fm->pre_j); fm->result[0] = (int16_t)pcm; for (i = 2; i < (fm->lp_len-1); i += 2) { switch (fm->custom_atan) { case 0: pcm = polar_discriminant(lp[i], lp[i+1], lp[i-2], lp[i-1]); break; case 1: pcm = polar_disc_fast(lp[i], lp[i+1], lp[i-2], lp[i-1]); break; case 2: pcm = polar_disc_lut(lp[i], lp[i+1], lp[i-2], lp[i-1]); break; } fm->result[i/2] = (int16_t)pcm; } fm->pre_r = lp[fm->lp_len - 2]; fm->pre_j = lp[fm->lp_len - 1]; fm->result_len = fm->lp_len/2; }
void demodulate(struct demod_state *d) { int i, pcm; int16_t *buf = d->buf; int16_t *result = d->result; pcm = polar_disc_fast(buf[0], buf[1], d->pre_r, d->pre_j); result[0] = (int16_t)pcm; for (i = 2; i < (d->buf_len-1); i += 2) { // add the other atan types? pcm = polar_disc_fast(buf[i], buf[i+1], buf[i-2], buf[i-1]); result[i/2] = (int16_t)pcm; } d->pre_r = buf[d->buf_len - 2]; d->pre_j = buf[d->buf_len - 1]; }
void fm_demod(struct fm_state *fm) { int i, pcm; pcm = polar_discriminant(fm->signal[0], fm->signal[1], fm->pre_r, fm->pre_j); fm->signal2[0] = (int16_t)pcm; for (i = 2; i < (fm->signal_len); i += 2) { if (fm->custom_atan) { pcm = polar_disc_fast(fm->signal[i], fm->signal[i+1], fm->signal[i-2], fm->signal[i-1]); } else { pcm = polar_discriminant(fm->signal[i], fm->signal[i+1], fm->signal[i-2], fm->signal[i-1]); } fm->signal2[i/2] = (int16_t)pcm; } fm->pre_r = fm->signal[fm->signal_len - 2]; fm->pre_j = fm->signal[fm->signal_len - 1]; }