Как определить источник звука

В данной статье будет рассмотрен один из способов взаимодействия сервопривода и внешних сенсоров на примере трёх микрофонов.

Пример заключается в том, чтобы определять положение точечного источника звука по разнице времени прихода звука на микрофоны.

Умение может быть очень полезным для создания робота, которому надо ориентироваться в пространстве: он сможет слышать, что происходит вокруг.

Схема примера

Концептуальная схема примера следующая:

С помощью трёх микрофонов установка должна определять направление, с которого пришёл звук, а затем выставлять стрелку таким образом, чтобы она указывала в этом направлении.

Сервопривод обладает углом поворота 180°, этим вызван такой вид конструкции.

Что понадобится

Для нашего примера нам могут понадобиться следующие делали:

Разбираемся с микрофоном

Схема

Для начала попробуем считать звук с микрофона. Соберём следующую схему:

Микрофоны подключим к аналоговым входам A3, A4 и A5.

Напишем простой код, который будет «слушать» три микрофона и, если на микрофоны придёт громкий звук, даст нам знать об этом. Он будет выглядить примерно так:

Ограничение на громкость необходимо, для того чтобы отсечь ненужные внешние шумы. Напомним, что сигнал с аналогового входа занимает 10 бит, то есть принимает значения от 0 до 1023.

Время работы функции »analogRead»

Очень важным вопросом является то, насколько быстро работает функция analogRead . Она может работать достаточно медленно, и звук, пока идёт считывание с одного микрофона, пройдёт мимо установки. Это неприемлемо для нас, так как, для того чтобы можно было определять положение источника звука по разнице во времени прихода звука, необходимо, чтобы за время одной итерации звук проходил расстояние, значительно меньшее размера конструкции. Для эксперимента напишем следующий код:

Ага, если поделить общее время работы на количество вызовов функции, то получим среднее время её работы: 112 мкс. За это время звук проходит см. Не очень здорово. Пока считаем значение на одном микрофоне, звук придёт на второй, конструкция становится зависимой от того, в каком порядке мы считываем значения с микрофонов. Да и погрешность порядка размера конструкции нас совсем не устраивает, пусть даже мы знаем, на какой микрофон звук пришёл первым, для определения направления у нас совершенно нет достоверных данных.

АЦП (Аналого-цифровой преобразователь)

Нас спасает то, что существует зависимость качества преобразования аналогового сигнала в цифровой от частоты АЦП, которая и определяет скорость работы analogRead . Оптимальное качество достигается между 50 кГц и 200 кГц. Однако можно повысить скорость её работы за счёт снижения качества преобразования сигнала.

[ Поставить картинку нормального качества]

Если покопаться в документации микроконтроллера Arduino (стр.266, в англоязычной литературе АЦП называется ADC — Analog-Digital Converter), то можно найти, как это сделать: для этого надо установить биты ADPS2:ADPS0 регистра контроля и состояния АЦП ADCSRA. Эти биты отвечают именно за тактовую частоту АЦП.

В следующей таблице приведены значения этих бит и соответствующие им значения делителя частоты.

ADPS2 ADPS1 ADPS0 Division Factor
2
1 2
1 4
1 1 8
1 16
1 1 32
1 1 64
1 1 1 128

Теперь можно поэкспериментировать с различными значениями делителя частоты.

Будем использовать делитель частоты, равный 16. Тогда за время считывания значения с трёх микрофонов звук пройдёт см.

Алгоритм

С установкой разобрались, теперь надо разобраться с логикой примера. Мы не ждём высокой точности от конструкции, поэтому не будем пытаться по трём точкам точно установить источник звука. Мы будем определять сектор, а положение внутри сектора будем выставлять… впрочим, давайте разбираться, как мы будем выставлять это положение.

Читайте также:  Как поставить электронную подпись в ворде

Пусть , и — моменты времени, когда звук пришёл на нулевой, первый и второй микрофон соответственно. Возможно 6 вариантов взаимного положения этих моментов:

Внутри сектора будем линейно аппроксимировать угол:

Почему это приблизительно верно, догадаться нетрудно. Предлагаю поразмышлять об этом читателю самостоятельно. Опять-таки, читатель может придумать более удачную аппроксимацию.

