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

mimo::PCSEncoder Class Reference

#include <mimo-pcs-encoder.h>

Inheritance diagram for mimo::PCSEncoder:

Inheritance graph
[legend]
List of all members.

Public Member Functions

 PCSEncoder (int deviceID, simth::DeviceSystemIntf *system, const simth::PropertyList &pl)
 Constructor.
 ~PCSEncoder ()
 Destructor.
virtual void updateInputLengths ()
virtual void updateOutputLengths ()
int getDataLength (int codedLength) const
int getCodeLength (int rawLength) const
void Encode (const simth::ModSeq &modulation_symbols, CVectorSeq &output_vectors)
void process ()

Static Public Member Functions

static void mult_UpqH (const CMatrix &A, CMatrix &C, unsigned p, unsigned q, double phi, double sigma, unsigned nr_tx, bool from_left=false, bool hermitian=false)
static void mult_UpqH (CMatrix &A, unsigned p, unsigned q, double phi, double sigma, unsigned nr_tx, CVector &workspace1, CVector &workspace2, bool from_left=false, bool hermit=false)
static CMatrix generate_UpqH (unsigned p, unsigned q, double phi, double sigma, unsigned nr_tx)
static void generate_UpqH (CMatrix &U, unsigned p, unsigned q, double phi, double sigma, unsigned nr_tx)
static CMatrix extract_parameter (const CMatrix &chanest, const CMatrix &U_old, bool diff_extr)
static CMatrix extract_parameter_correctly (const CMatrix &chanest, const CMatrix &U_old, bool diff_extr)
static CMatrix generate_approx_U (const CMatrix &Param, const CMatrix &U_elder, bool diff_extr)
static void generate_approx_U (CMatrix &U, const CMatrix &Param, const CMatrix &U_elder, bool diff_extr, CMatrix &workspace1, CMatrix &workspace2)
static void get_best_parameters (CMatrix &Param, unsigned nr_param)

Public Attributes

CMatrixSeq::storage_type * U_old

Protected Attributes

unsigned nr_param
bool diff_extr
unsigned num_carrier
bool easy_alg

Related Functions

(Note that these are not member functions.)

 propertylist_PCSEncoder (not_a_function)

Constructor & Destructor Documentation

mimo::PCSEncoder::PCSEncoder int  deviceID,
simth::DeviceSystemIntf system,
const simth::PropertyList pl
 

Constructor.

mimo::PCSEncoder::~PCSEncoder  ) 
 

Destructor.


Member Function Documentation

static void mimo::PCSEncoder::mult_UpqH const CMatrix A,
CMatrix C,
unsigned  p,
unsigned  q,
double  phi,
double  sigma,
unsigned  nr_tx,
bool  from_left = false,
bool  hermitian = false
[static]
 

Multiply the given matrix A by the base unitary matrix U_pq that is specified by the given arguments and writes the result into C. This method calculates one out of the following four different calculations:

  • $C=A\cdot U$
  • $C=A\cdot U^H$
  • $C=U\cdot A$ or
  • $C=U^H\cdot A$

Parameters:
A The matrix to be multiplied.
C The matrix where the result is written into.
from_left If true, then U or $U^H$ is applied from the left so that C=U*A . If false, then U is applied from the right so that C=A*U .
hermitian If true, then $U^H$ (hermitian, or conjugate transposed) is used. If false, then $U$ is used directly.

static void mimo::PCSEncoder::mult_UpqH CMatrix A,
unsigned  p,
unsigned  q,
double  phi,
double  sigma,
unsigned  nr_tx,
CVector workspace1,
CVector workspace2,
bool  from_left = false,
bool  hermit = false
[static]
 

Multiply the given matrix A by the base unitary matrix U_pq that is specified by the given arguments and writes the result back into A. This method calculates one out of the following four different calculations:

  • $A=A\cdot U$
  • $A=A\cdot U^H$
  • $A=U\cdot A$ or
  • $A=U^H\cdot A$

Parameters:
A The matrix to be multiplied.
workspace1 A vector of length nr_tx
workspace2 A vector of length nr_tx
from_left If true, then U or $U^H$ is applied from the left so that C=U*A . If false, then U is applied from the right so that C=A*U .
hermitian If true, then $U^H$ (hermitian, or conjugate transposed) is used. If false, then $U$ is used directly.

static CMatrix mimo::PCSEncoder::generate_UpqH unsigned  p,
unsigned  q,
double  phi,
double  sigma,
unsigned  nr_tx
[static]
 

Generates the basic unitary matrices needed by the algorithm.

static void mimo::PCSEncoder::generate_UpqH CMatrix U,
unsigned  p,
unsigned  q,
double  phi,
double  sigma,
unsigned  nr_tx
[static]
 

Generates the basic unitary matrices needed by the algorithm, writing it into the given matrix U.

The previous content of U is overwritten. If U is not of the appropriate dimension nr_tx times nr_tx, an exception is thrown.

