
Я программировал мультимедийные системы для автомобилей. Это были проигрыватели музыки на основе микроконтроллеров. И между делом у меня появилась мечта сделать сонар из музыкальной колонки.
Постановка задачи
Собрать прототип акустического сонара. Соединить микроконтроллер STM32, аудиокодек WM8731 и SD карту в один прототип. Сделать прошивку на Audio Loop Back. Микроконтроллер соединить с аудиокодеком по I2S и I2C. Прошивка рассчитывает зондирующий ЛЧМ импульс и отправляет его на спикер. Тем временем микрофон в фоновом режиме записывает излученный импульс и эхо от него. Затем прошивка вычисляет свертку зондирующего импульса с принятым эхо сигналом. Результат свёртки записывается на SD карту в виде отдельного файла. Поэкспериментировать с разными зондирующими импульсами. В идеале каждый зондирующий импульс должен быть уникальным.
Теория
Сонар работает очень просто. Передатчик отправляет один зондирующий импульс и параллельно слушает ответ. Со временем приходят отраженные импульсы.

Как известно скорость звука это 331 метр/с. Если умножить скорость звука на TOF и поделить на два, то получится расстояние до предмета.
Учитывая скорость звука в воздухе 331 м/с получаем, что разрешение по дальности dx косвенно зависит от частоты дискретизации звука

Однако в радиолокации существуют отдельные формулы для разрешающей способности по дальности.

Для монотонного импульса используется формула разрешения по дальности (2). Все цели, которые отстоят друг от друга менее, чем на dR на сонаре будут отображены как одна единственная цель. Формула (2) выводится исходя из геометрических построений на рисунке выше.
В случае ЛЧМ импульса разрешение по дальности считается по формуле (4)
Например, для ЛЧМ c параметрами Fstart=500 Hz Fend=5kHz и скорости звука 331 м/c разрешение равно 3см.

В радарной технике используют сложные и длинные зондирующие сигналы: ЛЧМ и кодовые BPSK (ФКМ сигналы). Это позволяет закачать в зондирующий импульс больше энергии, повысить шансы на отражение сигнала и его приход обратно в приемник.
Сонары в воздушной среде делать существенно проще, чем подводные сонары или дефектоскопы металлов. В воздухе скорость звука в разы ниже (331 м/c), расстояния в разы большие, оперировать приходится солидными промежутками времени. А малые размеры и высокая скорость - в воде или твердых телах - там работают только FPGA.
Всё это открывает возможность построить акустический сонар на основе микроконтроллера.
Свёртка, конволюция — операция в функциональном анализе, которая при применении к двум функциям возвращает третью функцию, соответствующую взаимно корреляционной функции. Операцию свёртки можно интерпретировать как «схожесть» одной функции с отражённой и сдвинутой копией другой.

Аппаратная часть
В прошлом тексте я использовал два смартфона для сбора данных. Первый проигрывал огромный wav файл с зондирующими ЛЧМ импульсами, второй смартфон просто записывал всё вокруг рядом. Такой подход затруднял понять, где именно на двух звуковых дорожках эхо от конкретного импульса. Поэтому я решил написать одну прошивку для одного прототипа, чтобы специально собирать сонарные данные.
В качестве отладочной платы я выбрал PCB DevEBox_V3_0. Эта учебная плата хороша тем, что на ней есть SD карта, подключенная по быстрому интерфейсу SDIO. Надо собрать прототип согласно вот этой подсказке.

На микроконтроллер STM32F407VG я загрузил прошивку аналогового LoopBack проигрывателя. Это такая прошивка, которая может одновременно воспроизводить и записывать WAV файл. Про её разработку у меня есть отдельный текст.
Перед экспериментами убедитесь осциллографом, что при воспроизведении частота дискретизации на проводе I2S2_WS точно равна 48kHz. От этого зависят будущие вычисления дальности. Если частота отстоит от 48kHz, то это придется компенсировать за счет варьирования скорости звука в конфиге программы на PC.
Зондирующие импульсы я проигрывал 8 Watt-ными компьютерными колонками. Модель Defender 2.0 Speaker System Aurora S8 (SN 2293315072403158). Колонки питались от USB-A порта.
Эхо записывал петличным микрофоном Aceline AMIC-7, Сопротивление:2200 Ом, частота: 50 Гц - 16000 Гц, чувствительность -58 дБ

