Müller'in cevabını uzatmak için,
- Ayrılmayı iyileştirmek için mikrofonlar ayrı tüplere yerleştirilmeli mi?
- Hayır, kaynağın yönünü belirlemeye çalışıyorsunuz, tüpler eklemek sadece tüpün içindeki ses sıçramalarını kesinlikle istenmiyor.
Eylemin en iyi yolu, onları doğrudan yukarı dönük hale getirmektir, bu şekilde hepsi benzer ses alacaktır ve onlar için benzersiz olan tek şey, fazı doğrudan etkileyecek fiziksel yerleşimleridir. 6 kHz sinüs dalgasının dalga boyuspeed of soundsound frequency=343 m/s6 kHz=5.71 mm. Dolayısıyla, insan konuşması için tipik frekanslar olan 6 kHz'e kadar sinüs dalgalarının fazlarını benzersiz bir şekilde tanımlamak istiyorsanız, mikrofonları en fazla 5.71 mm aralıkla yerleştirmelisiniz. Çapı 5,71 mm'den az olan tek bir parça . Kesme frekansı 6-10 kHz'de düşük geçiş filtresi eklemeyi unutmayın.
Düzenle
Bu 2. sorunun eğlenceli göründüğünü hissettim, bu yüzden kendi başıma çözmeye çalıştım.
- Faz korelasyonu bir şekilde eşzamanlı olarak 3 kaynak arasında hesaplanabilir mi? (yani hesaplamayı hızlandırmak için)
Doğrusal cebirinizi biliyorsanız, mikrofonları her bir mikrofonun birbirinden 4 mm uzakta olduğu bir üçgenin içine yerleştirdiğinizi ve her bir iç açıyı açtığınızı hayal edebilirsiniz .60°
Bu yapılandırmada olduklarını varsayalım:
C
/ \
/ \
/ \
/ \
/ \
A - - - - - B
Yapacağım...
- terminolojisi kullanımı gelen işaret eden bir vektördür içinAB¯¯¯¯¯¯¯¯AB
- call benim kökeniA
- tüm sayıları mm olarak yaz
- 3B matematik kullanın ancak 2B yönü ile bitirin
- mikrofonların dikey pozisyonlarını gerçek dalga formlarına ayarlayın. Bu denklemler bir ses dayanmaktadır Yani böyle olduğu görünüyor şey dalga bu .
- Bu mikrofonların çapraz ürünlerini konumlarına ve dalga formlarına göre hesaplayın, daha sonra bu çapraz üründen yükseklik bilgilerini dikkate almayın ve kaynağın gerçek yönünü bulmak için arktan kullanın.
- çağrı pozisyonda mikrofonun çıkış , çağrı pozisyonunda mikrofonun çıkış , çağrı pozisyonunda mikrofonun çıkışaAbBcC
Yani aşağıdaki şeyler doğrudur:
- A=(0,0,a)
- B=(4,0,b)
- C=(2,42−22−−−−−−√=23–√,c)
Bu bize şunları verir:
- AB¯¯¯¯¯¯¯¯=(4,0,a−b)
- AC¯¯¯¯¯¯¯¯=(2,23–√,a−c)
Ve çapraz ürün basitçeAB¯¯¯¯¯¯¯¯×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–√⎞⎠⎟
Z bilgisi, sadece önemsiz, bizim için sıfır ilgi. Giriş sinyalleri değiştikçe, çapraz vektör kaynağa doğru ileri geri sallanacaktır. Yani zamanın yarısı doğrudan kaynağa işaret edecektir (yansımaları ve diğer parazitleri görmezden gelmek). Ve zamanın diğer yarısı kaynaktan 180 derece uzağa işaret edecektir.83–√
Ne bahsediyorum olduğunu için basitleştirilmiş edilebilen ve ardından radyanları dereceye dönüştürün.arctan(−2a−2b−4c23√(b−a))arctan(a+b+2c3√(a−b))
Sonuçta şu denklemi elde edersiniz:
arctan(a+b+2c3–√(a−b))180π
Ama bilginin yarısı tam anlamıyla% 100 yanlış, bu yüzden .. nasıl ....% 100 doğru yapmak gerekir?
Eğer , öncülük ediyorsa , kaynak B'ye daha yakın olamaz.ab
Başka bir deyişle, böyle basit bir şey yapın:
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;
}
}
Ve belki de sadece ses kaynağı belirli bir dikey açıdan geliyorsa, insanlar mikrofonların üstünde konuşursa tepki vermek istersiniz => 0 faz değişimi => hiçbir şey yapmayın. İnsanlar yanında yatay konuşurlar => bazı faz değişimi => tepki gösterirler.
|P|=P2x+P2y−−−−−−−√=3(a−b)2+(a+b+2c)2−−−−−−−−−−−−−−−−−−−√
Yani bu eşiği 0,1 veya 0,01 gibi düşük bir şeye ayarlamak isteyebilirsiniz. Tamamen emin değilim, hacme ve frekansa ve parazitlere bağlı, kendiniz test edin.
Mutlak değer denkleminin ne zaman kullanılacağının başka bir nedeni sıfır geçişler içindir, yönün yanlış yönü göstereceği zaman için küçük bir an olabilir. Olsa bile, sadece% 1 oranında olacak olsa. Bu yüzden yöne birinci dereceden bir LP filtresi eklemek isteyebilirsiniz.
true_true_direction = true_true_direction*0.9+source_direction*0.1;
Ve belirli bir birime tepki vermek istiyorsanız, sadece 3 mikrofonu toplayın ve bunu bir tetikleme değeriyle karşılaştırın. Mikrofonların ortalama değeri toplamlarının 3'e bölünmesi olacaktır, ancak tetikleyici değerini bir faktör 3 ile arttırırsanız 3'e bölmeniz gerekmez.
C / C # / C ++ veya JS veya başka herhangi bir kod olarak işaretleme ile ilgili sorunlar yaşıyorum, ne yazık ki kod benim istekleri karşı beyaz üzerine siyah olacak. Oh iyi, girişiminizde iyi şanslar. Kulağa eğlenceli geliyor.
Ayrıca yönün% 99 oranında kaynaktan 180 uzakta olma ihtimali vardır. Bu tür hatalar yapmada ustayım. Bununla ilgili bir düzeltme, 180 derecenin ne zaman eklenmesi gerektiğine ilişkin if ifadelerini tersine çevirmek olacaktır.