00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef MIMO_PCS_DECODER_H
00029 #define MIMO_PCS_DECODER_H
00030
00031
00032 #include "mimo-decoder.h"
00033 #include "modulationschemes.h"
00034 #include "adaptiveModulator.h"
00035
00036 namespace mimo
00037 {
00038
00039 class PCSDecoder : public mimo::Decoder
00040 {
00041 protected:
00042
00043 unsigned nr_param;
00044 bool diff_extr;
00045 bool int_hard_dec;
00046 unsigned bits_per_symbol;
00047 unsigned num_carrier;
00048 std::string mod_type;
00049 bool easy_alg;
00050 bool quality;
00051 double sum_qlty;
00052 double sum_qlty_max;
00053 double sum_diff_mat_qlty;
00054 unsigned qlty_counter;
00055 simthlib::ExtendedModList* localExtModList;
00056
00057
00058
00059
00060
00061
00062
00063 Complex give_me_a_hard_dec(const Complex& rivalue,
00064 unsigned n, unsigned i);
00065
00066
00067
00068
00069
00070 CVector R_iterate (CMatrix R, CVector e, unsigned n);
00071
00072
00073
00074 bool what_modulation(const std::string& mod_type);
00075
00076
00077
00078 Vector vecsort(Vector vec);
00079
00080
00081
00082 CMatrix make_R_diag_pos(CMatrix R);
00083
00084
00085
00086
00087 bool is_R_singular(const CMatrix& R);
00088
00089 public:
00090
00091
00092
00093 static CMatrix build_nice_shaped_R (const CMatrix& R);
00094
00095
00096
00097 static Vector absdiag(const CMatrix& mat, bool betrag);
00098
00099
00101 PCSDecoder (int deviceID, simth::DeviceSystemIntf* system,
00102 const simth::PropertyList& pl);
00104 ~PCSDecoder();
00105
00106 void endOfSimulation();
00107
00112 int getDataLength(int codedLength) const;
00113
00118 int getCodeLength(int rawLength) const;
00119
00127 void process();
00128
00129
00130 void Decode(const CVectorSeq& input_vectors,
00131 const MatrixFreqSignal& chanest,
00132 simth::ModSeq& output_symbols,
00133 simth::ModSeq* output_softout);
00134
00135 private:
00136 CMatrixSeq::storage_type* U_old;
00137 simthlib::ConstellationDiagram* ConstDiag;
00138 simth::LoadingInfoSeq* loading;
00139
00140
00141 };
00142
00143 }
00144
00145 #endif