From: drowe67 Date: Mon, 30 Dec 2013 23:36:11 +0000 (+0000) Subject: improvements to LDPC dec sync state machine X-Git-Url: http://git.whiteaudio.com/gitweb/?a=commitdiff_plain;h=280f622cf49a4e182d745f2d2c959e6a98af4019;p=freetel-svn-tracking.git improvements to LDPC dec sync state machine git-svn-id: https://svn.code.sf.net/p/freetel/code@1350 01035d8c-6547-0410-b346-abe4f91aad63 --- diff --git a/codec2-dev/octave/ldpc.m b/codec2-dev/octave/ldpc.m index 917b7efa..2e9cf125 100644 --- a/codec2-dev/octave/ldpc.m +++ b/codec2-dev/octave/ldpc.m @@ -102,15 +102,16 @@ endfunction % Uses the UW to determine when we have a full codeword ready for decoding -function found_uw = look_for_uw(mem_rx_symbols, mod_uw) +function [found_uw corr] = look_for_uw(mem_rx_symbols, mod_uw) sparse_mem_rx_symbols = mem_rx_symbols(find(mod_uw)); % correlate with ref UW num = (mem_rx_symbols * mod_uw') .^ 2; den = (sparse_mem_rx_symbols * sparse_mem_rx_symbols') * (mod_uw * mod_uw'); - - found_uw = abs(num/(den+1E-6)) > 0.8; + + corr = abs(num/(den+1E-6)); + found_uw = corr > 0.8; endfunction diff --git a/codec2-dev/octave/ldpcenc.m b/codec2-dev/octave/ldpcenc.m index 9d7dde0b..d32cc7da 100644 --- a/codec2-dev/octave/ldpcenc.m +++ b/codec2-dev/octave/ldpcenc.m @@ -17,6 +17,8 @@ ldpc; % Start simulation +rand('state',1); + rate = 3/4; framesize = 576; @@ -28,6 +30,7 @@ demod_type = 0; decoder_type = 0; max_iterations = 100; EsNo = 10; +Eprob = 0.18; vocoderframesize = 52; nvocoderframes = 8; @@ -72,11 +75,13 @@ lpackedmodem = 72/8; mod_codeword = zeros(1, code_param.code_bits_per_frame/2); lmod_codeword = code_param.code_bits_per_frame/2; -for m=1:8 - - % read in one modem frame at a time +Terrs = 0; Ferrs = 0; Tbits = 0; Tframes = 0; nerr = []; +corr = []; n = 0; +sync_state = 0; sync_count = 0; - packedmodem = fread(fc,lpackedmodem,"uchar"); +[packedmodem, count] = fread(fc,lpackedmodem,"uchar"); +while (count == lpackedmodem) + n++; unpackedmodem = unpackmsb(packedmodem); j = 1; @@ -85,13 +90,22 @@ for m=1:8 j += 1; end + erasures = rand(1,length(mod_unpackedmodem))0, fprintf(1,'x'), else fprintf(1,'.'), end + if Nerrs>0, fprintf(1,'x'); Ferrs++; , else fprintf(1,'.'), end + Tbits += length(vd); + Terrs += Nerrs; + nerr(Tframes) = Nerrs; % save packed payload data to disk end -end -fprintf(1,'\n') + if (sync_state) + sync_count++; + if (sync_count == 8) + sync_count = 0; + end + end + + % read in one modem frame at a time + + [packedmodem, count] = fread(fc, lpackedmodem, "uchar"); +end fclose(fc); +fprintf(1,"\nFrames: %d bits: %d errors: %d BER = %f FER = %f\n", Tframes, Tbits, Terrs, Terrs/Tbits, Ferrs/Tframes); +subplot(211) +plot(corr); +subplot(212) +plot(nerr);