Программная часть
При записи эхо сигнала надо реализовать непрерывную запись звуковой дорожки длительностью 1-2 секунды. Данные надо непрерывно записывать в SD карту и уже затем считать свёртку по каждому смещению. У меня уже был текст про то как делать аудио LoopBack. Называется Full Duplex I2S на STM32. Надо посылать реальные сонарные сигналы и записывать эхо от них. Далее на PC пропустить записанный сигнал через программный консольный коррелятор, опорный сигнал которого равен излучаемому зондирующему сигналу. Получится свертка, показывающая расстояния до целей. Коррелятором выступает обыкновенный FIR фильтр высокого порядка. Всё просто.

Чем длиннее зондирующий импульс, тем выше порядок коррелятора. Порядок коррелятора это количество регистров в его сдвиговом регистре. Каждый регистр хранит один семпл.
Подготовка зондирующего импульса
У меня написана отдельная консольная утилита для синтезирования ЛЧМ импульсов. Называется sonar.exe. Утилита при запуске разворачивает на экране интерфейс командной строки и можно текстовыми командами сконфигурировать параметры зондирующего импульса.
CLI команда | Пояснение |
dds_set_chirp 1 10 000 450 10 000 0.05 | Присвоить первому DDS настройки для ЛЧМ сигнала F1=450 Hz; F2=10kHz; Duration: 50ms |
ddssfr 1 48 000 | Задать частоту дискретизации 48kHz для первого DDS |
wavsf 2 48000 | Задать частоту дискретизации 48kHz для второго WAV файла |
wav_duration 2 2 | Задать длительность 2 секунды для второго WAV файла |
wav_gen1ch_from_dds 2 out.wav 1 | Сгенерировать WAV файл out.wav на основе настроек из первого DDS |
wav_shift_right out.wav 0.25 | Сдвинуть вправо сигнал из WAV файла на 0.25 секунд |
Можно вводить CLI команды вручную, а можно набрать их автоматически одним кликом на bat файл. Данный скрипт синтезирует желаемый цифровой ЛЧМ импульс, который начинается от 450 Hz и заканчивается 10kHz. Имеет ширину 50ms.
cls set batdir=%~dp0 echo batdir=%batdir% cd %batdir% set wav_num=2 set options= set options=%options%; ddp 1 0.05 set options=%options%; dds_set_chirp 1 10000 450 10000 0.05 set options=%options%; ddssfr 1 48000 set options=%options%; wavsf %wav_num% 48000 set options=%options%; wav_duration %wav_num% 2 set options=%options%; wav_gen1ch_from_dds %wav_num% out.wav 1 set options=%options%; ll FileAPI debug set options=%options%; wav_shift_right out.wav 0.25 %batdir%sonar.exe %options%
В прошивке зондирующий ЛЧМ импульс рассчитывается вот этой функцией. По сути подготовка импульса сводится к формуле вычисления одного семпла calc_chirp_sample
/* cur_time_s - up time in s signal_diration_s - signal duration f_2_hz - maximum value of signal frequency. f_1_hz - initial signal frequency des_amplitude - signal amplitude phase_rad - initial phase. */ float calc_chirp_sample(float cur_time_s, float f_2_hz, float f_1_hz, float phase_rad, float amplitude, float signal_diration_s) { float amplitude_scaled = 0.0f; float b = 0.0f; if(0.0f < signal_diration_s) { float bandwith_hz = f_2_hz - f_1_hz; b = bandwith_hz / signal_diration_s; float argument_rad = phase_rad; argument_rad += M_2PI * (f_1_hz * cur_time_s + (b * cur_time_s * cur_time_s) / 2.0f); if(signal_diration_s < cur_time_s) { amplitude = 0.0f; } float cos_arg = (M_2PI * cur_time_s) / signal_diration_s; float hamming_window = 0.46f - 0.46f * cosf(cos_arg); amplitude_scaled = amplitude * sinf(argument_rad) * hamming_window; } return amplitude_scaled; }
Лог синтеза импульса

