WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  БПФ

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   БПФ
Valery опубликован 03-12-2001 14:08 MSK   Click Here to See the Profile for Valery   Click Here to Email Valery  
Вот балуюсь с БПФ с помощью библиотеки FFTN (http://www.fftw.org/)
делаю простейшую вещь (только начал эксперименты, поэтому сильно ногами не пинайте),
как написано в примере. Срабатывает вроде все нормально, меня немного результат
обескураживает.
Делаю так:
1. заполняю входной массив в цикле
in[i].re = 1000.0*sin(i*2*pi/N) + 800.0*sin(i*8*pi/N + 1);
in[i].im = 0.0;

2. получаю выходной, вывожу его тоже в цикле :)
complex<double> o(out[i].re, out[i].im);
if (abs(o) > 0.1)
printf ("=== %16lf %16lf\n", abs(o), arg(o));

А вот и результат:

#гар. амплитуда сдвиг фаз
1 500000.002298 -1.570796
4 400000.001161 -0.570797
(Беру данные только из первой половины выходного массива, поскольку
спектр во второй половине зеркален по отношению к первой половине.)

Сдвиг фаз между этими двумя гармониками похож на правду - 1 радиан.
Соотношение между амплитудами тоже похоже, непонятно вот что:
1. я вроде бы ожидал что величина гармоник должна быть 1000 и 800.
2. почему сдвиг первой гармоники не нулевой?

Потыкайте носом чего я забыл из математики (давно это было).

DmitryRyvkin опубликован 04-12-2001 11:48 MSK     Click Here to See the Profile for DmitryRyvkin  Click Here to Email DmitryRyvkin     
Я вообще-то тоже не спец по БПФ, хоть и занимался не очень давно.
Что касается сдвига на -1.57 так кажется традиционно Re часть
имеется ввиду с косинусом, а у вас синус. Что касается амплитуд, хм.
Так а какой объем входных данных вы заполняли ? Ведь это же зависит от этого.
PS если не очень большая киньте мне плиз на dmitry_rv@mail.ru
я использую другую, может ваша лучше
rodion опубликован 04-12-2001 19:22 MSK     Click Here to See the Profile for rodion  Click Here to Email rodion     
Все правильно ты же не учитываеш вторую половину, поэтому и получаещ в два раза меньше.
DmitryRyvkin опубликован 04-12-2001 20:14 MSK     Click Here to See the Profile for DmitryRyvkin  Click Here to Email DmitryRyvkin     
:-O А где видно , что в два ?
DmitryRyvkin опубликован 04-12-2001 20:20 MSK     Click Here to See the Profile for DmitryRyvkin  Click Here to Email DmitryRyvkin     
Пардон, въехал. Только все равно не два :)
Valery опубликован 04-12-2001 20:47 MSK     Click Here to See the Profile for Valery  Click Here to Email Valery     
2DmitryRyvkin:
Если небольшая - что? библиотека? так я написал вроде, что использую FFTN.
Если сама программулька - то конечно маленькая, могу прислать. Она такая маленькая , что половину ее я наверное уже привел. :)
Заполнял массив из N чисел - входной, получил такой же по размеру выходной массив гармоник. Непонятно все-таки с амплитудами - разница в самом деле не в два раза.
2rodion:
Может ли быть проверкой если я по полученным основным гармоникам вновь попытаюсь построить сигнал? Естественно используя все 4 гармоники. Попробую на досуге.
rodion опубликован 05-12-2001 11:27 MSK     Click Here to See the Profile for rodion  Click Here to Email rodion     
Насчет проверки мысль правильная.
1 500000.002298 -1.570796
4 400000.001161 -0.570797
По моему в полне допустимая погрешность.
rodion опубликован 07-12-2001 14:33 MSK     Click Here to See the Profile for rodion  Click Here to Email rodion     
Я тут пригляделся к количеству нулей...
Существует прямое и обратное преобразование Фурье. Короче говоря при ДПФ или БПФ произвоидится нормировка.
Valery опубликован 07-12-2001 22:50 MSK     Click Here to See the Profile for Valery  Click Here to Email Valery     
Вот с этого пунктика чуть поподробнее, плиз. Чем БПФ отличается от ДПФ? И что такое нормировка?
(без приколов)
rodion опубликован 10-12-2001 11:59 MSK     Click Here to See the Profile for rodion  Click Here to Email rodion     
БПФ это быстрое преобразование ДПФ -это дискретное. БПФ рабоает только если размер массива 2^n. ДПФ с любым. БПФ это быстрая реализация ДПФ. Если смотреть на преобразование Фурье аналогое то перед интегралом стоит 1/Т, где Т период итегрирования. То же самое и в дисктреном виде.
Valery опубликован 10-12-2001 18:24 MSK     Click Here to See the Profile for Valery  Click Here to Email Valery     
Так, с этим понятно. Осталось узнать что такое нормировка.
rodion опубликован 13-12-2001 11:41 MSK     Click Here to See the Profile for rodion  Click Here to Email rodion     
Приведу формулы для ДПФ и ОДПФ
N-1
ДПФ X(k)=E x(n)*Wn^(nk), 0<=k<=N-1
n=0
N-1
ОДПФ x(n)=1/N*E X(k)*Wn^(nk), 0<=n<=N-1
n=0
где Wn=exp(-j2PI/N), x(n)- сигнал, X(k)-спектр
БПФ это реализация ДПФ зачет количества уменьшения умножений с помощью "бабочки".
По этому амплитуды гармоник не должны быть равны амплитудам синусоид. Но ты можешь перенести нормировку из ОДПФ в ДПФ.
К статии по моему у тебя не БПФ а ДПФ (размер массива 100?)
lamo опубликован 13-12-2001 19:05 MSK     Click Here to See the Profile for lamo  Click Here to Email lamo     
я почему отвечаю ...
чето знакомое в заголовке.
БПФ.
это которая серия что мне там в оттрочестве приснилас ?
это я за нее рад.
т.е.
бес*(звоздачка епт)изды рад.
т.е.
оченна рад.


зы.
или я рогнал ...

DmitryRyvkin опубликован 14-12-2001 05:22 MSK     Click Here to See the Profile for DmitryRyvkin  Click Here to Email DmitryRyvkin     
Может я конечно и не прав.. Но БПФ можно и не на степенях 2-ки делать, обычно остаток нулями заливают. Быстрей выходит все равно чем ДПФ в лоб
Valery опубликован 14-12-2001 23:14 MSK     Click Here to See the Profile for Valery  Click Here to Email Valery     
2rodion:
сенькаю, появлюсь на работе, поразбираюсь, а пока в отпуске я. :)
интересно, кстати, а сама эта библиотека разбирается когда она может именно _БПФ_ применить, исходя из размера, надо будет в доке на нее почитать.
2lamo:
ни фига не понял.
обознались, вы, барин, не торговец я, извозом занимаюсь.... (с) ну помните, небось :)

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.