Möchten Sie ein USB-Mini-Mikrofon-Array. Ist es möglich?

Ich habe viel über adaptive Strahlformung gelernt und mit verschiedenen Sims in MATLAB usw. herumgespielt.

Aber wie könnte man etwas besser verstehen – wirklich verstehen – als mit dem gesamten System zu spielen?

Zu diesem Zweck würde ich gerne ein über USB angeschlossenes Mikrofonarray mit beispielsweise 5 Mikrofonen oder so finden (bauen?). Sie wären in der Lage, Signale aus der Umgebung zu erfassen (auch bekannt als wo auch immer mein Laptop ist), und ich könnte diese Signale dann nehmen und sie in MATLAB oder was auch immer verarbeiten.

Ich würde das ganze Ding wirklich lieber nicht bauen, also hoffe ich, dass jemand in der Vergangenheit bereits USB-verbundene Mikrofon-Arrays verwendet hat und in die richtige Richtung zeigen kann?

Die Mikrofone müssen nichts Besonderes sein, wenn es um Bitauflösungen ihres A/D usw. geht. KISS-Mikrofone von respektabler Qualität reichen vollkommen aus.

Antworten (2)

Die Playstation Eye -Videokamera verfügt über ein lineares 4-Element-Mikrofonarray. Es liefert 16-Bit-Samples bei 48 KHz mit einem SNR von 90 dB. Es ist einfach zu bedienen: Es wird als Standard-USB-Audiogerät mit vier separaten Kanälen aufgeführt.

Ein Beispiel für die Verwendung auf diese Weise finden Sie unter: PS3 Eye 4-channel Audio Tests on Ubuntu Karmic

@Mohammad Dies wäre wahrscheinlich eine gute Lösung, wenn Sie sich gerne auf vier Kanäle beschränken. Vier Kanäle ergeben eine Beamforming-Verstärkung von etwa 12 dB. Der Nachteil ist, dass Sie aufgrund der Tatsache, dass die Gesamtausdehnung des Arrays ziemlich klein ist, einen ziemlich großen Beamforming-Fokus haben: Sie können Schallquellen, die zu nahe beieinander liegen, nicht trennen. Ihre Hauptanwendung für dieses Array wäre daher wahrscheinlich nicht das Isolieren von Schallquellen, sondern das Verfolgen einer einzelnen Schallquelle durch den Raum. Dh an der Stimme erkennt man, wo eine Person steht...
@ArikRaffaelFunke Hmm, ich weiß nicht genug über adaptive Strahlformung, um zu wissen, was ein Brennpunkt ist. :-) Ich denke jedoch, dass ich immer noch in der Lage wäre, Quellen mit nicht-instantanem ICA zu trennen. (eigentlich konzentriere ich mich im Moment auf ICA). Auch ja, 4 ist nicht so viel, wie ich gehofft hatte ... Aber vielleicht kann dies ein Anfang sein ... c

Nachdem ich mich intensiv mit adaptivem Beamforming beschäftigt habe, würde ich wirklich davor zurückschrecken, selbst etwas dafür zu hacken, bis ich etwas Erfahrung hätte. (Hinweis: Professionelle Lösungen mit ca. 60 Kanälen kosten ca. 100.000 €. Mit vielen Kanälen wird Ihre räumliche Auflösung viel besser, aber Sie erhalten nur eine begrenzte Menge an Informationen über einen USB-Anschluss ...)

Für zuverlässiges Beamforming ist es unerlässlich, dass alle Mikrofone die gleiche Zeitbasis verwenden. Am einfachsten erreichen Sie dies mit einer externen USB-Soundkarte mit mehreren Eingangskanälen. Allerdings sind die nicht wirklich günstig. Hast du mal geschaut, was es bei ebay zu finden gibt?

Eine Alternative besteht darin, die gemeinsame Zeitbasis zu opfern, indem mehrere USB-Soundkarten mit zB jeweils zwei Kanälen verwendet werden. Sie müssen jedoch Ihr Erfassungssystem kalibrieren. Das ist wirklich nicht so schwierig, wie es klingt:

