00001 00030 #ifndef CHANNEL_CODE_H 00031 #define CHANNEL_CODE_H 00032 00033 #include <itpp/base/vec.h> 00034 #include <itpp/comm/modulator.h> 00035 00036 00037 namespace itpp 00038 { 00039 00044 //---------------------- BCH -------------------------------------- 00045 00051 class Channel_Code 00052 { 00053 public: 00055 Channel_Code() {} 00057 virtual ~Channel_Code() {} 00058 00060 virtual void encode(const bvec &uncoded_bits, bvec &coded_bits) = 0; 00062 virtual bvec encode(const bvec &uncoded_bits) = 0; 00063 00065 virtual void decode(const bvec &codedbits, bvec &decoded_bits) = 0; 00067 //virtual bvec decode(const bvec &coded_bits); 00068 virtual bvec decode(const bvec &coded_bits) = 0; 00069 00071 virtual void decode(const vec &received_signal, bvec &decoded_bits) = 0; 00073 //virtual bvec decode(const vec &received_signal); 00074 virtual bvec decode(const vec &received_signal) = 0; 00075 00077 virtual double get_rate() const = 0; 00078 }; 00079 00080 00087 class Dummy_Code : public Channel_Code 00088 { 00089 public: 00091 Dummy_Code() {} 00093 virtual ~Dummy_Code() {} 00094 00096 virtual void encode(const bvec &uncoded_bits, bvec &coded_bits) { coded_bits = uncoded_bits; } 00098 virtual bvec encode(const bvec &uncoded_bits) { return uncoded_bits; } 00099 00101 virtual void decode(const bvec &coded_bits, bvec &decoded_bits) { decoded_bits = coded_bits; } 00103 virtual bvec decode(const bvec &coded_bits) { return coded_bits; } 00104 00106 virtual void decode(const vec &received_signal, bvec &decoded_bits) { BPSK bpsk; bpsk.demodulate_bits(received_signal, decoded_bits); } 00108 virtual bvec decode(const vec &received_signal) { bvec out; decode(received_signal, out); return out; } 00109 00111 virtual double get_rate() const { return 1.0; } 00112 }; 00113 00114 00115 00116 } // namespace itpp 00117 00118 #endif // #ifndef CHANNEL_CODE_H
Generated on Thu Apr 23 20:04:04 2009 for IT++ by Doxygen 1.5.8