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_ENCODER_H
00029 #define MIMO_PCS_ENCODER_H
00030
00031
00032 #include "mimo-encoder.h"
00033
00034 namespace mimo
00035 {
00036
00037
00038
00039 class PCSEncoder : public mimo::Encoder
00040 {
00041 protected:
00042 unsigned nr_param;
00043 bool diff_extr;
00044 unsigned num_carrier;
00045 bool easy_alg;
00046
00047
00048 public:
00049
00050
00051
00074 static void mult_UpqH (const CMatrix& A, CMatrix& C,
00075 unsigned p, unsigned q,
00076 double phi, double sigma, unsigned nr_tx,
00077 bool from_left = false, bool hermitian = false);
00078
00102 static void mult_UpqH (CMatrix& A,
00103 unsigned p, unsigned q,
00104 double phi, double sigma, unsigned nr_tx,
00105 CVector& workspace1,
00106 CVector& workspace2,
00107 bool from_left = false, bool hermit = false);
00108
00112 static CMatrix generate_UpqH (unsigned p, unsigned q, double phi, double sigma, unsigned nr_tx);
00121 static void generate_UpqH (CMatrix& U, unsigned p, unsigned q,
00122 double phi, double sigma, unsigned nr_tx);
00123
00134 static CMatrix extract_parameter (const CMatrix& chanest,
00135 const CMatrix& U_old, bool diff_extr);
00146 static CMatrix
00147 extract_parameter_correctly (const CMatrix& chanest,
00148 const CMatrix& U_old, bool diff_extr);
00153 static CMatrix
00154 generate_approx_U (const CMatrix& Param,
00155 const CMatrix& U_elder, bool diff_extr);
00160 static void
00161 generate_approx_U (CMatrix& U,
00162 const CMatrix& Param,
00163 const CMatrix& U_elder, bool diff_extr,
00164 CMatrix& workspace1, CMatrix& workspace2);
00165
00170 static void get_best_parameters(CMatrix& Param,
00171 unsigned nr_param);
00172
00174
00176 PCSEncoder (int deviceID, simth::DeviceSystemIntf* system,
00177 const simth::PropertyList& pl);
00179 ~PCSEncoder();
00180
00181 CMatrixSeq::storage_type* U_old;
00182
00184 virtual void updateInputLengths();
00186 virtual void updateOutputLengths();
00187
00191 int getDataLength(int codedLength) const {return 0;};
00192
00196 int getCodeLength(int rawLength) const {return 0;};
00197
00202 void Encode(const simth::ModSeq& modulation_symbols,
00203 CVectorSeq& output_vectors);
00204
00206 void process();
00207
00208 };
00209 }
00210
00211 #endif // MIMO_ENCODER_H