FFT на Си для AVR

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Antibiotic
Открыл глаза
Сообщения: 70
Зарегистрирован: Пт авг 01, 2008 08:43:08

FFT на Си для AVR

Сообщение Antibiotic »

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

Re: FFT на Си для AVR

Сообщение ARV »

можно поинтересоваться: для какой цели? FFT на чистом Си "без приблуд" будет очень медленным на AVR...

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

Мой уютный бложик... заходите!
Аватара пользователя
Antibiotic
Открыл глаза
Сообщения: 70
Зарегистрирован: Пт авг 01, 2008 08:43:08

Re: FFT на Си для AVR

Сообщение Antibiotic »

2 ARV:
Пока что просто для изучения и попытки постичь данный алгоритм. Просто с ассамблером не очень дружу. Если пример для АВР студии но там все самое интересное вынесено в ASM. Может быть есть ещё какие то алгоритмы для получения частотного спектра сигнала кроме БФП и ДФП ?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: FFT на Си для AVR

Сообщение ARV »

алгоритмы-то есть, но для понимания они ничуть не проще, чем FFT или DFT. кстати, DFT - самое простое для понимания. если цель - освоить FFT вообще, то лучше делать это на компе, а не МК: и проще, и инстументарий удобнее, и готовых исходников море.

на мощные МК типа ARM, mega32 или dsPIC сишные тексты от компа переносятся практически без правки, а для простого AVR без ассемблерных вставок быстродействие такое, что FFT превращается в SFT - медленное преобразование Фурье :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Antibiotic
Открыл глаза
Сообщения: 70
Зарегистрирован: Пт авг 01, 2008 08:43:08

Re: FFT на Си для AVR

Сообщение Antibiotic »

спасибо большое за разъяснения.
SFT :))) :))) :))) получайте на него копирайт :)
Попробую на компе по колупать.
Аватара пользователя
GRAF
Мудрый кот
Сообщения: 1867
Зарегистрирован: Ср янв 23, 2008 22:11:54
Откуда: Калининград

Re: FFT на Си для AVR

Сообщение GRAF »

Вот здесь очень простое описание БПФ
http://slonpts.narod.ru/algo/math/furie/06.html

Код реализации занимает менее 20 строк. Если нет необходимости восстанавливать сигнал, то фазу можно не считать.
Аватара пользователя
Antibiotic
Открыл глаза
Сообщения: 70
Зарегистрирован: Пт авг 01, 2008 08:43:08

Re: FFT на Си для AVR

Сообщение Antibiotic »

Спасибо, то что нужно.. "доступно и всерьез"
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: FFT на Си для AVR

Сообщение YS »

Во! Спасибо! Тоже хотел преобразование Фурье поколупать! Изучаю ссылку...
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Аватара пользователя
jordan
Грызет канифоль
Сообщения: 271
Зарегистрирован: Чт апр 01, 2010 14:14:55

Re: FFT на Си для AVR

Сообщение jordan »

Здравствуйте коты разобравшиеся в преобразованиях Фурье!

Сейчас разбираюсь с ДПФ и БПФ... Поправите пожалуйста если не прав... Я так понимаю что мы берем N - количество выборок АЦП( например 1024), с частотой дискретизации например 44100 кГц... Потом после расчета действительной части, получаем N - амплитуд гармоник... Правильно ли я понял, что мы получаем 1024 частот гармонических колебаний, если да то какие это частоты (какие это 1024 частоты)?
Аватара пользователя
GRAF
Мудрый кот
Сообщения: 1867
Зарегистрирован: Ср янв 23, 2008 22:11:54
Откуда: Калининград

Re: FFT на Си для AVR

Сообщение GRAF »

Амплитуда гармоники вычисляется по формуле 4, если смотреть здесь.
Это корень квадратный из суммы квадратов действительной и мнимой частей.
Считая ДПФ по 1024 точкам, вы получаете 1024 отчета в частотной области. Всё верно.

При частоте дискретизации 44100 кГц (наверное имелось ввиду 44,100 кГц) частота гармоники считается f=m*Fдискр/N.
N=1024, m изменяется от 0 до 1024. Таким образом, например 1-я гармоника равна 1*44100/1024=0,043 кГц, вторая = 0,086 кГц. Следовательно, шаг получается 43 Гц.

Советую почитать Richard G. Lyons Understanding Digital Signal Processing. В этой книге на пальцах разбирается ДПФ, БПФ, всякие БИХ фильтры и прочие ДСПшные методы.
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Re: FFT на Си для AVR

