Как извлечь данные из файла WAV для использования в БПФ - PullRequest
1 голос
/ 29 февраля 2012

Я ищу способ извлечения данных из файла WAV, который будет полезен для алгоритма FFT, который я пытаюсь реализовать.Пока что у меня есть набор шестнадцатеричных значений для левого и правого аудиоканалов, но я немного растерялся из-за того, как перевести это во временную и частотную области для БПФ.

Вот что мне нужно дляпример:

3.6 2.6
2.9 6.3
5.6 4.0
4.8 9.1
3.3 0.4
5.9 4.8
5.0 2.6
4.3 4.1

И это прототип функции, принимающей данные для БПФ:

void fft(int N, double (*x)[2], double (*y)[2])

Где N - количество точек для БПФ, х - этоуказатель на выборки во временной области, y - указатель на выборки в частотной области.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 29 февраля 2012

В целях тестирования вам не нужно извлекать данные формы волны из файлов WAV.Вы можете просто сгенерировать несколько сигналов в памяти (например, 0, ненулевая константа, синусоида, 2 наложенных синусоиды, белый шум), а затем проверить на них свою функцию FFT и посмотреть, получаете ли вы то, что должны (0 для0, пик при нулевой частоте для ненулевого постоянного сигнала, 2 пика для каждой синусоиды, равномерная ненулевая величина по всем частотам для белого шума).

Если вы действительно хотите анализировать файлы WAV, см. Википедия в формате (перейдите по ссылкам).Используйте либо необработанную кодировку PCM, либо кодировку PCM по закону A / µ (AKA G.711).

БПФ обычно реализуется с использованием алгоритма на месте, что означает, что выходные данные заменяют входные.Если вы делаете то же самое, вам не нужен второй указатель.

0 голосов
/ 01 марта 2012

Наиболее часто встречающийся формат файла WAVE / RIFF имеет 44-байтовый заголовок, за которым следуют 16-битные или 2-байтовые целочисленные выборки с прямым порядком байтов со знаком, чередующиеся для стерео. Так что, если вы знаете, как пропускать байты и читать короткие целые числа в двойные числа, вам следует идти вперед.

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

...