Zum Kalibrieren stellen Sie Ihr Array auf und erzeugen einen kurzen Ton (z. B. ein Knacken/Klatschen/usw.) in einem Abstand von Ihrem Array, der in der Größenordnung der Ausdehnung Ihres Arrays liegt. Sie nehmen dann diesen Ton auf und verwenden Matlab oder ähnliches, um die Kreuzkorrelation zwischen dem Klatschen/Knacken/etc. zu berechnen. auf den verschiedenen Kanälen. Dadurch erhalten Sie eine Liste mit Zeitversätzen, die Sie auf Ihre Kanäle anwenden müssen, um sie auszurichten, bevor Sie die Daten in Ihren Beamforming-Algorithmus einspeisen.

Um adaptives Beamforming zu erkunden, ist dies wahrscheinlich der richtige Weg, es sei denn, Sie können mit einer Mehrkanal-Soundkarte ein Schnäppchen machen.


Bearbeiten 1

Diese Änderung soll die in den Kommentaren aufgeworfenen Fragen beantworten.

Die Grundidee von Verzögerungs- und Summen-Beamforming besteht darin, Verzögerungen auf verschiedene Erfassungskanäle anzuwenden, so dass die Töne, die von einem Punkt im Raum stammen, ausgerichtet und "verstärkt" werden, wenn Signale von den verschiedenen Kanälen hinzugefügt werden. Klänge, die aus anderen Raumregionen stammen, richten sich nicht aus und werden daher nicht „verstärkt“.

Der Punkt im Raum, an dem sich die Klänge mit einem bestimmten Satz von Verzögerungen ausrichten, wird als Fokus des Mikrofonarrays (oder Brennpunkt) bezeichnet. In Wirklichkeit ist der Fokus jedoch kein idealer Punkt, sondern eher ein kleiner (etwas) (je nach Anordnung) Raumbereich, für den die Klänge gut ausgerichtet sind. Die Größe dieses Bereichs wird als Größe des Brennflecks bezeichnet.

Die Geometrie (Größe, Form usw.) hängt von den genauen Details des Arrays ab: Anzahl der Mikrofone, Mikrofonabstand, Frequenzinhalt der interessierenden Signale. Siehe zB diesen Artikel .

Weitere Informationen finden Sie in Texten zur Fokussierung von "Phased Arrays" oder "Linear Arrays" im Ultraschall. Beamforming kann beim Empfang (zur Verstärkung von Signalen von einem bestimmten Punkt im Raum) oder bei der Emission (um einen "lauten" Punkt in einem Raum zu erzeugen) verwendet werden. Die Prinzipien sind identisch: Ersetzen Sie in Ihrem Denken einfach "Mikrofon" durch "Lautsprecher".

Bezüglich des Kalibrierungsverfahrens: Sie haben Recht. Das von mir skizzierte Verfahren ist zu einfach. Es funktioniert nur gut, wenn Sie das Kalibrierungsklatschen aus einer viel größeren Entfernung als dem Bereich des Raums erzeugen können, an dem Sie interessiert sind. (dh um eine glatte Welle sicherzustellen.)

Ist dies nicht möglich, müssen Sie die Position der Klappe berücksichtigen. In diesem Fall besteht das einfachste Verfahren darin, die Verzögerungen wie beschrieben durch Kreuzkorrelation zu korrigieren, aber dann die Krümmung der Wellenfront wieder auf das Signal zu addieren, indem ein "inverses Beamforming"-Verzögerungsset angewendet wird, das mit der Position des Ursprungs berechnet wird klatschen. (Das heißt, wenn Sie in Ihrem "normalen" Beamforming-Algorithmus eine Tiefenvariable +t0 (oder +z0) verwenden, müssen Sie -t0 (oder -z0) für den inversen Beamforming-Algorithmus verwenden.)