static CMatrix mimo::PCSEncoder::extract_parameter const CMatrix chanest,
const CMatrix U_old,
bool  diff_extr
[static]
 

Extract parameter for construction of U.

Actually this has only to be done in the decoder. But for Simulation it is much more easier to do it here, otherwise we would have to introduce a backward channel which could result in timing problems.

easy realisation

static CMatrix mimo::PCSEncoder::extract_parameter_correctly const CMatrix chanest,
const CMatrix U_old,
bool  diff_extr
[static]
 

Extract parameter for construction of U.

Actually this has only to be done in the decoder. But for Simulation it is much more easier to do it here, otherwise we would have to introduce a backward channel which could result in timing problems.

mathematical 100% correct following Murnaghan

static CMatrix mimo::PCSEncoder::generate_approx_U const CMatrix Param,
const CMatrix U_elder,
bool  diff_extr
[static]
 

Recomposition of transmit matrix U by means of retransmitted parameters and function generate_UpqH.

static void mimo::PCSEncoder::generate_approx_U CMatrix U,
const CMatrix Param,
const CMatrix U_elder,
bool  diff_extr,
CMatrix workspace1,
CMatrix workspace2
[static]
 

Recomposition of transmit matrix U by means of retransmitted parameters and function generate_UpqH.

static void mimo::PCSEncoder::get_best_parameters CMatrix Param,
unsigned  nr_param
[static]
 

Identify the nr_param parameters with highest absolute value and set all others equal zero inside the given matrix.

virtual void mimo::PCSEncoder::updateInputLengths  )  [virtual]
 

Implementation of methods of simth::Device.

Reimplemented from mimo::Encoder.

virtual void mimo::PCSEncoder::updateOutputLengths  )  [virtual]
 

Implementation of methods of simth::Device.

Reimplemented from mimo::Encoder.

int mimo::PCSEncoder::getDataLength int  codedLength  )  const [inline, virtual]
 

Unused.

Implements mimo::Encoder.

int mimo::PCSEncoder::getCodeLength int  rawLength  )  const [inline, virtual]
 

Unused.

Implements mimo::Encoder.

void mimo::PCSEncoder::Encode const simth::ModSeq modulation_symbols,
CVectorSeq output_vectors
[virtual]
 

Encodes the given sequence of symbols into the given output sequence of vectors.

Implements mimo::Encoder.

void mimo::PCSEncoder::process  )  [virtual]
 

Implementation of methods of simth::Device.

Reimplemented from mimo::Encoder.


Friends And Related Function Documentation

propertylist_PCSEncoder not_a_function   )  [related]
 

These are the properties of class PCSEncoder . This list is auto-generated from the XML-Devicelist of this device by means of an XSLT transformation script.

Description of this device in the XML file:

Partial Channel State Information Mimo Encoder The Decoder/Encoder pair is a close relative to the SVD- and a BLAST (Spatial mux with zero forcing) encoder. The special feature is, that you can vary the performance in-between those borders by choosing the proper number of parameters. These parameters are extracted from the optimal transmission matrix produced by the SVD-scheme. In the encoder these parameters are used to build up a transmission matrix which approximates the optimal one depending on the number of parameters that have been given to the encoder by the decoder. In Simthetic a backward channel necessary for such a system is not possible so you have to give the encoder its own source of channel knowledge by connecting the channel estimator.

Note that this class also has the Properties of its base classes. The direct base class is mimo::Encoder ; direct link to its propertylist should be propertylist_Encoder(). The list below usually includes the properties that have been inherited from the base classes; the properties which belong only to this class can be found at the end of this list.

nr_param
<unsigned>, default "" -- Determines the number of desired Parameters that will be used for building the transmission matrix. If zero is chosen, the transmission matrix is the identity matrix and you will have a BLAST-like scheme. If the maximum number of parameters is chosen, which is calculated by (#tranmit antennas - 1)#tranmit antennas / 2, you will have a SVD-scheme. Values that exceed this range will be set to minimum or maximum respectively.

diff_extr
<bool>, default "" -- Activates differential matrix update. The actual matrix and its antecessor on the same subcarrier are being compared and only die difference is parameterized. The result is used for building up the transmission matrix by updating its antecessor.

num_carrier
<unsigned>, default "" -- Number of OFDM subcarriers.

easy_alg
<bool>, default "" -- Activates an alternative type of parameter extraction algorithm slightly different from the original one.

4 properties in this class.


Member Data Documentation

unsigned mimo::PCSEncoder::nr_param [protected]
 

bool mimo::PCSEncoder::diff_extr [protected]
 

unsigned mimo::PCSEncoder::num_carrier [protected]
 

bool mimo::PCSEncoder::easy_alg [protected]
 

CMatrixSeq::storage_type* mimo::PCSEncoder::U_old
 


Generated on Tue Aug 9 14:44:12 2005 for mimolib by  doxygen 1.4.1