Установка

Осталось установить сервопривод. Получим в итоге вот такую установку:

Обратите внимание, что сервоприводы могут быть настроены по умолчанию по-разному. Например, может так получиться, что при исполнении команды servo.write(0) привод упрётся в правый край, однако будет считать, что нуля градусов ещё не достиг. И поэтому продолжит упираться, испуская при этом электромагнитный шум, достаточный, чтобы микрофоны «сошли с ума» и начали показывать совершенно произвольные значения. Поэтому рекомендуется вместо простой функции servo.attach(pin) использовать функцию, устанавливающую ширину пульса, соответствующую нулю градусов, и ширину, соответствующую 180 градусов, servo.attach(pin, min, max) . По умолчанию min = 544 , а max = 2400 .

В данной статье будет рассмотрен один из способов взаимодействия сервопривода и внешних сенсоров на примере трёх микрофонов.

Пример заключается в том, чтобы определять положение точечного источника звука по разнице времени прихода звука на микрофоны.

Умение может быть очень полезным для создания робота, которому надо ориентироваться в пространстве: он сможет слышать, что происходит вокруг.

Схема примера

Концептуальная схема примера следующая:

С помощью трёх микрофонов установка должна определять направление, с которого пришёл звук, а затем выставлять стрелку таким образом, чтобы она указывала в этом направлении.

Сервопривод обладает углом поворота 180°, этим вызван такой вид конструкции.

Что понадобится

Для нашего примера нам могут понадобиться следующие делали:

Разбираемся с микрофоном

Схема

Для начала попробуем считать звук с микрофона. Соберём следующую схему:

Микрофоны подключим к аналоговым входам A3, A4 и A5.

Напишем простой код, который будет «слушать» три микрофона и, если на микрофоны придёт громкий звук, даст нам знать об этом. Он будет выглядить примерно так:

Ограничение на громкость необходимо, для того чтобы отсечь ненужные внешние шумы. Напомним, что сигнал с аналогового входа занимает 10 бит, то есть принимает значения от 0 до 1023.

Время работы функции »analogRead»

Очень важным вопросом является то, насколько быстро работает функция analogRead . Она может работать достаточно медленно, и звук, пока идёт считывание с одного микрофона, пройдёт мимо установки. Это неприемлемо для нас, так как, для того чтобы можно было определять положение источника звука по разнице во времени прихода звука, необходимо, чтобы за время одной итерации звук проходил расстояние, значительно меньшее размера конструкции. Для эксперимента напишем следующий код:

Ага, если поделить общее время работы на количество вызовов функции, то получим среднее время её работы: 112 мкс. За это время звук проходит см. Не очень здорово. Пока считаем значение на одном микрофоне, звук придёт на второй, конструкция становится зависимой от того, в каком порядке мы считываем значения с микрофонов. Да и погрешность порядка размера конструкции нас совсем не устраивает, пусть даже мы знаем, на какой микрофон звук пришёл первым, для определения направления у нас совершенно нет достоверных данных.

АЦП (Аналого-цифровой преобразователь)

Нас спасает то, что существует зависимость качества преобразования аналогового сигнала в цифровой от частоты АЦП, которая и определяет скорость работы analogRead . Оптимальное качество достигается между 50 кГц и 200 кГц. Однако можно повысить скорость её работы за счёт снижения качества преобразования сигнала.

[ Поставить картинку нормального качества]

Если покопаться в документации микроконтроллера Arduino (стр.266, в англоязычной литературе АЦП называется ADC — Analog-Digital Converter), то можно найти, как это сделать: для этого надо установить биты ADPS2:ADPS0 регистра контроля и состояния АЦП ADCSRA. Эти биты отвечают именно за тактовую частоту АЦП.

В следующей таблице приведены значения этих бит и соответствующие им значения делителя частоты.

Читайте также:  Как настроить видовой экран в автокаде
ADPS2 ADPS1 ADPS0 Division Factor
2
1 2
1 4
1 1 8
1 16
1 1 32
1 1 64
1 1 1 128

Теперь можно поэкспериментировать с различными значениями делителя частоты.

