From: drowe67 Date: Sat, 18 Mar 2017 06:11:45 +0000 (+0000) Subject: break LDPC code->headerfile func out of ldpc_fsk_lib.m X-Git-Url: http://git.whiteaudio.com/gitweb/?a=commitdiff_plain;h=60edf4a519cd63ce48b2d2969cfaa33f55061eb4;p=freetel-svn-tracking.git break LDPC code->headerfile func out of ldpc_fsk_lib.m git-svn-id: https://svn.code.sf.net/p/freetel/code@3068 01035d8c-6547-0410-b346-abe4f91aad63 --- diff --git a/codec2-dev/octave/ldpc_fsk_lib.m b/codec2-dev/octave/ldpc_fsk_lib.m index a47169dc..661758da 100644 --- a/codec2-dev/octave/ldpc_fsk_lib.m +++ b/codec2-dev/octave/ldpc_fsk_lib.m @@ -177,81 +177,11 @@ function [detected_data Niters] = ldpc_decode(r, code_param, max_iterations, dec detected_data = x_hat(Niters,:); if isfield(code_param, "c_include_file") - write_code_to_C_include_file(code_param, max_iterations, decoder_type, llr, x_hat, detected_data); + ldpc_gen_h_file(code_param, max_iterations, decoder_type, llr, x_hat, detected_data); end end -% optionally create a C include file for use in mpdecode.c C cmd line LDPC decoder - -function write_code_to_C_include_file(code_param, max_iterations, decoder_type, input_decoder_c, x_hat, detected_data) - - f = fopen(code_param.c_include_file, "wt"); - - fprintf(f, "/*\n FILE....: %s\n\n Static arrays for TRC HF modem, generated", code_param.c_include_file); - fprintf(f, "\n by test_ldpc_fsk.m:simple_ut().\n\n*/\n\n"); - - fprintf(f,"#define NUMBERPARITYBITS %d\n", rows(code_param.H_rows)); - fprintf(f,"#define MAX_ROW_WEIGHT %d\n", columns(code_param.H_rows)); - fprintf(f,"#define CODELENGTH %d\n", code_param.symbols_per_frame); - fprintf(f,"#define NUMBERROWSHCOLS %d\n", rows(code_param.H_cols)); - fprintf(f,"#define MAX_COL_WEIGHT %d\n", columns(code_param.H_cols)); - fprintf(f,"#define DEC_TYPE %d\n", decoder_type); - fprintf(f,"#define MAX_ITER %d\n", max_iterations); - - fprintf(f,"\ndouble H_rows[] = {\n"); - - % clock out 2D array to linear C array in row order .... - - [r c] = size(code_param.H_rows); - for j=1:c - for i=1:r - fprintf(f, "%d", code_param.H_rows(i,j)); - if (i == r) && (j ==c) - fprintf(f,"\n};\n"); - else - fprintf(f,", "); - end - end - end - - fprintf(f,"\ndouble H_cols[] = {\n"); - [r c] = size(code_param.H_cols); - for j=1:c - for i=1:r - fprintf(f, "%d", code_param.H_cols(i,j)); - if (i == r) && (j == c) - fprintf(f,"\n};\n"); - else - fprintf(f,", "); - end - end - end - - fprintf(f,"\ndouble input[] = {\n"); - for i=1:length(input_decoder_c) - fprintf(f, "%.17g", input_decoder_c(i)); - if i == length(input_decoder_c) - fprintf(f,"\n};\n"); - else - fprintf(f,", "); - end - end - - fprintf(f,"\nchar detected_data[] = {\n"); - for i=1:length(detected_data) - fprintf(f, "%d", detected_data(i)); - if i == length(detected_data) - fprintf(f,"\n};\n"); - else - fprintf(f,", "); - end - end - - fclose(f); -end - - % One application of FSK LDPC work is SSTV. This function generates a % simulated frame for testing diff --git a/codec2-dev/octave/ldpc_gen_h_file.m b/codec2-dev/octave/ldpc_gen_h_file.m new file mode 100644 index 00000000..663019e3 --- /dev/null +++ b/codec2-dev/octave/ldpc_gen_h_file.m @@ -0,0 +1,72 @@ +% ldpc_gen_h_file.m +% David Rowe Sep 2015 +% +% Create a C include file for use in mpdecode.c C cmd line LDPC decoder + +function ldpc_gen_h_file(code_param, max_iterations, decoder_type, input_decoder_c, x_hat, detected_data) + + f = fopen(code_param.c_include_file, "wt"); + + fprintf(f, "/*\n FILE....: %s\n\n Static arrays for TRC HF modem, generated", code_param.c_include_file); + fprintf(f, "\n ldpc_gen_h_file.m.\n\n*/\n\n"); + + fprintf(f,"#define NUMBERPARITYBITS %d\n", rows(code_param.H_rows)); + fprintf(f,"#define MAX_ROW_WEIGHT %d\n", columns(code_param.H_rows)); + fprintf(f,"#define CODELENGTH %d\n", code_param.symbols_per_frame); + fprintf(f,"#define NUMBERROWSHCOLS %d\n", rows(code_param.H_cols)); + fprintf(f,"#define MAX_COL_WEIGHT %d\n", columns(code_param.H_cols)); + fprintf(f,"#define DEC_TYPE %d\n", decoder_type); + fprintf(f,"#define MAX_ITER %d\n", max_iterations); + + fprintf(f,"\ndouble H_rows[] = {\n"); + + % clock out 2D array to linear C array in row order .... + + [r c] = size(code_param.H_rows); + for j=1:c + for i=1:r + fprintf(f, "%d", code_param.H_rows(i,j)); + if (i == r) && (j ==c) + fprintf(f,"\n};\n"); + else + fprintf(f,", "); + end + end + end + + fprintf(f,"\ndouble H_cols[] = {\n"); + [r c] = size(code_param.H_cols); + for j=1:c + for i=1:r + fprintf(f, "%d", code_param.H_cols(i,j)); + if (i == r) && (j == c) + fprintf(f,"\n};\n"); + else + fprintf(f,", "); + end + end + end + + fprintf(f,"\ndouble input[] = {\n"); + for i=1:length(input_decoder_c) + fprintf(f, "%.17g", input_decoder_c(i)); + if i == length(input_decoder_c) + fprintf(f,"\n};\n"); + else + fprintf(f,", "); + end + end + + fprintf(f,"\nchar detected_data[] = {\n"); + for i=1:length(detected_data) + fprintf(f, "%d", detected_data(i)); + if i == length(detected_data) + fprintf(f,"\n};\n"); + else + fprintf(f,", "); + end + end + + fclose(f); +end +