реклама на сайте
подробности

 
 
> Простые вопросы по FFT, Реализация на микроконтроллерах без плавающей точки.
JohnKorsh
сообщение Mar 5 2012, 14:01
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 182
Регистрация: 6-01-05
Из: Россия, Москва
Пользователь №: 1 820



Добрый день | вечер | утро! Не поможет ли кто понять простые вопросы по FFT. Пытаюсь сделать FFT для MSP430. Для начала написал на C простое FT, затем, FFT. Сравнил результаты. Совпадают. Пытаюсь перевести в MSP430 без переменных типа float. (Побыстрее, думаю, будет). Не могу понять простую вещь: чтобы использовать поворотные множители создал массив. Пока он на C в виде float (cos и sin (2*Pi*k/N)) - всё нормально, но если попытаться умножить на константу (для того, чтобы перевести cos и sin в значения int - больше единицы) FT продолжает работать исправно (с ростом амплитуды на выходе), а FFT - распадается - появляются новые гармоники. Наверное так не должно быть, ведь FFT это лишь способ считать, или я не прав?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
JohnKorsh
сообщение Mar 11 2012, 08:30
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 182
Регистрация: 6-01-05
Из: Россия, Москва
Пользователь №: 1 820



Добрый день!
Ещё вопрос. Как я говорил - при попытке выполнить преобразование Фурье на микроконтроллере с фиксированной точкой я закладывал поворачивающие множители в виде:
W_re (k,N) = 32768 * cos (- 2 * Pi * k/N)
W_im (k,N) = 32768 * sin (- 2 * Pi * k/N)
Множитель 32768 – для того, чтобы sin и cos представить в виде, большем 1.
При таком подходе приходится делить (ну, понятно, просто сдвигать) часть результата в “бабочке” на 32768 (15 разрядов “вправо”), иначе FFT “разваливается” (простое преобразование Фурье не чувствительно к умножению = там просто общий результат возрастает в 32768 раз):
A_re = A_re + (W_re * B_re – W_im * B_im)/32768
A_im = A_im + (W_re * B_im + W_im * B_re)/32768
B_re = A_re - (W_re * B_re – W_im * B_im)/32768
B_im = A_im - (W_re * B_im + W_im * B_re)/32768
(Потом, понятно, идёт масштабирование результата, чтобы не было переполнения по алгоритму “блочной плавающей точки”.)
Наверное, есть какое-то общеизвестное более изящное решение. В Интернете пока не нашёл, может кто посоветует статью или исходник?


"Отщипнул" - я имел в виду, что огносительно большая часть энергии сигнала отбрасывается при домножении на оконную функцию. (Представленное на рисунке окно Хемминга, пожалуй, самый "щадящий" вариант окна). Может, по Вашему опыту, я не так её реализовал - должна бть более "плоская" вершина?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- JohnKorsh   Простые вопросы по FFT   Mar 5 2012, 14:01
- - fontp   QUOTE (JohnKorsh @ Mar 5 2012, 17:01) Доб...   Mar 5 2012, 14:52
- - Alex11   Опять же переполнение надо смотреть.   Mar 5 2012, 16:56
- - DRUID3   ...результат каждого умножения сдвигать на "ч...   Mar 5 2012, 17:46
- - alex_os   Цитата(JohnKorsh @ Mar 5 2012, 17:01) Доб...   Mar 6 2012, 20:47
- - JohnKorsh   Пока непонятно. Для уверенности в правильности реа...   Mar 7 2012, 06:03
- - DRUID3   ...это что за "троян"?   Mar 7 2012, 11:59
- - JohnKorsh   Извините, не проверял, может, где и "подцепил...   Mar 7 2012, 13:04
- - DRUID3   Та не... это я так ...просто у меня и Wine нет, ...   Mar 7 2012, 13:19
- - JohnKorsh   Вот скриншоты. Моё понимание пока на том же уровне...   Mar 10 2012, 11:52
- - JohnKorsh   Вот скриншоты. Моё понимание пока на том же уровне...   Mar 10 2012, 11:52
|- - SPACUM   Цитата(JohnKorsh @ Mar 10 2012, 15:52) Во...   Mar 10 2012, 14:34
|- - fontp   QUOTE (JohnKorsh @ Mar 11 2012, 11:30) До...   Mar 11 2012, 11:23
- - JohnKorsh   Спасибо.   Mar 11 2012, 12:37
- - JohnKorsh   Добрый день! Вот очередной работающий вариант ...   Mar 16 2012, 07:29
- - DRUID3   Нужно будет свое тоже опубликовать... я 3 года наз...   Mar 16 2012, 07:41
- - JohnKorsh   Добрый день! Выкладываю программку, немного об...   Mar 27 2013, 14:02


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 7th August 2025 - 07:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.01387 секунд с 7
ELECTRONIX ©2004-2016