libalaudio
1.12
|
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_