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.
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..
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?
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?