Форум программистов, компьютерный форум CyberForum.ru

Ошибка в функции преобразования Фурье - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Конвертация байтов в Int16 http://www.cyberforum.ru/cpp-beginners/thread902602.html
Подскажите мб команду и библиотеку ей соответствующую ... Суть в чем: имеется массив байтов .. нужно получить массив чисел, каждое из которых представлено 2 байтами (последовательными). Кусок кода: int minc = std::numeric_limits<char>::min(); int mins = std::numeric_limits<short>::min(); char *buffer=new char; bool getedBuffer=image.GetBuffer( buffer); std::cout<<"Buffer...
C++ Составить подробную блок-схему Помогите составить блок-схему: // --------------------------------------------- #include <stdio.h> #include <conio.h> #include <iostream.h> // ------------------------------------------- typedef int* tint; // указатель на int void main () { // int min=100; // Минимальный вес ребра int n; // количество вершин http://www.cyberforum.ru/cpp-beginners/thread902581.html
Чем отличаются dynamic_cast и static_cast? C++
если можно пример напишите
C++ Форматированный вывод. Можно ли реализовать переменную точность
Программа калькулятор. После вычисления значения нужно сделать вывод числа, да так, чтобы только значащие цифры были. С помощью printft. То есть числа разные, я определяю количество значащих цифр после запятой. например: 2.250000, значащих цифр - 2. знаю, что с помощью printft я могу регулировать, сколько чисел выводит. а сделать это число переменным? Пока в голову приходит только...
C++ Как считывать числа с textBox ? http://www.cyberforum.ru/cpp-beginners/thread902577.html
Как считывать числа с textBox ?
C++ Мах Елемент подробнее

Показать сообщение отдельно
Носки
1 / 1 / 0
Регистрация: 02.06.2013
Сообщений: 10

Ошибка в функции преобразования Фурье - C++

16.06.2013, 01:02. Просмотров 621. Ответов 1
Метки (Все метки)

Здравствуйте!
Делаю гитарный тюнер, и застряла на моменте определения частоты уже снятого с микрофона звука. Звук с микрофона снимается в массив типа char, потом я загоняю его в функцию преобразование Фурье. Функцию честно писала с учебника Кинтцеля, немного подправив.
Допустим, при настройке шестой струны, частота должна быть в районе 82.41 герц. Мне же функция выдает массив из двух значений {-1701, 0}.
Подскажите, пожалуйста, в чем моя ошибка.

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
 
char * massiv1  = new char[400];
complex<double> b[1];
 
void ForwardDft(char samples[], int length, complex<double> *result)
{
   static const double
  twoPi = 2*3.1415926535897932384626;
 
   complex<double> samples2[400];
   for (int g = 0; g < 400; g++) {
    samples2[g].real((double)samples[g]);
}
 
 
   for(int f = 0; f<length; f++)
   {
      result[f] = 0.0;
      for(int t = 0; t < length; t++)   { 
      result[f] += samples2[t] * polar(1.0,-twoPi*f*t/length);
     }
   }
}
 
//Вызов функции
ForwardDft(massiv1, 400, b);
Добавлено через 8 часов 17 минут
Пришла к выводу, что многое делаю неправильно, переделала так:

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
double ForwardDft(char samples[], int length)
{
   static const double
twoPi = 2*3.1415926535897932384626;
 
complex<double> result[400];
complex<double> samples2[400];
double aa[400];
double max;
max=aa[0];
for (int g = 0; g < 400; g++) {
samples2[g].real((double)samples[g]);
}
 
 
   for(int f = 0; f<length; f++)
   {
      result[f] = 0.0;
      for(int t = 0; t < length; t++)
         {
         result[f] += samples2[t] * polar(1.0,-twoPi*f*t/length);
          }
   }
   for (int z = 0; z < 400; z++) {
    aa[z]=result[z].real();
      }
 
for( i = 0; i < 400; ++i )
{
 
max += aa[i];
}
max=max/400;
return max;
}
 
fr = ForwardDft(massiv1, 400);
Упорно выдает частоту 110 (частота пятой струны) на все струны. Подозреваю, что я неправильно работаю с полученными после преобразования Фурье значениями.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru