Страница 1 из 2

Цифровой фильтр на МК

Добавлено: Вс сен 07, 2008 20:05:09
Томатный
Хотел сделать светомузыку на МК...Придумывал разные алгоритмы обработки показаний с АЦП, в результате чтоб красиво мигали светодиоды под музыку, но понесло меня в другую сторону...не буду спешить рассказывать, что вышло - сразу хочу задать вопрос.
Реально ли сделать цифровой фильтр частот на AVR-ке? Если да, то сколько паралельно фильтров "влезит"? Сейчас я имею ввиду не только фильтры под светомузыку, но и для обработки звука с дальнейшим выводом через ЦАП

Re: Цифровой фильтр на МК

Добавлено: Вс сен 07, 2008 20:33:30
Телерадиокошак
Томатный писал(а):Реально ли сделать цифровой фильтр частот на AVR-ке?
Т.е. преобразование Фурье (пусть даже быстрое ПФ) на AVR в реальном времени? Не хочу огорчать, но это мне кажется малореальным. Не потянет AVR. Надо чего-нибудь помощьнее. Возможно ARM какой-нибудь справится.

Может имеет смысл подумать над несколькими аналоговыми фильтрами, управляемыми при помощи МК?

Добавлено: Вс сен 07, 2008 20:47:34
ARV
Телерадиокошак не прав.
AVR в состоянии выполнять БПФ для целей цветомузыки для любого разумного числа каналов (думаю, 32 канала - это уже выходит за рамки разумного)

Для настоящей ЦОС, конечно, AVR не пойдет, но для цветомузыки и т.п. "индикаторных" штучек - запросто. кстати, для цветомузыки можно применять куда более простые алгоритмы, чем БПФ - начиная от простого алгоритма дискриминации длительностей импульсов (я реализовывал его даже на AT89C2051 - во много раз менее производительном МК, чем AVR) до преобразования Хартли, Уолша и т.п.

Добавлено: Вс сен 07, 2008 21:05:09
Телерадиокошак
Я почему то подумал, что речь не про индикацию, а про реальную обработку звука в спектральном представлении.
Сейчас я имею ввиду не только фильтры под светомузыку, но и для обработки звука с дальнейшим выводом через ЦАП

Re: Цифровой фильтр на МК

Добавлено: Вс сен 07, 2008 21:14:05
Томатный
Телерадиокошак писал(а):Т.е. преобразование Фурье (пусть даже быстрое ПФ) на AVR в реальном времени?

Помоему это звётся операцией свертки. Да.
Телерадиокошак писал(а):Может имеет смысл подумать над несколькими аналоговыми фильтрами, управляемыми при помощи МК?
Это по-моему не интересно. Это я так понял тоже может называться програмируемым фильтром? Хотелось бы всётаки на цифре...
Вобщем я тоже думал что не реально, но один интересный человек натолкнул меня на эту идею очень уверено, что я решил попробовать. И вроди как получилось! Но на 99%
Скрины с протеуса:
Изображение

Изображение

Изображение

Изображение

и самое обидное, что эти скриншоты были зделаны, до того как были обнаружены серьезные ошибки в программе... После исправления сигнал стал какойто грубый, и вобще, очень тяжело выяснить причину ошибок... Во первых как подать сигнал на АЦП так, чтобы сигнал полностью попадал в рамки 0..255 и нулевой потенциал имел значение 128 ? и во вторых, как можно вывести 24-битное значение например? и в третих, как отследить переполнение числа в доп коде? Вобщем мозги кипят, оно то работает то нет.
В железе на слух особо не отличается от протеуса... иногда добивался нормального звучания, но были счелчки...

Добавлено: Вс сен 07, 2008 21:16:43
Томатный
ARV писал(а):Телерадиокошак не прав.
AVR в состоянии выполнять БПФ для целей цветомузыки для любого разумного числа каналов (думаю, 32 канала - это уже выходит за рамки разумного)

Для настоящей ЦОС, конечно, AVR не пойдет, но для цветомузыки и т.п. "индикаторных" штучек - запросто. кстати, для цветомузыки можно применять куда более простые алгоритмы, чем БПФ - начиная от простого алгоритма дискриминации длительностей импульсов (я реализовывал его даже на AT89C2051 - во много раз менее производительном МК, чем AVR) до преобразования Хартли, Уолша и т.п.
А можно подробнее о этих алгоритмах для "индикаторных" штучек?
Хочу зделать

Ещё по поводу скриншотов. Можно подумать, что сигнал фильтруется не от самой программы, а изза того, что преобразования происхотяд с небольшой частотой, и поэтому физически не улавливает высокочастотные сигналы... Но, что я хочу сказать... Сам алгоритм этого преобразования фурье получается вписывается в 300-400 тактов кристала, если я конечно его правильно зделал :))
Кста, частота кристала 16 мГц и делитель на АЦП = 32. Это около 38 кГц дискретизация... А прерывание получается через каждые 416 тактов кристала

Добавлено: Вс сен 07, 2008 22:16:14
ARV
алгоритм БПФ в 400 тактов - это либо не верно реализованный алгоритм, либо для очень малого числа отсчетов (наверное, не более 8). БПФ, кстати, не очень хорошо подходит для фильтрации - он очень удачно позволяет определить спектр сигнала, а вот с фильтрацией там уже хуже - надо учитывать и фазу спектральных составляющих, да и выполнять не только прямое, но и обратное преобразхование... в общем, это явно слишком сложно...

