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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2011, 18:09   #1
Voxa7
Пользователь
 
Регистрация: 17.05.2010
Сообщений: 59
По умолчанию Частота WAV

Подскажыте как можно получить частоту для конкретной выборки данных из wav файла

Код:
f1 = fopen("1.wav", "rb");
//.... здесь я считываю заголовок
//....
fread(buf, size, 1, f1); //в массиве buf будет находится часть данных из блока data
Как получить частоту для этой выборки?
Voxa7 вне форума Ответить с цитированием
Старый 18.03.2011, 04:31   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

гугли БПФ
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 18.03.2011, 08:44   #3
Voxa7
Пользователь
 
Регистрация: 17.05.2010
Сообщений: 59
По умолчанию

veniside я уже сделал функции БПФ и преобразования Вейвлетта
я так понимаю мне теперь надо читать данные из файла порциями размером 2^n и применять к ним БПФ???
Таким образом я могу построить частотный спектр??
Voxa7 вне форума Ответить с цитированием
Старый 18.03.2011, 12:04   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
Как получить частоту для этой выборки?
не частоту, а набор частот ...спектр - это распределение энергии сигнала по частотам ...в wav содержатся мгновенные отсчеты сигнала во времени
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 18.03.2011, 12:55   #5
Voxa7
Пользователь
 
Регистрация: 17.05.2010
Сообщений: 59
По умолчанию

Код:
void fft(double *&a, int nn, bool InverseFFT)
{
        int i, n, ii, jj,  mmax, m, j, istep, isign;
        double wtemp, wr, wpr, wpi, wi, theta, tempr, tempi;
        if (InverseFFT) isign = -1;
        else isign = 1;
        n = nn >> 1;
        j = 1;
        for (ii = 1; ii <= n; ii++)
        {
                i = 2 * ii - 1;
                if ( j > i )
                {
                        tempr = a[j-1];
                        tempi = a[j];
                        a[j-1] = a[i-1];
                        a[j] = a[i];
                        a[i-1] = tempr;
                        a[i] = tempi;
                }
                m = nn >> 1;
	        while( m >= 2 && j > m)
                {
                        j = j - m;
                        m = m / 2;
                }
                j += m;
        }
        mmax = 2;
        while (nn > mmax)
        {
                istep = 2 * mmax;
                theta = 2 * M_PI / (isign * mmax);
                wpr = -2.0 * (sin(0.5 * theta) * sin(0.5 * theta));
                wpi = sin(theta);
                wr = 1.0;
                wi = 0.0;
                for (ii = 1; ii <= mmax/2; ii++)
                {
                        m = 2 * ii - 1;
                        for (jj = 0; jj <= (nn - m)/istep; jj++)
                        {
                                i = m + jj * istep;
                                j = i + mmax;
                                tempr = wr * a[j-1] - wi * a[j];
                                tempi = wr * a[j] + wi * a[j-1];
                                a[j-1] = a[i-1] - tempr;
                                a[j] = a[i] - tempi;
                                a[i-1] = a[i-1] + tempr;
                                a[i] = a[i] + tempi;
                        }
                        wtemp = wr;
                        wr = wr * wpr - wi * wpi + wr;
                        wi = wi * wpr + wtemp * wpi + wi;
                }
                mmax = istep;
        }
        if (InverseFFT)
                for (i = 1; i <= 2*n; i++)
                        a[i-1] = a[i-1]/n;
}

Вот моя функция БПФ, но оно не комплексное. Входной массив имеет размерность n=2^k, и при этом целый массив это выбора данных из wav файла. В результате БПФ у меня в массиве получаются большые числа

2978.61
1629.31
3468.97
-3394.5
3035.04
1591.01
3411.07
-3435.96
3101.73
1545.69
3370
-3463
3163.09
1521.69
3310.09
-3479.44
3207.5
1481.07
3267.58

или так должно быть??

Вот часть спектра который я построил с помощью БПФ
Изображения
Тип файла: jpg Безымянный.jpg (24.6 Кб, 201 просмотров)

Последний раз редактировалось Voxa7; 18.03.2011 в 13:10.
Voxa7 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
играть сначала 1.wav потом 2.wav mma Мультимедиа в Delphi 9 23.12.2010 20:04
Частота слов ЗЛОбнаЯ Помощь студентам 1 21.12.2010 00:28
Конвертация аудиофайлов WAV -> WAV namestnik Помощь студентам 2 27.05.2009 23:05
разъясните терминалогию,референсная частота,частота чипа,памяти,шейдерного блока Jesus2.0 Компьютерное железо 5 04.05.2009 07:54
Частота и количество valko12 Microsoft Office Excel 14 21.05.2008 11:41