7 / 7 / 3
Регистрация: 08.02.2013
Сообщений: 42
1

Быстрое преобразование Фурье

03.04.2013, 00:52. Показов 4386. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Это пример на сайте wikipedia Быстрого Преобразование Фурье.
Два вопроса.

1)Как получить массив анализируемых данных для wav файла.
2)Как получить массив анализируемых данных для захвата звука с микрофона.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// AVal - массив анализируемых данных, Nvl - длина массива должна быть кратна степени 2.
// FTvl - массив полученных значений, Nft - длина массива должна быть равна Nvl.
 
const double TwoPi = 6.283185307179586;
 
void FFTAnalysis(double *AVal, double *FTvl, int Nvl, int Nft) {
  int i, j, n, m, Mmax, Istp;
  double Tmpr, Tmpi, Wtmp, Theta;
  double Wpr, Wpi, Wr, Wi;
  double *Tmvl;
 
  n = Nvl * 2; Tmvl = new double[n];
 
  for (i = 0; i < Nvl; i++) {
    j = i * 2; Tmvl[j] = 0; Tmvl[j+1] = AVal[i];
  }
 
  i = 1; j = 1;
  while (i < n) {
    if (j > i) {
      Tmpr = Tmvl[i]; Tmvl[i] = Tmvl[j]; Tmvl[j] = Tmpr;
      Tmpr = Tmvl[i+1]; Tmvl[i+1] = Tmvl[j+1]; Tmvl[j+1] = Tmpr;
    }
    i = i + 2; m = Nvl;
    while ((m >= 2) && (j > m)) {
      j = j - m; m = m >> 1;
    }
    j = j + m;
  }
 
  Mmax = 2;
  while (n > Mmax) {
    Theta = -TwoPi / Mmax; Wpi = Sin(Theta);
    Wtmp = Sin(Theta / 2); Wpr = Wtmp * Wtmp * 2;
    Istp = Mmax * 2; Wr = 1; Wi = 0; m = 1;
 
    while (m < Mmax) {
      i = m; m = m + 2; Tmpr = Wr; Tmpi = Wi;
      Wr = Wr - Tmpr * Wpr - Tmpi * Wpi;
      Wi = Wi + Tmpr * Wpi - Tmpi * Wpr;
 
      while (i < n) {
        j = i + Mmax;
        Tmpr = Wr * Tmvl[j] - Wi * Tmvl[j-1];
        Tmpi = Wi * Tmvl[j] + Wr * Tmvl[j-1];
 
        Tmvl[j] = Tmvl[i] - Tmpr; Tmvl[j-1] = Tmvl[i-1] - Tmpi;
        Tmvl[i] = Tmvl[i] + Tmpr; Tmvl[i-1] = Tmvl[i-1] + Tmpi;
        i = i + Istp;
      }
    }
 
    Mmax = Istp;
  }
 
  for (i = 0; i < Nft; i++) {
    j = i * 2; FTvl[Nft - i - 1] = Sqrt(Sqr(Tmvl[j]) + Sqr(Tmvl[j+1]));
  }
 
  delete []Tmvl;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2013, 00:52
Ответы с готовыми решениями:

Быстрое Преобразование Фурье
В качестве библиотеки взял хваленую IPP, и тут возник рад вопросов, вот код: ...

Быстрое преобразование Фурье
Помогите реализовать задачу. Дана волновая функция(6sin5pit), необходимо преобразовать её спектр с...

Обратное быстрое преобразование Фурье
Прямое преобразование работает корректно, а вот обратное возвращает странную дугу в независимсти от...

Быстрое преобразование фурье wave файла
Всем доброго времени суток! Сейчас работаю над дипломом, в c++ как и в обработке звука пока...

1
0 / 0 / 0
Регистрация: 07.06.2014
Сообщений: 5
07.06.2014, 18:50 2
Вы разобрались как это делать?) а то мне точно такое же нужно
0
07.06.2014, 18:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.06.2014, 18:50
Помогаю со студенческими работами здесь

Быстрое преобразование Фурье по составному основанию
Написал быстрое преобразование Фурье по составному основанию. Не запускается, выдает ошибку: ...

Необходимо написать быстрое рекурсивное умножение многочленов (полиномов). Не преобразование Фурье
Необходимо написать быстрое рекурсивное умножения многочленов (полиномов). Не преобразование Фурье....

Быстрое преобразование числа
Здравствуйте уважаемые программисты! Подскажите пожалуйста как быстрее всего получить из...

Прямое преобразование Фурье C++
Нужно написать программу прямого преобразование Фурье ( не быстрое и тд, а стандартное ). Имеется...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru