From efc074dcfe6b40750582f283d28e08680d5bd240 Mon Sep 17 00:00:00 2001 From: drowe67 Date: Tue, 31 Jan 2017 10:18:53 +0000 Subject: [PATCH] converted eb/no to snt est and added squelch to 800xa git-svn-id: https://svn.code.sf.net/p/freetel/code@3012 01035d8c-6547-0410-b346-abe4f91aad63 --- codec2-dev/src/freedv_api.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/codec2-dev/src/freedv_api.c b/codec2-dev/src/freedv_api.c index 1364327f..2bf95f68 100644 --- a/codec2-dev/src/freedv_api.c +++ b/codec2-dev/src/freedv_api.c @@ -888,7 +888,10 @@ int freedv_comprx_fsk(struct freedv *f, COMP demod_in[], int *valid) { if(f->mode == FREEDV_MODE_2400A || f->mode == FREEDV_MODE_800XA){ fsk_demod(f->fsk,(uint8_t*)f->tx_bits,demod_in); f->nin = fsk_nin(f->fsk); - }else{ + float EbNodB = f->fsk->stats->snr_est; /* fsk demod actually estimates Eb/No */ + f->snr_est = EbNodB + 10.0*log10f(800.0/3000.0); /* so convert to SNR Rb=800, noise B=3000 */ + //fprintf(stderr," %f %f\n", EbNodB, f->snr_est); + } else{ /* 2400B needs real input samples */ int n = fmfsk_nin(f->fmfsk); float demod_in_float[n]; @@ -921,6 +924,11 @@ int freedv_comprx_fsk(struct freedv *f, COMP demod_in[], int *valid) { f->sync = f->deframer->state; f->stats.sync = f->deframer->state; + if (f->squelch_en && (f->stats.snr_est < f->snr_squelch_thresh)) { + //fprintf(stderr,"squelch %f %f !\n", f->stats.snr_est, f->snr_squelch_thresh); + *valid = 0; + } + return f->n_speech_samples; } @@ -1587,6 +1595,8 @@ void freedv_get_modem_extended_stats(struct freedv *f, struct MODEM_STATS *stats if ((f->mode == FREEDV_MODE_2400A) || (f->mode == FREEDV_MODE_800XA)) { fsk_get_demod_stats(f->fsk, stats); + float EbNodB = stats->snr_est; /* fsk demod actually estimates Eb/No */ + stats->snr_est = EbNodB + 10.0*log10f(800.0/3000.0); /* so convert to SNR Rb=800, noise B=3000 */ } if (f->mode == FREEDV_MODE_2400B) { -- 2.25.1