Как я могу интегрировать микрофон и динамик в свой проект микроконтроллера?

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

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

Для этого, я думаю, мне нужно сначала преобразовать аналоговый сигнал с микрофона в цифровые значения, используя АЦП AVR. После этого мне нужно вывести аналоговые значения на динамик. Поскольку это мой первый раз, мне нужен совет, как построить рабочую схему. Какая должна быть частота дискретизации и воспроизведения? Должен ли я беспокоиться о кодеках и т. д.? (Я не знаю, насколько большими могут быть необработанные аудиоданные.)

Я планирую сначала использовать Arduino, так как это легко и быстро для прототипирования.

Как всегда приветствуется любая помощь! :)

Ответы (2)

Ваша частота дискретизации должна в два раза превышать максимальную интересующую вас частоту. Это теорема выборки Найквиста-Шеннона . Если вам нужен высококачественный звук, ваша максимальная частота — это предел человеческого слуха, около 20 кГц. Человеческий голос менее требователен: телефонные сети работают примерно до 3400 Гц.

Вы обнаружите, что АЦП AVR не очень быстр, и у вас не так много ресурсов для обработки данных. Так что, вероятно, ваши аппаратные ограничения будут диктовать вам частоту дискретизации.

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

Только что прочитал сегодня - Arduino Uno имеет частоту дискретизации АЦП около 10 кГц макс.

Если вы используете 10-битный АЦП (они есть в большинстве (или во многих) микроконтроллерах), вы можете производить выборку с частотой 8 кГц для основного звука / речи и выводить с той же скоростью. Вы даже можете выводить с половиной (или четвертью и т. д.) скоростью, чтобы получить причудливо звучащие эффекты наложения.

Если вы думаете о цифровых эффектах, вам нужно будет хранить до 100 мс сэмплов, поэтому вам нужно хранить и извлекать почти килобайт данных.

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