PDA

Просмотр полной версии : БПФ на Atmega 32



Zonder_Comander
08.11.2009, 23:17
Товарищи помоги кто чем может. Необходимо сделать Быстрое Преоразование Фурье на Аtmega32. Суть такая на 3 канала АЦП микроконтроллера приходит сигнал, оцифровывается и потом делается преобразование Фурье. Выборка идет на 256 точек для каждого канала.

EU1ME
08.11.2009, 23:46
http://lmgtfy.com/?q=fft+avr

Zonder_Comander
09.11.2009, 14:11
http://lmgtfy.com/?q=fft+avr
спс за помощь. Но это я уже смотрел. Меня еще вопрос интересует как из входной последовательности получить выходную последовательность меньшего размера, без потери качества. Ну т.е. отсечь частоты, которое не нужны.

EU1ME
09.11.2009, 20:15
окно->БПФ->окно->ОПФ

Zonder_Comander
10.11.2009, 13:41
окно->БПФ->окно->ОПФ
Понимаю, что наверно уже слишком назойлив, но этим делом недавно начал заниматься, так что если не трудно можно подробней. Я слабо представляю как это реализовать на МК с памятью 2К.

M0TLN
10.11.2009, 14:10
... Я слабо представляю как это реализовать на МК с памятью 2К.

Вы тему создали про Мегу32 - 32К для программы на борту.

Genadi Zawidowski
10.11.2009, 14:28
Я слабо представляю как это реализовать на МК с памятью 2К.

Два килобайта ОЗУ.

1) У вас нет ощущения, что не самый подходящий процессор выбран для этой задачи?

2) А почему именно БПФ? А фильтры не годятся?

Zonder_Comander
10.11.2009, 14:49
Я слабо представляю как это реализовать на МК с памятью 2К.

Два килобайта ОЗУ.

1) У вас нет ощущения, что не самый подходящий процессор выбран для этой задачи?

2) А почему именно БПФ? А фильтры не годятся?

Наверно проще написать что мне надо. Дело в следующем есть 3 акселерометра, которое будут мерить ускорения в 3-х плоскостях. Они через ОУ подключены к АЦП МК. Мне надо входные сигналы оцифровать, сделать над ними БПФ и результат передать по SPI, например раз в несколько секунд. Входные массивы было решено брать по 256 точек, т.е. получается только под входной массив надо 768 байт, для БПФ 1024, а память для выходного массива почти нет. Можно выделять в выходной массив только необходимые частоты. Вот как тотак.А как это сделать не пойму.

Genadi Zawidowski
10.11.2009, 14:56
Наверно проще написать что мне надо

память для выходного массива почти нет. Можно выделять в выходной массив только необходимые частоты. Вот как тотак.А как это сделать не пойму.
Другой процессор взять (мага64, арм какой-нибудь at91sam7s32) и не париться. Отладьте алгоритм на том что есть сейчас с меньшим количеством точек и делайте сразу плату под другой процессор.

http://forum.cqham.ru/viewtopic.php?t=1990 2

Vsevolod
16.11.2009, 12:12
Входные массивы было решено брать по 256 точек, т.е. получается только под входной массив надо 768 байт

Вообще-то не 768 байт (по 256 на канал), а 1536 байт (по 512 на канал) Вам нужно. Т.к. каждый отчет в БПФ-е состоит из x + jy, где x вещественная часть отчета (Re), jy - мнимая часть отчета (Im). Т.е. один байт занимает Re, а другой Im.

Контроллер желательно взять хотя бы с 4 кБ ОЗУ.

Рекомендую к прочтению, например, Л. Рабинер, Б. Гоулд "Теория и применение цифровой обработки сигналов". Эта книга в свое время мне очень помогла.

DV
16.11.2009, 20:11
Genadi Zawidowski
Геннадий, подскажите, а в принципе, возможно ли ATmega64-32 использовать для фильтрации сигнала (именно по схеме БПФ-фильтр-обратное БПФ) для реального звукового сигнала в полосе 3кГц в реальном масштабе времени? Хватит ли мощности процессора (тактовая - 20МГц, внутренний АЦП - 10 разрядов)?
С уважением DV

Genadi Zawidowski
16.11.2009, 20:43
для фильтрации сигнала (именно по схеме БПФ-фильтр-обратное БПФ)
Вы не указали количество точек...
Но, если речь идет о чём-то более чем 32 точек и для 10 бит АЦП - я бы не взялся за реализацию такого проекта. Правда, опыта не очень много.

ATmega64 и 20 МГц таковой - это что за зверь?

