From f1b4a27c6a10fd87a42cbc43c4c619007e537bdd Mon Sep 17 00:00:00 2001 From: baobrien Date: Sun, 10 Sep 2017 20:59:47 +0000 Subject: [PATCH] First pass at adding 'burst' mode to TDMA; currently only disables timing offset compensation git-svn-id: https://svn.code.sf.net/p/freetel/code@3363 01035d8c-6547-0410-b346-abe4f91aad63 --- codec2-dev/src/fsk.c | 29 +++++++++++++++++++++++------ codec2-dev/src/fsk.h | 5 +++-- codec2-dev/src/tdma.c | 2 +- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/codec2-dev/src/fsk.c b/codec2-dev/src/fsk.c index bd97e3a1..aef4d984 100644 --- a/codec2-dev/src/fsk.c +++ b/codec2-dev/src/fsk.c @@ -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); diff --git a/codec2-dev/src/fsk.h b/codec2-dev/src/fsk.h index d20b6654..33a394ec 100644 --- a/codec2-dev/src/fsk.h +++ b/codec2-dev/src/fsk.h @@ -41,8 +41,8 @@ #define FSK_SCALE 16383 struct FSK { - /* Static parameters set up by fsk_init */ - int Ndft; /* buffer size for freq offset est fft */ + /* 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; diff --git a/codec2-dev/src/tdma.c b/codec2-dev/src/tdma.c index 50d400ff..78321843 100644 --- a/codec2-dev/src/tdma.c +++ b/codec2-dev/src/tdma.c @@ -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; -- 2.25.1