Avendo lavorato a lungo nel beamforming adattivo, avrei davvero evitato di hackerare qualcosa per questo fino a quando non avessi avuto qualche esperienza. (Nota: le soluzioni professionali con circa 60 canali costano circa 100.000 €. Con molti canali la risoluzione spaziale migliora molto, ma si ottiene solo una quantità limitata di informazioni attraverso una porta USB ...)
Per un beamforming affidabile è essenziale che tutti i microfoni utilizzino la stessa base dei tempi. Il modo più semplice per raggiungere questo obiettivo è con una scheda audio USB esterna con più canali di ingresso. Ma quelli non sono davvero economici. Hai dato un'occhiata a cosa si può trovare su eBay?
Un'alternativa è quella di sacrificare la base dei tempi comune utilizzando un numero di schede audio USB con ad esempio due canali ciascuna. Sarà tuttavia necessario calibrare il sistema di acquisizione. Questo non è davvero così difficile come sembra:
Per calibrare, si configura l'array e si produce un suono breve (ad esempio una crepa / applauso / ecc.) A una distanza dall'array che è dell'ordine dell'estensione dell'array. Quindi registri questo suono e usi Matlab o simili per calcolare la correlazione incrociata tra clap / crack / etc. sui diversi canali. Questo ti fornirà un elenco di offset di tempo che devi applicare ai tuoi canali per allinearli prima di fornire i dati al tuo algoritmo di beamforming.
Per esplorare il beamforming adattivo, questa è probabilmente la strada da percorrere a meno che non sia possibile contrattare su una scheda audio multicanale.
Modifica 1
Questa modifica serve a rispondere alle domande poste nei commenti.
L'idea di base di delay e sum beamforming è applicare ritardi a diversi canali di acquisizione in modo tale che i suoni originati da un punto nello spazio siano allineati e "amplificati" quando vengono aggiunti segnali dai diversi canali. I suoni che provengono da altre regioni dello spazio non si allineano e quindi non sono "amplificati".
Il punto nello spazio per il quale i suoni si allineano utilizzando un certo insieme di ritardi è chiamato focus del array di microfoni (o punto focale). In realtà, tuttavia, il focus non è un punto ideale, ma piuttosto una piccola (ish) regione (a seconda della matrice) di spazio per cui i suoni si allineano bene. La dimensione di questa regione è chiamata dimensione del punto focale.
La geometria (dimensioni, forma, ecc.) Dipende dai dettagli esatti dell'array: numero di microfoni, spaziatura dei microfoni, contenuto in frequenza dei segnali di interesse. Vedi ad esempio questo articolo .
Per ulteriori informazioni, cercare testi sulla messa a fuoco di "matrici a fasi" o "matrici lineari" negli ultrasuoni. Il Beamforming può essere utilizzato alla ricezione (per amplificare i segnali da un certo punto nello spazio) o all'emissione (per creare un punto "forte" in una stanza). I principi sono identici: basta sostituire "microfono" con "altoparlante" nel tuo pensiero.
Per quanto riguarda la procedura di calibrazione: hai ragione. La procedura che ho delineato è troppo semplicistica. Funziona bene solo se è possibile creare l'applauso di calibrazione da una distanza molto più lunga rispetto alla regione di spazio a cui si è interessati (vale a dire per garantire un'onda normale).
Se ciò non è possibile, è necessario tenere conto della posizione dell'applauso. In questo caso, la procedura più semplice consiste nel correggere i ritardi mediante correlazione incrociata come descritto, ma quindi aggiungere nuovamente la curvatura del fronte d'onda sul segnale applicando un insieme di ritardi "inversione del fascio di luce" calcolato con la posizione dell'origine del clap. (Cioè se usi una variabile di profondità + t0 (o + z0) nel tuo algoritmo "normale" di beamforming, devi usare -t0 (o -z0) per l'algoritmo di beamforming inverso.)
Qual è il punto di questa calibrazione: elimina qualsiasi errore dovuto alle diverse schede audio che iniziano la loro registrazione in momenti leggermente diversi. Ciò normalmente impedirebbe l'allineamento corretto dei segnali anche con ritardi corretti e quindi impedire l'effetto di amplificazione che si sta cercando.