Acoustic Word-Recognizer

Quelltext - Dokumentation

 

 

Klassen

 


 

Klasse CAWRApp

 

Beschreibung:

Die Klasse CAWRApp ist die Anwendungsklasse der MFC-Applikation AWR. D.h. hier sind alle Operationen definiert um die Anwendung zu instanzirren und auszuführen.

Klassen-Deklaration:

class CAWRApp : public CWinApp
{
    public:
        CAWRApp();        // der Konstruktor der Klasse CAWRApp

    public:
        // Membervariablen der Applikation
        CWave am_Wave;              // enthält die Instanz der Klasse CWave für das Programm AWR
        CTransform am_Trans;        // enthält die Instanz der Klasse CTransform für das Programm AWR
        CKohonen am_Kohon;       // enthält die Instanz der Klasse CKohonen für das Programm AWR
        CBackprop am_Bkprp;       // enthält die Instanz der Klasse CBackprop für das Programm AWR
        char **am_Words;             // in diesem Datenfeld sind die Wörter gespeichert, die das Netz lernt bzw. gelernt hat
        int am_anzwrd;                   // hier ist die Anzahl der Wörter, die im obigen Datenfeld gespeichert sind, abgelegt
        bool am_working;              // hier wird gespeichert ob ein Thread aktiv ist (TRUE - aktiv, FALSE - nicht aktiv)

        // Programmkonstanten, das sind hauptsächlich Standardwerte für die Berechnungen der Netze
        const double c_kon;            // der Aktivwert (0.5) für die Neuronen der Kartenschicht des Kohonennetz
        const double c_koff;           // der Inaktivwert (-0.5) für die Neuronen der Kartenschicht des Kohonennetz
        const double c_bon;           // der angestrebte Aktivwert (0.8) für die Ausgabeneuronen des Backpropagationnetz
        const double c_boff;           // der angestrebte Inaktivwert (0.2) für die Ausgabeneuronen des Backpropagationnetz
        const double c_bias;           // der Biaswert (bzw. Schwellwert) (1.0) der Neuronen des Backpropagationnetz
};

extern CAWRApp theApp;        // Programmglobale der Instanz von CAWRApp, um von jedem Programmpunkt aus auf
                                                    die Membervariablen von CAWRApp zugreifen zu können

 

(zum Anfang)

 


 

Klasse - CAWRSheet

 

Beschreibung:

Die Klasse CAWRSheet bildet den Dialogcontainer für die Karteikarten-Dialoge des Programms. Sie hat als Membervariablen die Dialog-Klasse der Karteikarten.

Klassen-Deklaration:

class CAWRSheet : public CPropertySheet
{
        DECLARE_DYNAMIC(CAWRSheet)

    // Konstruktion
    public:
        CAWRSheet(UINT nIDCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0);
        CAWRSheet(LPCTSTR pszCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0);

    // Implementierung
    public:
        virtual ~CAWRSheet();

    // Generierte Nachrichtenzuordnungsfunktionen
    protected:
        //{{AFX_MSG(CAWRSheet)
        virtual BOOL OnInitDialog();
        afx_msg BOOL OnHelpInfo(HELPINFO* pHelpInfo);
        //}}AFX_MSG
        DECLARE_MESSAGE_MAP()

        // Membervariablen
        CPage1 m_page1;        // enthält die Instanz der Dialogklasse CPage1 des Dialoges m_page1
        CPage2 m_page2;        // enthält die Instanz der Dialogklasse CPage2 des Dialoges m_page2
        CPage3 m_page3;        // enthält die Instanz der Dialogklasse CPage3 des Dialoges m_page3
};

 

(zum Anfang)

 


 

Klasse - CBackprop

 

Beschreibung:

Die Klasse CBackprop beinhaltet alle Operationen und Variablen, die nötig sind um ein Feedforward-Backpropagation-Netz zu erstellen, zu trainieren und abzufragen.
Außerdem können Netze gespeichert und wieder geladen werden.

Klassen-Deklaration:

