82 lines
3.0 KiB
Matlab
82 lines
3.0 KiB
Matlab
% 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
|
|
|
|
|
|
|
|
|
|
|