% decode_from_file() below, and can optionally generate include file for\r
% C version of decoder.\r
\r
-function data = simple_ut(c_include_file)\r
+function [data code_param] = simple_ut(c_include_file)\r
load('H2064_516_sparse.mat');\r
HRA = full(HRA); \r
max_iterations = 100;\r
error_positions = xor(detected_data(1:code_param.data_bits_per_frame), data);\r
Nerrs = sum(error_positions);\r
\r
- printf(" Nerrs = %d\n", Nerrs);\r
-\r
+ printf("Nerrs = %d\n", Nerrs);\r
end\r
\r
\r
end\r
\r
\r
+% Test C encoder\r
+\r
+function test_c_encoder\r
+ load('H2064_516_sparse.mat');\r
+ HRA = full(HRA); \r
+ max_iterations = 100;\r
+ decoder_type = 0;\r
+ EsNodB = 3;\r
+ mod_order = 2;\r
+ frames = 100;\r
+\r
+ EsNo = 10^(EsNodB/10);\r
+ variance = 1/(2*EsNo);\r
+\r
+ code_param = ldpc_init(HRA, mod_order);\r
+\r
+ data = round(rand(1,frames*code_param.data_bits_per_frame));\r
+ f = fopen("data.bin","wt"); fwrite(f, data, "uint8"); fclose(f);\r
+\r
+ % Outboard C encoder\r
+\r
+ system("../src/ldpc_enc data.bin codewords.bin"); \r
+\r
+ % Test with Octave decoder\r
+\r
+ f = fopen("codewords.bin","rb"); codewords = fread(f, "uint8")'; fclose(f);\r
+ \r
+ Nerrs = 0;\r
+ for i=1:frames\r
+ st = (i-1)*code_param.symbols_per_frame+1; en = st+code_param.symbols_per_frame-1;\r
+ tx = 1 - 2 * codewords(st:en); \r
+\r
+ noise = sqrt(variance)*randn(1,code_param.symbols_per_frame); \r
+ rx = tx + noise;\r
+\r
+ [detected_data Niters] = ldpc_decode(rx, code_param, max_iterations, decoder_type);\r
+\r
+ st = (i-1)*code_param.data_bits_per_frame+1; en = st+code_param.data_bits_per_frame-1;\r
+ error_positions = xor(detected_data(1:code_param.data_bits_per_frame), data(st:en));\r
+ Nerrs += sum(error_positions);\r
+ end\r
+\r
+ printf("Nerrs = %d\n", Nerrs);\r
+end\r
+\r
+\r
% Start simulation --------------------------------------------------------\r
\r
more off;\r
randn('state',1);\r
rand('state',1);\r
\r
-% binary flags to run various demos, e.g. "15" runs them all\r
+% binary flags to run various demos, e.g. "15" to run 1 .. 8\r
\r
-demos = 2;\r
+demos = 32;\r
\r
if bitand(demos,1)\r
printf("simple_ut....\n");\r
\r
if bitand(demos,4)\r
printf("decode_from_file ......\n");\r
+ data = simple_ut;\r
detected_data = decode_from_file("codeword.bin");\r
error_positions = xor( detected_data(1:length(data)), data );\r
Nerrs = sum(error_positions);\r
plot_curve;\r
end\r
\r
+if bitand(demos,16)\r
+\r
+ % generate test data and save to disk\r
+\r
+ [data code_param] = simple_ut;\r
+ f = fopen("dat_in2064.bin","wb"); fwrite(f, data, "uint8"); fclose(f);\r
+\r
+ % Outboard C encoder\r
+\r
+ system("../src/ldpc_enc dat_in2064.bin dat_op2064.bin"); \r
+\r
+ % Test with Octave decoder\r
+\r
+ detected_data = decode_from_file("dat_op2064.bin");\r
+ error_positions = xor(detected_data(1:length(data)), data);\r
+ Nerrs = sum(error_positions);\r
+ printf("Nerrs = %d\n", Nerrs);\r
+end\r
+\r
+\r
+if bitand(demos,32)\r
+ test_c_encoder;\r
+end\r