freq shifter with Fs
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Sun, 26 Jul 2015 23:18:42 +0000 (23:18 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Sun, 26 Jul 2015 23:18:42 +0000 (23:18 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@2243 01035d8c-6547-0410-b346-abe4f91aad63

codec2-dev/src/codec2_cohpsk.h
codec2-dev/src/cohpsk.c
codec2-dev/src/cohpsk_internal.h

index c7879b86e6cf88752a4958de17f380cf2dfb1440..3731aad24717c3b7f6c3e9f47d36bedebec4f486 100644 (file)
@@ -56,5 +56,6 @@ void cohpsk_put_test_bits(struct COHPSK *coh, int *state, short error_pattern[],
                           int *bit_errors, float rx_bits_sd[]);
 int cohpsk_error_pattern_size(void);
 void cohpsk_set_frame(struct COHPSK *coh, int frame);
-
+void fdmdv_freq_shift_coh(COMP rx_fdm_fcorr[], COMP rx_fdm[], float foff, float Fs, 
+                          COMP *foff_phase_rect, int nin);
 #endif
index c89f9599865f181cef0e01741e11b622f5d455fb..502969ce16876d2a267b7c3833882fa28efed668 100644 (file)
@@ -247,10 +247,21 @@ void bits_to_qpsk_symbols(COMP tx_symb[][COHPSK_NC*ND], int tx_bits[], int nbits
         r++;
     }
     for(data_r=0; data_r<NSYMROW; data_r++, r++) {
+        
         for(c=0; c<COHPSK_NC; c++) {
             i = c*NSYMROW + data_r;
             bits = (tx_bits[2*i]&0x1)<<1 | (tx_bits[2*i+1]&0x1);          
             tx_symb[r][c] = fcmult(1.0/sqrtf(ND),qpsk_mod[bits]);
+
+            /* test code to see what happens when we attenuate one
+               carrier, this may happen in practice with tx SSB filter
+               ripple.  
+
+               if (c==5) { 
+                 COMP attn = {0.5,0.0};
+                 tx_symb[r][c] = cmult(tx_symb[r][c], attn);
+               }
+            */
         }
     }
     
@@ -789,15 +800,15 @@ void rx_filter_coh(COMP rx_filt[COHPSK_NC+1][P+1], int Nc, COMP rx_baseband[COHP
 
 \*---------------------------------------------------------------------------*/
 
-void fdmdv_freq_shift_coh(COMP rx_fdm_fcorr[], COMP rx_fdm[], float foff, 
+void fdmdv_freq_shift_coh(COMP rx_fdm_fcorr[], COMP rx_fdm[], float foff, float Fs, 
                           COMP *foff_phase_rect, int nin)
 {
     COMP  foff_rect;
     float mag;
     int   i;
 
-    foff_rect.real = cosf(2.0*PI*foff/COHPSK_FS);
-    foff_rect.imag = sinf(2.0*PI*foff/COHPSK_FS);
+    foff_rect.real = cosf(2.0*PI*foff/Fs);
+    foff_rect.imag = sinf(2.0*PI*foff/Fs);
     for(i=0; i<nin; i++) {
        *foff_phase_rect = cmult(*foff_phase_rect, foff_rect);
        rx_fdm_fcorr[i] = cmult(rx_fdm[i], *foff_phase_rect);
@@ -827,7 +838,7 @@ void rate_Fs_rx_processing(struct COHPSK *coh, COMP ch_symb[][COHPSK_NC*ND], COM
     rx_timing = 0;
 
     for (r=0; r<nsymb; r++) {
-        fdmdv_freq_shift_coh(rx_fdm_frame_bb, &ch_fdm_frame[ch_fdm_frame_index], -(*f_est), &fdmdv->fbb_phase_rx, nin);
+        fdmdv_freq_shift_coh(rx_fdm_frame_bb, &ch_fdm_frame[ch_fdm_frame_index], -(*f_est), COHPSK_FS, &fdmdv->fbb_phase_rx, nin);
         ch_fdm_frame_index += nin;
         fdm_downconvert_coh(rx_baseband, COHPSK_NC*ND, rx_fdm_frame_bb, fdmdv->phase_rx, fdmdv->freq, nin);
         rx_filter_coh(rx_filt, COHPSK_NC*ND, rx_baseband, coh->rx_filter_memory, nin);
index f099573fffa7e86859ce27f672655422b872b7e4..119d968043d70c2896472aa30ce09e201454ff86 100644 (file)
@@ -105,8 +105,6 @@ void rx_filter_coh(COMP rx_filt[COHPSK_NC+1][P+1], int Nc, COMP rx_baseband[COHP
 void frame_sync_fine_freq_est(struct COHPSK *coh, COMP ch_symb[][COHPSK_NC*COHPSK_ND], int sync, int *next_sync);
 void fine_freq_correct(struct COHPSK *coh, int sync, int next_sync);
 int sync_state_machine(struct COHPSK *coh, int sync, int next_sync);
-void fdmdv_freq_shift_coh(COMP rx_fdm_fcorr[], COMP rx_fdm[], float foff, 
-                          COMP *foff_phase_rect, int nin);
 int cohpsk_fs_offset(COMP out[], COMP in[], int n, float sample_rate_ppm);
 
 #endif