Nframes = 3;
-more off;
+more off; format;
ofdm_lib;
autotest;
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;
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
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])
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');
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');
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;
/* 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);
}
foff_hz_log[f] = ofdm->foff_est_hz;
+
+ memcpy(&rx_bits_log[OFDM_BITSPERFRAME*f], rx_bits, sizeof(rx_bits));
}
/*---------------------------------------------------------*\
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);