여러 마이크를 사용하여 소리 방향 감지


9

우선, 비슷한 스레드를 보았지만 달성하려는 것과 약간 다릅니다. 나는 그것을 부르는 사람을 따르는 로봇을 만들고 있습니다. 내 생각은 로봇이 어느 방향으로 호출되는지를 결정하기 위해 3 또는 4 개의 마이크를 사용하는 것입니다.

여기에 이미지 설명을 입력하십시오

S가 소스 인 경우 A, B 및 C는 마이크입니다. 아이디어는 쌍 AB, AC, BC에서 기록 된 신호의 위상 상관을 계산하고이를 기반으로 일종의 삼각 측량을 사용하여 소스를 가리키는 벡터를 구성하는 것입니다. 이 시스템은 음성으로 활성화되기 때문에 실시간으로 작동하지 않아도됩니다. 모든 마이크의 신호가 동시에 녹음되고, 하나의 마이크에서만 음성이 샘플링되며, 음성 서명에 맞으면 위상 상관이 계산됩니다. 방향을 계산하기위한 초의 마지막 분수 로봇이 다른 방에서 호출되거나 여러 번 반사 될 때이 기능이 제대로 작동하지 않을 수 있음을 알고 있습니다.

이것은 내가 가진 아이디어 일뿐이지만, 이와 같은 것을 시도한 적이 없으며 실제 하드웨어를 구성하기 전에 몇 가지 질문이 있습니다.

  1. 이것이 일반적인 방법입니까? (예 : 소음 제거를 위해 전화기에서 사용됩니까?) 다른 가능한 방법은 무엇입니까?
  2. 어떻게 든 3 개의 소스간에 위상 상관 관계를 동시에 계산할 수 있습니까? (즉, 계산 속도를 높이기 위해)
  3. 이 시스템에 22khz 샘플 속도와 12 비트 깊이가 충분합니까? 비트 깊이에 대해 특히 우려하고 있습니다.
  4. 분리를 개선하기 위해 마이크를 별도의 튜브에 배치해야합니까?

1
흥미로운 기사 가 있습니다. 아마 보셨을 것입니다. 저자는 배열 위에있는 음원을 처리하기 위해 다른 3 개 위에 네 번째 마이크를 놓은 것처럼 보입니다. 그외에 그것은 당신의 계획과 비슷해 보입니다 (적어도 훈련받지 않은 눈으로).
게스트

위상 상관 부분의 일반적인 용어는 빔 포밍입니다. 일반적인 빔 포밍 시스템은 선형 배열의 마이크를 사용하므로 마이크의 "비전"필드가 실제로 많은 삼각 측량을 허용하는지 확실하지 않습니다.
pscheidler

삼각 측량과 관련하여 두 개 또는 세 개의 배열을 약간 떨어진 곳에 설치하고 빔의 교차점을 찾을 수 있다고 생각합니다. "헤이 로봇 ..."(로봇이 당신을 향하게 됨) ... "이리와!"
손님

실제로 마이크를 하나 더 추가하면 효과가 있습니다. 이것을 확인하십시오 . 해리 솔루션의 변형입니다. 정삼각형은 직각 삼각형이되고, 하나의 마이크가 더 추가되어 다른 삼각형을 형성합니다. 각 삼각형에서 우리는 빔을 캐스트하고 정확한 두 방향의 벡터를 얻기 위해 두 빔의 평균을 취합니다. 데모에서 두 "눈"에 주목하십시오. 소스가 로봇 바로 앞 또는 뒤에있을 때 빔을 통과하는 빔이 위치를 삼각 측량하도록 배치됩니다. y = 0의 소스로 사용해보십시오.
손님

1
@FilipePinto 문제에 대한 답변과 설명을 자세히 읽으셨습니까? 각 마이크의 각 에너지 피크가 다른 마이크와 어떻게 관련되어 있는지 알 수 없으므로 위상 상관, 반복적 인 가장 가까운 지점 또는 다른 등록 알고리즘이 필요한 이유는 등록과 관련이 없습니다. 기록 된 파형을 일치시키고 일정 시간 내에 상호 이동을 감지하려면
Max Walczak

답변:


7

ül 러의 답변을 확장하기 위해

  1. 분리를 개선하기 위해 마이크를 별도의 튜브에 배치해야합니까?
  1. 아니요, 소스의 방향을 식별하려고합니다. 튜브를 추가하면 튜브 내부의 사운드가 바운스되므로 분명히 원하지 않습니다.

    가장 좋은 방법은 똑바로 얼굴을 향하게하는 것입니다. 이런 식으로 그들은 모두 비슷한 소리를 낼 수 있으며, 유일한 점은 위상에 직접 영향을주는 물리적 배치입니다. 6kHz 사인파의 파장은소리의 속도소리 주파수=343 m / s6 kHz=5.71 mm. 따라서 사람이 말하는 일반적인 주파수 인 최대 6kHz의 사인파 위상을 고유하게 식별하려면 최대 5.71mm 간격으로 마이크를 배치해야합니다. 다음은 직경이 5.71mm 미만인 항목 입니다. 약 6-10 kHz에서 차단 주파수를 갖는 저역 통과 필터를 추가하는 것을 잊지 마십시오.