class CBackprop 
{
    public:
        CBackprop();                               // Konstruktor, Setzten von Startwerten.
        virtual ~CBackprop();                   // Dekonstruktor, Freigeben von allociertem Speicher.
   
     // Create erstellt ein neues Netz entsprechend den übergebenen Werten und allociert den Speicher für die Matrix der Verbindungsgewichte.
        void Create( int layer,                    // number layers of the backpropagation net
                            int *num_neurons,     // vector for number of neurons per layer,
                                                            // first the input layer, then the hidden layer,
                                                            // last the output layer
                           double bias,               // value of bias
                           double on,                 // value of active output neuron
                           double off );              // value of inactive output neuron
   
     // Delete löscht die Matrix der Verbindungsgewichte und das Feld der Trainingsdaten, dann wird der Speicher wieder freigegeben.
        void Delete( void );
        // InitWeights setzt die Startwerte der Verbindungsgewichte zufällig und gleichverteilt innerhalb des angegebenen Bereiches.
        void InitWeights( double bottom,     // bottom border of weights
                                   double top );        // top border of weights
        // Learn führt die Berechnungen für den Lernvorgang des Netzes aus.
        void Learn( double lvalue,               // value of learn installment
                          double moment,            // value of momentum
                          int num_LSteps,            // number of learn steps
                          CProgressCtrl *progr,  // pointer to progress-control of train-dialog to display the learn progress
   
                       CPage2 *page2 );
        // SetLearn setzt die Zahl der zu erwartenden Eingabevektoren und allociert dementsprechend den benötigten Speicherplatz.
        // Diese Funktion wird benötigt, wenn die Trainingsdatenvektoren nicht auf einmal, sondern der Reihe nach vektorenweise dem Objekt übergeben werden.

        void SetLearn( int num );                // number of vectors
        // SetLearnData übergibt das gesamte Feld der Trainingsdatenvektoren dem Objekt.
        void SetLearnData( double **lData,     // array of data vectors to learn
                                       int num );               // number of vectors
        // AddLearnData übergibt die Trainingsdaten vektorenweise dem Objekt.
        void AddLearnData( double *lData,     // vector of learn data
                                          int learntarget );   // number of output neuron, which must be activate by this data vector
        // DelLearnData löscht das Feld der Trainingsdaten des Objektes um neue Daten aufnehmen zu können.

        void DelLearnData( void );
        // Recognize führt eine Erkennung der übergebenen Daten durch, dann wird die Nummer des aktiven Ausgabeneurons zurückgegeben.
        int Recognize( double *inData );           // data vector to recognize
        // LoadNet lädt das Netz das in der Datei fname gespeichert ist.
        bool LoadNet( char *fname );              // name of file
        // SaveNet speichert das Netz in der Datei fname.
        bool SaveNet( char *fname,                                    // name of file
                               char *progname = "CBackprop",     // name of program, define the header of file, default: CBackprop
                               char *version = "1.0" );                    // name of program version
        // GetNetInfo liefert die Anzahl der Schichten des Backpropagationnetz und einen Vektor der die Anzahl der Neuronen pro Schicht enthält
        void GetNetInfo( int &layer,                    // number of layers
   
                                int *&numneuro );        // vector of number of neurons per layer, start with input layer

    protected:
        // Activation berechnet den Aktivationswert für das aktuelle Neuron während einer Lernphase oder einer Erkennungsphase.
        void Activation( int layer,          // current layer to activate
                                 int neuron );     // current neuron to activate

        friend UINT BLearnThread( LPVOID pParam );    // Lern-Thread für das Backpropagation-Netz

        double ***m_Weights;                    // array for the weights map
        double **m_Activation;                   // array of activation values for neurons
        double **m_LearnVectors;             // array of training vectors
        double m_bias;                                // value of bias
        double m_on;                                  // value of active output neuron
        double m_off;                                 // value of inactive output neuron
        bool m_create;                               // flag if a net is created with function create
        bool m_winit;                                 // flag if weights are initialize with function InitWeights
        int m_layer;                                    // number layers of the backpropagation net
        int m_numlv;                                  // number of learn vectors
        int m_ldidx;                                    // index for adding train data vector count
        int *m_numneuro;                          // vector for number of neurons per layer,
                                                             // first the input layer, then the hidden layer,
                                                             // last the output layer
};

 

