Визначення напрямку звуку за допомогою декількох мікрофонів


9

Перш за все, я бачив подібну нитку, проте вона трохи відрізняється від того, що я намагаюся досягти. Я будую робота, який буде слідувати за людиною, яка його викликає. Моя ідея полягає у використанні 3 або 4 мікрофонів - тобто в наступному розташуванні, щоб визначити, з якого напрямку викликали робота:

введіть тут опис зображення

Там, де S - джерело, A, B і C - мікрофони. Ідея полягає у тому, щоб обчислити фазову кореляцію сигналів, записаних з пар AB, AC, BC, і на основі цього побудувати вектор, який буде вказувати на джерело, використовуючи своєрідну триангуляцію. Системі навіть не потрібно працювати в режимі реального часу, оскільки вона буде активована голосом - сигнали з усіх мікрофонів будуть записуватися одночасно, голос відбиратиметься лише з одного мікрофона, і якщо він відповідає голосовій підписі, фазова кореляція буде обчислюватися з остання частка секунди для обчислення напрямку. Я знаю, що це може не надто добре працювати, тобто коли робот викликається з іншої кімнати або коли є кілька роздумів.

Це просто ідея, яку я мав, але я ніколи не намагався зробити щось подібне, і у мене є кілька питань, перш ніж створити власне обладнання, яке зробить цю роботу:

  1. Це типовий спосіб зробити це? (тобто використовується в телефонах для усунення шуму?) Які ще можливі підходи?
  2. Чи можна обчислити фазову кореляцію між трьома джерелами одночасно? (тобто для прискорення обчислень)
  3. Чи достатня для цієї системи швидкість вибірки 22 кГц і 12-бітна глибина? Я особливо стурбований глибиною долота.
  4. Чи слід розміщувати мікрофони в окремі пробірки, щоб покращити поділ?

1
Ось цікава стаття , можливо, ви її бачили. Схоже, автор закінчив поставити четвертий мікрофон над іншими 3, щоб мати справу з джерелом звуку, що знаходиться над масивом. Крім цього, він виглядає досить схожим на ваш план (принаймні, на моє непідготовлене око).
Гість

Загальним терміном для частини фазової кореляції є Beamforming. Звичайна система формування променів використовує лінійний масив мікрофонів, і я не впевнений, що поле "зору" для ваших мікрофонів дійсно дозволить зробити триангуляцію.
pscheidler

Щодо триангуляції, я думаю, ви могли б встановити два чи три масиви на деякій відстані один від одного і знайти перетин балок. Не вдалося вирішити двопроменевий вироджений випадок із "ей робот ..." (робот повертається до вас) ... "приходьте сюди!"
Гість

Насправді це може спрацювати, додавши ще один мікрофон. Перевірте це , це варіація рішення Гаррі. Рівносторонній трикутник стає правильним трикутником, а ще один мікрофон додається для формування іншого трикутника. Від кожного трикутника ми кидаємо промінь і беремо середнє значення цих двох променів, щоб отримати точний вектор напрямку. Зауважте в демонстрації два "очі". Вони розміщені так, що промені, що проходять через них, будуть тріангулювати положення, коли джерело знаходиться прямо перед роботом або позаду. Спробуйте його з джерелом у будь-якому y = 0.
Гість

1
@FilipePinto ви ретельно читали відповіді та опис проблеми? Насправді це не може так працювати, оскільки ви не можете знати, як кожен пік енергії кожного мікрофона співвідноситься з іншими мікрофонами - саме тому вам потрібна фазова кореляція, ітеративна найближча точка або якийсь інший алгоритм реєстрації (реєстрація не стосується запису тут, але щоб відповідати одному сигналу проти іншого), щоб відповідати записаним
Макс

Відповіді:


7

Щоб продовжити відповідь Мюллера,

  1. Чи слід розміщувати мікрофони в окремі пробірки, щоб покращити поділ?
  1. Ні, ви намагаєтеся визначити напрямок джерела, додавання трубок лише зробить звук відскоком всередині трубки, який точно не потрібен.

    Найкращим способом дій було б зробити їх обличчям прямо вгору, таким чином, всі вони отримають подібний звук, і єдине, що в них унікальне - це їх фізичні місця, які безпосередньо впливатимуть на фазу. Синусова хвиля 6 кГц має довжину хвилі -швидкість звукучастота звуку=343 РС6 кГц=5.71 мм. Отже, якщо ви хочете однозначно визначити фази синусоїд до 6 кГц, які є типовими частотами для розмови людини, то вам слід розмістити мікрофони не більше 5,71 мм один від одного. Ось один предмет , діаметр якого менше 5,71 мм. Не забудьте додати фільтр низьких частот із частотою відсікання близько 6-10 кГц.

Редагувати

Я відчув, що це питання №2 виглядає веселим, тому вирішив спробувати вирішити його самостійно.

  1. Чи можна обчислити фазову кореляцію між трьома джерелами одночасно? (тобто для прискорення обчислень)

Якщо ви знаєте свою лінійну алгебру, то ви можете уявити, що ви розмістили мікрофони в трикутнику, де кожен мікрофон знаходиться на відстані 4 мм один від одного, роблячи кожен внутрішній кут .60°

Тож припустимо, що вони в такій конфігурації:

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

