Комментарии 80
Отличная лабораторная работа!
Надо нормальный микрофон с усилителем, брать Arduino\STM32, оцифровывать отраженный сигнал с помощью АЦП, сохранять в массив. Потом вычислять спектр. Запускать процесс измерения отраженного сигнала (например) по переходу через 0 сигнала генератора, соответственно останавливать измерения, когда пройдет нужное число периодов сигнала. например 4. Тогда в спектре это будет 4-я гармоника. Ее фаза тогда будет равна фазовому сдвигу между сигналом генератора и отраженным. Фильтров никаких не надо, в спектре все разнесено по частотам. Вопрос только - как предотвратить прямое попадание сигнала излучателя в микрофон, прямой сигнал смешается с отраженным и будет искажать фазу.
оцифровывать отраженный сигнал с помощью АЦП
В тексте нет никакого отраженного сигнала. Вы про что?
Надо нормальный микрофон с усилителем, брать Arduino\STM32, оцифровывать отраженный сигнал с помощью АЦП, сохранять в массив.
Вы можете порекомендовать отладочную плату с микроконтроллером, аудиокодеком и SD картой?
А зачем там аудиокодек? Сохраняете отсчеты в массив и делаете БПФ. Хотя это другой метод, без гетеродина.
>Частота гетеродина точно такая же, как и частота несущей в излучаемом звуковом сигнале.
В качестве источника опорного сигнала для гетеродина лучше брать сигнал генератора с объекта (по проводам) Тогда частоты точно будут одинаковыми и фаза будет стабильна.
для дальномера такая технология подходит мало:
скорость звука в воздухе не стабильна
никогда не знаешь отражение от которой из поверхностей будет сильнее - от стены с обоями, в которую ты целишься, или от гладкого твердого потолка.
отражения от разных объектов складываются создавая новый виртуальный объект, там где физически ничего нет.
хорошо подходит для детектирования разного рода движения:
кто-то пришел/ушел
распознавание жестов
определение частоты дыхания
есть статья где даже пульс измеряли по движению грудной клетки
в принципе как дальномер тоже используется, но в контролируемом пространстве - например для измерения уровня жидкости в баке.
Советы:
не используйте "С" на этапе экспериментов. Когда надо будет делать конечное устройство с готовым алгоритмом - тогда да. Для экспериментов есть python с numpy, scipy, matplotlib и juniper notebook. С ними скорость разработки вырастет в десятки раз.
избегайте использования телефонов в этом деле. Получить чистый необработанный сигнал от них сложно, иногда невозможно. Любая копеечная аудиокарта будет лучше (но не встроенный в ноутбук микрофон - там те же проблемы).
ну и погуглите. Тема сильно не новая, есть множество интересных статей на эту тему.
Ах, да, забыл сказать. Алгоритм, который вы пытаетесь изобрести называется FMCW https://en.wikipedia.org/wiki/Continuous-wave_radar
никогда не знаешь отражение от которой из поверхностей будет сильнее - от стены с обоями, в которую ты целишься, или от гладкого твердого потолка.
отражения от разных объектов складываются создавая новый виртуальный объект, там где физически ничего нет.
В моем тексте ни слова про отражения. Это полностью пассивные измерения. Приёмник ничего не излучает.
"Полностью пассивный" - это когда ваша конструкция ничего не излучает, а вы просто слушаете звук, и измеряете расстояние до, скажем, колонок соседа-меломана.
А раз уж у вас стоит вопрос "Как можно синхронизовать по фазе два уделенных генератора звуковой частоты?", то ни о какой пассивности речи не идет.
То что вы хотите измерять расстояние не до точки отражения, а до самого источника излучения ровно ничего не меняет в методах и алгоритмах. С отражениями вам все также придется иметь дело. И да, амплитуда отраженного сигнала запросто может превышать прямой.
не используйте "С" на этапе экспериментов. Когда надо будет делать конечное устройство с готовым алгоритмом - тогда да. Для экспериментов есть python с numpy, scipy, matplotlib и juniper notebook. С ними скорость разработки вырастет в десятки раз.
Плохой совет. То что написано на Cи можно мигрировать куда угодно: MCU, PC, ядро OS.
А то, что написано на python - это скрипты-однодневни, которые вскоре оказываются в корзине. Да ещё и Python тупой синтаксис.
Алгоритм, который вы пытаетесь изобрести называется FMCW
Это не FMCW. В тексте приемник ничего предварительно не излучал.
избегайте использования телефонов в этом деле. Получить чистый необработанный сигнал от них сложно, иногда невозможно. Любая копеечная аудиокарта будет лучше (но не встроенный в ноутбук микрофон - там те же проблемы).
Вы можете порекомендовать отладочную плату с микроконтроллером, аудиокодеком и SD картой?
зачем вам именно плата? просто микрофон на длинном проводе будет в разы удобнее.
Если вы хотите именно плату, то любой одноплатник справится. любой из raspberry, например (ну кроме pico).
Если вы хотите именно микроконтроллер, то это уже из области "желает странного". Много геморроя с неясными целями. Но опять-же выбор огромный, практически любой контроллер умеет в sdio и i2s. Ну скажем https://www.st.com/en/evaluation-tools/nucleo-h7s3l8.html
Хотя можно и на blue pill сделать.
Orange Pi, Repka Pi. Не совсем микроконтроллер, но звук в отличии от малинки там нормально выведен. Ну и во всех мк есть АЦП, а во многих и ЦАП. Таймеры для генерации тона тоже не запрещены.
В смартфонах часто используют программные шумодавы и улучшайзеры, без возможности отключения. Скрывают низкое качество микроскопического встроенного микрофона. Можно нарваться на фазовые искажения.
Проблема целого количества периодов до объекта решается измерением расстояния на нескольких некратных частотах. Но если хотите делать это одновременно нужно убрать нормирование сигнала из алгоритма.
Я так понял, что пока передатчик и приемник не имеют другой связи, кроме как через звук, абсолютное расстояние не измерить.
Абсолютное расстояние можно измерить сонаром, который измеряет TOF.
А если наблюдать за фазой, то тут измерять на разных частотах, синхронизовать гетеродин и решать СЛАУ.
"синхронизовать гетеродин"
Только на приемнике?
Фазовыми методами расстояние измерить можно, если приемник связан с передатчиком линией связи известной длинны. В лазерных рулетках (использующих фазовый метод измерения расстояния) приемник и передатчик находятся в одном корпусе, расстояние между ними фиксированное, и они, конечно, электрически связаны.
А если нет способа синхронизировать приемник и передатчик между собой, то и абсолютное расстояние не измерить. Никак.
Можно качая частоту подобрать сочетания максимумов/минимумов.
По аналогии с gps - на одном видимом спутнике ты ничего не увидишь, сфера вокруг точки спутника,
На двух видимых - некое "кольцо" координат,
На трех можно триангулировать точку.
Но в реальности - чем больше спутников, тем быстрее и точнее ты находишь максимум твоего возможного местонахождения.
По статье - можно сделать излучение и приём на одном передатчике/приемнике, а можно использовать, как у УЗ радаров-парктроников - 3/4 радара и поочередно на 40кГц они излучают пакеты,
а вот как они узнают - тут можно гадать - и многоточечный прием, и прием на тот же приемо-передатчик, и поиск отклика.
А для вот такого как в статье отклика - можно использовать, меняя длительность пакета, т.е. n-циклов излучение, m-циклов прием, ожидание изменения амплитуды скользящим окном.
Пришёл отклик - сделал другой длины пакет - поиск кратного...
Поэтому достаточно долго первоначально они ищут расстояние, потом достаточно точно и на дорогих заметил - отражением от других источников вычисляют где есть отражающее препятствие.
Пусть излучатель посылает bpsk сигнал непрерывно 010101. Тогда приемник сможет подстроить свою фазу гетеродина через Costas loop.
Вот и получится синхронизация фазы излучателя и гетеродина.
Приемник может подстроить фазу своего гетеродина и под принятую синусоиду.
Для того, чтобы измерить абсолютное расстояние, нужно, чтобы синхронизация фаз передатчика и приемника не зависела от расстояния, а этого нельзя добиться, используя передачу данных только в одну сторону. При этом не важно, какая там используется модуляция, не важно, импульсный принцип, или фазовый.
...И измеренное расстояние окажется навсегда зафиксировано, к сожалению.
Если бы у звука была бы значительная дисперсия, разность скоростей в зависимости от частоты, как у волн на воде, можно было бы и без прямой синхронизации обойтись. А так - только по отдельному каналу с другой скоростью (радио, провод, ИК)
Но если хотите делать это одновременно нужно убрать нормирование сигнала из алгоритма.
Почему? Можно же сначала полосовым фильтром выделить нужную несущую, а затем выполнить её нормирование. И подавай в смеситель.
Подкину еще идейку для исследований: 4 микрофона, сенсорный экранчик и какой-нибудь жирный stm32, например. На экране показывать точкой примерно расположение самого сильного источника звука, и расстояние до него, а двумя ползунками регулировать частоты низ-верх, которые нам интересны.
Зачем сенсорный экран? Параметры можно смотреть и задавать через UART CLI.
Уже сделано в коммерческом образце:
Подкину еще идейку для исследований: 4 микрофона
Это называется Sound Source Localization (SSL)
https://www.youtube.com/watch?v=erwi-TFy5Dk
американские школьники это делают в 7м классе
Интересная задумка, но я не понимаю как вы без синхронизации фазу определяете.
она же будет случайной и определяется моментом нажатия кнопки запись на телефоне.
или я что-то не понял в эксперименте.
как вы без синхронизации фазу определяете.
Да. Определяю фазу без синхронизации. Абсолютное значение без синхронизации генераторов тут не получить.
Зато можно зарегистрировать факт перемещения источника/приёмника.
Можете пояснить как Вы сделали синхронизацию по фазе излучаемого сигнала и опорного в точке приема?
-----------------
Чем Ваш вариант лучше импульсного ультразвукового датчика?
как Вы сделали синхронизацию по фазе излучаемого сигнала и опорного в точке приема?
Хороший вопрос. Пока никак. Синхронизацию по фазе - это тема для дальнейших исследований.
Тогда можете пояснить как Вы измерили разность фаз и расстояние по этой разности?
Если нет синхронизации, то относительно чего Вы измеряете сдвиг фазы в зависимости от расстояния?
Если нет синхронизации, то относительно чего Вы измеряете сдвиг фазы в зависимости от расстояния?
Относительно предыдущего положения спикера.
Вы не ответили.
Повторю вопрос. Как Вы измеряете разность фаз между излученным сигналом и принятым?
Вы не знаете в точке приема расстояния до точки излучения и не знаете момент излучения. Верно?
Тогда Вы не можете определить расстояние даже теоретически.
Если Вы измеряете каким-то образом расстояние от предыдущего положения излучателя, то Вы измеряете разность расстояний до приемника.
Но и для такого измерения надо синхронизировать момент излучения относительно предыдущего.
Если Вы измеряете пространственную разность фаз, то микрофон и динамик должны иметь узкую диаграмму направленности.
Вы пытаетесь реализовать пеленгацию по звуку.
Известно, что применение непрерывного сигнала (Ваш случай) проигрывает в дальности импульсному сигналу (ультразвуковой датчик).
В чем преимущество Ваше варианта? Какие теоретические подтверждения работоспособности Вашей реализации без синхронизации?
--------------------------
На основе датчика TOF легко измерял расстояние до 8 метров с погрешностью примерно 1%.
Насколько я понял, автор все-таки не дальномер сделал, а просто наблюдает, как меняется фаза сигнала при перемещении микрофона.
Говоря по другому, к качестве опорного сигнала для измерения разности фаз, используются сколько-то первых семплов записи.
Можно сравнить такую конструкцию с линейным инкрементальным энкодером, который тоже не дает информации об абсолютном положении.
Интересно, что если проводить аналогии с энкодерами, можно вспомнить, что не зря они делаются квадратурными - это нужно, чтобы можно было измерять направление сдвига. Подозреваю, что и со звуком выходит тоже самое - только с одной частотой нельзя точно определить направление сдвига микрофона. Отсюда и неопределенности, которые упоминаются в статье.
Вот тут и может пригодится передача сигнала на нескольких частотах. Но абсолютное расстояние таким образом не получить.
автор все-таки не дальномер сделал, а просто наблюдает, как меняется фаза сигнала при перемещении микрофона.
...
Можно сравнить такую конструкцию с линейным инкрементальным энкодером, который тоже не дает информации об абсолютном положении.
Да. Так и есть.
Абсолютную дальность без калибровки звуком не определить.
Зато можно сделать датчик приближения или датчик удаления. Можно вычислять скорость приближения или скорость удаления. Можно интегрировать скорость и получать дальность.
приближение

