Hi, ich möchte ein sporadisch auftretendes, wiederkehrendes, zu 95% gleich bleibendes Geräusch erkennen lassen können. Das ganze soll über einen Piezoabnehmer laufen. Konkret: Die Piezoscheibe wird auf einen Untergrund geklebt, und auf dem Untergrund kommt ein z.B. hohes Klopfen. Dieses Klopfen ist meistens gleich (mechanisch ausgeführt). Jedoch gibt es auch ein paar Störgeräusche. An einem Oszilloskopen könnte man die genaue Form des zu erkennenden Geräusches sehen. Meine Idee ist eine FFT, sodass ich jede einzelne Frequenz und ihre dazugehörigen Amplituden habe. Der Arduino soll dann nach einmaligem einspeichern, jedes weitere Geräusch mit diesem (und ein bisschen Toleranz) vergleichen. Wenn es passt, soll ein Zähler hochgesetzt werden. Wie kann ich das im groben Umsetzen ?
FFT und Arduino? Reicht da die Rechenleistung? Zumal das Ram ja auch nicht üppig ist. Bei einer FFT würde ich zumindest eine Hardware-FPU haben wollen.
eine FFT muss man nicht zwangsweise in float berechen. für diese aufgabe sollte eine integer fft hinreichend sein. und auch die ist flott berechnet.
Wie funktionieren denn Spracherkenneungen? Das ist doch im Grunde nichts anderes, außer, dass statt eines Piezosensors ein Mikrophon genommen wird.. Und eine Spracherkennung stelle ich mir bei weitem aufwendiger vor als eine "klopf"erkennung. Und trotzdem funktionieren Spracherkennungen relativ flott..
Hi >> funktionieren Spracherkennungen >Auf einem kleinen AVR? Gab es schon in den 80ern für U880/Z80. MfG Spess
Cepstrum hat sich in der Spracherkennung besser bewährt als FFT.
yescafe schrieb: > Meine Idee ist eine FFT, sodass ich jede einzelne Frequenz und ihre > dazugehörigen Amplituden habe. Eine FFT analysiert nur einen winzigen Abschnitt des Signals. Und man bekommt dann auch nur ein bestimmtes Spektrum für diesen kleinen Abschnitt. Und der Witz ist, dass die Suche ja andauernd parallel durchlaufen muss. Man kann also nicht einen Abschnitt aufnehmen und den analysieren, und dann den nachfolgenden aufnehmen und den analysieren und so fort, sondern man muss kontinuierlich analysieren. yescafe schrieb: > Der Arduino soll dann nach einmaligem einspeichern, jedes weitere > Geräusch mit diesem (und ein bisschen Toleranz) vergleichen. Ein gelerntes Signal mit einem anderen vergleichen, das hört sich jetzt eher nach Kreuzkorrelation an. Aber jedes der genannten Verfahren zusammen mit "Echtzeit" und "Arduino" hört sich sportlich an...
Lothar M. schrieb: > yescafe schrieb: >> Der Arduino soll dann nach einmaligem einspeichern, jedes weitere >> Geräusch mit diesem (und ein bisschen Toleranz) vergleichen. > Ein gelerntes Signal mit einem anderen vergleichen, das hört sich > jetzt eher nach Kreuzkorrelation an. Naja, jeder Sprachroboter, dem man erst einen Befehl diktieren muss, bevor er ihn versteht, wäre dann genau das gleiche (und auch das was ich möchte) Sprich, auf einen knopf drücken, das Geräusch aufnehmen (oder wahrnehmen, die Quelle, ob Mikrophon oder Piezo ist ja egal) und dann soll immer, wenn das Geräusch wieder kommt, das Geräusch registriert werden..
yescafe schrieb: > Naja, jeder Sprachroboter, dem man erst einen Befehl diktieren muss, > bevor er ihn versteht, wäre dann genau das gleiche (und auch das was ich > möchte) Und was steckt hinter diesem exemplarischen "Sprachroboter"? Richtig: ein Rechenbolide mit zig hundert MHz... > Sprich, auf einen knopf drücken, das Geräusch aufnehmen (oder > wahrnehmen, die Quelle, ob Mikrophon oder Piezo ist ja egal) und dann > soll immer, wenn das Geräusch wieder kommt, das Geräusch registriert > werden.. Ja, dir ist aber offenbar noch nicht ganz klar, dass das einen gewaltigen Rechenaufwand bedeutet, weil du das ja in Echtzeit erfasst haben willst. So hat z.B. eine simple optische Maus schon zigfach mehr Rechenleistung für die Bildverarbeitung als der AVR im Arduino. Aber wenn du das Signal schon eindeutig auf dem Oszilloskop erkennst, warum probierst du nicht den total simplen Weg über die Hüllkurve/Amplitude des Signals?
:
Bearbeitet durch Moderator
In einem alten C-Netz Tornister mit Spracherkennung war nur für diesen Zweck ein 40Mhz TMS32C025 verbaut mit Dual Port RAM und etwa 32kByte DSP Code und es hat trotzdem nicht immer geklappt. Das schaffst du mit einem Arduino nicht, wenn es nicht einer mit dickem ARM Prozessor und reichlich Speicher ist.
Lothar M. schrieb: > Und was steckt hinter diesem exemplarischen "Sprachroboter"? Richtig: > ein Rechenbolide mit zig hundert MHz... Okay, interessant, mir waren die Größenordnungen nicht ganz klar. 1. Es gibt doch aber auch Spracherkennungen, die mit AVR funktionieren. Gut, die sind natürlich nicht so genial wie in unseren Handys, aber in meinem Fall muss ich ja tatsächlich nur ein einziges Geräusch mit einer genauigkeit von 100% wieder erkennen.. Also nur ein "Sprachbefehl". 2. Ich habe so gesehen keine Platzprobleme. Das Signal des Piezos kann ich (bzw. muss ich sogar) per Funk (oder Wlan) an einen Empfänger (1 meter weit weg) schicken. Dann kann ich die Rechenarbeit ja im Empfänger machen lassen, dass also nur die Rohdaten in den Piezo reingehen, an das Hauptgerät versendet werden, dort verarbeitet werden. Und das Hauptgerät kann auch größer (in der Leistung) sein. Raspberry Pi wäre eine Idee? Das nächsthöhere, was mir einfiele, sind Handyprozessoren. Doch ich denke, die sind noch mal um Größenordnungen komplizierter zu programmieren?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.