From e11552cf2ca31e26fec92c15d637e815e016b3be Mon Sep 17 00:00:00 2001 From: drowe67 Date: Tue, 1 May 2018 01:40:04 +0000 Subject: [PATCH] SNR being reported correctly git-svn-id: https://svn.code.sf.net/p/freetel/code@3544 01035d8c-6547-0410-b346-abe4f91aad63 --- codec2-dev/src/freedv_api.c | 20 ++++++++++++-------- codec2-dev/src/freedv_rx.c | 2 +- codec2-dev/src/modem_stats.h | 2 +- codec2-dev/src/ofdm.c | 6 +++--- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/codec2-dev/src/freedv_api.c b/codec2-dev/src/freedv_api.c index 7d4b0352..bb1a358d 100644 --- a/codec2-dev/src/freedv_api.c +++ b/codec2-dev/src/freedv_api.c @@ -1687,10 +1687,10 @@ static int freedv_comprx_700d(struct freedv *f, COMP demod_in_8kHz[], int *valid if ((strcmp(ofdm->sync_state,"synced") == 0) || (strcmp(ofdm->sync_state,"trial") == 0) ) { ofdm_demod(ofdm, rx_bits, rxbuf_in); - fdmdv_get_demod_stats(f->fdmdv, &f->stats); f->sync = 1; + ofdm_get_demod_stats(f->ofdm, &f->stats); f->snr_est = f->stats.snr_est; - + assert((OFDM_NUWBITS+OFDM_NTXTBITS+coded_bits_per_frame) == OFDM_BITSPERFRAME); /* now we need to buffer for de-interleaving -------------------------------------*/ @@ -1816,15 +1816,17 @@ static int freedv_comprx_700d(struct freedv *f, COMP demod_in_8kHz[], int *valid /* no valid FreeDV signal - squelch output */ - - int sync = !strcmp(ofdm->sync_state_interleaver,"synced") || !strcmp(ofdm->sync_state_interleaver,"synced"); + + int sync = !strcmp(ofdm->sync_state,"synced") || !strcmp(ofdm->sync_state,"trial"); if (!sync) { - if (f->squelch_en) { - *valid = 0; - } + if (f->squelch_en) { + *valid = 0; + } + f->snr_est = 0.0; f->snr_est = 0.0; } - fprintf(stderr, "sync: %d valid: %d SNR: %3.2f\n", sync, *valid, f->snr_est); + + //fprintf(stderr, "sync: %d valid: %d snr: %3.2f\n", f->sync, *valid, f->snr_est); return nout; } @@ -2262,9 +2264,11 @@ void freedv_get_modem_extended_stats(struct freedv *f, struct MODEM_STATS *stats if ((f->mode == FREEDV_MODE_700) || (f->mode == FREEDV_MODE_700B) || (f->mode == FREEDV_MODE_700C)) { cohpsk_get_demod_stats(f->cohpsk, stats); } + if (f->mode == FREEDV_MODE_700D) { ofdm_get_demod_stats(f->ofdm, stats); } + #endif } diff --git a/codec2-dev/src/freedv_rx.c b/codec2-dev/src/freedv_rx.c index e7444ed6..785e8e33 100644 --- a/codec2-dev/src/freedv_rx.c +++ b/codec2-dev/src/freedv_rx.c @@ -233,7 +233,7 @@ int main(int argc, char *argv[]) { fwrite(speech_out, sizeof(short), nout, fout); freedv_get_modem_stats(freedv, &sync, &snr_est); - freedv_get_modem_extended_stats(freedv,&stats); + freedv_get_modem_extended_stats(freedv, &stats); int total_bit_errors = freedv_get_total_bit_errors(freedv); clock_offset = stats.clock_offset; diff --git a/codec2-dev/src/modem_stats.h b/codec2-dev/src/modem_stats.h index 5b5fa2a5..7df33224 100644 --- a/codec2-dev/src/modem_stats.h +++ b/codec2-dev/src/modem_stats.h @@ -36,7 +36,7 @@ #include "kiss_fft.h" #define MODEM_STATS_NC_MAX 20 -#define MODEM_STATS_NR_MAX 10 +#define MODEM_STATS_NR_MAX 8 #define MODEM_STATS_ET_MAX 8 #define MODEM_STATS_NSPEC 512 #define MODEM_STATS_MAX_F_HZ 4000 diff --git a/codec2-dev/src/ofdm.c b/codec2-dev/src/ofdm.c index 18b0646e..beee48e1 100644 --- a/codec2-dev/src/ofdm.c +++ b/codec2-dev/src/ofdm.c @@ -1157,13 +1157,13 @@ void ofdm_get_demod_stats(struct OFDM *ofdm, struct MODEM_STATS *stats) float snr_est = 10*log10((ofdm->sig_var/ofdm->noise_var)*OFDM_NC*OFDM_RS/3000); stats->snr_est = 0.9*stats->snr_est + 0.1*snr_est; - - stats->sync = !strcpy(ofdm->sync_state, "synced") || !strcpy(ofdm->sync_state, "trial"); + stats->sync = !strcmp(ofdm->sync_state, "synced") || !strcmp(ofdm->sync_state, "trial"); + //fprintf(stderr, "sync: %d %s\n", stats->sync, ofdm->sync_state); stats->foff = ofdm->foff_est_hz; stats->rx_timing = ofdm->timing_est; stats->clock_offset = 0.0; /* TODO: work out sample clock offset */ - assert(OFDM_ROWSPERFRAME <= MODEM_STATS_NR_MAX); + assert(OFDM_ROWSPERFRAME < MODEM_STATS_NR_MAX); stats->nr = OFDM_ROWSPERFRAME; for(c=0; c