Go Down

Topic: Mustererkennung und Frequenzmessung Arduino (Read 11773 times) previous topic - next topic

Golfer86

Sep 24, 2012, 09:26 pm Last Edit: Sep 26, 2012, 07:09 pm by Golfer86 Reason: 1
Hallo,

Ich möchte mit meinem Arduino Audio-Signale verarbeiten, dabei geht es darum, ein Muster zu erkennen.

Es soll nach folgendem Schema ablaufen: Der Arduino misst über ein Mikrofon eine Frequenz und zeichnet in einer unendlichen Schleife für ca.5 Sekunden auf. Sobald ein bestimmtes Muster erkannt wird, bricht die Aufzeichnung ab und der Arduino startet eine Berechnung.

Ist das generell möglich? Und welche Möglichkeiten habe ich?

Gruß, Golfer86

uwefed

Du weißt schon, daß der Arduino UNO 2kByte Ram hat bzw der Arduino Mega 8kByte Ram hat und daß nichtmal alles zur Verfügung steht? Wohin willst Du die Daten schreiben?
Was meinst Du mit einer Frequenz?

Das ist möglich: http://www.youtube.com/watch?v=zE5PGeh2K9k
http://grathio.com/2009/11/secret_knock_detecting_door_lock/
Grüße Uwe

Golfer86

Mir geht es nicht um eine vollständige Audiodatei, ich habe vor die Frequenz eines Automotors zu messen (Fahrgeräusch) ich habe mir das so vorgestellt: Am Arduino hängt ein Mikro, der Arduino misst die prägnanteste Frequenz ein paar Mal/Sekunde und speichert sie in einem Array, sobald er dabei ein Muster erkennt (z.B. die Frequenz fällt ab, steigt wieder an und fällt dann wieder) soll er die letzten 5 Sekunden fest speichern und ausgeben.

Gruß, Golfer86

melmann

Also dieser Türöffner sieht echt interessant aus so was müsste doch auch mit NFC gehen oder?
Währe ja cool wenn man nur noch ne Chipkarte vor die Tür hält und die dann aufgeht. Oder sogar nur sein Smartphone solange man kein Apfel hat

kduin

Hi,

Quote
Frequenz eines Automotors zu messen (Fahrgeräusch)
.

Hi,

dazu kommen mir zwei Ideen:
1. Piezo-Sensor an den Motorblock und Abstand zwischen den höchsten Analog-Werten bestimmen.
2. Wenns dir nur darum geht rauszukriegen, wie hoch der Motor gerade dreht, dann kannst du dein Arduino mit dem OBD-Port verbinden und die Drehzahl auslesen.

Golfer86

Mir geht es um eine Erfassung außerhalb des Autos, das Auto fährt am Arduino vorbei.

Ich denke die größte Schwierigkeit liegt in der Erfassung eines sauberen Signals, hat da jemand Tipps?

derder

#6
Sep 25, 2012, 09:44 pm Last Edit: Sep 25, 2012, 09:52 pm by derder Reason: 1
also aus rein mathematischer sicht ist hier sicherlich eine Fouriertransformation das, was du ausführen musst, diese wandelt dir dein signal vom zeitraum in den frequenzraum um (du misst eine gewisse zeit ein audiosignal und bekommst danach alle frequenzen mit deren intensitäten ausgegeben), es gibt auch gute implementierungen für solche Fouriertransformationen (Fast Fourier Transform, kurz FFT wird hier meistens verwendet) ich weiß aber nicht ob der arduino dafür mchtig genug ist, da müssen ein paar ziemlich lange summen ausgerechnet werden, ich könnte mir aber vorstellen das es fertige bauteile gibt, die soetwas machen können, spätestens dein computer kann sowas (jedes gute audioprogramm kann dir ein spektrogramm, das ist die fouriertransformation abgetragen über die zeit, ausgeben, audacity (kostenlos) hat solche eine funktion). du solltest bei einem vorbeifahrenden auto allerdings auch bedenken (sofern dein ziel nicht dessen veranschaulichung ist), dass du den dopplereffekt mit misst.


