Максимальная частота дискретизации Arduino Duemilanove?


11

Всем привет!

У меня сейчас Arduino Duemilanove висит вокруг запасных и подумал, что мог бы попробовать несколько проектов аудиоинтерфейса. Мне просто интересно, какую частоту дискретизации я могу достичь, используя один аналоговый вход и применяя несколько простых алгоритмов к микросхеме, а затем сообщая об этом, используя несколько цифровых выходов, привязанных к светодиодам.

Я хотел бы сделать выборку на частоте ~ 44,1 кГц, если это возможно.

Для справки первое, что я хочу попробовать - это простой гитарный тюнер.


Упс - это версия ATMega168.
Sketchy Fletchy

4
@Sketchy вы можете редактировать свой вопрос, если вам нужно, а не добавлять детали в комментарии.
Клинт Лоуренс

1
Для гитарных тюнеров есть много вопросов о стековом потоке относительно оценки частоты. stackoverflow.com/questions/65268/... Я ответил на кучу из них и размещены примеры кода для некоторых методов здесь: gist.github.com/255291
эндолиты

Ответы:


15

Я не думаю, что вы можете пробовать так быстро при полном разрешении. ATMega168 может выполнять выборку только при 15 к / с в полном разрешении.

Сказав это, вы должны быть в состоянии получить подходящую частоту дискретизации, чтобы получить работающий гитарный тюнер. 44,1 кГц, скорее всего, немного быстрее, чем вам нужно, учитывая, что основа струны для гитары с высокими значениями E составляет около 330 Гц.


Блестящий - это легко отвечает на мой вопрос. Я не думал, что 168 будет способен к полной дискретизации звукового спектра человека, но если я смогу получить частоту дискретизации не менее 660 Гц, я смог бы идентифицировать строку с высокой е без псевдонимов. Я подниму это немного для безопасности и чувствительности все же. Спасибо!
Sketchy Fletchy

Образцы телефонной системы на частоте 8000 Гц.
Joeforker

8

Для считывания аналогового входа требуется около 100 мкс (0,0001 с), поэтому максимальная скорость чтения составляет около 10000 раз в секунду.

http://arduino.cc/en/Reference/AnalogRead

Роб.


4

Google для «AVR гитара тюнер», есть пара проектов, которые уже делают это, и они, кажется, могут сделать это без особых проблем со скоростью AVR.


3

Если вы используете аналоговый компаратор (либо внутренний в AVR, либо внешний операционный усилитель), который превращает аналоговый вход в прямоугольную волну, вы можете сэмплировать колебания на гораздо более высоких скоростях. Хотя это не настоящая аудиосэмплирование, для создания гитарного тюнера это часто все, что вам нужно, поскольку весь ваш код все равно будет выполнять подсчет пересечений нуля за единицу времени.


1
Я думаю, что меня беспокоит то, что вам действительно нужно запустить БПФ, чтобы выбрать фундаментальные. Гитары производят все виды частот, когда струна взята, и подсчет пересечений нуля дает вам достаточно информации для построения прямоугольной волны, что делает БПФ совершенно бесполезным.
wackyvorlon

Гитарный выход с одной нотой (особенно электрический) является близким приближением синусоидальной волны, как только вы пройдете начальный переходный процесс. Никаких странных гармоник где-то рядом с амплитудой основного. Все дешёвые цифровые гитарные тюнеры просто синхронизируют ноль и ничего не делают в частотной области. Вот один из примеров техники на AVR 2323 (близкий по отношению к Arduino) myplace.nu/avr/gtuner/index.htm, а вот другой пример использования Arduino с MIDI out youtube.com/watch?v=oGKE1vmAWCA
todbot

Я не думаю, что гитарные тюнеры считают пересечения нуля, и это определенно не очень хороший метод. Это даже не близко к синусоиде, и может быть много переходов через нуль за цикл: flic.kr/p/7ns9nu
эндолиты

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

3

Существует несколько последовательных АЦП, I2S - это стандарт NXP, основанный на I2C. Они позволяют довольно легко тянуть аналоговый сигнал даже на гораздо более высоких скоростях. Эта ссылка должна привести вас к части NXP, которая предназначена для аудио: UDA1361TS

Бесплатные образцы - ваш друг :)


1
Спасибо большое! Это будет немного больше, чем нужно для запуска простого тюнера, но этот чип выглядит идеально для некоторых моих будущих проектов. В конечном итоге я хотел бы получить простую встроенную DSP-колоду, чтобы поэкспериментировать с обработкой эффектов. Спасибо!
Sketchy Fletchy

1

Во-первых, для вашего конкретного приложения вам действительно нужна частота дискретизации около 1 кГц, при условии, что вы настраиваете основную частоту, а не одну из негармонических частичек ...

В любом случае, что касается максимально возможной частоты дискретизации, руководство Arduino гласит:

Для считывания аналогового входа требуется около 100 микросекунд (0,0001 с), поэтому максимальная скорость чтения составляет около 10000 раз в секунду.

Это будет означать, что частота дискретизации 10 кГц является максимальной. Однако. Вы можете получить более высокую частоту дискретизации, напрямую обращаясь к регистрам АЦП . Arduino в реальном времени аудио обработка страница использует два канала 15 кГц, например. Таким образом, максимальная частота 10 кГц возможна только при использовании встроенной функции AnalogRead (), поскольку она требует много дополнительных ресурсов.

АЦП оптимизирован для наилучшей работы с тактовой частотой от 50 кГц до 200 кГц:

По умолчанию схема последовательного приближения требует входной тактовой частоты [тактового сигнала АЦП] между 50 кГц и 200 кГц, чтобы получить максимальное разрешение.

Поскольку преобразование АЦП занимает 13 тактовых циклов, это будет частота дискретизации от 4 кГц до 15 кГц. Согласно AVR120: Характеристика и калибровка АЦП на AVR :

Для оптимальной работы частота АЦП не должна превышать 200 кГц. Однако частоты до 1 МГц не значительно снижают разрешение АЦП.

Работа АЦП с частотами выше 1 МГц не характеризуется.

Тактовая частота 1 МГц = частота дискретизации 77 кГц, так что это реалистичный максимум.

Тема на форуме Faster Analog Читать? больше об этом.


0

Как уже отмечали другие, встроенный преобразователь будет работать для этого приложения, но вы должны действительно использовать внешний АЦП. Это избавит вас от многих проблем и освободит ваш микро для выборки по SPI или I2C с намного более высокой скоростью передачи данных, с меньшим шумом от тактового сигнала микро, и с большей точностью, чем при использовании внутреннего АЦП. Если вам нужно большее разрешение и / или более высокая скорость передачи данных, используйте что-то вроде LTC1867, которое позволит вам производить выборку на частоте до 175 кГц (хотя вы можете синхронизировать ее, сколько хотите), а затем считывать 24-битные данные. на частоте до 20 МГц по сравнению с SPI. Посмотрите, что может сделать настоящий АЦП? :) Благодаря такой мощности (и 24- или 32-битному DSP) вы можете сжимать и сохранять аудио, фильтровать его, модулировать, воспроизводить ... возможности безграничны.


0

Вас интересует частота дискретизации 64К? Посмотрите здесь

Теперь поднят до 150 кГц, 10 бит, без дополнительных компонентов!

Посмотрите там

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.