(zum Anfang)

 


 

Klasse - CKohonen

 

Beschreibung:

Die Klasse CKohonen beinhaltet alle Operationen und Variablen, die nötig sind um ein Kohonen-Netz (SOM) zu erstellen, zu trainieren und abzufragen.
Außerdem können Netze gespeichert und wieder geladen werden.

Klassen-Deklaration:

class CKohonen 
{
    public:
        CKohonen();                         // Konstruktor, Setzten von Startwerten.
        virtual ~CKohonen();             // Dekonstruktor, Freigeben von allociertem Speicher.
   
     // Create erstellt ein neues Netz entsprechend den übergebenen Werten und allociert den Speicher für die Matrix der Verbindungsgewichte.
        void Create( int inNeurons,     // number of input neurons
                            int col_Map,       // number columns of feature map
                            int row_Map,     // number rows of feature map
                            double on,          // value of active output neuron
                            double off );       // value of inactive output neuron
   
     // Delete löscht die Matrix der Verbindungsgewichte und das Feld der Trainingsdaten, dann wird der Speicher wieder freigegeben.
        void Delete( void );
        // InitWeights setzt die Startwerte der Verbindungsgewichte zufällig und gleichverteilt innerhalb des angegebenen Bereiches.
        void InitWeights( double bottom,     // bottom border of weights
                                   double top );        // top border of weights
        // Learn führt die Berechnungen für den Lernvorgang des Netzes aus.

        void Learn( double lvalue,         // value of learn installment
                           int radius,               // radius of weight adaption range
                           int num_LSteps,     // number of learn steps
                           CProgressCtrl *progr,    // pointer to progress-control of train-dialog to display the learn progress
                          
CPage2 *page2 );
        // SetLearn setzt die Zahl der zu erwartenden Eingabevektoren und allociert dementsprechend den benötigten Speicherplatz.
        // Diese Funktion wird benötigt, wenn die Trainingsdatenvektoren nicht auf einmal, sondern der Reihe nach vektorenweise dem Objekt übergeben werden.

        void SetLearn( int num );                      // number of vectors
        // SetLearnData übergibt das gesamte Feld der Trainingsdatenvektoren dem Objekt.
        void SetLearnData( double **lData,     // array of data vectors to learn
                                       int num );               // number of vectors
        // AddLearnData übergibt die Trainingsdaten vektorenweise dem Objekt.

        void AddLearnData( double **lData,   // array of learn data of frequency points
                                         int
sampl );          // number of vectors of frequency points in lData
        // DelLearnData löscht das Feld der Trainingsdaten des Objektes um neue Daten aufnehmen zu können.

        void DelLearnData( void );
        // Recognize führt eine Erkennung der übergebenen Daten durch, dann wird ein Vektor der die Aktivationswerte der Ausgabeneuronen enthält zurückgegeben.
        double *Recognize( double **inData,    // array of data vectors to recognize
                                       int num );                // number of vectors
        // LoadNet lädt das Netz das in der Datei fname gespeichert ist.

        bool LoadNet( char *fname );               // name of file
        // SaveNet speichert das Netz in der Datei fname.
        bool SaveNet( char *fname,                                    // name of file
                               char *progname = "CKohonen",       // name of program, define the header of file, default: CKohonen
                               char *version = "1.0" );                    // name of program version
        // GetNetInfo liefert die Anzahl der Inputneuronen des Kohonennetz, sowie die Breite und die Länge der Kohonenkarte in Neuronen zurück.
        void GetNetInfo( int &numin,            // number of input neurons
                                    int &koh_h,           // number columns of feature map
                                   int
&koh_v );         // number rows of feature map

    protected:
        // Stimulation berechnet den Nettoinput für das aktuelle Neuron der Merkmalskarte während einer Lernphase oder einer Erkennungsphase.
        void Stimulation( int ind_row,    // index row of feature (weights) map
                                  int ind_col );   // index column of feature (weights) map

