Аудиометр. Продолжение

Данный проджект является развитием этой темы
we.easyelectronics.ru/gashetka/8-channel-audio-meter.html

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




При разработке сего творения я придерживался двух основных идей-
1) сделать как можно дешевле и доступнее
2) выжать максимум из PICов, чтобы потом с чистой совестью перейти к изучению ARMов.

Девайс пережил уже 3 ревизии (подбирал камень- в конце концов выбрал самый быстрый из тех, которые были в Тритоне- PIC32MX110F016B).

Длина выборки до безобразия маленькая- всего 64 точки, больше проц уже обрабатывает с трудом. Частоту выборки сейчас навскидку не скажу, подгонял по факту- как лучше смотрелось.

Разъем IDC предусмотрен для подключения внешнего дисплея, если таковой когда-то будет создан.

Вид сверху


Вид снизу


Видео

Прошу прощения за гуляющий фокус, этому фотоаппарату давно пора в утиль.

Все технические подробности- в случае интереса, т.к. техдокументация у меня как всегда в рабочем состоянии и стороннему человеку малопонятна.

///Обновление 01.04.12////
Спустя несколько месяцев я наконец-таки удосужился освоить алгоритм Кули-Тьюки и допилить его в свой код. Теперь пик влегкую считает БПФ на 128 точек без каких-либо видимых тормозов. 256 чего-то не хочет считать, может, памяти маловато.

Выдаю на суд общественности проект со всеми потрохами. Схема и печать в диптрейсе, компилятор MPLAB C32.
Я постарался снабдить свой быдлокод комментариями, так что что-нибудь разобрать да можно.

Ну и видео. И да, здесь отображены только первые 16 частот по 100 Гц, т.е. до 1,6 кГц. Можно любые другие от первой до 64-й (6400 Гц). Дальше благодаря свойству периодичности преобразования спектр повторяется.

Файлы в топике: Final Release.zip

Комментарии (29)

RSS свернуть / развернуть
Такое впечатление, что то что показывает индикатор никак не связано с играющей музыкой. Когда идут низы, он их не показывает, когда их нет, вдруг отображается пик. Тоже самое с высокими частотами. Толи задержка большая, толи вообще что то другое отображается а не спектр.
0
В силу тормознутости камня берется не целый диапазон частот (60-16000), а небольшой кусок, который укладывается в эти 64 выборки. Из 64 частот, сопоставленным выборкам, обсчитываются и отображаются лишь 16. Поэтому слева не совсем низы, а справа- не совсем верхи. Со временем, надеюсь, доработаю.
0
Расскажите про то как цифровые фильтры делали?
0
Реализовано дискретное преобразование Фурье- сначала на АЦП заводится усиленный и приподнятый до середины питания сигнал, оцифровывается с частотой, например, 32кГц (вдвое больше, чем максимальная частота спектра), затем тупо по формуле считаем коэффициенты k, каждый из которых представляет собой одну N-нную часть от частоты выборки, где N- число выборок. В двух словах, в общем, не объяснить, нужно немного изучить тему.
0
А бросьте, пожалуйста, ссылки на статьи, где можно почитать о преобразовании Фурье.
0
Я осилил по учебнику О.А. Стеценко «Радиотехнические цепи и сигналы» :)
Также некоторые сведения можно почерпнуть отсюда:
www.chip-news.ru/archive/chipnews/200602/Article_04.pdf

И на английском
home.arcor.de/hjdorn/fft.pdf
0
А почему выбрали обычный микроконтроллер, а не dsPIC? В этом случае можно было бы значительно ускорить обработку, ведь в них присутствуют специальные инструкции для цифровой обработки, значительно ускоряющие рассчет.
0
  • avatar
  • kvm
  • 30 января 2012, 21:45