Импульс помещается в wav файл длительностью 1.1 секунды с определенным в скрипте отступом от начала файла с частотой дискретизации 48kHz.

На слух этот импульс напоминает лопающиеся мыльные пузыри. В частотной области спектр ЛЧМ сигнала — это прямоугольник со сглаженными краями.

ЛЧМ сигнал хорош тем, что у него очень ярко выраженная автокорреляционная функция. Вы можете построить ее при помощи всё той же утилиты sonar.exe. Данный скрипт позволяет экспериментировать с АКФ различных ЛЧМ сигналов.
АКФ различных ЛЧМ сигналов
cls set batdir=%~dp0 echo batdir=%batdir% cd %batdir% set options= set wav_num=2 set sonar_num=0 set ampletide=10000 set freq1=400 set freq2=9000 set chip_dur_s=0.05 set options= set options=%options%; ddp 1 0.05 set options=%options%; dds_set_chirp 1 %ampletide% %freq1% %freq2% %chip_dur_s% set options=%options%; ddssfr 1 48000 set options=%options%; wavsf %wav_num% 48000 set options=%options%; wav_duration %wav_num% 2 set options=%options%; ll WAV info set options=%options%; ll FileAPI info set options=%options%; wav_generate_signal %wav_num% 1 set options=%options%; wav_shift_right2 %wav_num% 0.5 set options=%options%; sonar_config %sonar_num% %chip_dur_s% %freq1% %freq2% set options=%options%; sonar_chirp_correlation %sonar_num% CHIRP_400_9000_dt50_A1000.wav set options=%options%; sonar_plot_convolution %sonar_num% 3 7 %batdir%sonar.exe %options%
График АКФ рисуется отдельным Python скриптом.


Я выбрал, что в качестве зондирующего импульса у меня в экспериментах будет ЛЧМ сигнал длительностью 30ms, амплитудой 30 000 PCM, начальной частотой 1kHz, конечной частотой 10kHz. У такого сигнала хорошая автокорреляционная функция.
Если записывать на микрофон этот импульс, то получается вот такой принятый сигнал.

Иной раз эхосигнал можно увидеть даже на графике сигнала записи.

Однако есть более точный способ определить момент времени прихода эхо. Это и есть корреляция записи с опорным зондирующими сигналом.
Зондирующий импульс в виде ЛЧМ сигнала
Прямо в комнате записал 24 эхо сигнала на зондирующий ЛЧМ импульс. Затем вычислил корреляцию и построил на одном графике в виде точек с прозрачностью 10%. Можно наблюдать локальные максимумы корреляции.

Далее я попробовал испытать сонар на импровизированном полигоне.

Результат корреляции удобнее анализировать в логарифмическом масштабе. Так проще зарегистрировать локальные максимумы свертки записи эхосигнала с опорным сигналом в FIR фильтре (корреляторе). Вот эту запись я выполнил во дворе.

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

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

Зондирующий импульс в виде модулированного кодом Баркера BPSK сигнала
В качестве зондирующих импульсов можно еще применить модулированые кодом Баркера BPSK пакеты. Вот так выглядит BPSK пакет модулированный Баркер кодом длинной 13 чипов: 1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1, -1, 1. Тут несущая частота 2kHz, на один чип 6 периодов несущей. Длинна импульса 39ms.

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

Корреляция импульса с реальной записью эха показала, как будто бы эхо от деревьев на расстоянии 24,5 метров.

BPSK импульс методично каждый раз отражался именно от берёзы за забором. При этом сам забор не так выразительно выглядит как в случае с ЛЧМ.