        friend UINT KLearnThread( LPVOID pParam );    // Lern-Thread für das Kohonen-Netz

        double ***m_Weights;         // array for the weights map
        double **m_InputVector;     // array for the feature vectors
        double *m_InputNeurons;    // vector of input neurons
        double m_on;                       // value of active output neuron
        double m_off;                       // value of inactive output neuron
        int m_numin;                         // number of input neurons
        int m_numv;                          // number of input vectors
        int m_numcol;                       // number columns of feature map
        int m_numrow;                     // number rows of feature map
        int m_maxcol;                      // column of winner neuron
        int m_maxrow;                     // row of winner neuron
        int m_ldidx;                          // index for adding train data vector count
        bool m_create;                     // flag if a net is created with function create
        bool m_winit;                       // flag if weights are initialize with function InitWeights
};

 

(zum Anfang)

 


 

Klasse - CPage1

 

Beschreibung:

Die Klasse CPage1 ist für das Aussehen und Verhalten der Karteikarte "Projekt verwalten" verantwortlich. Sie enthält die Deklaration und Definition der Dialog-Controls.

Klassen-Deklaration:

class CPage1 : public CPropertyPage
{
        DECLARE_DYNCREATE(CPage1)

    // Konstruktion
    public:
        CPage1();
        ~CPage1();

    // Dialogfelddaten
        //{{AFX_DATA(CPage1)
        enum { IDD = IDD_PAGE1 };
        int m_anzwrd;                           
// Variable für das Editfeld "Anzahl der zu lernenden Wörter"
        int m_anzfrq;                             
// Variable für das Editfeld "Anzahl der Frequenzstützpunkte"
        int m_anzbks;                            
// Variable für das Editfeld "Anzahl der versteckten Schichten" (Backpropagationnetz)
        CString m_anzbkn;
                    // Variable für das Editfeld "Anzahl von Neuronen pro Schicht" (Backpropagationnetz)
        int m_kohon_h;
                         // Variable für das Editfeld "Anzahl der Neuronen in horizontaler Richtung" (Kohonennetz)
        int m_kohon_v;
                         // Variable für das Editfeld "Anzahl der Neuronen in vertikaler Richtung" (Kohonennetz)
        CString m_words;                    
// Variable für das Editfeld "zu lernende Wörter"
    //}}AFX_DATA

    // Überschreibungen
        // Der Klassen-Assistent generiert virtuelle Funktionsüberschreibungen
        //{{AFX_VIRTUAL(CPage1)
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);    
// DDX/DDV-Unterstützung
        //}}AFX_VIRTUAL

    // Implementierung
    protected:
        // Generierte Nachrichtenzuordnungsfunktionen
        //{{AFX_MSG(CPage1)
        afx_msg void OnCreate();        // Definiert  das Verhalten des Button "Projekt erstellen"
        afx_msg void OnLoad();   
       // Definiert  das Verhalten des Button "Projekt laden"
        afx_msg void OnSave();   
        // Definiert  das Verhalten des Button "Projekt speichern"
        //}}AFX_MSG
        DECLARE_MESSAGE_MAP()

        // DelWords löscht die Liste der Wörter die das Netz lernen soll bzw. gelernt hat um eine neue Liste anlegen zu können, oder um den für die Liste allocierten
        // Speicher beim Programmende wieder freizugeben.

        void DelWords();

        // Membervariablen
        bool m_create;            // Flag welches auf TRUE gesetzt wird, wenn ein Netz erstellt wurde (wird für die Speicherfunktion benötigt)
};

 

(zum Anfang)

 


 

Klasse - CPage2

 

Beschreibung:

Die Klasse CPage2 ist für das Aussehen und Verhalten der Karteikarte "Netz trainieren" verantwortlich. Sie enthält die Deklaration und Definition der Dialog-Controls.

Klassen-Deklaration:

class CPage2 : public CPropertyPage
{
        DECLARE_DYNCREATE(CPage2)

