Main Page | Namespace List | Class Hierarchy | Alphabetical List | Compound List | File List | Namespace Members | Compound Members | File Members | Related Pages

equalizer.h

Go to the documentation of this file.
00001 
00009 /***************************************************************************
00010  *                                                                         *
00011  *   This library is free software; you can redistribute it and/or         *
00012  *   modify it under the terms of the GNU Lesser General Public            *
00013  *   License as published by the Free Software Foundation; either          *
00014  *   version 2.1 of the License, or (at your option) any later version.    *
00015  *                                                                         *
00016  *   This library is distributed in the hope that it will be useful,       *
00017  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
00018  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     *
00019  *   Lesser General Public License for more details.                       *
00020  *                                                                         *
00021  *   You should have received a copy of the GNU Lesser General Public      *
00022  *   License along with this library; if not, write to the Free Software   *
00023  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston,                 *
00024  *   MA  02111-1307  USA                                                   *
00025  *                                                                         *
00026  ***************************************************************************/
00027 
00028 
00029 #ifndef EQUALIZER_H
00030 #define EQUALIZER_H
00031 
00032 #include <basicdevice.h>
00033 #include <phbib.h>
00034 #include <signals.h>
00035 #include "matrixseq.h"
00036 #include "arith.h"
00037 
00038 namespace mimo {
00039 
00050 class Equalizer : public simth::Device
00051 {
00052    protected:
00053       Equalizer(int deviceID, DeviceSystemIntf* system,
00054         const simth::PropertyList& pl,
00055         size_t dim_in_, size_t dim_out_);
00056       const size_t dim_in;
00057       const size_t dim_out;
00058       const size_t iports;
00059 
00060       // Assert that the connection setup was correct
00061       void assert_connections() const;
00062       void assert_vector_dim_out(const cs::CVector &testvec,
00063                  const std::string& which = "output vector")
00064      const;
00065   public:
00066       virtual void updateInputLengths();
00067       virtual void updateOutputLengths();
00068       
00069       void print(std::ostream &os) const;
00070 
00071       static void init(const std::string& fileName, 
00072                Device** dev, 
00073                DeviceSystemIntf* sysPtr, 
00074                int ID,
00075                const std::string& regionQualifier);
00076 };
00077 
00099 class EqualizerZF : public Equalizer
00100 {
00101    public:
00102       EqualizerZF(int deviceID, DeviceSystemIntf* system, 
00103           const simth::PropertyList& pl,
00104           size_t dim_in, size_t dim_out);
00105       
00106       void process();
00107 
00111       static void calcZF(const CVectorSeq& received_signal,
00112              const MatrixFreqSignal& channelestim,
00113              CVectorSeq & equalized_signal,
00114              CVectorSeq *softout_information);
00115 };
00116 
00117 
00139 class EqualizerMMSE : public Equalizer
00140 {
00141    private:
00142       double noise;
00143 
00144    public:
00145       EqualizerMMSE(int deviceID, DeviceSystemIntf* system, 
00146             const simth::PropertyList& pl,
00147             size_t dim_in, size_t dim_out);
00148       
00152       void setSNR(double snr);
00153       void setNoisePower(double n);
00154 
00155       void process();
00156       static void calcMMSE(const CVectorSeq& received_signal,
00157                const MatrixFreqSignal& channelestim,
00158                CVectorSeq & equalized_signal,
00159                double noise_power,
00160                CVectorSeq *softout_information);
00161 };
00162 
00183 class EqualizerMRC : public Equalizer
00184 {
00185    public:
00186       EqualizerMRC(int deviceID, DeviceSystemIntf* system, 
00187            const simth::PropertyList& pl,
00188            size_t dim_in, size_t dim_out);
00189       
00190       void process();
00191 };
00192 
00193 
00204 class EqualizerMRCSwitch : public Equalizer
00205 {
00206    public:
00207       EqualizerMRCSwitch(int deviceID, DeviceSystemIntf* system, 
00208              const simth::PropertyList& pl,
00209              size_t dim_in, size_t dim_out);
00210       
00211       void process();
00212 };
00213 
00214 } // namespace
00215 
00216 #endif /* EQUALIZER_H */

Generated on Fri Jul 23 16:27:46 2004 for mimolib by doxygen 1.3.2