0

я действительно терплю неудачу в FFT и сейчас я нахожусь в необходимости общения с наушников моего Android к Arduino есть в настоящее время библиотеки для Arduino (говорит об этом в блоге Real-time spectrum analyzer powered by Arduino) и один для Android тоже!Сформировать FFT и декодировать на Arduino

С чего начать? Как мне создать аудиосигналы, которые в конечном итоге могут быть превращены в БПФ, и Arduino может анализировать то же самое с помощью библиотеки, и я могу что-то активировать?

+0

Любой отправной точкой? – Naaz

+0

Учебник колледжа по передаче данных? – hotpaw2

+0

Задайте вопрос более конкретным. В чем проблема? Недостаток понимания для БПФ? Недостаток аппаратных знаний о том, как подключить разъем для наушников? Отсутствие навыков программирования? –

ответ

3

Вы задаете очень нечеткий вопрос: «Как мне создавать аудиосигналы, которые в конечном итоге могут быть превращены в БПФ, и Ардуино может анализировать то же самое с помощью библиотеки, и я могу что-то активировать?». Я собираюсь помочь вам продумать проблему - задавая себе правильные вопросы, важно получить ответы.

Предположительно, ваши звуковые сигналы «происходят откуда-то» - то есть они звучат. Это означает, что вам нужно сначала преобразовать их в поток чисел.

Проблема # 1: преобразование звукового сигнала в поток чисел

Это распадается на три отдельные проблемы подразделов:

  1. Получения сигнала к правой амплитуде
  2. Выбора выборки требуемая скорость
  3. Оцифровка и хранение данных для последующей обработки

Элементы (1) и (3) связаны друг с другом, так как вам нужно знать, как вы собираетесь оцифровать сигнал, прежде чем сможете выбрать правильную амплитуду. Например, если у вас есть микрофон в качестве источника звукового сигнала, вам необходимо усилить сигнал (и, возможно, добавить некоторый автоматический контроль усиления), прежде чем подавать его в АЦП (аналого-цифровой преобразователь), который имеет входной диапазон 5 В, так как микрофон может иметь выход в диапазоне mV. Без дополнительной информации об оборудовании, которое вы используете, здесь нечего добавить. Это звучит из вашего тега, который вы пытаетесь сделать в устройстве Android, и в этом случае мне интересно, как вы собираетесь перемещать цифровой сигнал на Arduino (через USB?).

Второй момент, «выбор частоты дискретизации», на самом деле очень важен. Звуковой сигнал содержит много разных частот - считайте их клавишами на фортепиано. Чтобы обнаружить высокую частоту, вам нужно пробовать сигнал «быстрее, чем он меняется». Существует формальная теорема «Теорема Найквиста», в которой говорится, что вам нужно пробовать на 2x самой высокой частоте, которая присутствует в вашем сигнале. Обратите внимание - это не просто «что вас интересует», а «то, что присутствует». Если вы выберете высокочастотный сигнал с низкочастотным часовым часом, он появится «с псевдонимом» - он будет отображаться на вашем выходе как нечто совершенно другое. Поэтому, прежде чем оцифровать сигнал, вы должны решить, какие частоты представляют интерес, и удалить все более высокие частоты с фильтром. Предположим, вас интересуют частоты до 500 Гц (около 1 октавы выше среднего C на фортепиано). Чтобы дать вашему фильтру возможность работать, вы можете отключить все частоты выше 1 кГц (фильтры «скатываются», то есть увеличивают силу в диапазоне частот) и будут отсчитываться на частоте 2 кГц. Это означает, что вы получаете 2000 выборок в секунду, и вы должны выяснить, куда положить их на Arduino (память заполняется быстро на небольшой доске.)

Проблема № 2: анализируя сигнал Предполагая, что вы каким-то образом захватили цифровой сигнал, ваша следующая задача анализирует его.БПФ - это основа какой-то умной математики, которая говорит вам, для данного звукового образца, «какие клавиши на пианино были удалены, и как сложно». Он разбивает звуковой сигнал на ряд частотных «бункеров» и определяет, сколько энергии находится в каждом ящике (он также вычисляет фазу, но давайте будем держать ее простой). Поэтому, если вход алгоритма БПФ является образцом звука, выход представляет собой массив значений, указывающий, какие частоты присутствуют в сигнале. Это приблизительно, так как он найдет «ближайший бит». Придерживаясь той же аналогии - если бы вы наносили удар по неорганизованному пианино, алгоритм не будет возвращаться «из-под контроля», а скорее «немного C и немного C sharp», поскольку он не может реально измерить ничего между ними. Точность БПФ определяется частотой дискретизации (которая дает вам верхний предел частоты, которую вы можете обнаружить) и длиной выборки: чем дольше вы «слушаете» так образец, тем более тонкие различия вы можете «слышать», , Поэтому у вас есть еще один компромисс: если ваш звуковой сигнал быстро меняется, вы должны пробовать на короткое время (чтобы зафиксировать быстрые изменения); но если вам нужна точная частота, вы должны пробовать в течение длительного времени. Например, если вы пишете декодер Morse, выборка должна быть коротка по сравнению с паузой между «dits» и «dashes» - или они будут слиты вместе. Выяснив, что присутствует тон Морзе, довольно легко, так как будет один тон (один бит в БПФ), который намного больше, чем другие.

Точно, как вы реализуете эти вещи, это зависит от вашего приложения. Третий шаг, «что-то с ним делать», требует, чтобы вы определили, что является значимым сигналом. Опять же, если вы создаете декодер Морзе, вы, возможно, включите светодиод, когда будет присутствовать один тон (один или два бункера в БПФ имеют гораздо большее значение, чем среднее значение других) и ВЫКЛ, когда это не так (все шумы - много бункеров с примерно одинаковым размером). Но без БОЛЬШОЙ информации от вас, вы не можете сказать больше, чтобы помочь вам.

Вы могли бы многому научиться читать следующие статьи:

http://www.arduinoos.com/2010/10/sound-capture/

http://www.arduinoos.com/2010/10/fast-fourier-transform-fft/

http://interface.khm.de/index.php/lab/experiments/frequency-measurement-library/

+0

Я прочитал все, что вы написали полностью и ушел по ссылкам, теперь мне нужно знать, кому я могу генерировать тоны, которые уникальны (в приложении для Android) и соответствуют некоторым алфавитам, таким как Tone A для char «A» и Tone B для char «B» эти мелодии достались бы ардуино, используя гнездо для наушников Android, и проанализировали его – Naaz