편집하다

나는이 # 2 질문이 재미있어 보였으므로 스스로 해결하려고했습니다.

  1. 어떻게 든 3 개의 소스간에 위상 상관 관계를 동시에 계산할 수 있습니까? (즉, 계산 속도를 높이기 위해)

선형 대수를 알고 있다면, 각 마이크가 서로 4mm 떨어져있는 삼각형 안에 마이크를 놓았다고 상상할 수 있습니다. 60°.

이 구성에 있다고 가정 해 봅시다.

       C
      / \
     /   \
    /     \
   /       \
  /         \
 A - - - - - B

나는 할 것이다...

  • 명명법을 사용하십시오 ¯ 이것은에서 가리키는 벡터입니다
  • 요구 내 기원
  • 모든 숫자를 mm 단위로 작성
  • 3D 수학을 사용하지만 2D 방향으로 끝납니다.
  • 마이크의 수직 위치를 실제 파형으로 설정하십시오. 이 방정식은 사운드를 기반으로 그래서 같은 그 모습 뭔가 물결 .
  • 위치와 파형을 기준으로 이러한 마이크의 교차 곱을 계산 한 다음이 교차 곱의 높이 정보를 무시하고 arctan을 사용하여 소스의 실제 방향을 찾으십시오.
  • 요구 위치에서의 마이크 출력 , 전화 위치에서의 마이크 출력 , 전화 위치에서의 마이크 출력

따라서 다음 사항이 적용됩니다.

  • =(0,0,)
  • =(4,0,)
  • =(2,4222=2,)

이것은 우리에게 :

  • ¯=(4,0,)
  • ¯=(2,2,)

그리고 크로스 제품은 ¯×¯

¯×¯=(40)×(22)=(0()()2()24()4202)=(2()2248)

Z 정보 8우리에게 전혀 관심이없는 정크입니다. 입력 신호가 변경되면 크로스 벡터가 소스를 향해 앞뒤로 스윙합니다. 따라서 절반의 시간은 반사 및 기타 기생을 무시하고 소스를 똑바로 가리 킵니다. 그리고 나머지 절반은 소스에서 180도 떨어져 있습니다.

내가 말하는 것은 아크 탄(2242()) 이것은 단순화 될 수 있습니다 아크 탄(++2())라디안을도 단위로 바꿉니다.

그래서 당신이 끝내는 것은 다음 방정식입니다.

아크 탄(++2())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=()2+(++2)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 문을 뒤집는 것입니다.


위상이 실제로 필요한지 또는 각 마이크가 식별 가능한 기능을 찾을 수 있는지 궁금합니다. 모든 마이크에 "hey robot"이라는 소리가 들리면 "bah"소리가 나지 않고 위상을 무시할 수 없습니까? 그러면 마이크를 너무 가까이 두지 않아도됩니다.
Guest

1
@HarrySvensson, 무슨 말인지 알겠습니다. 나는 당신이 당신의 접근법과 같은 것을 사용할 수 있다고 생각했습니다., 첫 번째 마이크에서 소리가 들린 후 수 밀리 초입니다. 나는 여기 에서 가지고 놀았 지만 로봇의 소스, 마이크 및 중심이 모두 일치하지 않을 때 완벽하게 정렬되지 않습니다. 그래도 "괜찮아"라고 생각합니다. 확인하십시오. 소스가 마이크에서 멀어 질 때 오류는 나쁘지 않습니다. 나는 그것이 고칠 수 있다고 확신하지만 수학은 나를 피한다.
손님

1
SE.DSP에서 코드 강조 표시가 작동하는 것을 보지 못했습니다. 선생님 라운지에서 확인하고 그들이 무엇을 말하는지 봅시다. 누군가 메타에 요청한 것처럼 보였지만 아무런 조치도 취하지 않았습니다 : dsp.meta.stackexchange.com/questions/133/…
Peter K.

1
Meta.DSP에서 해당 게시물을 올리십시오. 적어도 참여가 필요한 <kbd> feature-request </ kbd> 태그를 추가했지만 투표가 필요합니다. Chemistry.SE 사이트에서 활성화 한 경우 반드시 사용해야합니다! :-) dsp.meta.stackexchange.com/questions/133/…
Peter K.

1
@endolith 당신은 맞습니다, 이제 그 부분을 제거했습니다. 감사합니다.
해리 스벤손

4
  1. 예, 이것은 합리적이고 전형적인 느낌입니다.
  2. 한 번에 세 개의 마이크 신호를 사용할 수도 있습니다 (세 쌍 상관을 통해 "우회"하지 않음). 도착 방향 어플리케이션에서 "MUSIC"및 "ESPRIT"를 찾으십시오.
  3. 가능성이 높습니다. 당신은 높은 오디오 품질을 목표로하지 않고, 좋은 상관 관계 특성을 목표로하고 있으며, 여기에 약간의 비트가 있으며 아마도 시스템을 만들거나 깨뜨리지 않을 것입니다. 반면에 매우 일반적인 44.1 kHz 또는 48 kHz와 같은 높은 샘플링 속도는 동일한 관측 길이에서 각도 정밀도를 즉시 두 배로 높입니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.