Eb/No and SNR measurement on streaming version
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Tue, 13 Oct 2015 09:23:58 +0000 (09:23 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Tue, 13 Oct 2015 09:23:58 +0000 (09:23 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@2438 01035d8c-6547-0410-b346-abe4f91aad63

codec2-dev/octave/fsk_horus.m
codec2-dev/octave/fsk_horus_stream.m

index 8838bd22f249a126f2b6cf037e01e25f0b12f6e5..d076e19446324a14a5195d55953246bfcdf2c627 100644 (file)
@@ -262,7 +262,7 @@ function [rx_bits states] = fsk_horus_demod(states, sf)
   % Eb/No estimation
 
   x = abs(abs(f1_int_resample) - abs(f2_int_resample));
-  states.EbNodB = 20*log10(mean(x)/std(x));
+  states.EbNodB = 20*log10(1E-6+mean(x)/(1E-6+std(x)));
 endfunction
 
 
index 8610969b770e27c5bfebdffdc9acbb888243a915..6e94c28e6440d79cd630726732ca81589ff98197 100644 (file)
@@ -25,6 +25,8 @@ nin = states.nin;
 nfield = states.nfield;
 npad = states.npad;
 uw = states.uw;
+EbNo = 0;
+SNR = 0;
 
 rx = [];
 rx_bits_buf = [];
@@ -42,10 +44,12 @@ while c
     rx_bits_buf = [rx_bits_buf rx_bits];
     rx = rx(nin+1:length(rx));
     nin = states.nin;
+    EbNo = 0.9*EbNo + 0.1*states.EbNodB;
+    SNR = EbNo + 10*log10(states.Rs/3000);
     %printf("nin: %d length(rx): %d length(rx_bits_buf): %d \n", nin, length(rx), length(rx_bits_buf));
   endwhile
   f = (states.f1+states.f2)/2; shift = states.f2 - states.f1;
-  printf("max: %d f: %d shift %d bits: %d\r", max(s), f, shift, length(rx_bits_buf));
+  printf("max: %d f: %d fshift %d Eb/No: %3.1f SNR: %3.1f bits: %d\r", max(s), f, shift, EbNo, SNR, length(rx_bits_buf));
 
   % look for complete Horus frame, delimited by 2 unique words