Per estendere la risposta di Müller,
- I microfoni devono essere collocati in tubi separati per migliorare la separazione?
speed of soundsound frequency=343 m/s6 kHz=5.71 mm
modificare
Ho sentito che questa domanda n. 2 sembrava divertente, quindi ho deciso di provare a risolverlo da solo.
- La correlazione di fase può essere calcolata tra 3 fonti contemporaneamente in qualche modo? (ovvero per accelerare il calcolo)
Se conosci la tua algebra lineare, puoi immaginare di aver posizionato i microfoni in un triangolo in cui ciascun microfono è a 4 mm di distanza l'uno dall'altro, facendo sì che ciascun angolo interno sia di .60°
Supponiamo quindi che siano in questa configurazione:
C
/ \
/ \
/ \
/ \
/ \
A - - - - - B
Lo farò...
- usa la nomenclatura che è un vettore che punta da aAB¯¯¯¯¯¯¯¯AB
- chiama mia origineA
- scrivi tutti i numeri in mm
- usa la matematica 3D ma finisci con una direzione 2D
- imposta la posizione verticale dei microfoni sulla loro forma d'onda effettiva. Quindi, queste equazioni sono basate su un suono onda che assomigli a questo .
- Calcola il prodotto incrociato di questi microfoni in base alla loro posizione e forma d'onda, quindi ignora le informazioni sull'altezza da questo prodotto incrociato e usa arctan per trovare la direzione effettiva della sorgente.
- chiama l'uscita del microfono in posizione , chiama l'uscita del microfono in posizione , chiama l'uscita del microfono in posizioneaAbBcC
Quindi le seguenti cose sono vere:
- A=(0,0,a)
- B=(4,0,b)
- C=(2,42−22−−−−−−√=23–√,c)
Questo ci dà:
- AB¯¯¯¯¯¯¯¯=(4,0,a−b)
- AC¯¯¯¯¯¯¯¯=(2,23–√,a−c)
E il prodotto incrociato è semplicementeAB¯¯¯¯¯¯¯¯×AC¯¯¯¯¯¯¯¯
AB¯¯¯¯¯¯¯¯×AC¯¯¯¯¯¯¯¯=⎛⎝⎜40a−b⎞⎠⎟×⎛⎝⎜223–√a−c⎞⎠⎟=⎛⎝⎜0⋅(a−c)−(a−b)⋅23–√(a−b)⋅2−4⋅(a−c)4⋅23–√−0⋅2⎞⎠⎟=⎛⎝⎜23–√(b−a)−2a−2b−4c83–√⎞⎠⎟
Le informazioni Z, sono solo spazzatura, zero interesse per noi. Man mano che i segnali di ingresso cambiano, il vettore incrociato oscilla avanti e indietro verso la sorgente. Quindi metà del tempo indicherà direttamente la fonte (ignorando i riflessi e altri parassiti). E l'altra metà del tempo punterà a 180 gradi di distanza dalla sorgente.83–√
Quello di cui sto parlando è che può essere semplificato in , quindi trasforma i radianti in gradi.arctan(−2a−2b−4c23√(b−a))arctan(a+b+2c3√(a−b))
Quindi quello che si finisce con è la seguente equazione:
arctan(a+b+2c3–√(a−b))180π
Ma la metà delle volte le informazioni sono letteralmente sbagliate al 100%, quindi come ... dovresti ... renderle corrette al 100% delle volte?
Bene, se sta conducendo , la fonte non può essere più vicina a B.ab
In altre parole, basta fare qualcosa di semplice come questo:
source_direction=atan2(a+b+2c,\sqrt{3}*(a-b))*180/pi;
if(a>b){
if(b>c){//a>b>c
possible_center_direction=240; //A is closest, then B, last C
}else if(a>c){//a>c>b
possible_center_direction=180; //A is closest, then C last B
}else{//c>a>b
possible_center_direction=120; //C is closest, then A last B
}
}else{
if(c>b){//c>b>a
possible_center_direction=60; //C is closest, then B, last A
}else if(a>c){//b>a>c
possible_center_direction=300; //B is closest, then A, last C
}else{//b>c>a
possible_center_direction=0; //B is closest, then C, last A
}
}
//if the source is out of bounds, then rotate it by 180 degrees.
if((possible_center_direction+60)<source_direction){
if(source_direction<(possible_center_direction-60)){
source_direction=(source_direction+180)%360;
}
}
E forse vuoi solo reagire se la sorgente sonora proviene da un angolo verticale specifico, se le persone parlano sopra i microfoni => 0 cambio di fase => non fare nulla. Le persone parlano in orizzontale accanto ad esso => alcuni cambiamenti di fase => reagiscono.
|P|=P2x+P2y−−−−−−−√=3(a−b)2+(a+b+2c)2−−−−−−−−−−−−−−−−−−−√
Quindi potresti voler impostare quella soglia su qualcosa di basso, come 0,1 o 0,01. Non ne sono del tutto sicuro, dipende dal volume e dalla frequenza e dai parassiti, provalo tu stesso.
Un altro motivo per quando usare l'equazione del valore assoluto è per zero incroci, potrebbe esserci un leggero momento in cui la direzione punterà nella direzione sbagliata. Anche se sarà solo per l'1% delle volte, anche solo quello. Quindi potresti voler collegare un filtro LP del primo ordine alla direzione.
true_true_direction = true_true_direction*0.9+source_direction*0.1;
E se vuoi reagire a un volume specifico, somma i 3 microfoni e confrontali con un valore di trigger. Il valore medio dei microfoni sarebbe la loro somma divisa per 3, ma non è necessario dividere per 3 se si aumenta il valore di trigger per un fattore 3.
Sto riscontrando problemi con la marcatura del codice come C / C # / C ++ o JS o qualsiasi altro, quindi purtroppo il codice sarà nero su bianco, contro i miei desideri. Oh bene, buona fortuna per la tua impresa. Sembra divertente.
Inoltre c'è una probabilità del 50/50 che la direzione sia lontana 180% dal 99% delle volte. Sono un maestro nel fare simili errori. Una correzione per questo sarebbe però di invertire le istruzioni if per quando aggiungere 180 gradi.