1.2 theoretische Grundlagen

   
 

Bevor die Sounddateien zur Erkennung der selbstorganisierenden Karte präsentiert werden können, müssen diese vorbereitet werden.

Vorbetrachtung

Nach der Studie einiger Literatur ([1], [2]) sind wir zum Entschluss gekommen, unsere Audiodaten in Zeitfenster mit einer Länge von ca. 23ms einzuteilen. Weiterhin ist es für die Worterkennung völlig ausreichend, die Audiodaten im Monoformat aufzunehmen.
Weiterhin kamen wir durch das Abtasttheorem von Shannon und Someya, welches in [1] auf Seite 46 f. beschrieben wird, zum Entschluss, dass eine Abtastrate (Samplefrequenz) von 22050 Hz ausreicht um die menschliche Sprache voll zuerfassen. Das Abtasttheorem besagt, dass aus einer Fourier-transformierten das Sprachsignal vollständig wieder rekonstruierbar ist, wenn die doppelte Grenzfrequenz des Audiosignals benutzt wird. Da die menschliche Sprache einen Dynamikbereich von 3 - 8kHz besitzt, würde eine Frequenz von 16kHz ausreichen. Durch diesen Schritt ist sichergestellt, dass unsere die Fouriertransformierte repräsentativ unser Sprachsignal darstellt. Nachdem diese grundlegenden Eigenschaften festgelegt sind werden die Audiodaten vorbereitet.

Hier bedarf es einer kleinen Diskussion. Beim Aufnehmen der Audiodaten über ein Mikrophon, hängt die Qualität der Daten sehr stark von der Qualität des Microphons und der Soundkarte ab. Es ist möglich das Grundrauschen der Sounkarte zu bestimmen und dieses aus den Audiodaten zu filtern. Jedoch wäre dieser Vorgang sehr aufwendig und ist daher in diesem Programm nicht realisiert.

Die analogen Audiosignale werden von der Soundkarte in digitale Signale umgewandelt. Dies erfolgt durch die Abtastung der analogen Audiosignale die als Schwingungen vorliegen. Dadurch werden die stetigen analogen Signale diskretisiert. Dadurch enstehen Zahlefolgen, meist in einen 16 Bit großen Zahlenraum. Die Abtastrate gibt die Qualität an und wie oben schon diskutiert reichen 22kHz aus.

Merkmalsextraktion

Zuerst werden die Audiodaten gefiltert. So wird die Stille am Anfang und am Ende der Sounddatei entfernt. Dies erfolgt durch Analyse der auftretenden Energie in einem entsprechenden Zeitfenster der Sounddatei. Übertrifft die auftretende Energie den festgelegenen Grenzwert nicht, dann wird dieses Zeitfenster nicht mit zur Verarbeitung genutzt und verworfen. Das Energielimit ist von dem maximalen Samplewert der Audiodaten abhängig. Damit wird gewährleistet, dass Audiodaten mit geringer Lautstärke nicht gelöscht werden und dass bei Audiodaten mit hoher Lautstärke das Rauschen nicht mit genutzt wird.

Nachdem die relevanten Daten zur Weiterverarbeitung gefunden wurden, müssen alle Zeitfenster bearbeitet werden. Um relevante Daten hervorzuheben gibt es verschiedene mathematische Formeln - im Fachjargon auch Preemphase Filter genannt. So gibt es das Rechteckfenster, welches die Sounddatei nicht beeinflusst.


Ein weiteres sehr oft benutztes Fenster ist das Hammingfenster. Dieses schwächt die auftretenden Daten am Begin und am Ende der Soundaten ab.

Alle Formeln zielen darauf ab, die Tiefpasscharakteristik der Sprache auszugleichen. Da wir aber die Stille am Anfang und Ende durch die Energieanlyse weggeschnitten haben, ist es nicht mehr nötig ein einschränkendes Fenster zu benutzen. Daher nutzen wir das Rechteckfenster.

Nun zum wohl schwierigsten Schritt der Vorverarbeitung - der Fourier Transformation. Um das Signal unabhängig von der Zeit zu analysieren und es damit mit anderen Zeitfenstern anderer Audiodaten zu vergleichen, ist es notwendig die Daten eines Zeitfensters in das Frequenzspektrum mit Hilfe der Fouriertransformation umzuwandeln.
Nach der gründlichen Studie von [3] der in seinem Abschnitt "DFT a pied" sehr gut beschreibt wie die Fouriertransformation funktioniert, war es kein Problem mehr dies umzusetzen.