    // Konstruktion
    public:
        CPage2();
        ~CPage2();

    // Dialogfelddaten
        //{{AFX_DATA(CPage2)
        enum { IDD = IDD_PAGE2 };
        CProgressCtrl m_datprogr;
        // Steuervariable für das Progress-Control zum Anzeigen des Ladenfortschritts der Trainingsdaten
        CProgressCtrl m_backprogr;    
// Steuervariable für das Progress-Control zum Anzeigen des Lernfortschritts des Backpropagationnetz
        CProgressCtrl m_kohprogr;
       // Steuervariable für das Progress-Control zum Anzeigen des Lernfortschritts des Kohonennetz
        double m_blrate;
                        // Variable für das Editfeld "Lernrate" (Backpropagationnetz)
        int m_blschritte;                         
// Variable für das Editfeld "Lernschritte" (Backpropagationnetz)
        double m_bmoment;                 
// Variable für das Editfeld "Momentum" (Backpropagationnetz)
        double m_bogr;
                        // Variable für das Editfeld "Gewicht-Obergrenze" (Backpropagationnetz)
        double m_bugr;                        
// Variable für das Editfeld "Gewicht-Untergrenze" (Backpropagationnetz)
        double m_klrate;                      
// Variable für das Editfeld "Lernrate" (Kohonennetz)
        int m_klschritte;
                        // Variable für das Editfeld "Lernschritte" (Kohonennetz)
        double m_kogr;
                        // Variable für das Editfeld "Gewicht-Obergrenze" (Kohonennetz)
        int m_kradius;
                          // Variable für das Editfeld "Anpassungsradius" (Kohonennetz)
        double m_kugr;                       
// Variable für das Editfeld "Gewicht-Untergrenze" (Kohonennetz)
        int m_anzmst;                          
// Variable für das Editfeld "Anzahl der Muster pro Wort"
        CString m_lstatusk;                 
// Variable für das Staticfeld "Lernstatus" (Kohonennetz)
        CString m_lstatusb;
                  // Variable für das Staticfeld "Lernstatus" (Backpropagationnetz)
        //}}AFX_DATA

    // Überschreibungen
        // Der Klassen-Assistent generiert virtuelle Funktionsüberschreibungen
        //{{AFX_VIRTUAL(CPage2)
        public:
        virtual BOOL OnSetActive();           
// setzt einige Startwerte wenn der Dialog angezeigt bzw. aktiviert wird
        virtual BOOL OnKillActive();            // prüft ob ein Thread aktiv ist, dann kann die Karteikarte nicht verlassen werden
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);
        // DDX/DDV-Unterstützung
        //}}AFX_VIRTUAL

    // Implementierung
    protected:
        // Generierte Nachrichtenzuordnungsfunktionen
        //{{AFX_MSG(CPage2)
        afx_msg void OnTLoad();                  // Definiert das Verhalten des Button "Trainingsdaten laden"
        afx_msg void OnBackWeights();   
     // Definiert das Verhalten des Button "Gewichte initialisieren" (Backpropagationnetz)
        afx_msg void OnBackTrain();   
         // Definiert das Verhalten des Button "Netz trainieren" (Backpropagationnetz)
        afx_msg void OnKohWeights();   
      // Definiert das Verhalten des Button "Gewichte initialisieren" (Kohonennetz)
        afx_msg void OnKohonTrain();   
      // Definiert das Verhalten des Button "Netz trainieren" (Kohonennetz)
        //}}AFX_MSG
        DECLARE_MESSAGE_MAP()

        friend UINT TLoadThread( LPVOID pParam );    // Laden-Thread für die Trainingsdaten

        // Membervariablen
        double ****m_FeatureVec;   // Das 4-dimensionale Feld enthält die Merkmalsvektoren der Musterdateien jedes Wortes, die aus den Wave-Dateien
   
                                                   // mittels der FFT berechnet wurden. D.h. dieses Feld enthält alle Trainingsdaten, die dem Netz zum Lernen vorgelegt
                                                      // werden sollen.

        int m_anzsampl;            // Diese Variable enthält die Anzahl, wie häufig einer Wave-Datei Werte für eine Fouriertransformation entnommen werden.
        int m_anzwrd;              // speichert die Anzahl der gelernten Wörter, wird benötigt um m_FeatureVec wieder freizugeben
        bool m_newktdat;        // Dieses Flag wird auf TRUE gesetzt wenn neue Trainingsdaten geladen wurden, d.h. wenn das Kohonennetz
                                           // die Daten neu einlesen muss, danach wird das Flag auf FALSE gesetzt.

        bool m_newbtdat;        // Dieses Flag wird auf TRUE gesetzt wenn neue Trainingsdaten geladen wurden oder wenn das Kohonennetz neu trainiert wurde,
                                           // d.h. wenn das Backpropagationnetz die Daten neu einlesen muss, danach wird das Flag auf FALSE gesetzt.

};

 

