Помогите с БПФ - быстрое преобразование Фурье

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Вс авг 10, 2008 00:41:08

Сообщение poff »

Доброго времени суток. Пытаюсь реализовать очередной проект - цветомузыка в виде куба. Идея не новая, на радиокоте, кажется обсужддалась, но как то поверхностно.
Нет проблем изготовить линейку из активных фильтров, как предлагают некоторые, а потом МК обрабатывать сигналы после фильтров. Но это скучно, нет революции, я такие штучки делал 20 лет назад.

Ближе к сути:

1. Система построена на базе ATMEGA8.
2. Результатом работы подпрограммы БПФ вижу четкое разделение входного звукового сигнала на три полосы 100-1000гц, 1200-3000гц, 3200-5000гц
(соответственно результаты будут использоваться другими подпрограммами для реализации различных эфектов).
3. Хочется использовать один вход АЦП.
4. Для написания программы использую асемблер.

Литература по данной теме не предлагает перехода в практическую плоскость.
Единственная книга, которая помогла - Юкио Сато "Обработка сигналов".

Господа! если кто решал аналогичные задачи, поделитесь опытом.
Предлагаю расписать алгоритм по шагам.

Шаг 1. Измеряем с определенной частотой, 10Кгц например, уровень входного сигнала.
Шаг 2. ?
Шаг 3. ?
ИТД

Заранее благодарен.
Реклама
Держит паяльник хвостом
Сообщения: 986
Зарегистрирован: Ср июл 07, 2010 06:48:57

Сообщение Anode_Katode »

М-да... Задача оригинальная. Прямые преобразования Эйлера-Фурье не прокатят. Около года назад я тоже озадачился нечто подобным, жаль только не надолго меня хватило(((
Смыл в использовании численных методов для разложения в ряд гармонических составляющих, в частности схемы Рунге (по крайней мере я пытался его осмыслить). Вот ссылка на теорию http://www.ipages.ru/index.php?ref_item ... 3&ref_dl=1
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

1)Частоту дискретизации лучше взять повыше раз в 5 (20...30 кГц).
2) Поищите информацию о проектировании цифроых фильтров ибо для меги БПФ и тем более ДПФ будет непосильной задачей.
3) Весь проект потребует значительной памяти - как минимум на 3 выборки, а лучше еще иметь запас.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

А вот попробуйте это:
Вложения
realfft.cpp
(5.34 КБ) 874 скачивания
Docendo discimus
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Сообщение ChipKiller »

poff писал(а):Литература по данной теме не предлагает перехода в практическую плоскость.
Единственная книга, которая помогла - Юкио Сато "Обработка сигналов".
... а может не там искали ? http://www.atmel.com/dyn/general/tech_d ... ily_id=607
Реклама
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1562
Зарегистрирован: Ср июн 30, 2010 18:54:47
Откуда: NO14MU

Сообщение Rinon Ninqueon »

у мну тут есть исходник анализатора спектра на Си
DFT прокоментирована хорошо

как лапы дойдут, выложу
Изображение
Изображение
Изображение
Сам себе Гилмор
Контактная информация:
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18694
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

AVR никогда не сможет делать БПФ (FFT) сигнала звукового частотного диапазона с вещественными числами в реальном времени! так что про эту идею можете забыть сразу и навсегда.
AVR при определенных усилиях может считать FFT в целых числах со знаком, но для вашего случая (3 достаточно широких полосы частот) более перспективным кажется не БПФ, а обычные цифровые фильтры, адаптированные для целочисленной математики. не могу утверждать, но интуитивно мне кажется, что AVR способен сделать соответствующие расчеты.
можно еще попытаться сделать опять же целочисленное ДПФ конкретно для трех частот, это так же по силам AVR, но полученные результаты будут "узкополосными" и для цветомузыки могут не подойти.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский

Сообщение phanis »

Контактная информация:
Родился
Сообщения: 5
Зарегистрирован: Вт фев 15, 2011 09:50:06

Сообщение George22 »

Chan в 2005-ом это сделал именно на Mega8.
Кто-нибудь разбирался в какой среде разработки это сделано:
там и С-файлы и ассемблерные S-файлы?
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Вс авг 10, 2008 00:41:08

Сообщение poff »

to phanis. Спасибо, похоже, это то что нужно. Буду разбираться, но если у кого-то есть мысли по поводу - милости просим.. :)
Модератор
Аватара пользователя
Сообщения: 11169
Зарегистрирован: Чт окт 27, 2005 18:50:07
Откуда: из мест не столь отдалённых

