SNR being reported correctly
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Tue, 1 May 2018 01:40:04 +0000 (01:40 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Tue, 1 May 2018 01:40:04 +0000 (01:40 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@3544 01035d8c-6547-0410-b346-abe4f91aad63

codec2-dev/src/freedv_api.c
codec2-dev/src/freedv_rx.c
codec2-dev/src/modem_stats.h
codec2-dev/src/ofdm.c

index 7d4b03529993838ec452db54cf4d6eee54cb317b..bb1a358d9df41fdaadf89852a1df0ed684ca9955 100644 (file)
@@ -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
 }
 
index e7444ed6ca8964afcef6fc111ee386f8ff6180b7..785e8e33c75ed0b34ed6bdf59b4ffab018a2fd05 100644 (file)
@@ -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;
 
index 5b5fa2a5f2b8ce9bd213853c7d90c9ece581a047..7df33224686cc09055eb50a987126df7945b134c 100644 (file)
@@ -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
index 18b0646ee6f1f99adc279cba8d2611e2d7a44058..beee48e16378db0a9e518ed5f6e14c43725929df 100644 (file)
@@ -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<OFDM_NC; c++) {
         for (r=0; r<OFDM_ROWSPERFRAME; r++) {