Сообщение Kavka »

Может будет сильно круто, но есть такой сайтик - http://www.fftw.org/
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Аватара пользователя
jordan
Грызет канифоль
Сообщения: 271
Зарегистрирован: Чт апр 01, 2010 14:14:55

Re: FFT на Си для AVR

Сообщение jordan »

Спасибо GRAF, за формулу... Kavka за сайтик тоже спасибо, я правда его видел но не стал рыть так как он на английском, по английски понимаю, но по русски все равно лучше, если сайт стоящий поковыряем...
Буду разбираться если что обращусь за помощью :love:

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

Re: FFT на Си для AVR

Сообщение phanis »

По ссылке который дал TRIOD
Переделав код под IAR AVR, получил 11 мсек на одно преобразование.
Мк Атмега8 тактовая 16 МГц. 128 точек. (можно использовать 32,64 или 128 точек)
исходник на СИ
MyFFT.rar
(78.72 КБ) 1190 скачиваний
с примером проектом в протеусе.
Еще есть вариант elm-chan работает почти в двое быстрее , но там микс СИ и ассемблера.
Аватара пользователя
jordan
Грызет канифоль
Сообщения: 271
Зарегистрирован: Чт апр 01, 2010 14:14:55

Re: FFT на Си для AVR

Сообщение jordan »

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

Re: FFT на Си для AVR

Сообщение phanis »

Вариант БПФ http://elm-chan.org/works/akilcd/report_e.html портированного в IAR_AVR. с примером в протеусе.
Код чуть весомее оригинала.
Время одного преобразования для 128 точек (7,18 мсек). МК Атмега 8, такт 16 МГц.
IAR_AVR_FFT_C_ASSEMB.rar
(113.19 КБ) 774 скачивания
Аватара пользователя
jordan
Грызет канифоль
Сообщения: 271
Зарегистрирован: Чт апр 01, 2010 14:14:55

Re: FFT на Си для AVR

Сообщение jordan »

phanis писал(а):Вариант БПФ http://elm-chan.org/works/akilcd/report_e.html портированного в IAR_AVR. с примером в протеусе.
Код чуть весомее оригинала.
Время одного преобразования для 128 точек (7,18 мсек). МК Атмега 8, такт 16 МГц.
IAR_AVR_FFT_C_ASSEMB.rar



128 точек какой разрядности, 8 бит? 16? 32? и какой разрядности результаты?
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

Re: FFT на Си для AVR

Сообщение phanis »

16 /16 бит
Аватара пользователя
jordan
Грызет канифоль
Сообщения: 271
Зарегистрирован: Чт апр 01, 2010 14:14:55

Re: FFT на Си для AVR

Сообщение jordan »

phanis писал(а):Вариант БПФ http://elm-chan.org/works/akilcd/report_e.html портированного в IAR_AVR. с примером в протеусе.
Код чуть весомее оригинала.
Время одного преобразования для 128 точек (7,18 мсек). МК Атмега 8, такт 16 МГц.
IAR_AVR_FFT_C_ASSEMB.rar


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

Re: FFT на Си для AVR

Сообщение phanis »

При использовании встроенного АЦП Атмеги, думаю до 15 кГЦ.
Аватара пользователя
jordan
Грызет канифоль
Сообщения: 271
Зарегистрирован: Чт апр 01, 2010 14:14:55

Re: FFT на Си для AVR

Сообщение jordan »

Продолжается изучение ДПФ и БПФ... написал простое приложение на C# ДПФ на 1024 отсчета, в качестве исследуемого сигнала взял сумму 3 гармоник с разными амплитудами... Алгоритм прост и отлично работает:

Код: Выделить всё

for (int k = 0; k < 1024; k++)
            {
                for (int n = 0; n < 1024; n++)
                {
                    x_real[k] += x_n[n] * Math.Cos( (-2) * Math.PI * k * n / 1024 );
                    x_imag[k] += x_n[n] * Math.Sin( (-2) * Math.PI * k * n / 1024);
                }

                x_Ampl[k] = Math.Sqrt( x_real[k] * x_real[k] + x_imag[k] * x_imag[k] );

               
            }


но наблюдается зеркальный эффект :cry:

вопрос следующий: стоит ли бороться с зеркальным эффектом, или просто не учитывать эти частоты так как они находятся за частотой найквиста и все равно не могут быть вычислены верно ???
Вложения
dft.JPG
зеркальный эффект
(72.39 КБ) 1388 скачиваний
Ответить

Вернуться в «AVR»