на счет "алгоритмов индикаторных штучек" - здесь была тема "цветомузыка на МК" (по-моему, так называлась), в ней я немного об этом говорил. У меня на сайте есть микро-проектики с реализацией этого алгоритма на 51-ом семействе. Есть и анализатор спектра, уже на БПФ и AVR.

Добавлено: Вс сен 07, 2008 22:42:04
Aheir
Дык поделились бы исходниками, если это не военно-коммерческая тайна, а то все обещаете, обещаете... :)

Добавлено: Вс сен 07, 2008 22:52:14
ARV
что касается алгоритма "дискриминации длительностей импульсов" - то сам алгоритм я словесно описал давным давно - кому надо, пусть прочтет (или у меня на сайте или здесь в обсуждениях на форуме). исходник я публиковал в журнальных статьях о 51-ых МК - он на асме для 51-ых, так что толку для AVR-щиков от него немного...

если речь о БПФ - то исходников и без меня пруд пруди ...

и, в общем-то, я ничего не обещал... :)

Добавлено: Пн сен 08, 2008 07:33:07
Aheir
http://radiokot.ru/forum/viewtopic.php?t=10534
ARV писал(а):...в общем, с годами все покажу :)
:wink: :)

Добавлено: Пн сен 08, 2008 09:39:38
ARV
не хотите годы ждать - я выложил модуль энкодера :-)

Добавлено: Пн сен 08, 2008 09:55:27
kalobyte
есть готовая реализация бпф для авр
на 3 канала влезет

у меня была такая идея, но в силу лени и тупости я от нее отказался
проще 3 фильтра аналоговых поставить и мк использовать для шима или просто переключать лампочки 8 каналов
можно еще сделать бит детектор для канала стробоскопа

плюс мк тут в реализации компрессора

Добавлено: Пн сен 08, 2008 13:49:02
Томатный
ARV писал(а):алгоритм БПФ в 400 тактов - это либо не верно реализованный алгоритм, либо для очень малого числа отсчетов (наверное, не более 8). БПФ, кстати, не очень хорошо подходит для фильтрации...
я делал по этому алгоритму: http://www.sibsutis.ru/~mavr/MPiDSP/dsp104.htm
могу выложить исходники и проект протеуса, только сначало нужно понасписывать коментариев в код, чтоб хоть чучуть было понятно что я там понабирал))

Такой вопрос. Кто умеет составлять импульсную характеристику для метода по ссылке, желательно для моего случая? я её приблизительно составил по рисунку(может в этом и проблема?). у меня кстати 29 коефициентов...
ARV писал(а):на счет "алгоритмов индикаторных штучек"...
Спасибо, лучше ими(штучками) и займусь
kalobyte писал(а):есть готовая реализация бпф для авр
делитесь :)

Добавлено: Пн сен 08, 2008 13:55:16
ARV
Томатный писал(а):я делал по этому алгоритму: http://www.sibsutis.ru/~mavr/MPiDSP/dsp104.htm
это не БПФ

Добавлено: Пн сен 08, 2008 13:59:05
Томатный
ARV писал(а):это не БПФ
мне от этого не легче :(

Добавлено: Пн сен 08, 2008 18:38:12
Aheir
Томатный писал(а):могу выложить исходники и проект протеуса
Давайте, конечно, поковыряем. :)

Добавлено: Пн сен 08, 2008 19:04:58
Томатный
Та вот только-что доделал!!! :)) :shock:
Начал коменты писать на каждую строчку и нашел несколько грубых ошибок, правда это стоило 3х лишних строк в цикле, что зделало алгоритм на 500 циклов :( пришлось понизить дискретность в 2 раза...но если заюзать мегу88 с кристалом 20 мГц, то этим её можно немного повысить... ещё есть вариант уменьшить число коефициентов, сейчас какраз попробую на сколько это ефективно(http://www.sibsutis.ru/~mavr/MPiDSP/dsp104.htm)
Вобщем сейчас всё выложу...

Добавлено: Пн сен 08, 2008 19:45:50
Томатный
вот берике кому нада цяцька :)
толку с него мало, 8 бит всётаки, но рад что доделал (надеюсь всетаки доделал)

Чтоб юзать делитель 32, нужно уменьшить кол коефициентов до 23-х :idea:
думаю от этого никто не пострадает :))
на счет импульсной характеристики - не знаю даже как её делать, как уже говорил набросал визуально с картинки... если кто-то подскажет будит очень хорошо
и ещё там если юзать 16 битный выход, то получается небольшой глюк:
Изображение
это я так понял изза последовательного вывода сначало одного байта, а потом другого(интервал равен длительности такта)
а так вроди все красиво, особено если в протеусе всунуть аудиофайл и пропустить через фильтр :)
Изображение

Спасибо NiTr0 за идею, помощь и поддержку :)

Добавлено: Пн сен 08, 2008 23:16:03
Morse
А чем вам аналоговые фильтры не нравятся? Возьмите реальный фильтр и сделайте для него математическую модель. Её и используйте в программе. Кстати, если один AVR не справляется, можно последовательно, или параллельно, поставить несколько штук.

Добавлено: Вт сен 09, 2008 12:39:50
kalobyte