First pass at adding 'burst' mode to TDMA; currently only disables timing offset...
authorbaobrien <baobrien@01035d8c-6547-0410-b346-abe4f91aad63>
Sun, 10 Sep 2017 20:59:47 +0000 (20:59 +0000)
committerbaobrien <baobrien@01035d8c-6547-0410-b346-abe4f91aad63>
Sun, 10 Sep 2017 20:59:47 +0000 (20:59 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@3363 01035d8c-6547-0410-b346-abe4f91aad63

codec2-dev/src/fsk.c
codec2-dev/src/fsk.h
codec2-dev/src/tdma.c

index bd97e3a1c2e31d55dd8256ba09a369b4ea291f90..aef4d98498a2a90a569c3c758093b6f91b7d687c 100644 (file)
@@ -152,6 +152,7 @@ struct FSK * fsk_create_hbr(int Fs, int Rs,int P,int M, int tx_f1, int tx_fs)
     fsk->Fs = Fs;
     fsk->Rs = Rs;
     fsk->Ts = Fs/Rs;
+    fsk->burst_mode = 0;
     fsk->N = fsk->Ts*nsyms;
     fsk->P = P;
     fsk->Nsym = nsyms;
@@ -255,6 +256,7 @@ struct FSK * fsk_create_hbr(int Fs, int Rs,int P,int M, int tx_f1, int tx_fs)
     return fsk;
 }
 
+
 #define HORUS_MIN 800
 #define HORUS_MAX 2500
 #define HORUS_MIN_SPACING 100
@@ -300,6 +302,7 @@ struct FSK * fsk_create(int Fs, int Rs,int M, int tx_f1, int tx_fs)
     fsk->Rs = Rs;
     fsk->Ts = Fs/Rs;
     fsk->N = Fs;
+    fsk->burst_mode = 0;
     fsk->P = horus_P;
     fsk->Nsym = fsk->N/fsk->Ts;
     fsk->Ndft = Ndft;
@@ -421,6 +424,17 @@ void fsk_set_nsym(struct FSK *fsk,int nsyms){
     
 }
 
+/* Set the FSK modem into burst demod mode */
+
+void fsk_enable_burst_mode(struct FSK *fsk,int nsyms){
+    fsk_set_nsym(fsk,nsyms);
+    //fsk->nstash = 0;
+    //fsk->Nmem = fsk->N;
+    fsk->nin = fsk->N;
+    fsk->burst_mode = 1;
+    //free(fsk->samp_old);
+    //fsk->samp_old = (COMP*) malloc(1);
+}
 
 void fsk_clear_estimators(struct FSK *fsk){
     int i;
@@ -826,12 +840,15 @@ void fsk2_demod(struct FSK *fsk, uint8_t rx_bits[], float rx_sd[], COMP fsk_in[]
     }
     
     /* Figure out how many samples are needed the next modem cycle */
-    if(norm_rx_timing > 0.25)
-        fsk->nin = N+Ts/2;
-    else if(norm_rx_timing < -0.25)
-        fsk->nin = N-Ts/2;
-    else
-        fsk->nin = N;
+    /* Unless we're in burst mode */
+    if(!fsk->burst_mode){
+        if(norm_rx_timing > 0.25)
+            fsk->nin = N+Ts/2;
+        else if(norm_rx_timing < -0.25)
+            fsk->nin = N-Ts/2;
+        else
+            fsk->nin = N;
+    }
     
     modem_probe_samp_f("t_norm_rx_timing",&(norm_rx_timing),1);
     modem_probe_samp_i("t_nin",&(fsk->nin),1);
index d20b665414a94251f8d644eba0366de99169bac0..33a394ecbfcc5551aef079f47aa93aeaed23edb5 100644 (file)
@@ -41,8 +41,8 @@
 #define FSK_SCALE 16383
 
 struct FSK {
-    /*  Static parameters set up by fsk_init */\r
-    int Ndft;               /* buffer size for freq offset est fft */\r
+    /*  Static parameters set up by fsk_init */
+    int Ndft;               /* buffer size for freq offset est fft */
     int Fs;                 /* sample freq */
     int N;                  /* processing buffer size */
     int Rs;                 /* symbol rate */
@@ -82,6 +82,7 @@ struct FSK {
     
     /*  Parameters used by mod/demod and driving code */
     int nin;                /* Number of samples to feed the next demod cycle */
+    int burst_mode;         /* enables/disables 'burst' mode */
     
     /*  modem statistic struct */
     struct MODEM_STATS *stats;
index 50d400ff31ee97b166dc1321170bcc8b4b4dff5b..78321843715c288162207e4246ecd97f41823a7a 100644 (file)
@@ -102,7 +102,7 @@ u32 tdma_get_N(struct TDMA_MODEM * tdma){
 }
 
 void tdma_rx_no_sync(struct TDMA_MODEM * tdma, COMP * samps, u64 timestamp){
-    mode = tdma->settings;
+    struct TDMA_MODE_SETTINGS mode = tdma->settings;
     u32 Rs = mode.sym_rate;
     u32 Fs = mode.samp_rate;
     u32 slot_size = mode.slot_size;