Зондирующий импульс модулированный M-последовательностью
Главная проблема кодов Баркера в том, что они очень короткие. Самый длинный код Баркера имеет длину 13 бит. Однако помимо кодов Баркера можно закодировать сонарные зондирующие импульсы ещё и длинной M-послделовательностью. Я подготовил вот такой BPSK импульс длинной 31 бит.

Далее пробовал излучать модулированные M-последовательностью BPSK сигналы. Такие импульсы тоже могут определит расстояние до забора. Вот так это работает в наруре

Монотонный зондирующий импульс
Также я попробовал посылать самый простой зондирующий импульс в виде синус сигнала на частоте 2500 Hz длительностью 10ms.

Вот так выглядит автокорреляционная функция монотонного зондирующего импульса.

В результате корреляции записи с монотонным 2.5kHz импульсом 10ms я тоже получил заметные эхо сигналы от телеги, дровяника, забора и бани. Просто разрешение по дальности ожидаемо заметно грубее.

Вообще монотонные зондирующие импульсы тоже имеют место быть. Монотонными зондирующими импульсами можно делать первичный поиск цели. Далее уже определив потенциальную цель, можно в то же место тут же отправлять уже разнообразные ЛЧМ и ФКМ импульсы, для получения конкретных деталей о предстоящей цели.
В чем трудность разработки акустического сонара?
1) Получение корреляции это очень затратная с вычислительной точки зрения операция. Для обработки 1,1 секунды на 48kHz, STM32F407VG микроконтроллер на 168 МHz вычислят корреляцию с 30ms опорным сигналом 13 минут! Это, по сути, пропустить 52800 семплов через FIR фильтр порядка 1440. Это очень долго. Ситуацию можно улучшить, если отправить wav запись эхо сигнала на одноплатный компьютер или делать обработку на FPGA. Дело бы улучшил микроконтроллер с аппаратными корреляторами. Еще можно ускорить вычисления пожертвовав энергетикой излучаемого сигнала. Чем короче длительность ЛЧМ импульса, тем меньше надо делать вычислений, так как порядок коррелятора прямо пропорционален длительности зондирующего импульса. Однако короткие ЛЧМ импульсы не позволяют чтобы то ни было обнаружить. Чем короче ЛЧМ импульс, тем менее он эффективен. На коротком ЛЧМ импульсе даже не видно локальных максимумов как таковых. Трудно выделить локальные максимумы на графике свертки.
2) На малых расстояниях зондирующие импульсы на основе кодов Баркера нет так эффективны. Их боковые лепестки перебивают все отражения от близких целей. Для регистрации на малых расстояниях лучше выбрать ЛЧМ импульсы.
3) По факту звуковые отражения приходят только от строго перпендикулярных поверхностей (забор, листья, стены). Всё остальное сонар не видит.
4) Скорость звука в воздухе плавает от температуры, влажности и атмосферного давления. За две недели измерений я наблюдал несколько скоростей звука 288 м/c; 321 м/c; 337 м/с; и 344 м/c. Хороший сонар надо оснащать датчиком температуры, датчиком влажности и желательно еще барометром. Чтобы можно было каждый раз вычислять текущую скорость звука. Или добавить калибровочные мишени для авто-калибровки датчика.
Что можно улучшить?
Можно и дальше экспериментировать со все новыми и новыми зондирующими импульсами. Однако кадинальные улучшения могут дать вот эти меры:
1) Логическим развитием акустических сонаров было бы создание FPGA SoC, который бы отправлял попарно отличные зондирующие импульсы с периодом 0,1 - 0,2 сек и многочисленными аппаратными корреляторами в реальном времени параллельно вычислял бы свертки, показывая результат на графическом экране. Однако это сделать весьма трудно, так как надо привлекать FPGA технологии.
2) В сонаре должны быть датчики температуры, влажности и атмосферного давления. Эти переменные влияют на скорость звука в воздухе. Прошивка должна каждый раз пересчитывать скорость звука по калибровочным таблицам для текущих параметров окружающей среды.
3) Воспользоваться преобразованием Фурье для вычисления свертки. Согласно теореме о свертке, свертку можно вычислить не просто корреляторами, а преобразованием Фурье. Вычислить свертку можно по формуле
iDFT{DFT( принятый сигнал) * [комплексное сопряжение(DFT(импульсный ЛЧМ-сигнал))] }
Эта формула хороша тем, что множитель DFT опорного сигнала
комплексное сопряжение(DFT(импульсный ЛЧМ-сигнал))
это величина постоянная и ее можно вычислить один раз при инициализации программы и не вычислять каждый раз. Там самым можно оптимизировать время вычислений программы.
При этом на вычисление надо подавать сигналы не оригинальной длинны, а выравненной PulseLen+RecLen-1. То есть надо дополнить нулями, как сигнал с импульсом, так и сигнал с записью. Подобно тому как и коррелятор увеличивает размерность выходного результата.
Вот так получилась свёртка ЛЧМ сигнала самого на себя с отступом вычисленная через преобразования Фурье.

