/* If modem is synced we can demodulate txt bits, these are
uninterleaved, uncoded QPSK symbols near the start of each
modem frame */
-
- short txt_bits[OFDM_NTXTBITS];
- int bits[2];
- int uw_offset = OFDM_NUWBITS/OFDM_BPS;
- for(i=0; i<OFDM_NTXTBITS/OFDM_BPS; i++) {
- complex float s = codeword_symbols[uw_offset+i].real + I*codeword_symbols[uw_offset+i].imag;
- qpsk_demod(s, bits);
- txt_bits[OFDM_BPS*i] = bits[1];
- txt_bits[OFDM_BPS*i+1] = bits[0];
- }
- for(k=0; k<OFDM_NTXTBITS; k++) {
- n_ascii = varicode_decode(&f->varicode_dec_states, &ascii_out, &txt_bits[k], 1, 1);
+ for(k=0, i=OFDM_NUWBITS; k<OFDM_NTXTBITS; k++,i++) {
+ //fprintf(stderr, "txt_bits[%d] = %d\n", k, rx_bits[i]);
+ short arx_bit = rx_bits[i];
+ n_ascii = varicode_decode(&f->varicode_dec_states, &ascii_out, &arx_bit, 1, 1);
if (n_ascii && (f->freedv_put_next_rx_char != NULL)) {
(*f->freedv_put_next_rx_char)(f->callback_state, ascii_out);
}
struct my_callback_state* pstate = (struct my_callback_state*)callback_state;
char c = *pstate->ptx_str++;
+ //fprintf(stderr, "my_get_next_tx_char: %c\n", c);
+
if (*pstate->ptx_str == 0) {
pstate->ptx_str = pstate->tx_str;
}
}
gp_interleave_comp(coded_symbols_inter, coded_symbols, interleave_frames*coded_syms_per_frame);
for (j=0; j<interleave_frames; j++) {
+ /* todo: we don't need to build modulated UW every time, just txt bits */
+ build_modulated_uw(ofdm, tx_symbols, &txt_bits[OFDM_NTXTBITS*j]);
for(i=0; i<coded_syms_per_frame; i++) {
- /* todo: we don't need to build modulated UW every time, just txt bits */
- build_modulated_uw(ofdm, tx_symbols, &txt_bits[OFDM_NTXTBITS*j]);
tx_symbols[(OFDM_NUWBITS+OFDM_NTXTBITS)/OFDM_BPS+i] = coded_symbols_inter[j*coded_syms_per_frame+i].real
+ I * coded_symbols_inter[j*coded_syms_per_frame+i].imag;
}
/* clear txt bits for now, they can be added in later */
for(j=0; j<OFDM_NTXTBITS; j++,i++) {
uw_txt_bits[i] = txt_bits[j];
+ //fprintf(stderr, "txt_bits[%d] = %d\n", j, txt_bits[j]);
}
qpsk_modulate_frame(uw_txt_syms, uw_txt_bits, (OFDM_NUWBITS+OFDM_NTXTBITS)/OFDM_BPS);
for(i=0; i<(OFDM_NUWBITS+OFDM_NTXTBITS)/OFDM_BPS; i++) {