(zum Anfang)

 


 

Klasse CPage3

 

Beschreibung:

Die Klasse CPage3 ist für das Aussehen und Verhalten der Karteikarte "Erkennen" verantwortlich. Sie enthält die Deklaration und Definition der Dialog-Controls.

Klassen-Deklaration:

class CPage3 : public CPropertyPage
{
        DECLARE_DYNCREATE(CPage3)

    // Konstruktion
    public:
        CPage3();
        ~CPage3();

    // Dialogfelddaten
        //{{AFX_DATA(CPage3)
        enum { IDD = IDD_PAGE3 };
        CListBox m_wlist;               
// Steuervariable für das ListBox-Control, hier werden die gelernten Wörter des Netzes angezeigt
        CString m_rwort;                
// Variable für das Staticfeld "erkanntes Wort", hier wird das Wort angezeigt, das das Netz aus der Wave-Datei erkannt hat
       
CString m_wavedat;            // Variable für das Staticfeld "geöffnete WAVE-Datei", hier wird der Name der aktuell geöffneten Wave-Datei angezeigt
        BOOL m_showb;                // enthält den Status der Checkbox "Ausgabe des Backpropagationnetz anzeigen"
        BOOL m_showk;
                // enthält den Status der Checkbox "Ausgabe des Kohonennetz anzeigen"
        //}}AFX_DATA

    // Überschreibungen
        // Der Klassen-Assistent generiert virtuelle Funktionsüberschreibungen
        //{{AFX_VIRTUAL(CPage3)
        public:
        virtual BOOL OnSetActive();          
// setzt einige Startwerte wenn der Dialog angezeigt bzw. aktiviert wird
        virtual BOOL OnKillActive();          // deaktiviert die Ausgabefenster der Netze, wenn der Dialog inaktiv wird
        protected:
        virtual void DoDataExchange(CDataExchange* pDX); 
       // DDX/DDV-Unterstützung
        //}}AFX_VIRTUAL

    // Implementierung
    protected:
        // Generierte Nachrichtenzuordnungsfunktionen
        //{{AFX_MSG(CPage3)
        afx_msg void OnRecognize();        // Definiert das Verhalten des Button "Wort erkennen"
        afx_msg void OnWave();             
// Definiert das Verhalten des Button "WAVE-Datei öffnen"
        //}}AFX_MSG
        DECLARE_MESSAGE_MAP()

        // Membervariablen
        bool m_load;        // Dieses Flag wird auf TRUE gesetzt, wenn eine Wave-Datei geladen wurde.
        char m_pfile[200];         // Auf diesem Vektor wird der Name der geöffneten Wave-Datei gespeichert, um sie zur akustischen Kontrolle abspielen zu können.
        CDialog m_pDlgK;        // Steuervariable für den Ausgabedialog des Kohonennetz
        CDialog m_pDlgB;        // Steuervariable für den Ausgabedialog des Backpropagationnetz
};

 

(zum Anfang)

 


 

Klasse - CTransform

 

Beschreibung:

Die Klasse CTransform enthält die Operationen um aus den Daten einer Wave-Datei eine Diskrete-Fouriertransformation durchführen zu können.
Dazu wird der Algorithmus der Fast-Fouriertransformation benutzt.