Можно заметить максимум модуля комплексной функции на смещении 0,07 секунды.

Это как раз соответствует смещению сигнала на входной записи в wav файле.

Скрипт вычисления авто корреляции ЛЧМ сигнала через DFT -> iDFT утилитой sonar
Скрипт вычисления авто корреляции ЛЧМ сигнала через DFT -> iDFT утилитой sonar
cls set batdir=%~dp0 echo batdir=%batdir% cd %batdir% set SONAR_NUM=0 set WAV_NUM=2 set DDS_NUM=1 set CHIP_DUR_S=0.05 set FREQ_1=400 set FREQ_2=4000 set AMPLITUDE=200 set SAMPLE_FREQ_HZ=48000 set PROBING_PULSE=ProbingPulse.wav set options= set options=%options%; ll dds notice set options=%options%; ll wav notice set options=%options%; ddp %DDS_NUM% %CHIP_DUR_S% set options=%options%; dds_set_chirp %DDS_NUM% %AMPLITUDE% %FREQ_1% %FREQ_2% %CHIP_DUR_S% set options=%options%; dds_sample_frequency %DDS_NUM% %SAMPLE_FREQ_HZ% set options=%options%; wavsf %WAV_NUM% %SAMPLE_FREQ_HZ% set options=%options%; wav_duration %WAV_NUM% %CHIP_DUR_S% set options=%options%; wav_gen_from_dds %WAV_NUM% %PROBING_PULSE% %DDS_NUM% set options=%options%; sonar_dft_convolution %PROBING_PULSE% Rec_CHIRP_A2000_400_4000_dt50.wav %batdir%sonar.exe %options% python plot_csv_file.py convolutionDFT.csv 1 7 TimeS Abs python plot_csv_file.py convolutionDFT.csv 1 9 TimeS Arg python plot_csv_file.py convolutionDFT.csv 1 3 TimeS Real python plot_csv_file.py convolutionDFT.csv 1 5 TimeS Image
Вот тут я вычислил свертку ЛЧМ сигнала c параметрами dt=20ms, F1=4345Hz, F2=7655Hz с записью реального эха при помощи DFT. Модуль сигнала на выходе iDFT как раз показывает корреляцию. Как можно заметить, результат совпал с тем, что вычислил коррелятор.