удаление

Пока никак. Синхронизацию по фазе - это тема для дальнейших исследований.
Тоже идею подкину: Раз вы экспериментируете со смартфонами, можете для синхронизации фазы и частоты использовать ещё один звуковой канал в обратную сторону.
Дополнительного железа для этого не надо. А вот знать фазовые искажения и задержку между собственным приёмом и передачей - надо, но их можно откалибровать. Эдакий синхронизатор NTP с дальномерным кодом GPS ;)
Понятно, что нужны ещё поправки на ветер (в прямом смысле) и температуру (в основном она влияет на скорость звука). Но измерения уже не будут плавать от частоты, и станут абсолютными.
так все ж уже украдено до нас. Техника называется FMCW (frequency modulated continuous wave), активно применяется для радаров (измерить расстояние и скорость).
Подобная техника применяется в системах захвата движений (motion capture). На человека вешается куча маленьких излучателей, он перемещается по комнате, делает какие-то движения, вокруг него в комнате массив приемников. Система записывает все его движения, которые потом можно передать в программу для 3д анимации и обойтись без моделирования движений вручную.
Еще такая система внедрялась в каком-то американском университете, давненько правда читал про это, по всем помещениям раскиданы приемники звука, у каждого человека есть маленький передатчик с кнопкой. При нажатии на кнопку система определяет его положение с точностью до сантиметров, и что-то делает. Там было такое - пишешь на post-it надпись "выключатель света" и лепишь его где угодно. Затем в системе прописываешь сценарий, и потом достаточно щелкнуть мини-передатчиком около этого листика - и включается-выключается свет.
Но эти системы все работают на ультразвуке, причем довольно высоком - 40-60 кГц. Точность там до миллиметров в motion capture.
Как уже верно заметили, с помощью периодического сигнала нельзя измерить задержку, большую его периода. Так почему бы не использовать широкополосный сигнал?
Простейший случай - зондирование одиночными импульсами (в пределе - дельта-функция Дирака) - хорошо работает только в полной тишине. Из-за малой энергии импульса любой посторонний шум будет мешать измерению.
Если подавать много импульсов случайным непериодическим образом (в пределе - белый шум), то можно вычислить корреляцию между выходным и входным сигналами и найти импульсную характеристику системы, которая состоит из главного пика (кратчайший путь звуковой волны) и множества вторичных пиков. См. эксперименты на Pixilang. Недостатки данного метода: шум отфильтровывается очень медленно, его амплитуда снижается пропорционально квадратному корню из количества семплов; АЧХ генерируемого сигнала также носит случайный характер и может содержать пики и провалы (что снижает точность деконволюции из-за возможных делений на числа, близкие к 0).
Улучшить отношение сигнал/шум можно, используя псевдослучайную М-последовательность. Она обладает ровной АЧХ и минимальным пик-фактором. Хотя она и является периодической с периодом 2^N-1, этот период может быть сколь угодно большим, что позволит измерять любые реально возможные задержки. Недостаток - период не является точной степенью двойки, что несколько усложняет вычисление БПФ.
Объединяя перечисленные идеи, мы можем создать периодический шум с ровной АЧХ и периодом 2^N для удобства вычислений. Для этого в частотном пространстве заполняем массив комплексными числами с единичной амплитудой и случайной фазой. Вычисляем обратное БПФ и получаем периодический шум, который транслируем с передатчика. На приёмнике вычисляем БПФ, делим полученный спектр на спектр исходного сигнала (деконволюция) и вычисляем обратное БПФ, получая импульсный отклик системы. Недостаток метода - большой пик-фактор шумового сигнала, что ухудшает сходимость из-за нелинейных искажений. Пики можно частично устранить оптимизацией (срезаем пики и нормируем амплитуды к 1).
Наконец, самый сложный, но самый универсальный метод - сгенерировать частотно-модулированный синусоидальный сигнал. Он требует более сложной математической обработки, но позволяет не только получить импульсную и частотную характеристики, но и проанализировать нелинейные искажения (PDF).
MLS еще хорош тем, что принципиально не нужно синхронизировать приемник и передатчик.
В частности, при акустических измерениях (программа ARTA, например) позволяет точно определить не только АЧХ и ФЧХ измеряемого динамика, но и задержку распространения сигнала, а значит - расстояние от излучателя до микрофона.
Про ЛЧМ забыли, который по сути растягивает дельту Дирака во времени. Преимущество перед MLS в том, что а) сигнал непериодический (конечный во времени), б) можно явно задавать полосу частот.
А для получения импульса деконволюция не обязательна, особенно с линейной АЧХ - достаточно свёртки с исходным сигналом, но реверсированным во времени (корреляция).
А для получения импульса деконволюция не обязательна, особенно с линейной АЧХ - достаточно свёртки с исходным сигналом, но реверсированным во времени (корреляция)
Вы имеете в виду, что деление на спектр исходного сигнала (при его линейной АЧХ) можно заменить умножением на комплексно сопряжённый спектр (с точностью до модуля)? Спасибо за интересную мысль, хотя на практике свёртка всё равно наверняка будет вычисляться с помощью БПФ.
Как можно синхронизовать по фазе два уделенных генератора звуковой частоты?
Не знаю, может глупо конечно, но первое что пришло на ум, - это помимо приемника, иметь на определенном расстоянии ещё один (второй) источник звука, неподалеку от приемника, под известным углом "альфа" векторами направленности вашего приемника и второго источника звука.. Далее.. Принимая сигнал, от основного (измеряемого) источника, можно примерно настроить (второй источник звука) на высшую гармонику звука первого источника.. Далее.. И подгоняя в небольших приделах (ваш второй источник звука) по частоте, или фазе (прерывая или начиная колебания).. Внимание.. Возможно удастся сопоставить (настроить) на резонанс источник 1 и источник 2.. по средствам вашего приемника, понимать это, амплитудой, или ещё как.. тем самым, получается, вы точно будете знать частоту источника 1.. и подстроите по фазе ваш приемник, как результат.. Надеюсь более менее понятно, о чем я говорю.. Спасибо! Материал отличный!
Если вкратце, то представьте себе настройку гитары, с специальным запущенным приложением на вашем телефоне.. В телефоне, строго известные частоты всех нот, и строя.. (примем их за источники звука 1).. подстраивая колки на своей гитаре (примем за источник звука 2), вы пытаетесь найти подходящую ноту строго заданной струны, до тех пор, пока ваша струна гитары и издаваемый приложением звук, не будут звучать в унисон.. Найдя нужную ноту, вы можете измерить частоту колебания струны, тем самым зная ещё и фазу колебаний.. как-то так, на мой взгляд..
если вы знаете угол "альфа" и расстояние между приемником и вторым источником, то вам не нужен звук. вам нужен учебник по геометрии :)
Нет, изначально угол между приемником, и источником 1, неизвестен.. известен угол между приемником и источником звука 2 (который в последнем случае вы вводите целенаправленно).. на основе этого, вы путем подстраивания частоты и фазы источника 2.. можете добиться резонанса с источником 1, тем самы уже понимая его "точные" частоту и фазу, и внося всвязи с этим корректировку в расчет при приеме звука.. p.s.. не внимательно поняли мысль, что я пытался донести..
Боже, что я сейчас прочитал? Это у вас не дальномер. Это максимум детектор быстрого движения.
Из-за некогерентности излучаемого и принимаемого сигнала вы не отличите медленное движение от разности частот генераторов.
Перемножив сигналы, вы убили информацию о направлении движения (умножение ассоциативно).
Было бы здорово делать эти измерения в реальном масштабе времени. Например на FPGA
И это действительно сделано на ПЛИС: 2 синуса оцифровываются и подаются на фильтры (преобразователи) Гильберта, на выходе каждого получается 2 сигнала: синус и косинус (это позволяет отвязаться от абсолютной амплитуды). Далее эти сигналы продаются на два atan2, на выходе которых - фаза изначального синуса. Далее берётся разность этих фаз (вычитание не ассоциативно). Подробный проход позволяет вычислять относительную разность частот порядка 10^(-8).
А вообще, при таких расчетах, не плохо бы иметь данные с метеостанции в режиме реального времени: давление, температура, влажность, скорость и направление ветра.. так как утверждение, что скорость звука в воздушной среде, 331 м/с - является константой?!.. весьма сомнительно.. потому как скорость звука зависит от всех этих параметров, а конкретно от плотности воздушной массы.. да и плюс, поправка на эффект Доплера, должна быть в обязательном порядке..
Влажность, температура, давление - все влияет. Ненамного, но в целом выходит приличный разброс. И метеостанции(датчики) мелкие китайские все это дело измеряют легко и дешево.
Меня в свое время интересовала система тачскрина на ультразвуке. Обычное тонкое стекло поверх экрана. Четыре датчика в углах экрана. У них есть два сценария: 1. нажатие пальцем, как в смартфоне. 2.тапание пальцем, ногтем или стилусом. Подходы разные, во втором случае идут тупо фильтры, триангуляция, а вот в первом случае там есть еще генератор ультразвука, условно говоря пьезоэлемент, который колеблет само стекло на очень высокой частоте порядка мегагерца, внутри ПЛИС заложена калибровочная матрица отражений и стоячих волн. Простое касание пальцем\предметом меняет картину, это все как-то обрабатывается и по сути работает очень круто и отзывчиво, очень похоже на современные емкостные матрицы телефонов, технология в народ не пошла из-за сложности, но вот DIY ее реализовать можно, правда не знаю насколько упоротый матан там должен крутиться.
Интересная технология. Имеет смысл, когда емкостные/индуктивные датчики не работают.
Ссылку на какую-нибудь статью или англоязычное название привести не могли бы?
Матан - ну расчёт колебаний плоской мембраны с/без демпфера в точке х,у не представляется сложным.
Можно рассмотреть одномерный случай - электрогитара, струна, кривой гитарист, берущий флажолеты :).
Влажность, температура, давление - все влияет. Ненамного, но в целом выходит приличный разброс.
Поэтому, измеряя расстояние по воздуху на эталонной дистанции, можно измерить скорость и направление ветра и что-нибудь из давления, влажности, температуры.
https://aliexpress.ru/item/32818443302.html
Ну и не только на али, а в принципе так давно делают. Твёрдотельный флюгер-анемометыр) Скорость и направление измеряютъ. По температуру компенсируютъ. От давления и влажности скорость звука слабо зависит.
Тоже слышал про такую штуку с ультразвуком. Пальцем, или даже в толстой варежке демпфируешь колебания нажатием. При этом грязь, брызги - всё такой штуке по-барабану.
Матан, если считать напрямую, понятно, упоротый. Есть небольшая надежда на нейросети, но подобрать датчики для исходных данных тоже не просто.
Я от том, что к примеру в летнее время года, и к примеру, в зимнее время года, скорость звука в среде, будет отличаться.. и соответственно все эти факторы все нужно учитывать..
Судя по википедии в основном температура влияет. Давление - практически нет. Влажность, состав газов - ну это уже такой состав, где люди не выживают. Ну и по моему опыту - термокомпенсация скорости звука работает.
Ветер - да, это же тот самый "эфир", который искали до 19го века. В звуке он есть, и влияет, естественно. Скорость и направление ветра даже измеряют так.
Про Доплера - написал тут уже. Это единственный эффект, который измеряется автором.
Что-то Вы сильно переусложнили математику. Для детектирования фазы стандартно применяют квадратурный смеситель, он же приёмник прямого преобразования.

