Страница 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, а перекомпилировать под свою среду у меня не получается, хотя очень хочется использовать ту библиотеку.

Добавлю: не для коммерческих целей и не для курсового/диплома: только спортивный интерес. Вся надежда остаётся только на Вас: сам я пока не обладаю достаточными знаниями даже для того, чтобы перекомпилировать библиотеку Чана, а не то чтобы с нуля написать свою:cry:

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 :o И очередное проявление моей глупости: что за исходный массив? И как правильно использовать функцию fft? :oops:

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

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
TRIOD писал(а):Попробуй использовать исходник вот отсуда http://www.waitingforfriday.com/index.p ... m_Analyser.
Там правда на пике, но путём несложных монипуляций переделывается под AVR.
У меня на 8меге работало.
По этим исходникам пытаюсь разобраться с БПФ, промежуточный результат
MyFFT.rar
(83.47 КБ) 390 скачиваний
компилятор IAR AVR

Re: FFT (БПФ) в CodeVisionAVR

Добавлено: Пн дек 24, 2012 18:25:30
phanis
Вот еще вариант,
MyFFT2.rar
(85.8 КБ) 579 скачиваний
все по тем же исходникам. При тактовой в 16 М и дискретизации 20000 Гц обновление происходит примерно каждые 8 мсек. Может кому то и пригодится.