4 Применить FFT для вычисления свертки
По хорошему свертку надо считать при помощи FFT iFFT. Формула остается той же самой только DFT заменяется на FFT.
iFFT{ FFT( принятый сигнал) * [комплексное сопряжение(FFT(импульсный ЛЧМ-сигнал))] }
В результате программа вычисляет свёртку для файла длинно 0,7 секунд в 13 раз быстрее по сравнению с FIR фильтром, и в 3421 раз быстрее, если сравнивать с DFT!
Алгоритм вычисления | Продолжительность вычислений, с | Продолжительность вычислений, мин |
свертка через коррелятор FIR* | 4.5 | 0.07 |
свертка через DFT | 1177.257 | 19 |
свертка через FFT*** | 0.344 | 0.00573 |
Лог работы утилиты показывает, что c FFT свертка посчиталась за 0,3с.
![[FFT],CalcDuration:0.089 s [FFT],CalcDuration:0.089 s](https://habrastorage.org/r/w1560/getpro/habr/upload_files/195/346/b61/195346b61129c3dc289433b3f5ed4c80.png)
Достоинства сонара:
1) В отличии от видеокамер сонар видит в полной темноте, сквозь жидкости и металлы. Для сонара подойдет любая сплошная среда.
2) Сонар дешевле радара. Можно реализовать сонар на дешевой электронной начинке. Аудиокодеки стоят порядка сотен рублей.
3) Для работы сонара не надо согласовывать у государства радио частотный диапазон работы, как в случае с радарами. Не надо покупать право на частоты.
4) Скорость звука в воздухе относительно мала 331 м/c, если сравнивать её со скоростью света у радаров (300000000 м/c ) или с той же скоростью звука в жидкостях (вода 1403 м/c). Это обстоятельство существенно снижает требования цену к ADC DAC. Эксперименты с сонарами может позволить себе кто угодно и делать их буквально на двух телефонах (или аудиокодеках).
5) Сонар не имеет мертвой зоны как радар. Радары начинают работать после 40 метров. Всё что ближе - слепая зона. В то время как сонар работает как раз на малых расстояниях до 40-50 метров.
Недостатки сонара
1) Низкая дальность. Эхо звук приходит очень слабый. Надо применять микрофон с высоким динамическим диапазоном.
2) Надо калибровать параметры сонара для определения текущей локальной скорости звука. Скорость звука плавает от температуры, давления, влажности.
3) Для сонарных измерений в реальном времени нужны аппаратные корреляторы или аппаратные FFT на десятки тысяч семплов.
4) Сонар слышат люди. Чтобы зондирующие звуки никого не раздражали надо испускать импульсы редко и тихо. В случайные интервалы времени. Либо имитировать голоса разнообразных птиц в качестве зондирующих импульсов, чтобы никто не догадался, что рядом работает сонар.
5) Ввиду низкой скорости звука в воздухе акустическим сонаром Вы не можете делать измерения слишком уж часто. Надо подождать прихода эха. Чем больший радиус вы хотите сканировать, тем меньше будет частота измерений.

В радарной же технике такой проблемы нет. Скорость света запредельно большая. Радаром можно снимать видео.
6) Когда мы получаем коррелограмму мы не знаем направление прихода этой волны. Расстояние до цели знаем, а направление - нет.

