Sprachbefehle mit FFTW?



  • Mahlzeit!

    Ich arbeite derzeit an einem Bot, welcher mittels einfachen Worten gesteuert werden können soll. Mut machte mit ein Bekannter, welcher sagte man könne so etwas mit der FFT realisieren. Nun bin ich über FFTW gestolpert, aber was ich da lese kommt mir vor wie ein griechisches Dorf. Ich programmiere in C++.

    Ich verwende für das Projekt einen Raspberry Pi 3 mit USB Soundkarte. Das aufnehmen und abspielen über diese Soundkarte funktioniert derweil schon ausgezeichnet. Nur wie ich nun das aufgezeichnete Array in FFTW nutzen können soll ist mir komplett gar nicht klar. Hatte bislang auch mit Sound eigentlich nichts am Hut.

    Hat hier einer Erfahrung mit FFTW und kann mir Helfen da auf Kurs zu kommen?


  • Mod

    Ich glaube, dein Bekannter hat das nicht so ganz ernst gemeint. Eine Fouriertrafo (Weißt du überhaupt, was das ist?) ist eine ganz frühe Vorstufe in der Signalverarbeitung¹, damit man überhaupt anfangen kann, irgendwie damit zu arbeiten. Ja, das ist ganz sicher auch eine Vorstufe der Spracherkennung. Aber von dort aus ist es noch ein ganz weiter Weg, und vor allem liegt auf diesem Weg die eigentlich schwierige Arbeit. Wenn du schon Probleme hast, eine einfache und gut dokumentierte Bibliothek zu benutzen oder dir vorzustellen, was diese überhaupt macht, wirst du nicht den Hauch einer Chance haben, selber eine Spracherkennung zu entwickeln. Denk nur mal da dran, wie überaus mäßig die Leistungsfähigkeit professioneller Spracherkennungssysteme selbst nach jahrzehntelanger Forschung noch ist. Die haben ja auch noch Schwierigkeiten, am Telefon bloß zehn Ziffern sauber zu unterscheiden.

    Vielleicht guckst du dich lieber mal um, ob es fertige Spracherkennungsbibliotheken gibt. Du sagst ja, das du nur ein paar Worte unterscheiden möchtest, das muss also nicht unbedingt das Beste vom Besten sein

    ¹: Beziehungsweise eine von mehreren üblichen, davon aber mit Abstand die üblichste.



  • ¹: Beziehungsweise eine von mehreren üblichen, davon aber mit Abstand die üblichste.

    Wie darf ich das verstehen?


  • Mod

    Hirnfrei schrieb:

    ¹: Beziehungsweise eine von mehreren üblichen, davon aber mit Abstand die üblichste.

    Wie darf ich das verstehen?

    Dass in diesem Forum jede Menge Klugscheißer rumlaufen, die sofort darauf angesprungen wären, wenn ich gesagt hätte, dass FT der erste Schritt einer Signalverarbeitungskette wäre, anstatt nur ein üblicher. Die kämen dann sofort aus den Löchern gesprungen und würden schreien, dass Wavelets immer wichtiger würden, usw.

    Bei deinem Problem wird dir diese Erkenntnis jedoch überhaupt nicht helfen, daher war es auch nur eine Nebenbemerkung.



  • Ja Klugscheisser gibt es leider überall.

    Gibt es eigentlich für die Google Spracherkennung eine Lib für C++? Ich will zwar immer noch lernen wie das mit FTT und darüber hinaus funktioniert (nur weil ich mit der Lib noch nichts anfangen kann würde ich da noch keine voreiligen Schlüsse ziegen ^^), aber für schnelle Ergebnisse wäre Google denke ich mal die bessere Wahl. Nur finde ich dafür nichts.


  • Mod

    Hirnfrei schrieb:

    Gibt es eigentlich für die Google Spracherkennung eine Lib für C++?

    Das Ding in der Cloud? Das hat eine HTTP-Schnittstelle und ist somit von der Programmiersprache unabhängig. Der Code bleibt bei Google und wird gar nicht auf dem lokalen Rechner ausgeführt.



  • SeppJ schrieb:

    Dass in diesem Forum jede Menge Klugscheißer rumlaufen, die sofort darauf angesprungen wären, wenn ich gesagt hätte, dass FT der erste Schritt einer Signalverarbeitungskette wäre, anstatt nur ein üblicher. Die kämen dann sofort aus den Löchern gesprungen und würden schreien, dass Wavelets immer wichtiger würden, usw.

    Ich bin so einer. 😉 Wavelets halte ich in diesem Zusammenhang tatsaechlich fuer die natuerlichere Beschreibung. Woerter oder Phoneme oder so sind halt zeitlich begrenzt und der zeitliche Zusammenhang und die zeitliche Ordnung spielen hier sicherlich eine Rolle. In einer Waveletdarstellung hat man diese Zusammenhaenge direkt gegeben, in einer Fourierdarstellung kommt man da nicht so direkt heran.

    @SeppJ: Mir ist klar, dass Dir solche Dinge bewusst sind. Das war mehr als Hinweis an den Threadersteller gedacht.



  • Hirnfrei schrieb:

    Gibt es eigentlich für die Google Spracherkennung eine Lib für C++? Ich will zwar immer noch lernen wie das mit FTT und darüber hinaus funktioniert (nur weil ich mit der Lib noch nichts anfangen kann würde ich da noch keine voreiligen Schlüsse ziegen ^^)

    "Spracherkennung" ist eine enorm komplexe Aufgabenstellung. Wenn Du lernen moechtest, mit Fouriertransformationen zu arbeiten, solltest Du wohl erstmal in entsprechende Mathebuecher oder Buecher zur Signalverarbeitung gucken. ...und dann einen grafischen Equalizer oder aehnliches bauen. Das waere ein realistisches Ziel fuer den Einstieg.



  • fang vielleicht mal mit Matlab oder Octave (Open Source!) an - diese Programmpakete haben bereits alles dabei was du so brauchst (auch FFT).
    Du kannst Ton aufnehmen, FFT berechnen, Plots ausgeben, ...

    Wenn du dann mal einen Prototypen hast, der brauchbar funktioniert, kannst du das immer noch nach C++ übersetzen. Davor hat das wenig Sinn, da du bei C++ viel zu viel Zeit mit der Sprache und diversen Details beschäftigt bist (z.B. "wie bekomm ich fftw zum Laufen?").

    Du müsstest dir halt auch ein bisschen die Theorie ansehen. Mir fällt dazu aber leider nichts einfaches ein. Wir hatten damals "Doblinger - Zeitdiskrete Signale und Systeme: Eine Einführung in die grundlegenden Methoden der digitalen Signalverarbeitung", aber ohne Mathe wirst halt nicht weit kommen.

    P.S.: deine Aufgabe ist viel zu komplex. Fang klein an, z.B. versuche ein Tonsignal zu filtern, also z.B. die hohen Frequenzen wegzuschneiden.



  • das simpelste was mir half und einigermassen funzt. (einigermassen weil es wirklich sehr auf die eine art ein wort zu sagen gepraegt ist, also auch nur ein sprecher etc.)

    https://web.archive.org/web/20130530070321/http://www.eecg.toronto.edu/~aamodt/ece341/speech-recognition



  • Wenn du an etwas fertigem für erste Tests interessiert bist, findest du z.B. hier ein SDK: https://www.microsoft.com/cognitive-services/en-us/speech-api



  • alternativ, schau dir mal pocketsphinx an. ist auch gar nicht sooo kompliziert.


Anmelden zum Antworten