Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.09.2012, 09:38   #1
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
Вопрос Правильная формула в Дискретном преобразовании Фурье (ДПФ)

Здравствуйте.
Перед мной стал вопрос о дискретном преобразовании Фурье.
Это я записал вот таким кодом:
Код:
    for F := 0 to Size - 1 do
      for I := 0 to Size - 1 do
      begin
        B[F] := B[F] + Round(A[I ] * Exp(-2 * Pi * F * I / Size));
      end;
Где A - исходный массив данных, B - полученный массив, Первый цикл по частотам, вложенный - по данным.

Но, я думаю, что я не учел мнимую единицу i.

В книге Тим Кинтцель - Руководство программиста по работе со звуком, эта формула записывается так:
Код:
void ForwardDft(complex <double> *int length, complex<double>*result) 
{
   static const double
         twoPi = 2*3.1415926535897932384626;
   for(int f = 0; f<length; f++) 
   {
      result[f] = 0.0;
      for(int t = 0; t < length; t++)
         result[f] += samples[t] * polar(1.0,-twoPi*f*t/length);
   }
}
Хотелось бы узнать:
1. Как правильно реализовать.
2. Какое отношение к обработки имеют комплексные числа.

Спасибо
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 16.09.2012, 09:58   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Вы сами отвечаете на свои вопросы... сравните exp(i*a) и exp (a)
p51x вне форума Ответить с цитированием
Старый 16.09.2012, 10:00   #3
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Вы сами отвечаете на свои вопросы... сравните exp(i*a) и exp (a)
А что в данном случае является i и как с ним работать в данном контексте?
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 16.09.2012, 10:03   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Формула Эйлера - связь между экспонентой, косинусом и синусом . Отсюда и плясать
http://ru.wikipedia.org/wiki/%D0%A4%...B5%D1%80%D0%B0
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При преобразовании строки в число оно обнуляется. alex4321 PHP 9 23.08.2012 20:08
Ошибка в преобразовании типов (программа по стеганографии) DashaShirshova C# (си шарп) 1 03.06.2012 18:57
нужна правильная формула KApSuL Microsoft Office Excel 2 14.01.2012 17:04
Округление до .00 при неявном преобразовании alt5000 PHP 4 08.12.2011 16:04
Фурье DeDoK Общие вопросы Delphi 0 12.09.2008 17:28