libalaudio  1.12
alaudio/alacousticalmodel.h
00001 
00006 #pragma once
00007 #ifndef _LIBALAUDIO_ALAUDIO_ALACOUSTICALMODEL_H_
00008 #define _LIBALAUDIO_ALAUDIO_ALACOUSTICALMODEL_H_
00009 
00010 #include <string>
00011 #include <vector>
00012 #include <alaudio/alacousticalspace.h>
00013 
00019 namespace AL
00020 {
00021   class ALAcousticalModel : public ALAcousticalSpace
00022   {
00023   public:
00024 
00026     ALAcousticalModel(unsigned int nbMicrophones,
00027                       std::vector<Math::Position3D> microsPosition);
00028     ~ALAcousticalModel(){}
00029 
00031     std::vector<float> computeAngle(const std::vector<int> itdValues, const std::string mod);
00032 
00034     void getITDmaxLR(int &ITD);
00035 
00037     void getITDmaxFR(int &ITD);
00038 
00040     void getITDmaxV6(std::vector<int> &ITD);
00041 
00042     std::vector<float> forwardITD(const std::vector<int> &pITDValues, float &proba) const;
00043 
00045     void getITDMatrix(std::vector< std::vector<int> > &vector) const;
00046     void getITDMatrixCalibration(std::vector< std::vector<int> > &vector) const;
00047     void getSoundSpeed(float & pSoundSpeed) const;
00048     void getSampleRate(float & pSampleRate) const;
00049     void getMicrosPosition(std::vector<Math::Position3D> & pMicrosPosition) const;
00050     float forwardITDUpdateValues(const std::vector<float> &ITDValuesOrig,std::vector<float> &ITDValues);
00051     void backwardITD(Math::Position3D pos, std::vector<int> &itdValues);
00052 
00053   private:
00054 
00056     bool fIsRunning;
00057 
00059     std::vector<float> xAzimutalModel(const std::vector<int> itdValues);
00061     std::vector<float> xAzimutalModelFR(const std::vector<int> itdValues);
00062 
00065     void xForwardITDInit();
00066 
00067     float xForwardITDUpdateValues(const std::vector<float>                                &ITDValuesOrig,
00068                                   std::vector<float>                                      &ITDValues,
00069                                   const std::vector< std::vector<float> >                 &ITDProjectionMatrix,
00070                                   const std::vector< std::vector<float> >                 &ITDProjectionMatrix2,
00071                                   const std::vector< std::vector< std::vector<float> > >  &ITDProjectionMatrixMini) const;
00072 
00073     Math::Position3D xForwardITDComputePosition(const std::vector<float>                &ITDValues,
00074                                                 const std::vector<float>                &DistanceCouplesMicros,
00075                                                 const std::vector<Math::Position3D> &DirectionsCouplesMicros,
00076                                                 const std::vector<float>                &AnglesPaireDirection,
00077                                                 const std::vector<Math::Position3D> &VecteurPlanPaireDirection,
00078                                                 const std::vector<Math::Position3D> &VecteurOrthoPaireDirection) const;
00079 
00080     std::vector<float> xForwardITDComputeAngles(const Math::Position3D pPositionProbable) const;
00081 
00083     void xBackwardITD(Math::Position3D pos, std::vector<int> &itdValues);
00084     std::vector< std::vector<int> > fITDMatrix;
00085     std::vector< std::vector<int> > fITDMatrixCalib;
00086     std::vector<Math::Position3D> fMeshGridCalib;
00087     std::vector<Math::Position3D> fMeshGrid;
00088 
00090     //std::vector<Math::Position3D> fMicrosPosition;
00091     //Math::Position3D fCenterPosition;
00092     std::vector<Math::Position3D> fDirectionsCouplesMicros;
00093     std::vector<float> fDistanceCouplesMicros;
00094     std::vector<float> fAnglesPaireDirection;
00095     std::vector<Math::Position3D> fVecteurPlanPaireDirection;
00096     std::vector<Math::Position3D> fVecteurOrthoPaireDirection;
00097 
00099     // Projection orthogonale R6 dans R3 optimisee distance
00100     std::vector< std::vector<float> > fITDProjectionMatrix;
00101     // Projection "semi-orthogonale" R3 dans R3 empirique
00102     std::vector< std::vector<float> > fITDProjectionMatrix2;
00103     // Projection de R3 dans R1
00104     std::vector< std::vector< std::vector<float> > > fITDProjectionMatrixMini;
00105 
00107     const int fITDmaxRL;
00108 
00110     const int fITDmaxFR;
00111 
00113     const float fSampleRate;
00114 
00116     const float fDistance;
00117 
00119     const float fSoundSpeed;
00120 
00122     std::vector<int> fITDmaxV6;
00123 
00124     unsigned int fNbMicrophones;
00125     unsigned int fNbCouplesMicros;
00126     unsigned int fNbPaireDirections;
00127     std::vector<Math::Position3D> fMicrosPosition;
00128   };
00129 }
00130 #endif  // _LIBALAUDIO_ALAUDIO_ALACOUSTICALMODEL_H_
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends