00001
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef CHANNELESTIM_H
00031 #define CHANNELESTIM_H
00032
00033 #include "basicdevice.h"
00034 #include "phbib.h"
00035 #include "signals.h"
00036 #include "matrixseq.h"
00037 #include "arith.h"
00038
00039 namespace mimo {
00040
00041 using namespace simth;
00042
00043 class MIMOChannel;
00044
00055 class ChannelEstim : public Device
00056 {
00057 protected:
00058 ChannelEstim(int deviceID, DeviceSystemIntf* system,
00059 const simth::PropertyList& pl);
00060 const size_t nr_rx;
00061 const size_t nr_tx;
00062 size_t output_length;
00063 const MIMOChannel* channel;
00064
00065
00066 void assert_connections() const;
00067 void assert_matrix_dim(const mimo::CMatrix &testvec,
00068 const std::string& which = "output vector")
00069 const;
00070 public:
00071 virtual void updateInputLengths();
00072 virtual void updateOutputLengths();
00073
00074 void print(std::ostream &os) const;
00075
00076 static void init(const std::string& fileName,
00077 Device** dev,
00078 DeviceSystemIntf* sysPtr,
00079 int ID,
00080 const std::string& regionQualifier);
00081
00084 static simth::Device *findChannel(simth::DeviceSystemIntf* sys);
00085 };
00086
00087 class EstimSingleCarrier : public ChannelEstim
00088 {
00089 public:
00090 EstimSingleCarrier(int deviceID, DeviceSystemIntf* system,
00091 const simth::PropertyList& pl);
00092 void process();
00093 };
00094
00095 class EstimOFDM : public ChannelEstim
00096 {
00097 private:
00098 double delta_f;
00099 unsigned num_carrier;
00100 public:
00101 EstimOFDM(int deviceID, DeviceSystemIntf* system,
00102 const simth::PropertyList& pl);
00103 void process();
00104 };
00105
00106 }
00107
00108 #endif