From: drowe67 Date: Sun, 18 Jun 2017 19:59:06 +0000 (+0000) Subject: added rx_bits to checks, changes demod bit ordering but demod bits still not quite... X-Git-Url: http://git.whiteaudio.com/gitweb/?a=commitdiff_plain;h=88e73c308b09a6091215f43d6ee0b5c9c06f72c0;p=freetel-svn-tracking.git added rx_bits to checks, changes demod bit ordering but demod bits still not quite right git-svn-id: https://svn.code.sf.net/p/freetel/code@3214 01035d8c-6547-0410-b346-abe4f91aad63 --- diff --git a/codec2-dev/octave/tofdm.m b/codec2-dev/octave/tofdm.m index 3aec69d4..c1f43e61 100644 --- a/codec2-dev/octave/tofdm.m +++ b/codec2-dev/octave/tofdm.m @@ -6,7 +6,7 @@ Nframes = 3; -more off; +more off; format; ofdm_lib; autotest; @@ -41,7 +41,7 @@ nin = Nsamperframe+2*(M+Ncp); states.rxbuf(Nrxbuf-nin+1:Nrxbuf) = rx(prx:nin); prx += nin; -rxbuf_log = []; rxbuf_in_log = []; rx_sym_log = []; foff_hz_log = []; +rxbuf_log = []; rxbuf_in_log = []; rx_sym_log = []; foff_hz_log = []; rx_bits_log = []; states.timing_en = 0; states.foff_est_en = 1; @@ -62,7 +62,7 @@ for f=1:Nframes end prx += lnew; - [rx_bits_raw states aphase_est_pilot_log arx_np arx_amp] = ofdm_demod(states, rxbuf_in); + [rx_bits states aphase_est_pilot_log arx_np arx_amp] = ofdm_demod(states, rxbuf_in); % log some states for comparison to C @@ -70,13 +70,21 @@ for f=1:Nframes rxbuf_log = [rxbuf_log states.rxbuf]; rx_sym_log = [rx_sym_log; states.rx_sym]; foff_hz_log = [foff_hz_log; states.foff_est_hz]; + rx_bits_log = [rx_bits_log rx_bits]; + end % --------------------------------------------------------------------- % Run C version and plot Octave and C states and differences % --------------------------------------------------------------------- -system('/home/ssampson/testing/tofdm'); +% Override default path by setting path_to_tofdm = "/your/path/to/tofdm" + +if exist("path_to_tofdm", "var") == 0 + path_to_tofdm = "../build_linux/unittest/tofdm"; +end +system(path_to_tofdm) + load tofdm_out.txt; stem_sig_and_error(1, 111, tx_bits_log_c, tx_bits_log - tx_bits_log_c, 'tx bits', [1 length(tx_bits_log) -1.5 1.5]) @@ -95,6 +103,8 @@ stem_sig_and_error(5, 212, imag(rx_sym_log_c), imag(rx_sym_log - rx_sym_log_c), stem_sig_and_error(6, 111, foff_hz_log_c, (foff_hz_log - foff_hz_log_c), 'foff hz', [1 length(foff_hz_log_c) -1.5 1.5]) +stem_sig_and_error(7, 111, rx_bits_log_c, rx_bits_log - rx_bits_log_c, 'rx bits', [1 length(rx_bits_log) -1.5 1.5]) + % Run through checklist ----------------------------- check(W, W_c, 'W'); @@ -104,3 +114,4 @@ check(rxbuf_in_log, rxbuf_in_log_c, 'rxbuf in'); check(rxbuf_log, rxbuf_log_c, 'rxbuf'); check(rx_sym_log, rx_sym_log_c, 'rx_sym'); check(foff_hz_log, foff_hz_log_c, 'foff_est_hz'); +check(rx_bits_log, rx_bits_log_c, 'rx_bits'); diff --git a/codec2-dev/src/ofdm.c b/codec2-dev/src/ofdm.c index 3ec04c5e..52d0071f 100644 --- a/codec2-dev/src/ofdm.c +++ b/codec2-dev/src/ofdm.c @@ -630,8 +630,8 @@ void ofdm_demod(struct OFDM *ofdm, int *rx_bits, COMP *rxbuf_in) { rx_bits[bit_index++] = crealf(rx_corr) > 0.0f; } else if (OFDM_BPS == 2) { qpsk_demod(rx_corr, abit); - rx_bits[bit_index++] = abit[0]; rx_bits[bit_index++] = abit[1]; + rx_bits[bit_index++] = abit[0]; } } diff --git a/codec2-dev/unittest/tofdm.c b/codec2-dev/unittest/tofdm.c index 0f0edcd1..aca6609e 100644 --- a/codec2-dev/unittest/tofdm.c +++ b/codec2-dev/unittest/tofdm.c @@ -59,6 +59,7 @@ int main(int argc, char *argv[]) COMP rxbuf_log[OFDM_RXBUF*NFRAMES]; COMP rx_sym_log[(OFDM_NS + 3)*NFRAMES][OFDM_NC + 2]; float foff_hz_log[NFRAMES]; + int rx_bits_log[OFDM_BITSPERFRAME*NFRAMES]; FILE *fout; int f,i,j; @@ -107,6 +108,7 @@ int main(int argc, char *argv[]) /* disable estimators for initial testing */ + ofdm_set_verbose(ofdm, true); ofdm_set_timing_enable(ofdm, false); ofdm_set_foff_est_enable(ofdm, true); ofdm_set_phase_est_enable(ofdm, false); @@ -162,6 +164,8 @@ int main(int argc, char *argv[]) } foff_hz_log[f] = ofdm->foff_est_hz; + + memcpy(&rx_bits_log[OFDM_BITSPERFRAME*f], rx_bits, sizeof(rx_bits)); } /*---------------------------------------------------------*\ @@ -179,6 +183,7 @@ int main(int argc, char *argv[]) octave_save_complex(fout, "rxbuf_log_c", (COMP*)rxbuf_log, 1, OFDM_RXBUF*NFRAMES, OFDM_RXBUF*NFRAMES); octave_save_complex(fout, "rx_sym_log_c", (COMP*)rx_sym_log, (OFDM_NS + 3)*NFRAMES, OFDM_NC + 2, OFDM_NC + 2); octave_save_float(fout, "foff_hz_log_c", foff_hz_log, NFRAMES, 1, 1); + octave_save_int(fout, "rx_bits_log_c", rx_bits_log, 1, OFDM_BITSPERFRAME*NFRAMES); fclose(fout); ofdm_destroy(ofdm);