Die Fouriertransformation geht auf den französischen Mathematiker Jean Baptiste Joseph Fourier zurück. In unserem Fall benötigen wir die diskrete Fourier Transformation, da unser Audiosignal diskret vorliegt. Die stetige und die diskrete Fourier Transformation besitzen einen hohen Rechenaufwand und sind daher für unser Problem nicht brauchbar. Jedoch haben J.W. Cooley und J.W. Turkey 1965 einen effektiven Algorithmus vorgestellt der den Rechenaufwand minimiert, die sogenannte Fast Fourier Transformation (FFT). Die Grundidee aller FFT-Algorithmen besteht darin, eine DFT der Länge N für eine Faktorisierung N=n1n2...nk, (n1,n2,...,nk) rekursiv durch DFT's der kleineren Längen n1,n2,...,nk : DFTN = DFTnk(DFTnk-1(...(DFTn-1)...)) zu berechnen. Durch die Rekursion wird der Aufwand der Multiplikationsschritte um ln(n) verkleinert. Der Nachteil dieses Algorithmus ist, dass die Anzahl der Musterwerte ein Vielfaches von 2 sein muss.

Um kurz zu beschreiben worum es bei der Fouriertransformation geht, möchte ich nur wichtige Punkte aufzählen:
Bei der Transformation wird ein Signal, bei uns Audiosignal, in viele Sinus- und Cosinusfrequenzanteile zerlegt. Es gibt eine sogenannte Grundschwingung und eine Vielzahl von Oberschwingungen. Die Grundschwingung besitzt den niedrigsten Frequenzanteil. Alle weiteren Oberschwingungen werden mit steigender Frequenz auf die Grundschwingung aufgeprägt. Alle Schwingungen zusammengefügt ergeben das originale Audiosignal.

Formel der diskreten Fourier Transformation:

 

Durch Nutzung allgemein verfügbarer Algorithmen ist dieser Schritt der Umwandlung kein Problem. Nachdem die Frequenzanteile berechnet wurden, ist es nötig die Daten zu komprimieren.

Zuerst ist es nicht nötig den vollen Frequenzanteil von 22050 Hz zu nutzen. Um eine gute Spracherkennung zu gewährleisten reicht die Qualität des Telefons aus. Diese liegt im Bereich zwischen 500 und 5000 Hz. Daher streichen wir die Frequenzanteile unter 500 Hz und über 5000 Hz aus den Daten.
Weiterhin lassen sich die Frequenzanteile zu mehreren Frequenzbändern zusammenfassen. Wir haben in unserem Fall jeweils 8 Frequenzanteile zu einem Frequenzband zusammengefasst. Dabei haben wir das arithmetische Mittel aller 8 Frequenzanteile benutzt.

Durch die Komprimierung der Daten entstand unser Featurevektor - mit 11 Elementen pro Zeitfenster.

Sprachtheorie

Die kleinste in der Sprachtheorie vorkommende bedeutungunterscheidende Einheit ist das Phonem. Aus ihnen bilden sich Silben und aus diesen wiederrum Wörter. In der deutschen Sprache gibt es ca. für jedes Vokal, jeden Konsonanten und für jeden Umlaut ein entsprechendes Phonem. So gibt es in der deutschen Sprache (ca.) 34 Phoneme. An dieser Stelle verweise ich auf das Buch "Automatische Spracherkennung" ([2]), welches sich tiefer mit der Theorie der Sprache befasst.
Wichtig für unser Problem ist, dass wir annehmen, dass Phoneme, in der Aussprache, eine durchschnittliche Dauer von ca. 23 ms haben. Genau diese Länge haben wir für die Fenster genommen, in welche wir die Audiodaten aufteilen. Demnach repräsentiert nach der Datenvorbereitung jedes Fenster ca. ein Phonem.
Ein Phonem - ein 23 ms langes Fenster - wird also durch einen 11 Elemente grosse Featurevektor charakterisiert.

Neronale Informationsverarbeitung

