% Append to our memory
[m n] = size(rx_bits);
- f.rx_test_bits_mem(1:f.Ntest_bits-n) = freedv.rx_test_bits_mem(n+1:f.Ntest_bits);
+ f.rx_test_bits_mem(1:f.Ntest_bits-n) = f.rx_test_bits_mem(n+1:f.Ntest_bits);
f.rx_test_bits_mem(f.Ntest_bits-n+1:f.Ntest_bits) = rx_bits;
% see how many bit errors we get when checked against test sequence
% Version 2
%
-function fdmdv_demod_c(dumpfilename, bits, NumCarriers)
+function fdmdv_demod_c(dumpfilename, bits)
fdmdv; % include modem code
-
+ f = fdmdv_init;
+ Nc = f.Nc; Nb = f.Nb; Rs = f.Rs; M = f.M; Fs = f.Fs;
+ test_bits = f.test_bits;
+
frames = bits/(Nc*Nb);
load(dumpfilename);
bits_per_frame = Nc*Nb;
- for f=1:frames
+ for fr=1:frames
- rx_bits = rx_bits_log_c((f-1)*bits_per_frame+1:f*bits_per_frame);
+ rx_bits = rx_bits_log_c((fr-1)*bits_per_frame+1:fr*bits_per_frame);
% count bit errors if we find a test frame
- [test_frame_sync bit_errors] = put_test_bits(test_bits, rx_bits);
+ [test_frame_sync bit_errors error_pattern f] = put_test_bits(f, test_bits, rx_bits);
if (test_frame_sync == 1)
total_bit_errors = total_bit_errors + bit_errors;
- total_bits = total_bits + Ntest_bits;
- bit_errors_log = [bit_errors_log bit_errors/Ntest_bits];
+ total_bits = total_bits + f.Ntest_bits;
+ bit_errors_log = [bit_errors_log bit_errors/f.Ntest_bits];
else
bit_errors_log = [bit_errors_log 0];
end
xt1 = (1:b)/Fs;
plot(xt1, rx_fdm_log_c(1:b));
title('Rx FDM Signal');
- subplot(212)
- spec(rx_fdm_log_c(1:b),8000);
+ subplot(212);
+ plot_specgram(rx_fdm_log_c(1:b), 8000);
title('FDM Rx Spectrogram');
figure(4)
end
+ printf("Raw BER..: %5.4f Tbits: %5d Terrs: %5d\n", Terrs/(Tbits+1E-12), Tbits, Terrs);
printf("Coded BER: %5.4f Tbits: %5d Terrs: %5d\n", Terrs_coded/(Tbits_coded+1E-12), Tbits_coded, Terrs_coded);
printf("Codec PER: %5.4f Tpkts: %5d Terrs: %5d\n", Tpacketerrs/(Tpackets+1E-12), Tpackets, Tpacketerrs);
- printf("Raw BER..: %5.4f Tbits: %5d Terrs: %5d\n", Terrs/(Tbits+1E-12), Tbits, Terrs);
figure(1); clf;
plot(rx_np_log,'+');
%
% As the name suggests.....
-function S = plot_specgram(x)
-
- Fs = 8000;
+function S = plot_specgram(x, Fs = 8000)
step = fix(20*Fs/1000); # one spectral slice every 5 ms
window = fix(160*Fs/1000); # 40 ms data window