DV
16.11.2009, 21:08
Genadi Zawidowski
Извините, Mega 64 - 16МГц. (Mega644 есть 20МГц). :-(
Значит, скорее всего, фильтрацию звукового сигнала на таких процессорах проводить нельзя?
С уважением DV

Genadi Zawidowski
16.11.2009, 21:20
Фильтрацию можно, но не с помощью БПФ. Зависит от того, насколько сложен фильтр для обсчёта. Звуковой диапазон ещё кое-как. Аппроксимировать множители степенями двойки, огранчить разрядность...
На мой неопытный взгляд так.
Мне кажется, лучше спросить других присутствующих здесь людей, имеющих больший опыт в реализации - и для начала посмотреть на транссивер "Полигон". Там как раз Атмега при 14 мегагерцах тактовой реализует FIR для звукового сигнала. На ассемблере.

DV
16.11.2009, 21:24
Genadi Zawidowski
Полигон нашел. Если не сложно, ткните, куда смотреть еще.
Заранее благодарен DV

Genadi Zawidowski
16.11.2009, 21:50
Если не сложно, ткните, куда смотреть
Ещё видел игрушечный спектроанализатор для звукового диапазона.
http://www.circuit-projects.com/audio/glcd-audio-spectrum-analyzer-by-atmel-atmega8.html
http://hackedgadgets.com/2007/03/20/diy-audio-spectrum-monitor-using-a-atmel-avr-microcontroller/

shemmer
17.11.2009, 09:44
И все-таки хочется дать вам совет посмотреть в сторону микроконтроллеров 16-ти разрядных dspic33f (в крайнем случае dspic30f). Контроллер имеет "ядро" dsp со всеми присущими для него функциями, в отличие от 32-битников и настоящих ДСП типа блекфинов,тигров и Tms320 на его освоение уйдет не много времени. Также есть различные примеры использования dsp библиотеки.
www.microchip.com Если нужна какая-то информация - у меня все есть

Zonder_Comander
25.11.2009, 11:21
Входные массивы было решено брать по 256 точек, т.е. получается только под входной массив надо 768 байт

Вообще-то не 768 байт (по 256 на канал), а 1536 байт (по 512 на канал) Вам нужно. Т.к. каждый отчет в БПФ-е состоит из x + jy, где x вещественная часть отчета (Re), jy - мнимая часть отчета (Im). Т.е. один байт занимает Re, а другой Im.

Контроллер желательно взять хотя бы с 4 кБ ОЗУ.

Рекомендую к прочтению, например, Л. Рабинер, Б. Гоулд "Теория и применение цифровой обработки сигналов". Эта книга в свое время мне очень помогла.
спасибо, буду читать... У меня тут просто проблема, то что я не очень силен в программирование)

Zonder_Comander
27.11.2009, 13:50
С БФП вроде разобрался, но есть вопрос. Вообщем после всех преобразований получается спектр на 128 точек .Вопрос в следующем, как получить шаг спектра 1 Гц. Если можно то кодом поделитесь)

neorganic
27.11.2009, 14:22
ДПФ ограничено - шаг частот там зависит от частоты дискретизации и от кол-ва точек, по которым идет расчет. Есть еще преобразование Хара...

Залманзон Л.А. Преобразование Фурье, Уолша, Хаара
"http://ru.wikipedia.org/wiki/Быстрое_преобразован ие_Фурье"

Про код я могу сказать следующее: в свое время для С, pas было
сделано много библиотек и программ (см. например Russian SWAG) - но есть небольшое но. Все эти тексты ориентированы под ibm_pc, а точнее под числовой сопроцессор. Прямого перевода тут быть неможет - нужно корректировать алгоритм под целочисленную арифметику. Например, точность представления числа в 16 бит при вычисления Вам будет достаточно ? - снижение разрядности ведет к накоплению ошибки, т.е. если будет совершаться синтез - сигнал получится совершенно другой.

Vsevolod
28.11.2009, 18:56
С БФП вроде разобрался, но есть вопрос. Вообщем после всех преобразований получается спектр на 128 частот .Вопрос в следующем, как получить шаг спектра 1 Гц. Если можно то кодом поделитесь)

Чтобы получить шаг 1Гц максимальная измеряемая частота должна быть 128Гц (1Гц / 1 отчет спектра). Согласно теореме Котельникова частота дискретизации должна быть в 2 раза выше максимально измеряемой частоты, т.е. 256Гц.
Таким образом, для получения шага спектрального отчета в 1Гц частота дискретизации АЦП должна быть равна 256Гц.