Zur Worterkennung in unserem Beleg verwendeten wir eine Self Organizing Map ([1]) mit einer so genannten Goldberg Schicht.
Ein Self Organizing Map, im weiteren SOM abgekürzt, besteht aus 2 Schichten von Neuronen. Die erste ist der Input Layer. Sie enthält ebensoviele Neuronen wie der Featurevektor lang ist. Darüber gelagert ist die s.g. Kohonenschicht - nach dem Entwickler der SOM's T. Kohonen. Sie besteh aus einer Vielzahl von Neuronen, wobei die Anzahl der Aufgabe angepasst wird.
Der Input Layer und der Kohonen Layer sind vollständig miteinander verbunden. Somit haben alle Neuronen einen n Elemente grossen Gewichtsvektor - wobei n die Grösse des Input Layer ist.
Die von uns verwendete SOM ist stets 2 dimensional und quadratisch.

Die selbständige Organisation der SOM läuft unter folgenden Vorgaben ab:

Es wird das Neuron der Kohonenschicht zum Winner erklärt, welches den geringsten Abstand zum angelegten Input hat. Wir verwenden für diese Entscheidung den Euklidischen Abstand zwischen den beiden Vektoren:

Die Lernrate fällt linear mit der Anzahl der durchgeführten Organissationsschritte.

Die Grösse der Nachbarschaft des Winnerneurons ist abhängig von der aktuellen Lernrate alpha. Somit wird der Radius auch linear kleiner. Dadurch ist der Anfangsbereich etwa so gross wie die Hälfte der Fläche der gesamten SOM.

Die Anpassung der Gewichte und damit die Neuordung der SOM unterscheidet sich nach die Position des entsprechenden Neurons. Das Winnerneuron bekommt die grösst mögliche Anpassung.

Die Neuronen welche sich im Änderungsbereich befinden (Nachbarschaft durch Radius bestimmt) bekommen die Anpassung modifiziert mit dem Faktor 0.5.



Die SOM durchläuft während ihrer Organistionsphase 1000 Ordnungschritte. Die intitiale Grösse der von uns verwendeten SOM beträgt 6 mal 6 Neuronen. 36 Neuronen bieten genug Platz für eine Bereichsbildung der maximal 34 möglichen Phoneme. Die Gewichtsvektoren werden mit Zufallswerten aus dem möglichen Werteberich [-20 , 130] initialisiert. Die SOM ist an den Enden nicht geschlossen. Somit werden zu ändernde Bereiche am Rand abgschnitten.

 

Über der SOM befindet sich ein anderes neuronales Netz welches Goldberg Schicht genannt wird. Es besteht nur aus einem Input Layer und einem Output Layer. Die Grösse des Input Layer ist gleich gross der Anzahl der Neuronen in der SOM.
Der Output Layer ist in unserem Fall 10 Neuronen gross. Wir wollen durch den resultierenden Output Vektor die zu erkennenden Wörter codieren. Da bei diesem Beleg nur die prinzipielle Arbeitsweise im Blickpunkt steht, genügte es uns, 10 Wörter erkennen zu können. Nichts desto trotz ist es möglich mehr Wörter zu unterstützen.
Der Signalbereich des Outputs ist [-1 , 1 ]. Die verschieden Wörter sollen durch unterschiedliche Positionen und Anzahl des Wertes 1 codiert sein.
So kann beispielsweise der Output [ -1, -1, -1, -1, -1, -1, -1, -1, -1, 1 ] das erste Wort repräsentieren.
Die Lernstrategie der Goldberschicht ist FeedForward. Der Inputvektor eines Lernschrittes repräsentiert den SOM Ouput für ein Wort. Für das entsprechende Wort werden die Winnerneuronen aller Phoneme ermittelt. Wird ein Neuron mehrmals als Winner erkannt, wird die entsprechende Wert im Inputvektor aufsummiert. Mit diesem Vektor wird dann ein Lernschritt vollzogen bevor das nächstes Wort behandelt wird.

Entwicklung

Unsere Anwendung Word Recognition wurde mit Java 1.4.1 entwickelt.
Ein Hauptaugenmerk bei der Entwicklung war die Wiederverwendbarkeit der Klassen. So kann zum Beispiel die Klasse SelfOrganizingMap auch für andere Problemlösungen genutzt werden. Die Klassenbeschreibungen und die UML Diagramme sind im Anhang: UML Dokumentation aufgeführt.
Die Quellen, die entsprechenden UML Diagramme und die JavaDocumentation findet auch man im Downloadbereich.