Untuk memperluas jawaban Muller,
- Haruskah mikrofon ditempatkan di tabung terpisah untuk meningkatkan pemisahan?
- Tidak, Anda mencoba mengidentifikasi arah sumber, menambahkan tabung hanya akan membuat suara memantul di dalam tabung yang jelas tidak diinginkan.
Tindakan terbaik adalah membuat mereka menghadap ke atas, dengan cara ini mereka semua akan menerima suara yang sama dan satu-satunya hal yang unik tentang mereka adalah penempatan fisik mereka yang secara langsung akan mempengaruhi fase. Gelombang sinus 6 kHz memiliki panjang gelombang . Jadi, jika Anda ingin secara unik mengidentifikasi fase-fase gelombang sinus hingga 6 kHz, yang merupakan frekuensi tipikal untuk pembicaraan manusia, maka Anda harus mengatur jarak mikrofon paling banyak 5,71 mm. Ini satu itemkecepatan suarafrekuensi suara= 343 m / s6 kHz= 5,71 mmyang memiliki diameter kurang dari 5,71 mm. Jangan lupa untuk menambahkan filter low pass dengan frekuensi cut-off sekitar 6-10 kHz.
Edit
Saya merasa bahwa pertanyaan nomor 2 ini tampak menyenangkan jadi saya memutuskan untuk mencoba menyelesaikannya sendiri.
- Bisakah korelasi fase dihitung antara 3 sumber sekaligus? (Yaitu untuk mempercepat perhitungan)
Jika Anda tahu aljabar linier Anda, maka Anda dapat membayangkan bahwa Anda telah menempatkan mikrofon dalam segitiga di mana masing-masing mikrofon berjarak 4 mm dari satu sama lain membuat setiap sudut interior .60 °
Jadi mari kita asumsikan mereka ada dalam konfigurasi ini:
C
/ \
/ \
/ \
/ \
/ \
A - - - - - B
Aku akan...
- gunakan nomenklatur yang merupakan vektor yang menunjuk dari keA B¯¯¯¯¯¯¯¯SEBUAHB
- sebut asal sayaSEBUAH
- tulis semua angka dalam mm
- menggunakan matematika 3D tetapi berakhir dengan arah 2D
- atur posisi vertikal mikrofon ke bentuk gelombang aktualnya. Jadi persamaan ini didasarkan pada gelombang suara yang terlihat seperti ini .
- Hitung produk silang mikrofon ini berdasarkan posisi dan bentuk gelombangnya, lalu abaikan informasi tinggi dari produk silang ini dan gunakan arctan untuk mencari arah sumber yang sebenarnya.
- memanggil output dari mikrofon pada posisi , panggilan output dari mikrofon pada posisi , panggilan output dari mikrofon pada posisiSebuahSEBUAHbBcC
Jadi hal-hal berikut ini benar:
- A = ( 0 , 0 , a )
- B = ( 4 , 0 , b )
- C= ( 2 , 42- 22------√= 2 3-√, c )
Ini memberi kita:
- A B¯¯¯¯¯¯¯¯= ( 4 , 0 , a - b )
- A C¯¯¯¯¯¯¯¯= ( 2 , 2 3-√, a - c )
Dan produk silang hanyalahA B¯¯¯¯¯¯¯¯× A C¯¯¯¯¯¯¯¯
A B¯¯¯¯¯¯¯¯× A C¯¯¯¯¯¯¯¯= ⎛⎝⎜40a - b⎞⎠⎟× ⎛⎝⎜22 3-√a - c⎞⎠⎟= ⎛⎝⎜0 ⋅ ( a - c ) - ( a - b ) ⋅ 2 3-√( a - b ) ⋅ 2 - 4 ⋅ ( a - c )4 ⋅ 2 3-√- 0 ⋅ 2⎞⎠⎟= ⎛⎝⎜2 3-√( b - a )- 2 a - 2 b - 4 c8 3-√⎞⎠⎟
Informasi Z, hanyalah sampah, tidak menarik bagi kami. Ketika sinyal input berubah, vektor silang akan berayun maju dan mundur ke arah sumber. Jadi setengah dari waktu itu akan mengarah langsung ke sumbernya (mengabaikan refleksi dan parasit lainnya). Dan separuh waktu lainnya akan menunjuk 180 derajat dari sumber.8 3-√
Yang saya bicarakan adalah yang dapat disederhanakan menjadi , lalu ubah radian menjadi derajat.Arktan( - 2 a - 2 b - 4 c2 3√( b - a ))Arktan( a + b + 2 c3√( a - b ))
Jadi yang Anda dapatkan adalah persamaan berikut:
Arktan( a + b + 2 c3-√( a - b )) 180π
Tetapi separuh dari waktu informasi tersebut benar-benar 100% salah, jadi bagaimana ... haruskah satu .... membuatnya benar 100% dari waktu?
Jika memimpin , maka sumbernya tidak boleh lebih dekat ke B.Sebuahb
Dengan kata lain, buat sesuatu yang sederhana seperti ini:
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;
}
}
Dan mungkin Anda hanya ingin bereaksi jika sumber suara berasal dari sudut vertikal tertentu, jika orang berbicara di atas mikrofon => 0 perubahan fase => tidak melakukan apa-apa. Orang-orang berbicara secara horizontal di sebelahnya => beberapa perubahan fase => bereaksi.
| P|= P2x+ P2y-------√= 3 ( a - b )2+ ( a + b + 2 c )2-------------------√
Jadi, Anda mungkin ingin mengatur ambang itu ke sesuatu yang rendah, seperti 0,1 atau 0,01. Saya tidak sepenuhnya yakin, tergantung pada volume dan frekuensi serta parasitics, ujilah sendiri.
Alasan lain kapan menggunakan persamaan nilai absolut adalah untuk penyilangan nol, mungkin ada sedikit momen ketika arah akan menunjuk ke arah yang salah. Meskipun hanya untuk 1% dari waktu, bahkan jika itu. Jadi, Anda mungkin ingin melampirkan filter LP urutan pertama ke arah.
true_true_direction = true_true_direction*0.9+source_direction*0.1;
Dan jika Anda ingin bereaksi terhadap volume tertentu, maka jumlahkan ketiga mikrofon bersama-sama dan bandingkan dengan beberapa nilai pemicu. Nilai rata-rata mikrofon akan menjadi jumlah mereka dibagi dengan 3, tetapi Anda tidak perlu membaginya dengan 3 jika Anda meningkatkan nilai pemicu oleh faktor 3.
Saya mengalami masalah dengan menandai kode sebagai C / C # / C ++ atau JS atau yang lainnya, jadi sayangnya kode tersebut akan hitam putih, bertentangan dengan keinginan saya. Oh well, semoga sukses di usaha Anda. Terdengar menyenangkan.
Juga ada kemungkinan 50/50 bahwa arahnya akan jauh dari sumber 99% dari waktu. Saya ahli membuat kesalahan seperti itu. Koreksi untuk ini adalah hanya membalikkan pernyataan if untuk kapan 180 derajat harus ditambahkan.