Будем использовать делитель частоты, равный 16. Тогда за время считывания значения с трёх микрофонов звук пройдёт см.

Алгоритм

С установкой разобрались, теперь надо разобраться с логикой примера. Мы не ждём высокой точности от конструкции, поэтому не будем пытаться по трём точкам точно установить источник звука. Мы будем определять сектор, а положение внутри сектора будем выставлять… впрочим, давайте разбираться, как мы будем выставлять это положение.

Пусть , и — моменты времени, когда звук пришёл на нулевой, первый и второй микрофон соответственно. Возможно 6 вариантов взаимного положения этих моментов:

Внутри сектора будем линейно аппроксимировать угол:

Почему это приблизительно верно, догадаться нетрудно. Предлагаю поразмышлять об этом читателю самостоятельно. Опять-таки, читатель может придумать более удачную аппроксимацию.

Установка

Осталось установить сервопривод. Получим в итоге вот такую установку:

Обратите внимание, что сервоприводы могут быть настроены по умолчанию по-разному. Например, может так получиться, что при исполнении команды servo.write(0) привод упрётся в правый край, однако будет считать, что нуля градусов ещё не достиг. И поэтому продолжит упираться, испуская при этом электромагнитный шум, достаточный, чтобы микрофоны «сошли с ума» и начали показывать совершенно произвольные значения. Поэтому рекомендуется вместо простой функции servo.attach(pin) использовать функцию, устанавливающую ширину пульса, соответствующую нулю градусов, и ширину, соответствующую 180 градусов, servo.attach(pin, min, max) . По умолчанию min = 544 , а max = 2400 .

Вы никогда не интересовались…

Тем, что когда слышите звук, то инстинктивно поворачиваете голову в сторону этого звука…

Как вы узнаёте, откуда он идёт?

Эту невероятную способность слуха мы используем каждый день, как при записи музыки, так и в жизни. Однако немногие понимают, как это работает.

И сегодня я расскажу вам об этом.

Почему у людей развился этот навык

Мы способны воспринимать направление звука благодаря бинауральному слуху , проще говоря, “слушанию двумя ушами”.

В процессе эволюции оказалось, что эта система наиболее эффективна для животных в определении направления окружающих звуков.

Очевидно, почему этот навык так важен… если за вами охотится хищник, то вам нужно знать, где он, чтобы иметь возможность убежать.

Раньше это помогало выживать, сейчас это просто наш помощник.

Менее очевидно то, почему вам, как музыканту, это вообще может быть интересно…

Как это знание применимо к музыке

Мы все хотим создавать лучшие миксы для наших записей, верно?

Хороший микс во многом зависит от того, насколько правильно вы разместите каждый инструмент в звуковом поле.

Некоторые инструменты — в центр, другие — по бокам. Некоторые — ближе, другие — на отдалении.

Но хотя каждый инструмент может звучать, будто он расположен в отдельной точке, на самом деле, они все звучат из одного и того же места: студийных мониторов (или наушников, разумеется). Другими словами… идёт ложное восприятие .

Если вы хотите, чтобы ваш микс хорошо воспринимался, вам нужно, знать, как обмануть слух . Для этого важно понимание процесса обработки информации.

Вот как он происходит…

Как уши воспринимают НАПРАВЛЕНИЕ

Секрет бинаурального слуха — в расположении ушей.

Поскольку они находятся на противоположных сторонах головы , звуки, которые каждое из них слышат, различаются по времени , громкости и частотному балансу . Эти различия — подсказки, используемые мозгом для определения расположения источника звука.

Давайте рассмотрим пример: представьте непонятный звук, исходящий откуда-то слева.

Вот как наш мозг его воспринимает:

1. Разница во времени

Когда звук идёт слева, он преодолевает меньшее расстояние до левого уха, чем до правого. Поэтому левое ухо слышит его на миллисекунды раньше правого.

Это первая подсказка, которую использует мозг, чтобы понять, что звук может идти слева. Но только этой информации недостаточно. Нужно больше.

2. Разница в громкости

Как мы все знаем, звук становится мягче с увеличением расстояния. Также звук становится мягче, если есть блокирующие его объекты.

Читайте также:  Как посмотреть скорость интернета на компьютере ростелеком