Was ist der Sinn dieser Kalibrierung: Sie eliminiert alle Fehler, die dadurch entstehen, dass die verschiedenen Soundkarten ihre Aufnahme zu leicht unterschiedlichen Zeiten starten. Dies würde normalerweise verhindern, dass sich die Signale auch bei korrekten Verzögerungen richtig ausrichten, und somit den gewünschten Verstärkungseffekt verhindern.

Danke Arik. Ich bin mir jedoch nicht sicher, warum Sie hier Zeitverzögerungen ausgleichen wollen. Wie Sie wissen, ist beispielsweise einiges adaptives Beamforming Delay-and-Summ, sodass Zeitverzögerungsprobleme automatisch berücksichtigt werden. Die zweite Sache (ich denke, das ist es, was Sie sagen), ist, dass ich eine gemeinsame Zeitsynchronisation möchte. (dh drücken Sie eine Taste, alle Mikrofone beginnen gleichzeitig mit der Aufnahme), aber ich möchte nicht , dass sie gemeinsame Zeitverzögerungen haben.
Ich habe tatsächlich ein Mikrofon-Array in meinen Laptop eingebaut, ich glaube , es sind nur zwei Mikrofone, aber es könnte ein Ausgangspunkt sein, aber ich habe keine Ahnung, wie ich mit minimalem Aufwand separat auf ihre Daten zugreifen kann ...
@Mohammad - das Problem kompensiert keine bekannten Zeitverzögerungen, sondern unbekannte Zeitverzögerungen. Grundsätzlich gibt es für jede separate USB-Soundkarte eine gewisse Verarbeitungszeit, die von Gerät zu Gerät variieren kann (in diesem Fall könnte sie kompensiert werden) oder sogar nicht konstant ist/sich je nach Belastung des USB-Busses ändern.
@Mohammad Was FakeName gesagt hat ... Um die Dinge vielleicht noch klarer zu machen: Die Zeitbasis für jedes Beamforming muss besser sein als die Halbperiode der höchsten Frequenzkomponente, die Sie berücksichtigen möchten. Ich glaube, dass dies mit unabhängigen Soundkarten unmöglich zu erreichen ist, indem man sie einfach gleichzeitig mit der Aufnahme startet. Anders sieht es aus, wenn Sie eine einzelne Soundkarte mit mehreren Kanälen haben.
@ArikRaffaelFunke Ich verstehe, was du mit Kalibrierung meinst, ich habe deine Aussage falsch verstanden. Ich sehe jedoch nicht, wie man die Zeitverzögerung von einer ungewöhnlichen Zeitbasis entfernen könnte, ohne auch versehentlich die Zeitverzögerung von dem Kanal zu entfernen (den Sie behalten möchten). Die einzige Möglichkeit besteht darin, sicherzustellen, dass der Abstand zu jedem Mikrofon von der Klatsche gleich ist, aber das ist für lineares Array> 2 unmöglich. Vielleicht spielt es keine Rolle, wenn es weit genug ist (also planare Wellenfronten)?
@Mohammad Aus deinem Kommentar sehe ich, dass mein Kommentar immer noch nicht klar genug war. Ich werde versuchen, meine Antwort in den nächsten Wochen oder so mit einer detaillierteren Erklärung des Problems zu aktualisieren. Entschuldigen Sie, dass es so lange gedauert hat, aber dies erfordert mehr als nur ein paar Minuten, um es von Grund auf zu erklären.
@Mohammad Schau mal, ob meine Bearbeitung Fragen beantwortet, die du vielleicht noch hattest.
@ArikRaffaelFunke Danke für die Updates. Das Einfachste für mich ist jetzt, irgendwie ein bereits fertiges Mic-Array zu bekommen. Um es Ihnen zu sagen, ich versuche, eine ICA-Demo zu erstellen, indem ich echte Schallwellen aus der Umgebung verwende. Natürlich werden die Mischungen nicht sofort erfolgen, daher gibt es einige Varianten von ICA, aber das ist das Gesamtziel.