normalised fine freq error so it wont be dependant on rx levels
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Tue, 1 Jul 2014 04:35:29 +0000 (04:35 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Tue, 1 Jul 2014 04:35:29 +0000 (04:35 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@1721 01035d8c-6547-0410-b346-abe4f91aad63

codec2-dev/octave/fdmdv.m
codec2-dev/src/fdmdv.c

index a742dec85372155d7ead4945f76557a8b891ab38..9c67df4fb2562e44bd008fbabf3ebf57c0aa4969 100644 (file)
@@ -628,10 +628,10 @@ function [rx_bits sync_bit f_err phase_difference] = psk_to_bits(prev_rx_symbols
   phase_difference(Nc+1) = rx_symbols(Nc+1) * conj(prev_rx_symbols(Nc+1)) * norm;
   if (real(phase_difference(Nc+1)) < 0)
     sync_bit = 1;
-    f_err = imag(phase_difference(Nc+1));
+    f_err = imag(phase_difference(Nc+1))*norm;  % make f_err magnitude insensitive
   else
     sync_bit = 0;
-    f_err = -imag(phase_difference(Nc+1));
+    f_err = -imag(phase_difference(Nc+1))*norm;
   end
 
   % extra pi/4 rotation as we need for snr_update and scatter diagram
index cd488e9f567a7765c22b7110841220a0b0ff0b80..6e3e1b0562ae78b35a522a2143b3c8422a3ac8c9 100644 (file)
@@ -898,8 +898,7 @@ void rx_filter(COMP rx_filt[NC+1][P+1], int Nc, COMP rx_baseband[NC+1][M+M/P], C
 \*---------------------------------------------------------------------------*/
 
 /*
-TODO:
-  [ ] windback phase at init time, incl cconj
+   TODO: [ ] windback phase calculated once at init time
 */
 
 void down_convert_and_rx_filter(COMP rx_filt[NC+1][P+1], int Nc, COMP rx_fdm[], 
@@ -1134,11 +1133,11 @@ float qpsk_to_bits(int rx_bits[], int *sync_bit, int Nc, COMP phase_difference[]
     phase_difference[Nc] = cmult(rx_symbols[Nc], fcmult(norm, cconj(prev_rx_symbols[Nc])));
     if (phase_difference[Nc].real < 0) {
       *sync_bit = 1;
-      ferr = phase_difference[Nc].imag;
+      ferr = phase_difference[Nc].imag*norm;    /* make f_err magnitude insensitive */
     }
     else {
       *sync_bit = 0;
-      ferr = -phase_difference[Nc].imag;
+      ferr = -phase_difference[Nc].imag*norm;
     }
     
     /* pilot carrier gets an extra pi/4 rotation to make it consistent