diff options
| author | Marin Ivanov <[email protected]> | 2025-07-25 10:17:14 +0300 |
|---|---|---|
| committer | Marin Ivanov <[email protected]> | 2026-01-18 20:09:26 +0200 |
| commit | 0168586485e6310c598713c911b1dec5618d61a1 (patch) | |
| tree | 6aabc2a12ef8fef70683f5389bea00f948015f77 /octave/tofdm_acq.m | |
* codec2 cut-down version 1.2.0
* Remove codebook and generation of sources
* remove c2dec c2enc binaries
* prepare for emscripten
Diffstat (limited to 'octave/tofdm_acq.m')
| -rw-r--r-- | octave/tofdm_acq.m | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/octave/tofdm_acq.m b/octave/tofdm_acq.m new file mode 100644 index 0000000..3c26bb3 --- /dev/null +++ b/octave/tofdm_acq.m @@ -0,0 +1,81 @@ +% tofdm_acq.m +% Octave <-> C test for OFDM modem acquisition + +ofdm_lib; +autotest; +randn('seed',1); +pkg load signal; +more off; + +% generate a file of transmit samples +filename = "test_datac0.raw"; +ofdm_tx(filename,"datac0",1,10,"awgn","bursts",1, "txclip"); + +printf("\nRunning Octave version....\n"); +config = ofdm_init_mode("datac0"); +states = ofdm_init(config); +states.verbose = 1; states.data_mode = "burst"; states.postambledetectoren = 1; +states.timing_mx_thresh = 0.15; + +ofdm_load_const; +frx=fopen(filename,"rb"); +nin = states.nin; rxbufst = states.rxbufst; +rx = fread(frx, nin, "short")/(states.amp_scale/2); +f = 0; +timing_mx_log = []; ct_est_log = []; foff_est_log = []; timing_valid_log = []; nin_log = []; + +while(length(rx) == nin) + printf(" %2d ",f++); + [timing_valid states] = ofdm_sync_search(states, rx); + timing_mx_log = [timing_mx_log states.timing_mx]; + ct_est_log = [ct_est_log states.ct_est]; + foff_est_log = [foff_est_log states.foff_est_hz]; + timing_valid_log = [timing_valid_log states.timing_valid]; + nin_log = [nin_log states.nin]; + + % reset these to defaults, as they get modified when timing_valid asserted + states.nin = nin; + states.rxbufst = rxbufst; + + rx = fread(frx, nin, "short")/(states.amp_scale/2); + printf("\n"); +end +fclose(frx); + +printf("\nRunning C version....\n"); +path_to_unittest = "../build_linux/unittest"; +if getenv("PATH_TO_UNITTEST") + path_to_unittest = getenv("PATH_TO_UNITTEST") + printf("setting path from env var to %s\n", path_to_unittest); +end +system(sprintf("%s/tofdm_acq %s", path_to_unittest, filename)); +load tofdm_acq_out.txt; + +fg = 1; passes = 0; ntests = 0; + +tx_preamble = states.tx_preamble; +stem_sig_and_error(fg, 211, real(tx_preamble_c), real(tx_preamble_c - tx_preamble), 'tx preamble re') +stem_sig_and_error(fg++, 212, imag(tx_preamble_c), imag(tx_preamble_c - tx_preamble), 'tx preamble im') +passes += check(tx_preamble, tx_preamble_c, 'tx preamble', 0.1); ntests++; +tx_postamble = states.tx_postamble; +stem_sig_and_error(fg, 211, real(tx_postamble_c), real(tx_postamble_c - tx_postamble), 'tx postamble re') +stem_sig_and_error(fg++, 212, imag(tx_postamble_c), imag(tx_postamble_c - tx_postamble), 'tx postamble im') +passes += check(tx_postamble, tx_postamble_c, 'tx postamble', 0.1); ntests++; + +stem_sig_and_error(fg, 211, real(timing_mx_log_c), real(timing_mx_log_c - timing_mx_log), 'timing mx') +passes += check(timing_mx_log, timing_mx_log_c, 'timing_mx'); ntests++; +stem_sig_and_error(fg++, 212, real(ct_est_log_c), real(ct_est_log_c - ct_est_log), 'ct est') +passes += check(ct_est_log, ct_est_log_c, 'ct_est_mx'); ntests++; + +stem_sig_and_error(fg, 211, real(foff_est_log_c), real(foff_est_log_c - foff_est_log), 'foff est') +passes += check(foff_est_log, foff_est_log_c, 'foff_est'); ntests++; +stem_sig_and_error(fg++, 212, real(timing_valid_log_c), real(timing_valid_log_c - timing_valid_log), 'timing valid') +passes += check(timing_valid_log, timing_valid_log_c, 'timing_valid'); ntests++; +passes += check(nin_log, nin_log_c, 'nin'); ntests++; + +if passes == ntests printf("PASS\n"); else printf("FAIL\n"); end + + + + + |
