aboutsummaryrefslogtreecommitdiff
path: root/src/mpdecode_core.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mpdecode_core.h')
-rw-r--r--src/mpdecode_core.h61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/mpdecode_core.h b/src/mpdecode_core.h
new file mode 100644
index 0000000..95ead46
--- /dev/null
+++ b/src/mpdecode_core.h
@@ -0,0 +1,61 @@
+/*
+ FILE...: mpdecode_core.h
+ AUTHOR.: David Rowe
+ CREATED: Sep 2016
+
+ C-callable core functions for MpDecode, so they can be used for
+ Octave and C programs. Also some convenience functions to help use
+ the C-callable LDPC decoder in C programs.
+*/
+
+#ifndef __MPDECODE_CORE__
+#define __MPDECODE_CORE__
+
+#include <stdint.h>
+
+#include "comp.h"
+
+struct LDPC {
+ char name[32];
+ int max_iter;
+ int dec_type;
+ int q_scale_factor;
+ int r_scale_factor;
+ int CodeLength;
+ int NumberParityBits;
+ int NumberRowsHcols;
+ int max_row_weight;
+ int max_col_weight;
+
+ uint16_t *H_rows;
+ uint16_t *H_cols;
+
+ /* these two are fixed to code params */
+ int ldpc_data_bits_per_frame;
+ int ldpc_coded_bits_per_frame;
+
+ /* support for partial use of data bits in codeword and unequal protection
+ * schemes */
+ int protection_mode;
+ int data_bits_per_frame;
+ int coded_bits_per_frame;
+};
+
+void encode(struct LDPC *ldpc, unsigned char ibits[], unsigned char pbits[]);
+
+int run_ldpc_decoder(struct LDPC *ldpc, uint8_t out_char[], float input[],
+ int *parityCheckCount);
+
+void sd_to_llr(float llr[], float sd[], int n);
+void Demod2D(float symbol_likelihood[], COMP r[], COMP S_matrix[], float EsNo,
+ float fading[], float mean_amp, int number_symbols);
+void Somap(float bit_likelihood[], float symbol_likelihood[], int M, int bps,
+ int number_symbols);
+void symbols_to_llrs(float llr[], COMP rx_qpsk_symbols[], float rx_amps[],
+ float EsNo, float mean_amp, int nsyms);
+void fsk_rx_filt_to_llrs(float llr[], float rx_filt[], float v_est,
+ float SNRest, int M, int nsyms);
+
+void ldpc_print_info(struct LDPC *ldpc);
+
+#endif