Если неизвестный звук идёт слева…

То для правого уха он будет звучать чуть-чуть мягче, поскольку источник расположен дальше. Также большая мягкость достигается за счёт того, что голова блокирует этот звук.

Теперь ваш мозг может быть более уверен в том, что определил источник звука.

Но есть ещё один момент…

3. Разница в частотах

Как мы только что разобрали, когда звук идёт слева, ваша голова блокирует его часть для правого уха. Но. возможно, вам неизвестно, что она НЕ блокирует все частоты ОДИНАКОВО.

В высоких частотах меньше энергии, и они поглощаются легче, чем низкие частоты. Поэтому наше правое ухо воспринимает БОЛЬШЕ низких и МЕНЬШЕ высоких частот неизвестного звука.

Это — последняя подсказка.

Если сложить вместе 3 подсказки… то ваш мозг будет уверен в том, что он слышит. Потому что в природе эти 3 подсказки ВСЕГДА идут вместе.

Когда что-то идёт не так (например, в миксе, где ими можно манипулировать), то мозг запутывается и уже не так уверен в расположении источника звука.

Но у вас может возникнуть вопрос… А что, если источник звука — прямо перед вами ?

  • Разницы во времени не будет
  • Громкость будет одинаковой
  • Частота тоже будет одинаковой

То же самое будет, если источник звука — прямо за вами . Однако каким-то образом в реальной жизни мы чувствуем разницу, да? Какого хрена?

С этого момента становится ОЧЕНЬ ИНТЕРЕСНО…

Когда это происходит, мозг тут же запутывается. Поэтому происходит инстинктивный ответ в виде совсем небольшого поворачивания головы в сторону.

Оно настолько быстрое и незаметное, что, скорее всего, вы его не заметите.

Небольшой поворот головы создаёт достаточную разницу в слышимых каждым ухом звуках, чтобы мозг мог определить источник звука.

Вот как мы определяем направление звука. Теперь — об определении расстояния.

Как уши определяют РАССТОЯНИЕ

Когда наш мозг определяет расстояние до источника звука, он меньше опирается на бинауральный слух, но использует 3 подсказки : частотную характеристику , величину реверберации и величину предзадержки .

Давайте рассмотрим каждую из подсказок подробнее.

1. Величина реверберации

Большинство из нас знают… чем дальше звук, тем больше ревёрба. Вот почему:

Отдалённые звуки приобретают “ревёрбнутый” характер, поскольку практически не доходят напрямую. Напротив, практически все они отражаются от многочисленных поверхностей, прежде чем достигнуть ушей.

Это первая подсказка, которую использует мозг, чтобы определить, что источник звука далеко. Следующая:

2. Предзадержка

Если вы не такой “фанат ревёрба”: предзадержка — временной промежуток между моментом прихода прямого звука и моментом прихода отражённого звука .

В пространстве с множеством отражающих поверхностей, звуки, слышимые вблизи, могут иметь много реверберации, но временной промежуток между прямым звуком и реверберацией будет большим.

У отдалённых звуков время предаздержки меньше, потому что и тот, и другой звуки преодолевают большое расстояние, прежде чем вы их услышите.

Это была вторая подсказка. Последняя, возможно, самая важная, — это…

3. Частотная характеристика

Когда звук преодолевает большое расстояние, прежде чем достигнуть вас, большая часть высоких частот рассеивается по пути.

Как я рассказывал раньше, в высоких частотах меньше энергии, чем в низких, поэтому они проще поглощаются окружающими объектами.

На дальних расстояниях такие препятствия, как массивы суши , здания и даже воздух в атмосфере способствуют затуханию высоких частот.

Это — последняя подсказка. Теперь, объединяя их все, ваш мозг может быть абсолютно уверен в том, что слышит.

И что теперь?

Теперь, когда вы всё это знаете, попробуйте эти знания применить. Обратите внимание на окружающие звуки, как в жизни, так и в музыке.

  • Откуда они идут?
  • Какие характеристики вы слышите?
  • Что делают ваши уши и мозг, чтобы составить общую картину?

Задумывайтесь об этом, пока не доведёте до автоматизма. Так вы станете лучшим музыкантом.

Adblock
detector