LabVIEWForum.de - Soundpegel als Startimpuls bzw. Messwert zu einer Bestimmten zeit zuordnen

LabVIEWForum.de

Normale Version: Soundpegel als Startimpuls bzw. Messwert zu einer Bestimmten zeit zuordnen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hi Labviewgemeinde,

ich bin neu hier bei Labview und hab da mal ein paar Fragen.

Ich wollte mal einen Chrony für meinen Paintballmarkierer (die Fluggeschwindigkeit der Paintballkugel bestimmen) bauen und die Daten mit Labview aufzeichnen.

Das Ganze wollte ich, beim Knall des Schusses, mit einem Mikrofon aufnehmen und den Lautstärke Pegel als Startimpuls nutzen. Die Messung wird beim auftreffen auf eine Platte, die einen Kontakt schließt beendet. Daraus kann ich dann ja die Fluggeschwindigkeit berechnen.

Komme ich zu meinen Problemen: Die Flugdauer über die Strecke von einem Meter ist ~15ms und die Übertragung der Pegelmesswerte ist 1s was halt ziehmlich viel ist. Ich bin soweit das die Messung immer ausgelöst wird aber die Kugel ist halt schon da bevor die eigentliche Messung startet (die Verzögerung beim aufnehmen).

Also hab ich mir mal gedacht das ich mit einem Startbutton die Messung starte und die Daten in ein Array schreibe und mit dem "Max. & Min. vom Array" den Messzeitpunkt vom ersten Ausschlag nehme und parallel den Zeitpunkt des Auftreffens messe und dann die beiden Zeiten mit einander verrechne.

Mir fehlt nur für beide Möglichkeiten das Wissen wie ich das machen soll...

Vielen Dank schonmal Smile
Signalaufnahme und Auswertung sollten auf jeden Fall entkoppelt werden, wenn du überhaupt ne Chance haben willst. Die Laufzeit des Schalls zum Mikro musst du vermutlich aufgrund der kürze der Zeit auch berücksichtigen (alternativ das Mikro irgendwo in der Ebene in der Mitte von Startpunkt der Kugel und Auftreffpunkt platzieren (dann sind die Entfernungen zu beiden gleich ;-) ).

Ansonsten wäre es vielleicht praktisch wenn du mal ein Signal Testweise aufnimmst (Sounddatei) und dir mal anschaust ob dein Equipment dafür überhaupt ausreicht, sprich ob du überhaupt irgendwas in dem File identifizieren kannst.


Was ich dir dazu aus der Physik sagen kann, ist, dass du vermutlich die Impulsantwort deines Raumes rauskriegst (was macht der an Hall etc. pp) da du letztlich mit einem kurzen Impuls anregst. Das heist auch, dass dein Signal nicht unbedingt ein kurzer Puls bleibt sondern eben anschließend noch Echos etc. pp dazukommen. Dadurch könnte es schwierig werden das Auftreffsignal zu detektieren. Am besten hier auf jeden Fall händisch mal den Abstand zwischen Paintballpistole und Auftreffpunkt erhöhen und schauen was sich im Signal verschiebt. Damit solltest du identifizieren können, was vom eigentlichen Schuss kommt und was vom Auftreffen kommt.


Für die Zeitmessung macht es vermutlich Sinn, den höchsten Peak im Signal zu benutzen. Wie du das machst, ist jedoch auch wieder stark von deinem Equipment abhängig. Wenn du auf eine tausendstel Millisekunde genau messen kannst, dann reicht vermutlich der einfache Ansatz das max in dem Array der Amplitudenwerte zu bestimmen (sollte vermutlich den Zeitpunkt des Schusses treffen, wenn keine anderen lauten Geräusche mit drauf sind). Kannst du allerdings nur alle 1ms einen Messpunkt aufnehmen (was aufgenommen wird ist ja letztlich sowas wie ne Amplitude), dann hast du über deine ganze 15ms Messzeit nur 15 Messpunkte - da kann es durchaus sein das du garnix mehr identifizieren kannst. (deswegen ist auch anzuraten die Messaufnahme nicht direkt mit Labview sondern einem Peripheriegerät zu machen das vernünftig autark arbeitet und schnell genug ist, weis wie gesagt aber nicht was du da zur Verfügung hast). Das schwierigere ist dann den zweiten Impuls zu identifizieren. Du könntest nach Identifizierung des Schusses die einmal ermittelte Impulsfunktion an das Schusssignal fitten und anschließend abziehen. So solltest du als einziges weiteres lauteres Signal das Auftreffsignal übrigbehalten.