Klassen-Deklaration:

class CTransform 
{
    public:
        CTransform();                             // Konstruktor, initialisiert den Wert der Konstante "c_nsptchk"
        virtual ~CTransform();                // Dekonstruktor, gibt allocierten Speicher wieder frei
        void Init( int samples );                // initialisiert das Objekt mit den benötigten Werten,
   
                                                       // samples - enthält die Anzahl der zu ermittelten Frequenzstützpunkte
        void SetWavData( int *pData, int nDataSize );  // übergibt die Wave-Daten aus denen die Frequenzstützpunkte berechnet werden sollen
                                                                                // pData - enthält den Vektor der Wave-Daten
                                                                                // nDataSize - enthält die Größe des Wave-Daten-Vektors

        double **GetFreqData( void );    // gibt ein Array zurück, das die berechneten Frequenzdaten enthält
                                                           // der erste Index bezeichnet den jeweiligen Abtastpunkt des Wave-Stroms,
                                                           // der zweite Index bezeichnet die einzelnen ermittelten Frequenzstützpunkte des jeweiligen Abtastpunktes

        void Transform( void );        // initiiert die Berechnung der Frequenzdaten
        int GetAnzSamples( void ) { return c_nsptchk; }    // gibt die Anzahl der Abtastpunkte des Wave-Stroms zurück

    protected:
        void FFT(int start, int vektor);        // Funktion die die Fast-Fourier-Transformation durchführt
        int Permute(int index, int samples, int power);    // wird für die FFT-Funktion benötigt

        int m_Samples;                // enthält die Anzahl der zu ermittelten Frequenzstützpunkte
        bool m_Freq;                  // Flag, das auf TRUE gesetzt wird nachdem die Frequenzdaten ermittelt wurden

        int m_nDataSize;                // enthält die Größe des Wave-Daten Vektors
        double *m_pWavData;      // enthält den Pointer auf den Wave-Daten Vektor
        double **m_FreqData;      // enthält das Array der ermittelten Frequenzdaten,
                                                 // der erste Index bezeichnet den jeweiligen Abtastpunkt des Wave-Stroms,
                                                 // der zweite Index bezeichnet die einzelnen ermittelten Frequenzstützpunkte des jeweiligen Abtastpunktes

        const int c_nsptchk;        // Wert der Konstante wird im Konstruktor gesetzt, enthält die Anzahl der Abtastpunkte des Wave-Stroms, aktuell 100
};

 

(zum Anfang)

 


 

Klasse - CWave

 

Beschreibung:

Die Klasse CWave enthält die Operationen um eine Wave-Datei öffnen und die für die Fouriertransformation benötigten akustischen Daten extrahieren zu können.

Klassen-Deklaration:

class CWave 
{
    public:
        CWave();                               // Konstruktor, initialisiert die Startwerte
        virtual ~CWave();                   // Dekonstruktor, gibt allocierten Speicher wieder frei
        bool Read(char *fname);         // liest die Daten der Wave-Datei "fname" ein
        int *GetWavData(int &size);   // gibt einen Datenvektor zurück, der die Datenwerte
                                                      // der Wave-Datei enthält

    protected:
        BYTE *m_pFmt;              // Pointer zum Speichern der Wave-Datei Format-Informationen
        BYTE *m_pData;             // Pointer zum Speichern der Wave-Daten
        int m_nFmtSize;                // enthält die Groesse des Formatblockes der Wave-Datei in Byte
        int m_nDataSize;               // enthält die Groesse des Datenblockes der Wave-Datei in Byte
        const int m_RecordSize;    // hier wird im Konstruktor die Groesse des Datenblockes, bzw.
                // die Anzahl der Datenelemente, der Wave-Datei festgelegt die dem Programm zur
                // weiteren Verarbeitung übergeben werden sollen.
                // Momentan ist sie auf eine Aufnahmedauer von 1s bei einer Samplingrate von 22050Hz
                // festgelegt, d.h. auf 22050.
};

 

(zum Anfang)

 


Jens Fiedler, 22. November 2001