Forum: Digitale Signalverarbeitung / DSP / Machine Learning Richtungsdetektierung Schall


von egal (Gast)


Lesenswert?

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

von Audiomann (Gast)


Lesenswert?

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.

von Hanffreund (Gast)


Lesenswert?

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.

von Hanffreund (Gast)


Lesenswert?


von Ronny (Gast)


Lesenswert?


von oerks (Gast)


Lesenswert?

Mit ein paar mehr Mikrofonen und etwas mehr Rechnerei
kann man sogar 3D-Sonogramme machen.

Was quietscht denn da?

von Wolfgang (Gast)


Lesenswert?

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.

von Blechbieger (Gast)


Lesenswert?

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.

von Tobias (. (Gast)


Lesenswert?

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.

von uwe (Gast)


Lesenswert?


von J. S. (engineer) Benutzerseite


Lesenswert?

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
von Manfred (Gast)


Lesenswert?


von Maxe (Gast)


Lesenswert?

@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 :)

von tippgeber (Gast)


Lesenswert?

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 …

von Dieter (Gast)


Lesenswert?

tippgeber schrieb:
> Sind ja nicht so dolle schnell …

Haddu ein Ahnung, wie schnell die sein koennen, vor allem die 
Tigermuecken.

von Hp M. (nachtmix)


Lesenswert?

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.

von J. S. (engineer) Benutzerseite


Lesenswert?

Honig ist noch besser! Alles im Zimmer voller Honig! Dann können sie 
nirgends mehr landen! :-)

von depp (Gast)


Lesenswert?

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ß

von depp (Gast)


Lesenswert?

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

von depp (Gast)


Lesenswert?

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()

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

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
von Dr. Hardware (Gast)


Lesenswert?

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.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

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.

von Hermann S. (diphtong)


Lesenswert?

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
von J. S. (engineer) Benutzerseite


Lesenswert?

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

von Hermann S. (diphtong)


Lesenswert?

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?

von Wolfgang (Gast)


Lesenswert?

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.

von Wolfgang (Gast)


Lesenswert?

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

von J. S. (engineer) Benutzerseite


Lesenswert?

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.

von Hp M. (nachtmix)


Lesenswert?

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