Comments 54
режим feeding buzz (в научной литературе термин не переводится
Однако популяризаторы, в том числе с кандидатскимо степенями по биологии, в частности Алексей Опаев, который писал статьи о рукокрылых для Элементы.ру (вполне уважаемый сайт биологической в основном напраленности) использует термин "пищевая трель" (есть ещё питьевая, в этом режиме они зву́чат поверхность водоема, когда пьют, чтобы не нырнуть).
Если строить аналогии с природными примерами, то логика подсказывает как минимум два микрофона. Больше — ещё лучше. В таком случае как и у летучих мышей источник сигнала может быть один, а всё остальное вычислять на базе разности, получаемой каждым микрофоном по отдельности. Это просто идея. Спасибо за статью! Вам уже удалось реализовать в железе то, о чём я только начал задумываться: «А с чего бы начать?..»
Разность фаз на двух микрофонах даст точный азимут, но усложнит математику. Придется считать кросскорреляцию двух сигналов, а это уже серьезная нагрузка на проц
Разность фаз на двух микрофонах даст точный азимут, но усложнит математику. Придется считать кросскорреляцию двух сигналов, а это уже серьезная нагрузка на проц
Понятно, что для вычисления угла прихода волны у нас в распоряжении wav файла есть только смещение фазы сигнала в каналах записи. Если смещение равно нулю, то и угол AoA равен 0 градусов.
При частоте дискретизации 96000 Hz один семпл длится всего 10.4 us. Скорость звука 331 м/c. За это время звук пролетает 3.4 мм.

Получается, что в предельном случае, когда угол на источник звука 90 градусов и при расстоянии между микрофонами 6 см=0.06м разность межу фазами звуковых дорожек составит всего 0.06/331.0 = 0.00018126s = 181.26 us или всего 17 cемплов на 96kHz.

С какой погрешностью мы тогда сможем измерять угол на источник звука? Получается что 90/17= 5.2 градуса. Не густо.

Cогласно рисунку прямоугольного треугольника ABC, последовательность формул (1)-(10) приводит к тому, что угол прихода звуковой волны AoA вычисляется по формуле (11). Тут применяется теорема Пифагора (1), простейшая тригонометрия (7) и формула вычисления пройденного пути по известной скорости и времени (3).
Из тригонометрических преобразований легко выражается формула для угола прихода звуковой волны (11). Единицы измерения тут радианы. От -pi/2 до pi/2
Как видите, зависимость нелинейная. Арксинус это монотонно возрастающая нечётная функция, заданная на области определения от -1 до 1 области значения от -pi/2 до pi/2.
Учитывая, что микрофоны жестко закреплены , а скорость звука постоянная, ToF может максимум быть (13)
Расстояние между микрофонами определяет то, какую максимальную разность фаз имеет смысл анализировать внутри программы. Если расстояние равно 1 метр, то звук пройдет это расстояние за 3ms. При частоте дискретизации 96kHz длительность семпла равна 10.4us. Выходит, что надо вычислять корреляцию между дорожками отличающимися максимум на 290 семплов.
TOF мы определим при помощи ЦОС вычислений программным образом алгоритмом вычисления корреляции между сигналами на каналах. База D - известна, скорость звука тоже известна. По сути можно выполнить свёртку записей правого и левого микрофона вокруг +/- (TOF_max/2), найдем максимум свёртки, определим значение максимума свёртки. Оно и будет являтся TOF.
Для тестирования потребуется ещё такая формула.
Для вычисления угла прихода волны в диапазоне от -90.....+90 надо считать корреляцию по следующему количеству отсчетов (12)
Буквально несколько предварительно рассчитанных значений

Для уменьшения погрешности определения направления прихода звуковой волны надо либо
1. Увеличивать расстояние между микрофонами
Увеличивать частоту дискретизации.
Второй способ более трудный, так как диктофон не может записывать быстрее, чем 96kHz. Вот и остается наращивать расстояние между микрофонами.

Какой длины считать свёртку?
Важный параметр это сколько семплов охватывать при вычислении свёртки? Чтобы не было неоднозначности. Надо чтобы длина волны уместилась на расстоянии между микрофонами не полностью. Допустим расстояние между микрофонами 1 метр. Значит надо, чтобы длины волн, которые прилетают были длиннее чем один метр. То есть из частота должна быть меньше 331 Hz.
С одной стороны, чем больше будет слагаемых тем явнее окажется максимум. С другой стороны увеличивается количество вычислений. Надо помнить что на каждом семпле мы считаем ToF_sample количеств свёрток (12). А потом еще находим максимум в массиве.
При этом надо помнить что источник звука может двигаться. И надо выбрать такой интервал времени, в котором цель не успела переместиться слишком далеко.
Частоту дискретизации легко можно поднять простейшими полиномными интерполяторами. Но и привязываться к выборкам - не очень хорошая идея, т.к. точность будет не очень. Как вариант - пропустить каждый канал через БПФ и по разности фаз каждой частоты определить временной сдвиг
через БПФ это лучший вариант. Есть прекрасная либа CMSIS-DSP, с помощью которой подобное разложение вполне возможно даже на слабеньких F4
Как раз недавно ее тестировал против своей реализации через radix-4. На некотором количестве выборок быстрее, на некотором медленнее. F401 на своих 80мгц тянет RFFT при SR=250кГц без пропусков.
через БПФ это лучший вариант. Есть прекрасная либа CMSIS-DSP, с помощью которой подобное разложение вполне возможно даже на слабеньких F4
Корреляция легко считается в потоковом режиме. На лету. А как Вы хотите считать FFT в потоковом режиме? Ведь для FFT надо подавать массив конкретной длины.
Поток разбивается на блоки равной длины FFT. Изучите для начала алгоритмы overlap-add и overlap-save - так вы сможете считать корреляцию с задержкой.
А вам точно нужен real time? Для своей задачи накапливаю целый семпл 30 мс, раскладываю (в процессе) на 1024 и дальше считаю все что мне нужно. Задержка если честно никак не ощущается. Проблема одна - нужно прилично оперативы чтобы где то хранить разложенный семпл, но даже у F405 уже есть 192 кило, хватит с запасом
Это будет уже не ФАР, а АФАР. МК может не потянуть. Если ему помочь прецизионными ОУ, то потянет. Но схемотехника усложнится на порядок.
Есть слепые, которые научились "сонировать" окружающую среду, цокая языком и двумя ухами улавливая отражённую звуковую картину.
Вместо того, чтобы одним лучом медленно сканировать, может лучше "бахнуть" сразу во все стороны, записать картину отражённого сигнала на 2 (4, ...) микрофона и по ней восстанавливать сцену? Например, по сдвигу фазы принятой синусоиды на разных микрофонах можно триангулировать направление на источник отражения, по сдвигу фазы относительно исходного сигнала - дальность до обьекта.
А в помещении с эхом ото всех стен работать хоть как-то будет?
Если в помещении целиком поместится рабочая область сонара (спортзал, ангар), то да, будет работать. Но могут быть артефакты от отражений от стен - полагаю, повышенный уровень шума или ложные пики, соответствующие стенам.
Парковка, на которой я проверял устройство, находится во внутреннем дворе здания и окружена стенами со всех сторон. Минимальное расстояние между стенами 20 м, устройство работает корректно
Как ФАР-дефектоскоп при контроле небольшого объекта. Ну или вы в комнате с зеркальными стенами - будет много отражений. Которые надо фильтровать априорной информацией. Как в общем, летучие мыши и делают
Большинство вопросов по теме зондирования атмосферы уже подробно разобраны - рекомендую скачать вот эту книжку
Красненко Н.П. Акустическое зондирование атмосферы
Как я понимаю, “минус куб” потому, что рассматривался двумерный случай. А на практике - измерения производятся в объёме.
ДН самих излучателей при расчёте ДН ФАР - не учтена.
Массив микрофонов, наверное, будет лучше. Больше эхосигнала будет принято. И частоты можно будет приподнять для улучшения разрешения за счёт меньшего шага.
Измерения проводились вдоль главного лепестка в дальней зоны антенны. В таком случае интенсивность излучения спадает как для излучателей любой природы (как радиоволны, так и акустические). Для антенн интенсивность в дальней зоне зависит не только от расстояния, но и от направления, что выражается как раз через диаграмму направленностей:
Я полагаю, что отличия в скорости спада возникают из-за поглощения среды. По з-ну Бугера-Ламберта-Бера при прохождении поглощающей среды:
А провал мощности при 11-13 м из-за интерференции с волнами, отражёнными от земли.
ДН я рассчитывал идеализированную, для оценки. Конечно, на практике она будет не совсем такой. Помимо ДН самих излучателей влияет взаимодействие излучателей между собой, интерференция от элементов установки, наверняка есть ещё факторы. Кроме того, я никак не учитывал АЧХ и ФЧХ усилителей. Это все искажает реальную ДН по сравнению с рассчитанной математически. Но и рассчитывал я её лишь для оценки применимости антенны к моей задаче.
Да, большее количество микрофонов улучшило бы ситуацию. Возможно, в будущем поставлю и их. Но пока все упирается в обработку сигнала - даже разогнав МК, пришлось поколдовать с приоритетами прерываний, чтобы сигнал корректно излучался, а принятый звук не терялся и полностью обрабатывался.
Когда я написал статью и засел за редактор Habr для её публикации, то с удивлением обнаружил, что тем же утром вышла статья с описанием аналогичного устройства. Однако, в ней автор использует другие идеи для создания своего сонара, так что есть возможность сравнить подходы и получившиеся устройства между собой.
Спасибо, что вставили ссылку на мой текст. Прям сезон сонаров.
https://habr.com/ru/articles/1050166/
Что если генерировать звуковую зондирующий волну не колонками , а пьезокерамическими звуко-излучателями? Зуммерами. Они компактные и управляются одним проводом.
Как раз ШИМ пригодится.
И принимать массивом микрофоном. Излучение - ФАР, прием - акустическая голография. И то и то для узк используется. Но вычислительные мощности как правило большие требуются. В нк аналог сонара - А-скан и его производные - делали на рассыпухе полсотни лет назад, сейчас это компактная коробочка на плис. А фар и синтезированная апертура - это что-то с мощностью ноутбука и специализированным софтом. Хотя наверное синтезированную аппертуру компактно сделать легче, чем акустическую ФАР. Летучие мыши вон кричат в одно рыло, а слушают двумя ушами. Хотя это эволюция - не всегда оптимальное, часто первое попавшееся рабочее
У зуммеров очень узкая резонансная частота, обычно около 40 кгц. Для них не нужен ШИМ с синусом, достаточно просто подавать меандр, что сильно разгрузит таймеры контроллера
Да. Те самые короткие импульсы на частоте 2,5kHz.
Для них не нужен ШИМ с синусом, достаточно просто подавать меандр, что сильно разгрузит таймеры контроллера
На STM32 как раз можно аппаратно регулировать фазу PWM сигнал.
Вот методичка.
Управление фазой аппаратного PWM сигнала на STM32 (или таймер на ошейнике)
https://habr.com/ru/articles/1023940/
То что надо для формирователя звукового луча на пьезокерамических звуко-излучателях.
Возможно не в тему, но пьезоэлектрическими излучателями например чудесно измеряется скорость ветра вместе с его направлением. Точность отличная, но 3 датчика смотрят друг на друга - в случае большого расстояния между ними (звук в местность) думаю придется делать весьма габаритный приемник.
Для сканирования окружающего пространства необходимо генерировать короткие звуковые импульсы на заданной частоте,
Я так понял у Вас зондирующий импульс простой. B=1. На одной частоте.
Поэтому его отражение и можно поймать алгоритмом герцеля.
Однако такими импульсами невозможно различить две цели стоящие рядом. Идущие звеном самолёты.
Радары и сонары уже давно работают только со сложными импульсами. 1‹‹B.
Это ЛЧМ сигналы и модулированные м-последовательность фазовые пакеты. Причина проста . У сложных сигналов очень хорошая автокорреляционная функция. Это позволяет на порядки увеличить разрешение по дальности.
Да, я про это как-то поздно задумался) Уже когда анализировал полученные результаты и думал, как улучшить точность, стал изучать подходы к обработке сигналов в локации. Зондирующие сигналы дают лучшее разрешение. Хотя, полагаю, там и математика в разы сложнее для МК: у меня поначалу даже алгоритм Гёрцеля не успевал обрабатывать. Потом расставил приоритеты прерываний правильно, всё заработало
Там простая математика. Пропустить запись через КИХ фильтр. Просто надо быстродействие в вычислении корреляции. Надо аппаратный fir фильтр порядка 3к.
Частота сигнала 2.5 кГц
Вообще монотонные зондирующие импульсы тоже имеют место быть.