Узкополосную фильтрацию специально делать не надо, она в итоге делается выходными LPF. Отдельным узкополосным фильтром Вы только фазу ещё дополнительно подвинете в неизвестном направлении.
Однако мне пока не понятно почему измеренное расстояние периодически уменьшалось
После LPF фаза вычисляется, как аргумент arg( Re(S) + i Im(S) ), он же atan2() в Си. Он же делает ненужной нормализацию сигнала. Применив acos() Вы получили неоднозначность по направлению перемещения, и работу в пределах половины длины волны.
Нормализацией в виде sign() Вы внесли фазовые искажения. Дискретизировали фазу. Частота дискретизации-то не сильно большая. Поэтому и выходной сигнал стал грязнее.
Эффект Доплера тут работает как помеха. Можно спутать с нестабильностью кварца
Вообще-то вы именно эффект Доплера и измеряете. Вы передвигаете приёмник, частота сигнала меняется от скорости, соответственно, двигается его фаза относительно опорного сигнала. И Вам ещё очень повезло, что кварцы в обоих смартфонах оказались с достаточно близкой частотой.
Ну и как тут говорят, обработав две, не кратные друг-другу, частоты вы имеете шанс получить нониус, как у штангенциркуля. Например F и F*sqrt(2). Звучать, конечно, это адски будет - уменьшенная квинта, один из самых мерзких музыкальных интервалов.
Шумомодобный сигнал, проходящий на два разнесеннх преемника определяет множество точек пространстве ,без одной степени свободы ,где может находиться источник , те убирает одну степень свободы из трех и определяют скорее всего плоскость. Добавьте ещё один микрофон, отнимите ещё одну степень свободы. Четыре микрофона , расположенные в углах пирамиды дадут 3 соординаты.
Черыре приемника достаточно синхронизировать только между собой, что не сложно поскольку они рядом , на небольшим расстоянии друг от друга. Но точность определения координат источника быстро падает с увеличением расстояния от пирамиды приемников до источника.. один из приёмников выбирается за базовый, после этого с помощью корреляции с другими получаем три временных разности со знаком и они однозначно определяют координаты источника в системе координат пирамиды приемника
Вы говорите совершенно правильно, своего рода триангуляция, по которой собственно не сильно сложно будет определить разницу времени, приходящего сигнала, на указанные три приемника.. вычислить тем самым углы наклона векторов приходящего сигнала, и как следствие определить расстояние до источника звука.. но есть некая условность, на низкой частоте сигнала, мы должны разнести эти три приемника, минимум на пару метров друг от друга.. иначе можно не получить, сколь значимого значения разницы между приходящим сигналом на приемники..
на низкой частоте сигнала
Белый шум, щелчки etc. https://habr.com/ru/articles/847122/comments/#comment_27379532
Посмотрите в эту сторону, может быть это как-то вам поможет..
Модуль подводного ультразвукового дальномера. Часть 1
Модуль подводного ультразвукового дальномера. Часть 2
Модуль подводного ультразвукового дальномера. Часть 3
Сюда..
Делаем гидрофон и записываем звук трескающегося льда
Почему звук в воде затухает?
И это..
Вы делаете это неправильно: расчет глубины
P.s.. только в вашем случае, будет перерасчёт на воздух и более низкие частоты, нежели ультра звук..
P.ps.. Так же, не стоит забывать, что в случае воздушной среды (да и воды думаю тоже), вы имеете градиент плотностей, температур и "влажности", по большому счету.. на пути следования сигнала от источника, до вашего приемника..
Спасибо
Звуковой Фазовый Дальномер (Микрофон = Датчик Расстояния)