Сообщение Сэр Мурр »

Делайте компаратор длительности импульса. Задайте столько окон анализа, сколько хотите иметь полос выделения (анализа) сигнала. Для этого компаратора не важен уровень сигнала- главное- его должно хватать для срабатывания. Алгоритм- очень простой, и не будет нагружать контроллер.
На АЦП можно реализовать индикацию уровня сигнала.
Конечно, это не так точно, как БПФ, но для простых случаев достаточно. Запросто можно реализовать многополосный анализатор спектра.
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1562
Зарегистрирован: Ср июн 30, 2010 18:54:47
Откуда: NO14MU

Сообщение Rinon Ninqueon »

вотъ
там spectr.c главное
смотри последовательность в "main" (закоментированно)
массив должен быть Data, а не Data_h и Data_l
и ещё, должно быть: Data[K-1] = Data[K-1] * Okno[K-1];
Вложения
spectr1.rar
(137.35 КБ) 307 скачиваний
Изображение
Изображение
Изображение
Сам себе Гилмор
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Вс авг 10, 2008 00:41:08

Сообщение poff »

to Сэр Мурр. Изначально я так и хотел сделать, но ненашел поддержки среди коллег - забраковали мою идею. В любом случае стоит разобраться с БПФ, в лучшем случае получится хорошая программа , в худшем - расширится кругозор. Спвсибо за поддержку.
Потрогал лапой паяльник
Сообщения: 399
Зарегистрирован: Сб авг 08, 2009 23:02:57
Откуда: Ростов-на-Дону

Сообщение driver_gv »

Делал такую цветомузыку на PIC , FFT , 6 полос, 6 каналов шим 6 бит. Писал на асме, только целочисленная математика 16/32 бит со знаком.
Все получается и работает в реалтайме. Памяти надо много.

Сначала оцифровать не хуже 128 отсчетов на 4 периода , множим на синус и косинус, отдельно складываем , делим на количество отсчетов и корень квадратный из квадратов синуса и косинуса.
Я еще накладывал функцию Хемминга для подавления боковых лепесков и расширения центрального.
Например фильтр на 4000Гц светится от 3 до 5,5 кГц с переменной яркостью в зависимости от отстройки от центральной частоты.

Сначала рекомендую потренироваться в екселе.
__________________
Все, что нельзя запрограммировать на ассемблере, приходится паять
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Вс авг 10, 2008 00:41:08

Сообщение poff »

to driver_gv. Сейчас пытаюсь анализировать код анализатора от Chanа (см. ссылки выше). Альтернативные решения не помешают. Если это возможно, не могли бы Вы перекинуть мне исходники в асме для Пика.
Заранее благодарен..
Потрогал лапой паяльник
Сообщения: 399
Зарегистрирован: Сб авг 08, 2009 23:02:57
Откуда: Ростов-на-Дону

Сообщение driver_gv »

По некорым причинам не могу публиковать исходник этого проекта.
Советутю прочесть http://91.210.216.1/Books/Микроконтролл ... %20Кестер/
и можно поискать его книги.
Примерный алгоритм расчета я описал, будет не понятно - спрашивайте.
Оцифровывать для цветомузыки надо 40 -60 кГц для диапазона фильтров до 10 -15 кГц
__________________
Все, что нельзя запрограммировать на ассемблере, приходится паять
Контактная информация:
Опытный кот
Аватара пользователя
Сообщения: 811
Зарегистрирован: Чт авг 19, 2010 23:49:19
Откуда: Ташкент

Сообщение Paguo-86PK »

Странно, в журнале РАДИО за 80-ые в разделе цифровой техники я читал, что наша промышленность до сих пор штампует телевизоры на лампах, тогда как западные модели телевизоров начала 80-ых имели цифровой звуковой тракт с АЦП и на процессоре с тактовой частотой порядка 20МГц для регулировки тембра по представленным формулам :dont_know:
Неужели современные чипы так слабы в Фурье и годятся лишь для тембровки, как 30 лет назад!? :shock:
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

У каждого чип специализированная задача. Пики и атмелы, о которых здесь идет речь, не DSP, обрабатываают чисто цифру. Да, есть АЦП. Но не шустрый. А в тв применены соответственно свои м/с. Под свои задачи разработанные. Никто микроскопом гвозди не забивает.
Docendo discimus
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»