\r
% Uses the UW to determine when we have a full codeword ready for decoding\r
\r
-function found_uw = look_for_uw(mem_rx_symbols, mod_uw)\r
+function [found_uw corr] = look_for_uw(mem_rx_symbols, mod_uw)\r
sparse_mem_rx_symbols = mem_rx_symbols(find(mod_uw));\r
\r
% correlate with ref UW\r
\r
num = (mem_rx_symbols * mod_uw') .^ 2;\r
den = (sparse_mem_rx_symbols * sparse_mem_rx_symbols') * (mod_uw * mod_uw');\r
-\r
- found_uw = abs(num/(den+1E-6)) > 0.8;\r
+ \r
+ corr = abs(num/(den+1E-6));\r
+ found_uw = corr > 0.8;\r
endfunction\r
\r
\r
\r
% Start simulation\r
\r
+rand('state',1);\r
+\r
rate = 3/4; \r
framesize = 576; \r
\r
decoder_type = 0;\r
max_iterations = 100;\r
EsNo = 10;\r
+Eprob = 0.18;\r
\r
vocoderframesize = 52;\r
nvocoderframes = 8;\r
mod_codeword = zeros(1, code_param.code_bits_per_frame/2);\r
lmod_codeword = code_param.code_bits_per_frame/2;\r
\r
-for m=1:8\r
-\r
- % read in one modem frame at a time\r
+Terrs = 0; Ferrs = 0; Tbits = 0; Tframes = 0; nerr = [];\r
+corr = []; n = 0;\r
+sync_state = 0; sync_count = 0;\r
\r
- packedmodem = fread(fc,lpackedmodem,"uchar");\r
+[packedmodem, count] = fread(fc,lpackedmodem,"uchar");\r
+while (count == lpackedmodem)\r
+ n++;\r
unpackedmodem = unpackmsb(packedmodem);\r
\r
j = 1;\r
j += 1;\r
end\r
\r
+ erasures = rand(1,length(mod_unpackedmodem))<Eprob; \r
+ mod_unpackedmodem(erasures) = 0;\r
+\r
% keep buffer of one entire codeword\r
\r
mod_codeword(1:lmod_codeword-length(mod_unpackedmodem)) = mod_codeword(length(mod_unpackedmodem)+1:lmod_codeword);\r
mod_codeword(lmod_codeword-length(mod_unpackedmodem)+1:lmod_codeword) = mod_unpackedmodem;\r
\r
- uw_sync = look_for_uw(mod_codeword(1:length(mod_uw)), mod_uw);\r
+ [uw_sync corr(n)] = look_for_uw(mod_codeword(1:length(mod_uw)), mod_uw);\r
if (uw_sync)\r
+ sync_state = 1;\r
+ end\r
+\r
+ if (sync_state && (sync_count == 0))\r
+ Tframes++;\r
+\r
% force UW symbols as they are known (is this needed?)\r
\r
% LDPC decode\r
\r
error_positions = xor(vd, vd_rx);\r
Nerrs = sum(error_positions);\r
- if Nerrs>0, fprintf(1,'x'), else fprintf(1,'.'), end\r
+ if Nerrs>0, fprintf(1,'x'); Ferrs++; , else fprintf(1,'.'), end\r
+ Tbits += length(vd);\r
+ Terrs += Nerrs;\r
+ nerr(Tframes) = Nerrs;\r
\r
% save packed payload data to disk\r
end\r
-end\r
\r
-fprintf(1,'\n')\r
+ if (sync_state)\r
+ sync_count++;\r
+ if (sync_count == 8)\r
+ sync_count = 0;\r
+ end\r
+ end\r
+\r
+ % read in one modem frame at a time\r
+\r
+ [packedmodem, count] = fread(fc, lpackedmodem, "uchar");\r
+end\r
fclose(fc);\r
\r
+fprintf(1,"\nFrames: %d bits: %d errors: %d BER = %f FER = %f\n", Tframes, Tbits, Terrs, Terrs/Tbits, Ferrs/Tframes);\r
+subplot(211)\r
+plot(corr);\r
+subplot(212)\r
+plot(nerr);\r