История изменений
Исправление lesopilorama, (текущая версия) :
По сабжу: решение будет низкоуровневым, ни через какое линукс ядротс его задержками такое не пропихнуть. Решение может выглядеть в одном из двух вариантов:
-
ADC -> ARM/stm32/esp32 cpu -> DAC
-
ADC -> FPGA (zynq 7010) -> DAC
Нас интересует выдача сигнала на частотах наверное герц до 200 с точной во времени фазой. То есть в нашец архитектуре жолжны бвть чёрко промеряны и предсказаны до, я бы сказал, 10 микросекунд такие вещи:
- через какое время семплы с ADC появятся в памяти CPU
- сколько работает наш алгоритм
- сколько времени выданные им семплы в шину i2c или подобную дойдут до физического динамика на выходе DAC
Наше поделие в силу неизбежных задержках на всех уровнях будет опазнывать на кусок фазы, поэтому нам надо успевать ко второму или N-ному горбу синуса порешать вопрос и стрельнуть так, чтобы учитывая задержки выходной части синус динамика попал куда в противогорб. Возможно даже получится тупо инвертировать знак семпла и насрать на выход с нужной задержкой.
Но я думаю тут не обойтись и без измерительного микрофона стоящего рядом с выходом, чтобы алгоритм мог померять куда там поставили динамик и какая задержка теперь.
Ну короче это реализуемо даже дома на коленке, но придётся обложиться осфиллографом и кодить на bare metal, а если это пытаться заказывать, то по меркам современных зарплат таких разрабов - со всей там отладкой и монтажем сожрёт не менее полляма рублей если поведёт ещё. Такая себе задачка странная - ещё не радиотехнические «сложные» частоты, но уже напряг.
Алгоритм возможно даже будет примитивен и влезет в stm32, не обязательно городить arm. Вся соль в помере задержек и возможности крутить константы.
Ни в каких помещения это работать уже не будет из-за отражений: мы убили сигнал одной фазой, а его копия от стены прилетела с задержкой четверть длины волны - и жопа, мы снова его слышим. Короче работать будет прикольно при шевелении головой или хотьбе.
Исходная версия lesopilorama, :
По сабжу: решение будет низкоуровневым, ни через какое линукс ядротс его задержками такое не пропихнуть. Решение может выглядеть в одном из двух вариантов:
-
ADC -> ARM/stm32/esp32 cpu -> DAC
-
ADC -> FPGA (zynq 7010) -> DAC
Нас интересует выдача сигнала на частотах наверное герц до 200 с точной во времени фазой. То есть в нашец архитектуре жолжны бвть чёрко промеряны и предсказаны до, я бы сказал, 10 микросекунд такие вещи:
- через какое время семплы с ADC появятся в памяти CPU
- сколько работает наш алгоритм
- сколько времени выданные им семплы в шину i2c или подобную дойдут до физического динамика на выходе DAC
Наше поделие в силу неизбежных задержках на всех уровнях будет опазнывать на кусок фазы, поэтому нам надо успевать ко второму или N-ному горбу синуса порешать вопрос и стрельнуть так, чтобы учитывая задержки выходной части синус динамика попал куда в противогорб. Возможно даже получится тупо инвертировать знак семпла и насрать на выход с нужной задержкой.
Но я думаю тут не обойтись и без измерительного микрофона стоящего рядом с выходом, чтобы алгоритм мог померять куда там поставили динамик и какая задержка теперь.
Ну короче это реализуемо даже дома на коленке, но придётся обложиться осфиллографом и кодить на bare metal, а если это пытаться заказывать, то по меркам современных зарплат таких разрабов - со всей там отладкой и монтажем сожрёт не менее полляма рублей если поведёт ещё. Такая себе задачка странная - ещё не радиотехнические «сложные» частоты, но уже напряг.