Цитата(AnisimovSlava @ Jan 28 2009, 14:24)

Фурье в ATmega32... Кажется абсурдом.
Интересная задачка.
Давайте скажем честно: Считать на калькуляторе можно.
Но вот результаты этого вряд ли кому-либо будут нужны.
Поэтому без модификации преобразования вам не обойтись.
Посмотрите в эту сторону. Наверняка найдете что-либо
подходящее.
Сам же вам подскажу вот какой вариант:
Что произойдет если вы перемножите сигнал, на
шаблон (синусоиду в вашем случае)? Ответ простой -
если в сигнале есть этот шаблон, то вы получите "единицу".
Ну, а если ее нет, то получите нолик.
Теперь вам остается выяснить только сдвиг фаз и амплитуду.
Ну, если с амплитудой все понятно, то сдвиг фаз придется
попросту подбирать.
Теперь задача сводится к тому, что вам надо сохранить
нужное количество шаблонов синусоид и тупо перемножать
полученные отсчеты на шаблон. После подбора сдвига фаз
у вас в руках будет полная информация типа:
Шаблон №01 (50 Гц): Сдвиг 5 градусов, Амплитуда 0x50
Шаблон №02 (60 Гц): Сдвиг 15 градусов, Амплитуда 0x80
...
Шаблон №?? (?? Гц): Сдвиг 40 градусов, Амплитуда 0xF0
Чем вам не спектральная характеристика?
В общем-то, этот прием является одной из модификаций
преобразования Фурье над дискретным рядом.
Что, собственно, вам и надо.
Дополнительно могу подсказать вот что:
Чем отличается один шаблон от другого?
Да собственно ничем... Частотой только
(это только в вашем случае). Это значит,
что можно хранить один шаблон, правда,
высокой точности. Надо будет всего лишь
"выбирать" из него с нужным шагом, а не
последовательно. И, хотя это излишество,
но оно вам позволит сильно сэкономить в
памяти.
Думаю, вам достаточно вводных данных для
начала. Методу надо минимальное количество
ОЗУ, а так же вычисления только с фиксированной
точкой. Atmega справится - точно.
Сергей.