converted eb/no to snt est and added squelch to 800xa
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Tue, 31 Jan 2017 10:18:53 +0000 (10:18 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Tue, 31 Jan 2017 10:18:53 +0000 (10:18 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@3012 01035d8c-6547-0410-b346-abe4f91aad63

codec2-dev/src/freedv_api.c

index 1364327fea7bef7d24b0b370c593624ba9bc3ba4..2bf95f68447ae1db266422ec10a0f3f56cf15a3a 100644 (file)
@@ -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) {