edith: im playground ist ein artikel zu FFT auf dem arduino verlinkt, zeigt auch die grenzen auf, so wie ich es überflogen hab und gibt eine schönere und ausführlichere beschreibung über FTs als meine ;)
http://www.arduinoos.com/wordpress/?p=1022

mkl0815

Vielleicht wäre es hilfreich, wenn wir eine Beschreibung des zu lösenden Problems hätten. Evtl. ist ja schon der ansatz der Frequenzmessung ja schon unglücklich gewählt.
@Golfer86: Beschreib doch einfach mal, was genau Du machen willst und dann überlegen wir, wie man das Problem mit einem Arduino gelöst bekommt.

Mario.

o_lampe

Geschwindigkeitsmessung per Dopplereffekt würde nur funktionieren, wenn man sich auf ein bestimmtes Frequenzband konzentriert. Bei den Rardarpistolen sind das Radarwellen, die von der Pistole gesendet werden. Beim Ultraschallsensor sind es eben Ultraschallwellen.

Wollte man soetwas selbst bauen, könnte man ( z.B. für Clubsport/Drag-racing ) das Fahrzeug mit einer eindeutig identifizierbaren "Geräuschquelle" ausrüsten.

Einfacher wäre aber dann eine Lichtschrankenmessung....

Golfer86

Es sollte tatsächlich auf eine Geschwindigkeitsmessung herauslaufen, wenn ich eine Geräuschquelle am Objekt anbringe dann kann ich auch ein Doppler-Radar bauen, es ging mir darum, gerade kein Gerät am Fahrzeug zu montieren.

FFT bedeutet also grob gesagt ich splitte ein breites Frequenzspektrum in die einzelnen Frequenzen auf und kann die dann nach Intensität bewerten?

Wäre es alternativ möglich, das Motorgeräusch im Stand aufzunehmen (mit der Drehzahl, die bei der gesuchten Geschwindigkeit herrscht) und dann die ungefähren Frequenzen zu berechnen, um dann bei einer Messung des fahrenden Fahrzeugs die gesuchte Frequenz eingrenzen zu können?

derder

Eine geschwindigkeitsmessung per drehzahl funktioniert nicht, da die geschwindigkeit des autos nicht drehzahlabhängig ist, sprich im ersten gang hast du bei 6000U/min noch keine 50km/h während du bei der gleichen drehzahl im 4. gang weit über hundert fahren dürftest, vorausgesetzt du fährst nicht berg ab, wo du ohnehin nur die leerlaufdrehzahl brauchst, falls du die kupplung trittst...

Golfer86

Das ist mir klar, deshalb natürlich Messung der Frequenz, die nacher bei der zu messenden Geschwindigkeit im gefahrenen Gang herrscht ;)

Nochmal das konkrete Problem:

Messung einer Geschwindigkeit, wobei die Geschwindigkeit auf +- 10 km/h bekannt ist, sie kann auch mehrmals gemessen werden. Hintergrund: Doppler-Effekt -> Messung der Frequenz, bei der das Objekt auf das Mikro zu kommt und der, bei der sich das Objekt entfernt.

Zu messendes Objekt: 2-x-rädrige Fahrzeuge angetrieben durch Verbrennungsmotor.

Schwierigkeit: Wie kann ich eine saubere Frequenz mit dem Arduino erfassen und auswerten?


derder

tjoa, wenn du das wirklich machen willst, dann würde ich ein mikrophon mit verstärker an den analogen eingang klemmen, ein kurzes sample aufnehmen (nach dem was ich gelesen habe schätze ich 64 oder 128 samples, mehr is wohl nicht drin), das dann fouriertransformieren und in der transformierten funktion den peak suchen, der peak ist, im rahmen der messunsicherheiten, deine frequenz

Golfer86

Dann habe ich das richtig verstanden ...

Ich werde mich mal mit der Library beschäftigen, die begrenzte Rechenleistung sollte nicht das Problem sein, ich brauche keine Echtzeitanalyse.

derder

die rechenleistung ist auch nicht das proble, der speicher ist es, ob echtzeit oder nicht ist dabei egal, du brauchst das gesamte sample das du fouriertransformieren willst auf einmal im speicher ;)

Go Up