Để mở rộng câu trả lời của Müller,
- Có nên đặt micrô trong các ống riêng biệt để cải thiện sự phân tách?
speed of soundsound frequency=343 m/s6 kHz=5.71 mm
Biên tập
Tôi cảm thấy câu hỏi số 2 này có vẻ vui nên tôi quyết định tự mình giải quyết.
- Có thể tính tương quan pha giữa 3 nguồn đồng thời bằng cách nào đó? (tức là để tăng tốc tính toán)
Nếu bạn biết đại số tuyến tính của mình, thì bạn có thể tưởng tượng rằng bạn đã đặt micrô trong một hình tam giác trong đó mỗi micrô cách nhau 4 mm, tạo ra mỗi góc bên trong .60°
Vì vậy, hãy giả sử rằng họ đang ở trong cấu hình này:
C
/ \
/ \
/ \
/ \
/ \
A - - - - - B
Tôi sẽ...
- sử dụng danh pháp là một vectơ chỉ từ đếnAB¯¯¯¯¯¯¯¯AB
- gọi nguồn gốc của tôiA
- viết tất cả các số bằng mm
- sử dụng toán 3D nhưng kết thúc bằng hướng 2D
- đặt vị trí thẳng đứng của micrô thành dạng sóng thực tế của chúng. Vì vậy, các phương trình này dựa trên một sóng âm thanh trông giống như thế này .
- Tính toán sản phẩm chéo của các micrô này dựa trên vị trí và dạng sóng của chúng, sau đó bỏ qua thông tin chiều cao từ sản phẩm chéo này và sử dụng arctan để đưa ra hướng thực tế của nguồn.
- gọi đầu ra của micro ở vị trí , gọi đầu ra của micro ở vị trí , gọi đầu ra của micro ở vị tríaAbBcC
Vì vậy, những điều sau đây là đúng:
- A=(0,0,a)
- B=(4,0,b)
- C=(2,42−22−−−−−−√=23–√,c)
Điều này cho chúng ta:
- AB¯¯¯¯¯¯¯¯=(4,0,a−b)
- AC¯¯¯¯¯¯¯¯=(2,23–√,a−c)
Và sản phẩm chéo chỉ đơn giản làAB¯¯¯¯¯¯¯¯×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–√⎞⎠⎟
Thông tin Z, chỉ là rác, không quan tâm đến chúng tôi. Khi các tín hiệu đầu vào đang thay đổi, vectơ chéo sẽ xoay qua lại về phía nguồn. Vì vậy, một nửa thời gian nó sẽ chỉ thẳng vào nguồn (bỏ qua các phản xạ và ký sinh trùng khác). Và nửa còn lại của thời gian nó sẽ chỉ cách nguồn 180 độ.83–√
Điều tôi đang nói đến là có thể được đơn giản hóa thành , và sau đó biến radian thành độ.arctan(−2a−2b−4c23√(b−a))arctan(a+b+2c3√(a−b))
Vì vậy, những gì bạn kết thúc là phương trình sau đây:
arctan(a+b+2c3–√(a−b))180π
Nhưng một nửa thời gian thông tin đúng là sai 100%, vậy làm thế nào .. một người .... nên làm cho đúng 100% thời gian?
Chà, nếu đang dẫn đầu , thì nguồn không thể gần hơn với B.ab
Nói cách khác, chỉ cần làm một cái gì đó đơn giản như thế này:
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;
}
}
Và có lẽ bạn chỉ muốn phản ứng nếu nguồn âm thanh phát ra từ một góc thẳng đứng cụ thể, nếu mọi người nói chuyện trên micro => 0 pha thay đổi => không làm gì cả. Mọi người nói chuyện theo chiều ngang bên cạnh nó => một số thay đổi pha => phản ứng.
|P|=P2x+P2y−−−−−−−√=3(a−b)2+(a+b+2c)2−−−−−−−−−−−−−−−−−−−√
Vì vậy, bạn có thể muốn đặt ngưỡng đó ở mức thấp, như 0,1 hoặc 0,01. Tôi không hoàn toàn chắc chắn, phụ thuộc vào âm lượng và tần suất và ký sinh trùng, hãy tự kiểm tra nó.
Một lý do khác cho việc khi nào sử dụng phương trình giá trị tuyệt đối là cho các giao điểm bằng 0, có thể có một khoảnh khắc nhỏ khi hướng sẽ chỉ sai hướng. Mặc dù nó sẽ chỉ dành cho 1% thời gian, thậm chí nếu vậy. Vì vậy, bạn có thể muốn đính kèm bộ lọc LP thứ tự đầu tiên theo hướng.
true_true_direction = true_true_direction*0.9+source_direction*0.1;
Và nếu bạn muốn phản ứng với một âm lượng cụ thể, thì chỉ cần tổng hợp 3 micrô lại với nhau và so sánh với một số giá trị kích hoạt. Giá trị trung bình của micrô sẽ là tổng của chúng chia cho 3, nhưng bạn không cần chia cho 3 nếu bạn tăng giá trị kích hoạt theo hệ số 3.
Tôi gặp vấn đề với việc đánh dấu mã là C / C # / C ++ hoặc JS hoặc bất kỳ mã nào khác, thật đáng buồn là mã sẽ có màu đen trắng, trái với mong muốn của tôi. Oh tốt, chúc may mắn trong liên doanh của bạn. Nghe có vẻ vui.
Ngoài ra, có một cơ hội 50/50 rằng hướng đi sẽ cách xa nguồn 99%. Tôi là một bậc thầy trong việc phạm sai lầm như vậy. Một điều chỉnh cho điều này mặc dù sẽ chỉ là đảo ngược các câu lệnh if khi cần thêm 180 độ.