Решение напрашивается само собой. Надо делать несколько измерений коррелограммы вдоль прямой с известным шагом. Затем программно синтезировать апертуру.
Возможные приложения акустического сонара
1) Можно охранять по ночам длинные коридоры режимных предприятий. Регистрировать появления людей. Считать поток людей в метро и на вокзалах.
2) Сонаром можно охранять дачный участок. Фотографировать появление целей: лисы, кабаны, собаки и прочее. Наводить прожектор на появившуюся цель.
3) Сонар можно использовать в системах автопарковки автомобилей.
4) Сонар можно встроить в трость для инвалидов по зрению. Информировать о расстояниях через голосовые команды там же самым аудиокодеком, что и излучает ЛЧМ-сигналы.
Как работают реальные радары?
Реальные радары работают намного эффективнее. Работают в X диапазоне (8 до 12 ГГц). Центральная частота 10 GHz. Или в Ku диапазоне 16.6 ГГц – 17.3 ГГц. Посылают зондирующий импульс длительностью 50us. Ширина ЛЧМ импульса от 10 MHz до 84 MHz. Средняя мощность излучения 75 мВт. Обладают вращающейся антенной. Вычисляют свертку аппаратным FFT на лету при помощи FPGA. Имеют на FPGA soft процессор, который передает результат свертки по гигабитному Ethernet по UDP протоколу прямиком на клиентский софт в PC.
Итоги
Мне удалось построить прототип сонара из микроконтроллера, аудиокодека и SD карты. Разработана прошивка для микроконтроллерного прибора, который может одновременно воспроизводить и записывать звук. Удалось научиться синтезировать WAV файлы с различными зондирующими импульсами внутри: ЛЧМ сигналы, монотонные импульсы, кодированные Баркером BPSK пакеты, кодированные М-последовательностью BPSK пакеты.
ЛЧМ сигналы показали наилучшую воспроизводимость измерений.
Написана утилита sonar.exe для вычисления корреляций конкретных записей на входе c опорным сигналом. Проведены эксперименты по измерению дальности до окружающих предметов получившимся сонаром, показавшие концептуальную работоспособность прототипа.
При этом одинаковый результат свертки я получил двумя способами: через коррелятор на FIR фильтре и через преобразование Фурье.
Вот так просто и незатейливо можно отлаживать радиолокационные алгоритмы буквально из подручных материалов на примере привычного нам всем акустического диапазона. Всё это открывает дорогу для дальнейших исследований в области радиолокации и гидроакустики.
Словарь
Акроним | Расшифровка |
ЦОС | Цифровая обработка сигналов |
ЛЧМ | Линейная частотная модуляция |
DDS | direct digital synthesis |
TOF | Time-of-Flight |
FIR | finite impulse response |
Ссылки
Название | URL |
Сонар из Диктофона | |
Эхолокация: микрофон и фазированная решётка из колонок @Vitaly_Y | |
Обработка звука в реальном времени (или Full Duplex I2S на STM32) | |
Аналитика по сонару | https://docs.google.com/spreadsheets/d/1twizxcenUCPF2iNNpEq3qrrdMX3we23pn7XMsVpdRhA/edit |
Pulse Compression: How Matched Filtering Boosts Weak Signals and Sharpens Resolution | |
Radar Systems Engineering by Dr. Robert O'Donnell. Chapter 11: Waveforms & pulse compression, Part 2 | |
Проигрыватель WAV файлов на STM32 | |
Диктофон на микроконтроллере (WM8731 + I2S + STM32 + SDIO + FAT16) | |
STM32F4XX M STM32F407VGT6 | |
M-последовательности, последовательности Лежандра, Якоби и разностные множества Адамара @Morgana0_0 | |
Принципы работы сонаров и подводная акустика: как, зачем и почему @akuzmin | |
Разрешающая способность по дальности | |
ECE3084 L12.5: Autocorrelation, Pulse Compression, & Barker Codes (Signals & Systems, Georgia Tech) | |
Модуль подводного ультразвукового дальномера. Часть третья @MShekunov | |
Модуль подводного ультразвукового дальномера @MShekunov | |
Как работают эхолоты | |
#18 Audio codec — Floating point hardware | |
Утилита генератор wav файла с ЛЧМ и приложение консольный сонар | |
Чип AudioСodec(а) WM8731 (или (ADC/DAC)*2 из iPod(а)) |
Вопросы
1) Существуют ли в продаже готовые учебные электронные платы с SD картой, STM32F4 микроконтроллером, микросхемой простого аудиокодека и графическим экраном?
2) Можно ли радарные сигналы хранить в WAV файле?
5) Существует ли отдельный специальный бинарный формат данных для хранения свёрток сигналов? Формат для хранения результата коррелляции.
6) Существует ли утилита для сравнения двух wav файлов? Чтобы находить в двух WAV файлах одинаковые участки звука.
7) Какие параметры ЛЧМ сигнала следует выбрать для сонара в воздушной среде?
8) Раз уж в ЛЧМ важна именно частота зондирующего сигнала, то можно ли использовать однобитные зондирующие импульсы? Например, чтобы излучать их не аудиокодеком, а пьезокерамическим звуко‑излучателем от GPIO или формировать отправкой битового потока по SPI в режиме DMA.
9) Существуют ли в продаже микроконтроллеры с аппаратными корреляторами глубиной 2000+ семплов по 16-бит каждый? Это бы очень пригодилось для цифровой связи, радиолокации, дефектоскопов, УЗИ, сонаров и прочих ЦОС приложений.
10) Как определить разрешение по дальности для ФКМ импульсов? Когда зондирующий импульс кодируется модулированным BPSK пакетом.

