Hallo Leute, ich möchte 4 Silizium-Mikrofone mit einem 4-Channel PDM-to-TDM converter IC an einen STM32F7 anbinden. Das Audio geht dann über 4 Kanal TDM da rein. Ich wollte die 4 Mikrofone in einem Quadrat anordnen und darüber eine Richtungsdetektierung des Schalls machen (also Winkel berechnen). Wisst Ihr ob es da irgendwo fertige Projekte gibt, die man nutzen kann? Danke
Ja, hier liegen 2 Projekte rum. Bestellt und nicht abgeholt. Einer hat es dann selber gemacht und eine andere Firma hat ein Ingenieurbüro zur Fertigstellung beauftragt. In keinem der beiden Fälle kam es produktionsfähiges bei raus! Die option A bezieht sich auf die Lokalisation einer entfernten Schallquelle mit Zeitmessung und Abstandsermittlung, also eine Art akustisches Radar. Funktioniert im vorderen Halbraum. Für einen Vollraum braucht es mindestens 2 Anordnungen -> 6 Mikros. Die option B bezieht sich auf die Verfolgung eines Objekts im Nahbereich. Die Person vor dem Mikro-Array wird verfolgt und getrackt. Die Signalverarbeitung wird auf diese Position optimiert und seine Sprache extrahiert. Ferner wird seine Position ausgegeben. Funktioniert im vorderen Viertelraum und braucht 6 Mikro. Im dritten Schritt sollte erkannt werden, wer es ist. Das haben wir dann nicht mehr gemacht. Für beide gibt es Prototypenaufbauten, die funktionieren und in Registern die per Microcontroller auslesbaren Daten zur Verfügung stehen.
Schau mal wie die Amis (Militär) das machen, vielleicht hilft dir das auch weiter. Sofern man dazu etwas findet. Die haben wohl so Systeme, die Waffen vollautomatisch auf Angreifer ausrichten können. Geht also sehr genau.
https://www.spiegel.de/wissenschaft/mensch/us-militaer-mikrofone-orten-heckenschuetzen-a-360350.html Heißt wohl Boomerang-System.
Mit ein paar mehr Mikrofonen und etwas mehr Rechnerei kann man sogar 3D-Sonogramme machen. Was quietscht denn da?
egal schrieb: > Wisst Ihr ob es da irgendwo fertige Projekte gibt, die man nutzen kann? GPS - die Rolle von Sendern/Empfänger ist dort vertauscht und das Problem mit dem Äther gibt es dabei nicht. Beim Schall kannst du allerdings von homogener Ausbreitungsgeschwindigkeit ausgehen, was bei GPS nur bedingt der Fall ist.
egal schrieb: > ich möchte 4 Silizium-Mikrofone mit einem 4-Channel PDM-to-TDM converter > IC an einen STM32F7 anbinden. > Das Audio geht dann über 4 Kanal TDM da rein. Warum über zusätzlichen Converter? Der F7 kann 4 PDM Mikros direkt anbinden, der H7 sogar 8.
Hanffreund schrieb: > https://www.spiegel.de/wissenschaft/mensch/us-militaer-mikrofone-orten-heckenschuetzen-a-360350.html > > Heißt wohl Boomerang-System. Das dürften aber Spezialmikros sein, die den Schalldruck von Projektilen aushalten.
oerks schrieb: > Mit ein paar mehr Mikrofonen und etwas mehr Rechnerei > kann man sogar 3D-Sonogramme machen. Nicht so ganz. Ein Knall von einem Schuss, wie bei den MIL-Anwendungen ist schon etwas anderes. Einerseits einfacher, andererseits problematischer, wegen der eventuellen Nähe und dem Schalldruck.
:
Bearbeitet durch User
@Manfred: Danke für den Link! Als mich im Sommer im Schlafzimmer öfters Stechmucken geplagt haben, dacht ich mir, man müsste sie über das Summen relativ gut orten können. Wenn ein Strahler dann dem Insekt folgt, könnte man es händisch leicht wegfangen. Vielleicht mag das jemand umsetzen :)
Wenn die Mücke fliegt, kannst du sie auch mit den Augen verfolgen und fangen. Gfs mit einem Staubsauger. Alternative die elektrischen Fliegenklatschen. Muss man nur dort schnell hin und herwedeln, wo man das Vieh gerade noch gesehen hat. Sind ja nicht so dolle schnell …
tippgeber schrieb: > Sind ja nicht so dolle schnell … Haddu ein Ahnung, wie schnell die sein koennen, vor allem die Tigermuecken.
Maxe schrieb: > Wenn ein Strahler dann dem Insekt folgt, könnte man es händisch leicht > wegfangen. Am besten machst du die Hände vorher nass, dann können die Tierchen nicht daran abprallen, sondern kleben auf dem Wasserfilm fest.
Honig ist noch besser! Alles im Zimmer voller Honig! Dann können sie nirgends mehr landen! :-)
Servus, ich spiel auch gerade mit sowas rum...hab mir dafür das 4-mic array von seedstudio für den Pi besorgt: https://wiki.seeedstudio.com/ReSpeaker_4_Mic_Array_for_Raspberry_Pi/ Dafür findet man auch einige python Programme, auch mit voice detection oder hotword detection: https://github.com/respeaker/mic_array sehr geiles Programm, kann das Ganze in 3D (nur leider braucht man dazu dieses odas studio zur visu): https://github.com/introlab/odas Gruß
Auch noch ein nettes Projekt, funktioniert auch soweit mit kleinen Anpassungen dem 4-mic array...nur leider sehr langsam und nicht wirklich präzise...vll ist das Einstellungssache: https://medium.com/swlh/experiments-in-diy-audible-frequency-digital-chirp-sonar-a860b37bb6c3
Hier mal ein von mir selbst erstelltes Programm, allerdings bin ich am zweifeln, ob die berechneten Werte so richtig sind. Ich bekomme bei den x-Werten zum Teil Unterschiede von einigen Metern, bei einem Quellenabstand von vll. 1m...das kann doch nicht passen?! Vll. hat ja jemand einen Tipp, oder erkennt den Fehler?
1 | import time |
2 | import numpy as np |
3 | from scipy import signal as sgn |
4 | from scipy.ndimage.interpolation import shift |
5 | import scipy |
6 | import pyaudio |
7 | import math |
8 | |
9 | |
10 | M = 343.2 # Schallgeschwindigkeit |
11 | mic_dist = 0.058 # Mikrofonabstand |
12 | |
13 | mic_arr = [[0.0, 0.0], |
14 | [mic_dist, 0.0], |
15 | [mic_dist, mic_dist], |
16 | [0.0, mic_dist]] |
17 | |
18 | |
19 | FORMAT = pyaudio.paInt16 |
20 | CHUNK = 1024 |
21 | CHANNELS = 4 |
22 | RATE = 44100 |
23 | |
24 | Threshold = 30 |
25 | |
26 | audio = pyaudio.PyAudio() |
27 | |
28 | #### find 4-mic audio divice ####
|
29 | device_index = None |
30 | for i in range(audio.get_device_count()): |
31 | dev = audio.get_device_info_by_index(i) |
32 | name = dev['name'].encode('utf-8') |
33 | print(i, name, dev['maxInputChannels'], dev['maxOutputChannels']) |
34 | if dev['maxInputChannels'] == CHANNELS: |
35 | print('Use {}'.format(name)) |
36 | device_index = i |
37 | break
|
38 | |
39 | if device_index is None: |
40 | raise Exception('can not find input device with {} channel(s)'.format(channels)) |
41 | #################################
|
42 | |
43 | # audio-stream start:
|
44 | stream = audio.open( |
45 | format = pyaudio.paInt16, |
46 | channels = CHANNELS, |
47 | rate = RATE, |
48 | input_device_index = device_index, |
49 | output = False, |
50 | input = True, |
51 | frames_per_buffer=CHUNK) |
52 | |
53 | def ping() |
54 | |
55 | |
56 | |
57 | def listen(): |
58 | while True: |
59 | data = stream.read(CHUNK) |
60 | data_array = np.frombuffer(data, dtype='int16') |
61 | signal1 = data_array[0::CHANNELS] |
62 | |
63 | ### RMS Pegel ###
|
64 | square = np.sum((signal1 * signal1)) |
65 | mean = square / CHUNK |
66 | if mean < 1: |
67 | mean = 1 |
68 | rms = math.sqrt(int(mean)) |
69 | #print(rms)
|
70 | #################
|
71 | if rms < Threshold: |
72 | ssl(data_array) |
73 | |
74 | |
75 | def ssl(data_array): |
76 | while True: |
77 | #data = stream.read(CHUNK)
|
78 | #data_array = np.frombuffer(data, dtype='int16')
|
79 | |
80 | signal1 = data_array[0::CHANNELS] |
81 | signal2 = data_array[1::CHANNELS] |
82 | signal3 = data_array[2::CHANNELS] |
83 | signal4 = data_array[3::CHANNELS] |
84 | |
85 | # Cross-Correlation:
|
86 | #cc11 = sgn.correlate(signal1, signal1, mode = 'full')
|
87 | cc12 = sgn.correlate(signal1, signal2, mode = 'full') |
88 | cc13 = sgn.correlate(signal1, signal3, mode = 'full') |
89 | cc14 = sgn.correlate(signal1, signal4, mode = 'full') |
90 | |
91 | # maximum:
|
92 | mcc12 = np.argmax(cc12) |
93 | mcc13 = np.argmax(cc13) |
94 | mcc14 = np.argmax(cc14) |
95 | |
96 | |
97 | # time difference:
|
98 | #t11 = mcc11 / RATE
|
99 | t12 = mcc12 / RATE |
100 | t13 = mcc13 / RATE |
101 | t14 = mcc14 / RATE |
102 | |
103 | # delta-Abstand
|
104 | x12 = M * t12 |
105 | x13 = M * t13 |
106 | x14 = M * t14 |
107 | |
108 | print(t12, t13, t14) |
109 | |
110 | ### beamforming ###
|
111 | # signale shiften:
|
112 | bf1 = signal1 |
113 | bf2 = shift(signal2, mcc12, cval=0) |
114 | bf3 = shift(signal3, mcc13, cval=0) |
115 | bf4 = shift(signal4, mcc14, cval=0) |
116 | |
117 | # signale summieren:
|
118 | audio_bf = bf1 + bf2 + bf3 + bf4 |
119 | |
120 | ###################
|
121 | |
122 | break
|
123 | |
124 | listen() |
125 | #ssl()
|
https://dam-assets.fluke.com/s3fs-public/flk-6012097d-de-naam-ii900-ii910-ds-w_0.pdf?WP1Vquw5QxhvaaBtgFou9J1xUpF_Qwzp gerade gelesen, Ultraschall von Gaslecks mit MEMS-Mikrofonen orten, Anzeige auf Bildschirm. kleineres Modell 17500€, das größere 21000€ ohne MwSt. leider noch nichts für den Hausgebrauch, aber das Video sieht beeindruckend aus. vielleicht wirds mal billiger wie die Wärmebildkameras. Taugt vielleicht auch zur Fledermausbeobachtung. Gerade gesehen, dasselbe hatte uwe oben schon verlinkt Im neuen Raspberry Pi Geek ist ein Artikel hierzu https://wiki.seeedstudio.com/ReSpeaker/ 2-6 Mikrofone für den Raspi. Dazu gibt es ein Softwareprojekt ODAS (open embedded audition system) und eine GUI dazu. Auf seed verlinkt. Das dazu benötigte aktuelle "Node.js" sei noch nicht in den Raspi Paketquellen enthalten, man muss danach suchen. https://wiki.seeedstudio.com/ReSpeaker_4_Mic_Array_for_Raspberry_Pi/
:
Bearbeitet durch User
Christoph db1uq K. schrieb: > Ultraschall von Gaslecks mit MEMS-Mikrofonen orten, > Anzeige auf Bildschirm. Das dürfte so aber nur in der Nahdistanz funktionieren und für die Anwendung des TO nicht tauglich sein. depp schrieb: > audio_bf = bf1 + bf2 + bf3 + bf4 Könntest du das mal erläutern, was du da machst? Ich vermisse eine Triangulation in dem Code, ich nehme an, dass sich das im BF-Teil verbrigt.
Aha. Der TO hat sich seit September nicht mehr gemeldet und keine Angaben zur gesuchten Reichweite gemacht. Im Datenblatt zu den Fluke-Geräten steht: Detektorbereich ii900: Bis zu 70 Meter, ii910: Bis zu 120 Meter Interessanter finde ich die Projekte im Zusammenhang mit der Seeedstudio-Hardware.
Dr. Hardware schrieb: > depp schrieb: > >> audio_bf = bf1 + bf2 + bf3 + bf4 > > Könntest du das mal erläutern, was du da machst? > Ich vermisse eine Triangulation in dem Code, ich nehme an, dass sich das > im BF-Teil verbrigt. Die bf1, bf2, ... Werte sind die zeitlich angeglichenen Signale der 4 Mikrofone, welche dann addiert werden, um die signalstärke letztendlich zu erhöhen...aber Du hast es richtig erkannt, irgendwas fehlt noch oder ist nicht ganz richtig. Mit der sgn.correlate Funktion und der darauffolgenden np.argmax wird ja die signalverschiebung berechnet und damit dann die zeitliche differenz und über die schallgeschwindigkeit dann der delta Abstand:
1 | # time difference:
|
2 | #t11 = mcc11 / RATE
|
3 | t12 = mcc12 / RATE |
4 | t13 = mcc13 / RATE |
5 | t14 = mcc14 / RATE |
6 | # delta-Abstand
|
7 | x12 = M * t12 |
8 | x13 = M * t13 |
9 | x14 = M * t14 |
Und hier liegt irgendwo der Hund begraben...beim delta abstand kommt nur schmarrn raus. Die triangulation würde dann aus dem delta abstand berechnet, aber soweit bin ich noch nicht.
:
Bearbeitet durch User
Bei einer derartigen Abstandsberechung spielt die Qualität der Signale und deren Varianz eine wichtige Rolle. Die Omnidirektionalität der MEMS-Mikros ist nämlich leider nicht perfekt. Es gibt u.a. durch die Verbauung immer spektrale Effekte und damit ein Problem, den Trigger qualitativ genau zu erfassen und die relative TOA exakt zu messen. Hermann S. schrieb: > Die triangulation würde dann aus dem delta abstand > berechnet, Bei solchen Aufgaben ist auch noch zu berücksichtigen, dass man eine gute T nur hinbekommt, wenn man ein überbestimmtes Gleichungssystem benutzt und mehre Kreise berechnet. Gut funktioniert es, wenn man den Frequenzbereich überstreicht, also einen Chirp emitiert. Weniger gut ist es bei der Autokorrelation unbekannter Signale. Geht aber auch mit Musik hinreichend genau: http://www.96khz.org/oldpages/soundsourcelocalisation.htm Zum beamforming noch das: Richtungsselektivität durch Berechnung: http://www.96khz.org/oldpages/cardioidemulationdecca.htm
Jürgen S. schrieb: > Bei einer derartigen Abstandsberechung spielt die Qualität der Signale > und deren Varianz eine wichtige Rolle. Die Omnidirektionalität der > MEMS-Mikros ist nämlich leider nicht perfekt. Es gibt u.a. durch die > Verbauung immer spektrale Effekte und damit ein Problem, den Trigger > qualitativ genau zu erfassen und die relative TOA exakt zu messen. Ja ich denke die Signalqualität ist vll. nicht perfekt, bzw. hab ich es bisher nur in meinem Zimmer ausprobiert, wo es natürlich auch einiges an Reflexionen gibt, vll. liegts daran. Hab aber bis jetzt keine Audio lib gefunden, mit der man die Signale entsprechend filtern kann, welche auch auf dem RPi läuft, z. B. Acoular. > Hermann S. schrieb: >> Die triangulation würde dann aus dem delta abstand >> berechnet, > Bei solchen Aufgaben ist auch noch zu berücksichtigen, dass man eine > gute T nur hinbekommt, wenn man ein überbestimmtes Gleichungssystem > benutzt und mehre Kreise berechnet. Kannst Du das vll. etwas näher erklären? > Zum beamforming noch das: Richtungsselektivität durch Berechnung: > http://www.96khz.org/oldpages/cardioidemulationdecca.htm Leider etwas wenig beschrieben...was ist A, B, X, Y ? Abstände zu was?
Jürgen S. schrieb: > Zum beamforming noch das: Richtungsselektivität durch Berechnung: > http://www.96khz.org/oldpages/cardioidemulationdecca.htm Jede Phase-Array-Antenne macht das so, z.B. im 5G Mobilfunknetz. Und das lässt sich natürlich auch akustisch für die Empfangsseite umsetzen. Probleme durch Mehrwegausbreitung darf man aber nicht unterschätzen.
Hermann S. schrieb: > Kannst Du das vll. etwas näher erklären? Es gibt mehr Daten, als man für eine eindeutige Lösung benötigt. Dies wird genutzt, um Rausch (Unsicherheit/statistische Fehler) zu reduzieren. https://de.wikipedia.org/wiki/Methode_der_kleinsten_Quadrate
Hermann S. schrieb: > Leider etwas wenig beschrieben...was ist A, B, X, Y ? Ok, das ist jetzt gfs etwas zuviel Tontechnik im Detail. Die Abstände beziehen sich auf die jeweiligen Mikrofonachsen in Relation zum Objekt. Maßgeblich ist dabei auch der Abstand der beteiligten Mikrofone untereinander. Diese definieren über ihre Parameter das sognannte Polarpattern, also das Empfindlichkeitsmuster, das angibt, aus welchem Winkel wie sensitiv aufgenommen wird. Theoretisch lässt sich das in einfacher Form ohne Frequenzgang mit den Parametern A und B beschreiben, wie sie auch hier zu finden sind: http://www.sengpielaudio.com/FormelnZumPolardiagramm.pdf Wolfgang schrieb: > Hermann S. schrieb: >> Kannst Du das vll. etwas näher erklären? > Es gibt mehr Daten, als man für eine eindeutige Lösung benötigt. So ist es. Siehe "überbestimmtes Gleichungssystem". GPS nutzt das auch. Beim Schall sucht man sich die am Besten ausgesteuerten Mikrofone heraus, verwirft die übersteuerten und zieht auch vorzugsweise die heran, die gleichmäßig ausgesteuert sind, etc. Wolfgang schrieb: > Jede Phase-Array-Antenne macht das so, z.B. im 5G Mobilfunknetz. So ist es, wobei es beim Schall mitunter etwas problematischer ist, wegen der zahlreichen Reflektionen, die mit anderem Spektrum daher kommen. Im Gegensatz zur Antenne, die ich auf eine Frequenz optimieren kann, ist das Spektrum beim Schall etliche Oktaven und es ist nicht so genau bekannt, was reinkommen wird. Die Autokorrelation wird anspruchsvoller (habe beides schon gemacht, z.b. bei UMTS). Was bei Schall immer das unterschätzte Dauerproblem ist: Die Mikrofonrichtungsempfindlichkeit. Auch Kugelmikrofone haben eine starke Präferenz für Höhen auf der Hauptachse und damit wird eine einfache Triangulation nur für Bässe möglich, was wiederum phasenabhängige Probleme macht, da d/dt gering. Für die Höhen, wo das steiler ist, weicht das Signal bei dem Mikro, das dem Schall weniger gut zugewandt ist, mehr ab. Das muss berücksichtigt werden.
egal schrieb: > Ich wollte die 4 Mikrofone in einem Quadrat anordnen und darüber eine > Richtungsdetektierung des Schalls machen (also Winkel berechnen). Eine quadratische Anordnung gibt dir keine eindeutige Antwort, weil die Zeitdifferenzen von Quellen, die sich oberhalb und unterhalb der quadratischen Fläche befinden, gleich sind. Versuchs mal mit einer tetraedrischen Anordnung. Im übrigen kann man damit nicht nur die Richtung, sondern auch den genauen Ort der Quelle ermitteln. Solche Verfahren sind schon sehr sehr lange unter dem Begriff Hyperbelnavigation bekannt. Auch GPS gehört dazu.
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.