Forum: Mikrocontroller und Digitale Elektronik Erkennen eines bestimmten Geräusches per Arduino (Piezo)


von yescafe (Gast)


Lesenswert?

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 ?

von PittyJ (Gast)


Lesenswert?

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.

von Lukas P. (lks)


Lesenswert?

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.

von yescafe (Gast)


Lesenswert?

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

von Brummbär (Gast)


Lesenswert?

yescafe schrieb:
> funktionieren Spracherkennungen

Auf einem kleinen AVR?

von spess53 (Gast)


Lesenswert?

Hi

>> funktionieren Spracherkennungen

>Auf einem kleinen AVR?

Gab es schon in den 80ern für U880/Z80.

MfG Spess

von Volle (Gast)


Lesenswert?

Cepstrum hat sich in der Spracherkennung besser bewährt als FFT.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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

von yescafe (Gast)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von yescafe (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.