Я буду...

  • використовуйте номенклатуру яка є вектором, що вказує від доАБ¯АБ
  • називають моє походженняА
  • записати всі числа в мм
  • використовуйте математику 3D, але в кінці закінчуйте 2D напрямком
  • встановіть вертикальне положення мікрофонів у фактичній формі хвилі. Таким чином , ці рівняння засновані на звукову хвилю , яка виглядає як це .
  • Обчисліть поперечний добуток цих мікрофонів, виходячи з їх положення та форми хвилі, потім ігноруйте інформацію про висоту цього крос-продукту та використовуйте арктан, щоб придумати фактичний напрямок джерела.
  • виклик вихід мікрофона в положенні , виклик вихід мікрофона в положенні , виклик вихід мікрофона в положенніаАбБcС

Тож справді такі речі:

  • А=(0,0,а)
  • Б=(4,0,б)
  • С=(2,42-22=23,c)

Це дає нам:

  • АБ¯=(4,0,а-б)
  • АС¯=(2,23,а-c)

І поперечний продукт простоАБ¯×АС¯

АБ¯×АС¯=(40а-б)×(223а-c)=(0(а-c)-(а-б)23(а-б)2-4(а-c)423-02)=(23(б-а)-2а-2б-4c83)

Інформація Z, - це просто непотріб, для нас нульовий інтерес. Коли вхідні сигнали змінюються, перехресний вектор буде хитатися вперед і назад у напрямку джерела. Так що половину часу він буде вказувати прямо на джерело (ігноруючи роздуми та інші паразитики). А іншу половину часу він буде вказувати на 180 градусів від джерела.83

Я говорю про який можна спростити до , а потім перетворіть радіани на градуси.арктан(-2а-2б-4c23(б-а))арктан(а+б+2c3(а-б))

Тож у результаті ви отримаєте таке рівняння:

арктан(а+б+2c3(а-б))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(а-б)2+(а+б+2c)2

Тому ви можете встановити цей поріг на щось низьке, наприклад, 0,1 або 0,01. Я не зовсім впевнений, залежить від гучності та частоти та паразитиків, протестуйте самі.

Ще одна причина, коли використовувати рівняння абсолютного значення - це нульові перетини, може виникнути незначний момент, коли напрямок буде вказувати в неправильному напрямку. Хоча це буде лише за 1% часу, якщо навіть це. Таким чином, ви можете приєднати фільтр LP до першого порядку до напрямку.

true_true_direction = true_true_direction*0.9+source_direction*0.1;

І якщо ви хочете реагувати на певний об'єм, то просто підсумуйте 3 мікрофона разом і порівняйте їх з деяким значенням тригера. Середнє значення мікрофонів було б їх сумою, поділеною на 3, але вам не потрібно ділити на 3, якщо збільшити значення тригера на коефіцієнт 3.


У мене виникають проблеми з маркуванням коду як C / C # / C ++ або JS або будь-якого іншого, тож, на жаль, код буде чорно-білим, проти моїх побажань. Ну добре, удачі у твоєму підприємстві. Звучить весело.

Також є ймовірність 50/50, що напрямок буде знаходитися на відстані 180 від джерела 99% часу. Я майстер робити такі помилки. Виправленням цього може бути лише інвертування if, якщо слід додати заяви на 180 градусів.


Цікаво, чи дійсно необхідна річ із фазою чи кожен мікрофон може просто шукати якусь функцію, яку можна визначити. Якщо всі мікрофони чують "ей-робот", то чи не могли б вони вирівняти початок "фази" звуку та ігнорувати фазу? Тоді вам не потрібно буде розміщувати мікрофони так близько один до одного ...
Гість

1
@HarrySvensson, я бачу, що ти маєш на увазі. Я думав, що ти можеш використовувати щось на кшталт вашого підходу, за винятком , і пройшло б кілька мілісекунд з моменту, коли перший мікрофон почув звук. Я грав з ним тут , але це не шикуються в чергу , прекрасно , коли джерело, мікрофон, і центр робота не всі в лінію. Я думаю, що це може бути "гаразд", хоча, перевіри це. Помилка не така вже й погана, коли джерело далеке від мікрофонів. Я впевнений, що це можна було б виправити, але математика уникає мене. абc
Гість

1
Не впевнений, що я коли-небудь бачив виділення коду, що працює тут на SE.DSP. Дозвольте мені перевіритись у «Шафі» для вчителя і подивитися, що вони кажуть. Схоже, хтось запитав про Meta деякий час тому, але нічого не було вжито: dsp.meta.stackexchange.com/questions/133/…
Пітер К.

1
Будь ласка, перейдіть і підтвердіть цю посаду на Meta.DSP. Я додав тег <kbd> особливість-запит </kbd>, який повинен хоча б побачити деяку участь, але нам потрібні голоси. Якщо сайт Chemistry.SE увімкнув це, ми б точно повинні! :-) dsp.meta.stackexchange.com/questions/133/…
Пітер К.

1
@endolith Ви маєте рацію, цю частину я видалив. Дякую.
Гаррі Свенссон

4
  1. Так, це відчувається розумним і типовим.
  2. Ви можете так само добре використовувати відразу три сигнали мікрофона (не проходячи «об’їзд» через свої три пари кореляцій). Шукайте "МУЗИКА" та "ESPRIT" у додатках у напрямку прибуття.
  3. Дуже ймовірно, що це так. Ви не прагнете до високої якості звуку, ви прагнете до хороших кореляційних властивостей корсосу, і кілька біт тут і там, ймовірно, не роблять і не порушують систему. Більш висока частота дискретизації, як дуже поширена 44,1 кГц або 48 кГц, з іншого боку, миттєво вдвічі збільшить кутову точність, імовірно, на однакову тривалість спостереження.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.