separate enc/mod/dec
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Tue, 31 Dec 2013 03:05:19 +0000 (03:05 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Tue, 31 Dec 2013 03:05:19 +0000 (03:05 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@1351 01035d8c-6547-0410-b346-abe4f91aad63

codec2-dev/octave/ldpcenc.m

index d32cc7da8b41bfcace0d5dd5866ca34af64899d2..4a1e28f46f78446174d9bd0e8659ea9b64c59638 100644 (file)
@@ -30,22 +30,23 @@ demod_type = 0;
 decoder_type = 0;\r
 max_iterations = 100;\r
 EsNo = 10;\r
-Eprob = 0.18;\r
+Eprob = 0.15;\r
 \r
 vocoderframesize = 52;\r
 nvocoderframes = 8;\r
+nbitspermodemframe = 72;\r
 \r
 code_param = ldpc_init(rate, framesize, modulation, mod_order, mapping);\r
 \r
 data = [];\r
 r = []; \r
 \r
-% Encode a bunch of frames\r
+% Encoder: Generate simulated vocoder data, insert UW, and LPDC encode ---------------\r
 \r
 Nframes = 100;\r
 uw = [1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0];\r
 \r
-% repeat same codeword frame for now to ease testing\r
+% repeat same simulated vocoder data to ease testing\r
 \r
 vd = round( rand( 1, vocoderframesize*nvocoderframes) );\r
 d  = insert_uw(vd, uw);\r
@@ -65,32 +66,56 @@ fclose(fc);
 %printf("framesize: %d data_bits_per_frame: %d code_bits_per_frame: %d\n", ...\r
 %        framesize, code_param.data_bits_per_frame,  code_param.code_bits_per_frame);\r
 \r
-% rx simulation (separate later)\r
+printf("Encoded %d LDPC frames\n", Nframes);\r
 \r
-mod_uw = build_mod_uw(uw, 2*length(vd)/length(uw));\r
+% Modulator: Modulate to QPSK symbols ------------------------------------------\r
 \r
 lpackedcodeword=length(packedcodeword);\r
 fc=fopen("codeword.bin","rb");\r
-lpackedmodem = 72/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
-Terrs = 0; Ferrs = 0; Tbits = 0; Tframes = 0; nerr = [];\r
-corr = []; n = 0;\r
-sync_state = 0; sync_count = 0;\r
+fm=fopen("modcodeword.bin","wb");\r
+lpackedmodem = nbitspermodemframe/8;\r
+n = 0;\r
 \r
 [packedmodem, count] = fread(fc,lpackedmodem,"uchar");\r
 while (count == lpackedmodem)\r
     n++;\r
     unpackedmodem = unpackmsb(packedmodem);\r
 \r
-    j = 1;\r
+    ii = 1;\r
     for i=1:2:length(unpackedmodem)\r
-        mod_unpackedmodem(j) = qpsk_mod(unpackedmodem(i:i+1));\r
-        j += 1;\r
+        mod_unpackedmodem(ii) = qpsk_mod(unpackedmodem(i:i+1));\r
+        mod_unpackedmodem_float32(i) = real(mod_unpackedmodem(ii));\r
+        mod_unpackedmodem_float32(i+1) = imag(mod_unpackedmodem(ii));\r
+        ii += 1;\r
     end\r
 \r
-    erasures = rand(1,length(mod_unpackedmodem))<Eprob; \r
+    fwrite(fm, mod_unpackedmodem_float32, "float32");\r
+    [packedmodem, count] = fread(fc,lpackedmodem,"uchar");\r
+end\r
+fclose(fc);\r
+fclose(fm);\r
+printf("Modulated %d modem frames\n", n);\r
+\r
+\r
+% Decoder: Sync with LDPC frames, LDPC decode, strip off UW, measure BER -------\r
+\r
+fm=fopen("modcodeword.bin","rb");\r
+\r
+mod_uw = build_mod_uw(uw, 2*length(vd)/length(uw));\r
+\r
+mod_codeword = zeros(1, code_param.code_bits_per_frame/2);\r
+lmod_codeword = code_param.code_bits_per_frame/2;\r
+\r
+Terrs = 0; Ferrs = 0; Tbits = 0; Tframes = 0; nerr = [];\r
+corr = []; n = 0;\r
+sync_state = 0; sync_count = 0;\r
+\r
+[mod_unpackedmodem_float32, count] = fread(fm,nbitspermodemframe, "float32");\r
+while (count == nbitspermodemframe)\r
+    n++;\r
+\r
+    mod_unpackedmodem = mod_unpackedmodem_float32(1:2:nbitspermodemframe) + j*mod_unpackedmodem_float32(2:2:nbitspermodemframe);\r
+    erasures = rand(1,length(mod_unpackedmodem)) < Eprob; \r
     mod_unpackedmodem(erasures) = 0;\r
 \r
     % keep buffer of one entire codeword\r
@@ -135,11 +160,10 @@ while (count == lpackedmodem)
         end\r
     end\r
 \r
-    % read in one modem frame at a time\r
+    % read in one modulated modem frame at a time\r
 \r
-    [packedmodem, count] = fread(fc, lpackedmodem, "uchar");\r
+    [mod_unpackedmodem_float32, count] = fread(fm, nbitspermodemframe, "float32");\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