dsPIC30F3012 не справился.
0
PIC32: Ломай меня полностью…
0
Попробуйте вместо дискретного реализовать быстрое преобразование Фурье, разница в быстродействии будет на лицо.
0
64 точки вполне достаточно. Только нужно усреднить результат за несколько циклов рассчёта. И выводить лучше как-бы в логарифмическом масштабе по частоте (интервал между низкими частотами меньше, между высокими — больше).
0
  • avatar
  • m0xf
  • 30 января 2012, 22:37
>Попробуйте вместо дискретного реализовать быстрое преобразование Фурье, разница в быстродействии будет на лицо.
для небольшого количества значений (16), тем более для неравномерной сетки частот,
FFT будет не быстрее, чем посчитать по Герцелю для каждой частоты.
0
64 точки — это что? Дискретность уровня сигнала?
А про масштаб: +1!
0
Надо FFT, правильно народ бает. И умножение с фиксированной точкой. Использовать аппаратное умножение (есть у него аппаратная умножалка?) и умножение на асьме писать. На AVRке навалом проектов подобных.
0
Навалом-то да, но никто не хочет делиться идеями — все только HEX'ы раздают, а мне это, сами понимаете, нафиг не надо.
0
БПФ на PIC32MX 256 точечный с дробными числами при частоте ядра 80 Мгц с включеным разгоном выполняется примерно за 16 мс! При этом мк не заточен под ЦОС. dsPIC30F — древняя серия, однако я сомневаюсь что он будет проигрывать PIC32. После таких постов часть народу подумает что PIC отстой, справился не справился зависит от программиста… Ну и как сказали ДПФ это конечно… только для изучения принципа преобразования Фурье.
0
Действительно мигает как то не в тему, это же не цветомузыка, а анализатор спектра, однозначно требуется модернизация программной части! Где схема, прога и объяснение работы самого алгоритма?
0
  • avatar
  • Aneg
  • 31 января 2012, 04:20
Как-то оскорбили PIC'и. Как вы преобразование Фурье делали? Использовали готовую библиотеку Микрочип? там для ПБФ есть таблички — для 64 точек сигнала dsPIC30f/dsPIC33f сделают ФФТ за 3871 цикл. Добавьте туда какой-то быстрый алгоритм вычисления квадратного корня (~250 циклов, от того же Микрочип, например) для вычисления амплитуды и считайте. В вашем случае все промежуточные и основные вычисления можно будет сделать меньше чем 1 мс!
0
Тут ДПФ и не БПФ, поэтому времени много… кстатии мой пример 16 мс это 256 точечный вещественный БПФ + оконная функция + без оптимизации…
0
Спасибо за отзывы и критику. Буду копать дальше.
0
Почитайте как это сделано на выPIC, например, в журнале «Everyday Practical Electronics» начиная с № 5 от 2010 года. Там на dsPIC сделан не только анализ сигнала, но и интерфейс с пользователем и силовыми ключами. Исходники программы можно скачать с сайта журнала.
0
  • avatar
  • kvm
  • 31 января 2012, 14:21
Все заметили, что мигает не в тему, а у меня звука на работе нет, поэтому другое заменил: развёртка не медленновата? Даже на видео заметно мерцание.
0
нужно было включить генератор частот
кстати диапазон обычно до 10кгц берут, выше уже энергия настолько мала, что нет смысла

мегает действительно не в тему, где-то у тебя ошибка и ее надо отловить генератором
0
Хм.
Я занимался битмейкингом, и знаю, что во время удара бочки или снейра (барабанов), низкочастотая область имеет горб, а также где-то в районе 200-300 Гц звучит снейр… Если сопоставить то, что я слышу и то, что вижу на данном устройстве, получается несколько не то… Может результат опаздывает?
0
Апдейт. Дописал в топик.
0
Прогнал бы лучше генератором например от 50 до 1.6 кгц… чтобы видно было палку, а то музыка по большому счету ниочем…
0
Потом включил бы меандр, например на 100 Гц, было бы очень красиво глянуть на частокол гармоник
0
Я считаю, что шкалу лучше делать логорифмической. Тогда можно наблюдать весь слышимый диапазон. А так сдесь только отрубок от спектра=)
0
Название светодиодных матриц?
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.