Монотонными зондирующими импульсами можно делать первичный поиск цели. Далее уже определив потенциальную цель, можно в то же место отправлять уже разнообразные ЛЧМ и ФКМ импульсы, для получения конкретных деталей о цели.
STM32F429 на плате Discovery. Однако на нём установлено всего 2 ЦАПа
Можно подобрать отладочные платы с DAC , которые управляются по spi.
Выводимый сигнал через усилители подаётся на колонки. Таким образом, я программно задаю частоту сигнала и фазовый сдвиг для каждого акустического излучателя в массиве ФАР. В результате заданная частота чётко выделяется пиком на спектральном анализаторе звука; формируется узкий сканирующий луч, который с заданным шагом изменяет своё направление
Как же это здорово!
Разрешение по расстоянию — около 45 см — не очень‑то хорошая точность в сравнении с летучей мышью, но как сделать точнее я пока не придумал
Решение классическое. Надо испускать сложные сигналы: ЛЧМ или ФКМ.
Микрофон я установил непосредственно за ФАР.
Подобрать хороший микрофон та ещё задача. Какой у Вас микрофон?
Самодельная плата с конденсаторным микрофоном и усилителем. Он мне достался в наследство из другого проекта (не моего), так что АЧХ нет. Есть схема:
Можно теперь провести испытания на полигоне , расставив кругом уголковые отражатели, выпеленные из коробок.
Из всего этого можно сделать отличную охранную систему, для навигации ptz видеокамер. Охранять дачный участок, аэропорты, металлургические комбинаты , нефте переливные станции и прочее.
Или датчики для авто парковки автомобилей.
Если перейти на пьезокерамику, то можно смастерить глубиномер с анализом карты глубин и поиском скопления рыб.
Несомненно, проекту есть куда расти
Я пришел к выводу , что полноценный сонар надо проектировать на FPGA. Или в тандеме с одноплатным компьютером . Микроконтроллер просто захлёбывается при обработке сложных импульсов.
Так и делают. Тут конечно проще - в воздухе скорость ниже, расстояния большие, оперировать приходится солидными промежутками времени. А малые размеры и высокая скорость - в воде или твердых телах - там да, fpga. Я разбирал (случайно) промышленные приборы - там spartan-овское что-то было и куча рассыпухи на плате. Люди, проектировавшие подобные системы в 90х, говорили, что уперлись в быстродействие микроконтроллеров очень быстро даже на примитивных двухканальных регистраторах, хотя брали самые быстрые на тот момент PIC.
Когда в конце 80-х занимался АФАРами в институте, в связи с отсутствием доступа к суперкомпьютеру М-13, выкручивались аналоговой вычислительной машиной на ОУ, после чего и ДВК-2 с математикой справлялась за приемлемое для прототипирования время. А вот модели и их параметры просчитывали уже на ЕС-1061
Летучие мыши по ходу вообще в уме делают синтез аппаратуры. Подобно тому как SAR спутники землеобзора строят карту поверхности земли по отдельным радиолограммам в известных местах.
.
Вообще я очень рад, что на habr появляются такие замечательные тексты
Чтобы обойти природу - нужно использовать 4 микрофона в узлах тетраэдра, тогда можно будет определять направление в 3D через разность фаз и амплитуд. Математика обработки конечно будет в разы сложнее. Я делал нечто подобное в задаче выделения центра из стерео сигнала или, другими словами, выделение сигнала вдоль конкретного вектора в 2D (а сама математика считается в комплексных числах в частотном домене). Возможности человека в аналогичной задаче результат субъективно превзошёл.
Если хочется сделать 3d, самая очевидная идея оптимизации – горизонтальная линейка излучателей и вертикальная линейка приёмников.
Очередное доказательство что миллионы лет эволюции пока выигрывают у кучки китайских динамиков и стм-ки) Зато поигрался с ШИМом :)
Как-то тоже экспериментировал. Механическая развертка, дешевый китайский дальномер. Подавал на излучатель 8 периодов 40кГц. Выход усилителя приемника подключил к ацп и просто собрал картинку. Получилось очень наглядно, на мой взгляд...
Скрытый текст

Разрешение по расстоянию — около 45 см — не очень‑то хорошая точность в сравнении с летучей мышью,
Вот так выглядит автокорреляционная функция монотонного зондирующего импульса.

Эхолокация: микрофон и фазированная решётка из колонок