ül 러의 답변을 확장하기 위해
- 분리를 개선하기 위해 마이크를 별도의 튜브에 배치해야합니까?
- 아니요, 소스의 방향을 식별하려고합니다. 튜브를 추가하면 튜브 내부의 사운드가 바운스되므로 분명히 원하지 않습니다.
가장 좋은 방법은 똑바로 얼굴을 향하게하는 것입니다. 이런 식으로 그들은 모두 비슷한 소리를 낼 수 있으며, 유일한 점은 위상에 직접 영향을주는 물리적 배치입니다. 6kHz 사인파의 파장은소리의 속도소리 주파수=343m / s6 개 kHz= 5.71 mm. 따라서 사람이 말하는 일반적인 주파수 인 최대 6kHz의 사인파 위상을 고유하게 식별하려면 최대 5.71mm 간격으로 마이크를 배치해야합니다. 다음은 직경이 5.71mm 미만인 항목 입니다. 약 6-10 kHz에서 차단 주파수를 갖는 저역 통과 필터를 추가하는 것을 잊지 마십시오.
편집하다
나는이 # 2 질문이 재미있어 보였으므로 스스로 해결하려고했습니다.
- 어떻게 든 3 개의 소스간에 위상 상관 관계를 동시에 계산할 수 있습니까? (즉, 계산 속도를 높이기 위해)
선형 대수를 알고 있다면, 각 마이크가 서로 4mm 떨어져있는 삼각형 안에 마이크를 놓았다고 상상할 수 있습니다. 60 °.
이 구성에 있다고 가정 해 봅시다.
C
/ \
/ \
/ \
/ \
/ \
A - - - - - B
나는 할 것이다...
- 명명법을 사용하십시오 A B¯¯¯¯¯¯¯¯ 이것은에서 가리키는 벡터입니다 ㅏ 에 비
- 요구 ㅏ 내 기원
- 모든 숫자를 mm 단위로 작성
- 3D 수학을 사용하지만 2D 방향으로 끝납니다.
- 마이크의 수직 위치를 실제 파형으로 설정하십시오. 이 방정식은 사운드를 기반으로 그래서 같은 그 모습 뭔가 물결 이 .
- 위치와 파형을 기준으로 이러한 마이크의 교차 곱을 계산 한 다음이 교차 곱의 높이 정보를 무시하고 arctan을 사용하여 소스의 실제 방향을 찾으십시오.
- 요구 ㅏ 위치에서의 마이크 출력 ㅏ, 전화 비 위치에서의 마이크 출력 비, 전화 씨 위치에서의 마이크 출력 씨
따라서 다음 사항이 적용됩니다.
- A = ( 0 , 0 , a )
- B = ( 4 , 0 , b )
- 씨= ( 2 ,42−22−−−−−−√= 2삼–√, C )
이것은 우리에게 :
- A B¯¯¯¯¯¯¯¯= ( 4 , 0 , a − b )
- C¯¯¯¯¯¯¯¯= ( 2 , 2삼–√, a - c )
그리고 크로스 제품은 A B¯¯¯¯¯¯¯¯×C¯¯¯¯¯¯¯¯
A B¯¯¯¯¯¯¯¯×C¯¯¯¯¯¯¯¯=⎛⎝⎜40a - b⎞⎠⎟×⎛⎝⎜22삼–√a - c⎞⎠⎟=⎛⎝⎜0 ⋅ ( a − c ) − ( a − b ) ⋅ 2삼–√( a − b ) ⋅ 2 − 4 ⋅ ( a − c )4 ⋅ 2삼–√− 0 ⋅ 2⎞⎠⎟=⎛⎝⎜2삼–√( b - a )− 2 a − 2 b − 4 c8삼–√⎞⎠⎟
Z 정보 8삼–√우리에게 전혀 관심이없는 정크입니다. 입력 신호가 변경되면 크로스 벡터가 소스를 향해 앞뒤로 스윙합니다. 따라서 절반의 시간은 반사 및 기타 기생을 무시하고 소스를 똑바로 가리 킵니다. 그리고 나머지 절반은 소스에서 180도 떨어져 있습니다.
내가 말하는 것은 아크 탄(− 2 a − 2 b − 4 c2삼√( b - a )) 이것은 단순화 될 수 있습니다 아크 탄(+ B + 2 C삼√( a - b ))라디안을도 단위로 바꿉니다.
그래서 당신이 끝내는 것은 다음 방정식입니다.
아크 탄(a + b +2 C삼–√( a - b ))180π
그러나 정보의 절반이 문자 그대로 100 % 잘못되었으므로 어떻게해야합니까 .. 100 % 올바르게 처리해야합니까?
만약에 ㅏ 선도 비소스가 B에 더 가까이있을 수 없습니다.
다시 말해, 다음과 같이 간단하게 만드십시오.
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;
}
}
사람들이 마이크 위에서 이야기하는 경우 => 0 위상 변화 => 아무 것도하지 않으면 음원이 특정 수직 각도에서 나오는 경우에만 반응하고 싶을 것입니다. 사람들은 옆으로 가로로 이야기합니다 => 약간의 위상 변화 => 반응합니다.
| 피|=피2엑스+피2와이−−−−−−−√=3 ( a - b)2+ ( + B + 2 C)2−−−−−−−−−−−−−−−−−−−√
따라서 해당 임계 값을 0.1 또는 0.01과 같이 낮게 설정하려고 할 수 있습니다. 나는 확실하지 않습니다. 볼륨과 주파수와 기생에 달려 있으며 직접 테스트하십시오.
절대 값 방정식을 사용해야하는 또 다른 이유는 제로 크로싱이기 때문에 방향이 잘못된 방향을 가리킬 때 약간의 순간이있을 수 있습니다. 시간의 1 %에 불과하지만 그 경우에도 마찬가지입니다. 따라서 1 차 LP 필터를 방향에 부착 할 수 있습니다.
true_true_direction = true_true_direction*0.9+source_direction*0.1;
특정 볼륨에 반응하려면 3 개의 마이크를 합한 다음 트리거 값과 비교하십시오. 마이크의 평균 값은 합계를 3으로 나눈 값이지만 트리거 값을 3 배로 늘리면 3으로 나눌 필요가 없습니다.
코드를 C / C # / C ++ 또는 JS 또는 기타로 표시하는 데 문제가 있으므로 슬프게도 코드가 흰색에 검은 색으로 표시됩니다. 음, 벤처에 행운을 빈다. 재미 있겠다.
또한 방향이 시간의 99 %에서 180 % 떨어져있을 가능성이 50/50입니다. 나는 그런 실수를하는 대가입니다. 그러나 이것에 대한 수정은 180도를 추가해야 할 때 if 문을 뒤집는 것입니다.