Страница 1 из 1
FFT (БПФ) в CodeVisionAVR
Добавлено: Чт фев 09, 2012 13:15:16
PowerCPLD
Добрый день, уважаемые Коты! Требуется Ваша помощь.
Перерыл все интернеты и наш форум в частности, но так и не нашёл необходимого.
В общем, нужен пример использования быстрого преобразования Фурье для CVAVR.
Задача простая: считывать сигнал с АЦП контроллера AVR, выделить его спектр, вывести результат на 8-ми битный порт(каждому выводу которого соответствует свой диапазон частот). В итоге должна получиться ЦМУ
Знаю о существовании прекрасной библиотеки
http://elm-chan.org/works/akilcd/report_e.html но она для avr-gcc, а работать я умею только с CVAVR, а перекомпилировать под свою среду у меня не получается, хотя очень хочется использовать ту библиотеку.
Добавлю: не для коммерческих целей и не для курсового/диплома: только спортивный интерес. Вся надежда остаётся только на Вас: сам я пока не обладаю достаточными знаниями даже для того, чтобы перекомпилировать библиотеку Чана, а не то чтобы с нуля написать свою

Re: FFT (БПФ) в CodeVisionAVR
Добавлено: Чт фев 09, 2012 13:23:40
pyzhman
В файле variables.c нужные переменные. Ненужные выкинуть, т.к. этот файл выдернут из исходника. Ну и сам FFT.
PS. Счас проверю прикрепляемость.

PPS. Оппа, прикрепилось!
Re: FFT (БПФ) в CodeVisionAVR
Добавлено: Чт фев 09, 2012 13:59:57
PowerCPLD
pyzhman, при попытке компиляции выдаёт несколько ошибок(компилятор - CVAVR 2.04.4a):
2 штуки undefined symbol 'PI' - их я исправил введя переменную float PI=3.1415; - правильно ли я сделал?
4 штуки undefined symbol 'sin' - к чему относится "sin" ?
Также выскакивает Warning: included from: 1.c: overflow is possible in 16 bit addition, casting to 'long' may be required , несмотря на то, что тип проблемной переменной указан как long int
Честно говоря, недалеко продвинувшемуся тяжело разобраться в этом коде, тут ещё и TWI переплетается, пытаюсь вычистить код. Ну и после всего, как же в итоге сравнивать полученный результат с критериями(нужными диапазонами?)

Re: FFT (БПФ) в CodeVisionAVR
Добавлено: Чт фев 09, 2012 14:14:13
pyzhman
Прицепите библиотеку math.h. Пи и синусы появятся. На варнинг забить.
Результат преобразования заносится в исходный массив. Делаем с ним то, что хотим.
Re: FFT (БПФ) в CodeVisionAVR
Добавлено: Чт фев 09, 2012 14:50:57
PowerCPLD
Есть ещё несколько вопросов: atmega8 эту функцию не потянет, как я вижу? Используется аж 2184 байта SRAM

И очередное проявление моей глупости: что за исходный массив? И как правильно использовать функцию fft?
Как я понимаю нужно произвести несколько замеров, скажем 32. Чем больше замеров будут производиться, тем медленнее будет работать преобразование, но точнее результат. Вот есть у нас вход АЦП. Есть функция fft. Что делать дальше?

Re: FFT (БПФ) в CodeVisionAVR
Добавлено: Пт фев 10, 2012 06:34:02
pyzhman
mega8 не потянет, т.к. не тот объем памяти. Мною использовалась mega64. Исходный массив - куда забиваются считанные с АЦП данные. Размерность массива кратна двойке. Использование: вызов функции, все готово, в этом массиве находятся частоты и соответствующие им амплитуды. Можно отдельно прогнать через окно, чье-либо.
В свое время взято с
Код: Выделить всё
/***********************************************************************
This code is generated by the AlgoPascal translator
This code is distributed under the ALGLIB license
(see http://www.alglib.net/copyrules.php for details)
***********************************************************************/
Там было описание что, как и куда. Посмотрите.
PS. Может Чан все-таки проще? Картинки во всяком случае красивые.
Re: FFT (БПФ) в CodeVisionAVR
Добавлено: Пт фев 10, 2012 14:26:44
TRIOD
Попробуй использовать исходник вот отсуда
http://www.waitingforfriday.com/index.p ... m_Analyser.
Там правда на пике, но путём несложных монипуляций переделывается под AVR.
У меня на 8меге работало.
Re: FFT (БПФ) в CodeVisionAVR
Добавлено: Пт фев 10, 2012 21:48:22
PowerCPLD
pyzhman, TRIOD, спасибо за отзывчивость! Использовать вырезок из AlgoPascal не имею желания, т.к. неоправданно высокие аппаратные потребности у данного кода.
А вот ссылка TRIOD'а заинтересовала, визуально библиотека выглядит красиво и понятно, вызывая тем самым надежду.
Сейчас я занят аппаратной разработкой(потому особо глубоко не вникал в последнюю ссылку), БПФ будет лишь частью фарша(и хотелось бы, чтобы главной и работоспособной частью)
TRIOD, к Вам вопрос на будущее: для какого компилятора под AVR вы портировали представленный код? И может быть для уверенности поделитесь примером портированного Вами кода(для любого компилятора), если он ещё сохранился и не является военной тайной?
Re: FFT (БПФ) в CodeVisionAVR
Добавлено: Сб фев 11, 2012 10:05:45
TRIOD
Портировал на CVAVR. Да там и портировать особо нечего поскольку нативный Си.
Исходники не сохронились.
Re: FFT (БПФ) в CodeVisionAVR
Добавлено: Вс дек 09, 2012 19:48:01
alex08cb
PowerCPLD писал(а):А вот ссылка TRIOD'а заинтересовала, визуально библиотека выглядит красиво и понятно, вызывая тем самым надежду.
Интересно, добились ли Вы положительных результатов в портировании кода на CVAVR?
Re: FFT (БПФ) в CodeVisionAVR
Добавлено: Сб дек 22, 2012 16:49:01
phanis
По этим исходникам пытаюсь разобраться с БПФ, промежуточный результат
компилятор IAR AVR
Re: FFT (БПФ) в CodeVisionAVR
Добавлено: Пн дек 24, 2012 18:25:30
phanis
Вот еще вариант,
все по тем же исходникам. При тактовой в 16 М и дискретизации 20000 Гц обновление происходит примерно каждые 8 мсек. Может кому то и пригодится.