Wie könnte man das noch einfacher machen? Hmm...
Eventuell reicht es aus sich die Impulsfunktion anzuschauen, wenn die nur einen Peak hat, könntest du nach einem weiteren Signal in Folge suchen das eine bestimmte Schwelle überschreitet (laut genug ist; sagen wir zum Beispiel 10% des Schusses o.ä.) und dir dann von dem die Position ermitteln (am besten sollte das wohl gehen indem du den Bereich ermittelst indem dein Signal über der Schwelle liegt. Am besten noch dabei nur Bereiche berücksichtigen die mindestens 3 Messpunkte (oder mehr) lang sind um zufällige Messfehler die mal drüber sind zu vernachlässigen.

In dem Bereich dann nen gewichtetes Mittel machen (Zeitpunkt * Amplitude über den ganzen Bereich des ermittelten Peaks aufsummieren; anschließend durch die Summe aller Amplituden Teilen, dann kriegst du sowas wie die Mittelposition des Peaks raus). Könnte man an sich auch bei dem ersten Peak machen - sollte ganz gut funktionieren so lange die Peaks einigermaßen symmetrisch sind und ist eventuell genauer als die maximale Amplitude zu nehmen. (weis nicht genau welchen statistischen Schwankungen Amplitudenmessungen auf kurzen Zeitskalen unterliegen)


Joah, ich hoffe da kannst du ein bisschen was für dich rausziehen ^^
Hab in dem Fall Hauptsächlich als Physiker geantwortet ;-)

Gruß Kiesch
Danke für die Antwort.

Und zu meinem Equipment, ich hab eine NI USB 6009 (Mit der will ich die Spannung für den Kontakt ausgeben und das Schließen des Kontakts registrieren) und mein Laptopmikrofon bzw. ich hab mir jetzt noch eine Mikrofonkapsel gekauft (MCE200), mit der könnte ich auch ein Signal, über meine Messbox, aufnehmen und das als Startimbuls nehmen.

Das mit der Schallgeschwindigkeit will ich später auch noch herrausrechnen. Ich bin nur im Moment noch Trockenübungen mit klatschen am machen und will erst einmal das Prinzip des Programms fertigstellen. Die Berechnungen sind ja wenn ich so weit bin nur noch eine Kleinichkeit.

Die Messung soll gestartet werden wenn das erste mal der Pegel überschritten wird. Natürlich wird der der Pegel mehrfach überschritten für eine kurze Zeit, aber das sollte mich nicht weiter stören, weil nur der erste Impuls die für die Messung relevant ist. Und das hatte ich in dem Array schon herrausgefunden mit dem "Max. & Min. von Array" aber das Hauptproblem ist das wenn die Spitze am Anfang der gemessenen Sekunde auftritt, sagen wir mal Index 20 von 10000, dann Startet der die Messung zwar, aber die Kugel is dann schon bei ~170 Index angekommen und die Messung startet wegen der Übertragungsverzögerung erst nach dem 10000. Sample und läuft damit zuspät los.

Deswegen hab ich mir gedacht das vielleicht mit der Mikrofonkapsel zu machen und nur mit meiner Messbox die Werte aufzunehmen. Die kann 48kS/s und das dann wegen den 2 Messungen "nur" 24kS/s.
Referenz-URLs