1 /* -*- c++ -*- */ 2 /* 3 * Copyright 2015 Free Software Foundation, Inc. 4 * 5 * This file is part of GNU Radio 6 * 7 * GNU Radio is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 3, or (at your option) 10 * any later version. 11 * 12 * GNU Radio is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with GNU Radio; see the file COPYING. If not, write to 19 * the Free Software Foundation, Inc., 51 Franklin Street, 20 * Boston, MA 02110-1301, USA. 21 */ 22 23 #ifndef INCLUDED_LDPC_DECODER_H 24 #define INCLUDED_LDPC_DECODER_H 25 26 typedef float INPUT_DATATYPE; 27 typedef unsigned char OUTPUT_DATATYPE; 28 29 #include <gnuradio/fec/decoder.h> 30 #include <map> 31 #include <string> 32 #include <vector> 33 34 #include <gnuradio/fec/alist.h> 35 #include <gnuradio/fec/awgn_bp.h> 36 #include <gnuradio/fec/cldpc.h> 37 38 namespace gr { 39 namespace fec { 40 41 42 #define MAXLOG 1e7 43 44 class FEC_API ldpc_decoder : public generic_decoder 45 { 46 private: 47 // private constructor 48 ldpc_decoder(std::string alist_file, float sigma, int max_iterations); 49 50 // plug into the generic fec api 51 int get_history(); 52 float get_shift(); 53 const char* get_conversion(); 54 void generic_work(void* inBuffer, void* outbuffer); 55 float d_iterations; 56 int d_input_size, d_output_size; 57 double d_rate; 58 59 alist d_list; 60 cldpc d_code; 61 awgn_bp d_spa; 62 63 public: 64 ~ldpc_decoder(); 65 66 double rate(); 67 bool set_frame_size(unsigned int frame_size); 68 69 static generic_decoder::sptr 70 make(std::string alist_file, float sigma = 0.5, int max_iterations = 50); 71 72 int get_output_size(); 73 int get_input_size(); 74 int get_input_item_size(); 75 int get_output_item_size(); get_iterations()76 float get_iterations() { return d_iterations; } 77 }; 78 79 } // namespace fec 80 } // namespace gr 81 82 #endif /* INCLUDED_LDPC_DECODER_H */ 83