Sprachausgabe mit dem IPC #####

Die natürlichste Form der Kommunikation bei uns Menschen ist die Sprache. Doch bisher gab es kaum kleine Embedded-Geräte, die sich diesen »Luxus« leisten konnten. Dabei ist das gar nicht so schwer.

Die natürlichste Form der Kommunikation bei uns Menschen ist die Sprache. Doch bisher gab es kaum kleine Embedded-Geräte, die sich diesen »Luxus« leisten konnten. Dabei ist das gar nicht so schwer.

Eine Stimme kann einen positiven Eindruck beim Nutzer eines Embedded Systems hinterlassen. So lassen sich Befehle bestätigen, Betriebszustände melden oder Temperaturen laut ansagen. Jedoch wurde die Stimmenausgabe bisher als furchtbar schwierig und teuer angesehen. Tatsächlich genügt ein 8-Bit-Mikrocontroller der »PIC«-Serie von Microchip mit Pulsweitenmodulator (PWM), um einem eingebetteten System preiswert und einfach eine Stimme zu geben.

Eine Methode zur Sprachcodierung ist die so genannte »Adaptive Differential Pulse Code Modulation« (ADPCM), ein Verfahren zur Digitalisierung analoger Signale. ADPCM nutzt die starke Korrelation zwischen aufeinander folgenden Sprachproben und codiert so nur die Differenz zwischen vorhergesagtem und realem Signal. Bei der Wiedergabe oder Decodierung werden die jeweils folgenden Werte vorausberechnet. ADPCM bietet eine effiziente Kompression mit qualitativ guter Sprachwiedergabe.

Es gibt unterschiedliche Typen des ADPCM-Algorithmus. Der Algorithmus der »Interactive Multimedia Association « (IMA) reduziert den mathematischen Aufwand erheblich, indem er viele Operationen vereinfacht und, wo es möglich ist, Nachschlagetabellen (Lookup Tables) verwendet. Daher ist dieser Algorithmus eine gute Wahl für 8-Bit-Mikrocontroller. Da die Sprachwiedergabe die Hauptaufgabe darstellt, nimmt ein PC-Programm die Codierung vor, während der Mikrocontroller für die Decodierung verantwortlich ist. Für eine interaktive Wiedergabe werden die »Sprachschnipsel« in individuelle, adressierbare Dateien unterteilt. Für die Sprachausgabe eines numerischen Temperaturwertes zum Beispiel werden die Zahlen »Eins« beziehungsweise »Ein« bis »Neun«, »Zehn« bis »Neunzehn«, »Zwanzig«, »Dreißig« und so weiter bis »Neunzig « sowie »Und« als Bindewort als separate Dateien aufgezeichnet. Soll also die Temperatur 21 °C angegeben werden, so benutzt das System drei Dateien nacheinander: »Ein«, »Und«, »Zwanzig«. Für die Speicherung und Abfrage der individuellen Sprachdateien kommt ein einfaches Dateisystem zum Einsatz.

Die Größe des Speichers für die Sprachdateien hängt von der Anzahl der Bits, der Abtastrate und der Datenmenge ab. Für eine gute Sprachwiedergabe (toll quality) beträgt die Auflösung 16 Bit bei einer Abtastrate von 8000 Samples pro Sekunde, was einer Bandbreite von 4000 Hz entspricht. Eine Sekunde Sprache nimmt somit 16 000 Byte ein. Sobald die Sprachdatei über den »IMA ADPCM«-Algorithmus codiert und komprimiert ist, ist sie nur ein Viertel so groß wie das Original. Abhängig von der Sprachmenge, die für eine Anwendung erforderlich ist, kann man diese im Programmspeicher des Mikrocontrollers oder in einem externen seriellen Flash-Speicher hinterlegen. Ein Flash-Speicher mit 1 MBit (128 KByte) kann etwa 32 Sekunden Sprache speichern. Das Flussdiagramm in Bild 1 fasst die Einzelschritte zusammen. Als erstes nimmt man die Stimme als WAV-Datei auf einem PC auf. Danach wird die Aufnahme über ein entsprechendes Programm bearbeitet, auf 8000 Hz umgerechnet (Resampling) und als nicht vorzeichenbehaftete, 16 Bit breite Little-Endian-Mono-Datei gespeichert. Als Drittes codiert man die Datei mittels des »IMA ADPCM«-Algorithmus und speichert sie als Binärdatei. Viertens werden alle Dateien in einem Dateisystem zusammengefasst. Zum Schluss legt man die Dateien im Mikrocontroller oder externen Speicher ab. Bild 2 zeigt die Hardware für dieses System. Der Mikrocontroller ruft die Sprachdateien für die Wiedergabe im Speicher ab und decodiert sie mit Hilfe des PWM-Moduls. Das Ausgangssignal des PWM-Moduls läuft über einen Bandpass mit 4000 Hz Eckfrequenz. Anschließend wird das resultierende analoge Signal verstärkt und über einen Lautsprecher ausgegeben. Der Aufwand für die Sprachaufnahme, die Codierung im ADPCM-Format und die Speicherung ist gering, und so erhält ein Embedded System tatsächlich eine natürliche Stimme. Das ist allerdings noch nicht alles. Da es sich bei den Dateien ja um Aufzeichnungen handelt, lassen sich verschiedene Klänge, Klingel- und Summertöne einführen. Die ganze Sache lässt sich quasi beliebig erweitern – Hauptsache, dem Anwender gefällt’s. (rh)