Объясните мне FFT

Я хочу взять аудио данные PCM и найти в нем пики. В частности, я хочу вернуть частоту и время, в которые происходит пик.

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

Наконец, если бы я хотел найти пики в одной песне, я просто устанавливаю небольшое окно в FFT и перескакиваю его по всему аудио? Любые предложения о том, насколько велико это окно?

Ответы

Ответ 1

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

Ответ 2

Если выборкой ваших данных PCM является F, то самым высоким частотным компонентом в FFT является F/2. Предположим, что ваши данные PCM были отобраны на частоте 44100 Гц, тогда ваши значения FFT будут работать от 0 Гц (DC) до 22050 Гц. Если вы начинаете с N выборок, (N - мощность 2), тогда БПФ может возвращать N/2 значения, представляющие все положительные частоты от 0 до F/2, или он может возвращать значения N, которые также включают отрицательные частоты от - F/2 до 0. Вы должны проверить спецификацию своего алгоритма FFT, чтобы узнать, на какую частоту отображается каждый элемент массива.

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

Предположим, что ваш FFT из N образцов PCM возвращает N/2 комплексные значения, представляющие положительные частоты. Тогда расстояние между двумя сложными образцами составляет F/2N Гц. С образцами F = 44100 Гц и N = 1024 это будет 21,5 Гц. Это ваше частотное разрешение. Если вам нужно найти более низкие частоты, вам нужно расширить окно FFT.

Ответ 3

хорошо, Необработанный массив размером 512 комплексных чисел, выражающий входную волну, при обработке с помощью FFT мы заменим мнимые части нулем (в соответствии с предполагаемым использованием), оставив реальные части, затем передадим массив в БПФ с частотой выборки: 8192 Гц.

Теперь у нас есть 512 массивов реальных значений FFTed, каждое значение - иррациональное число, каждое иррациональное число выражает несколько полезных значений.

Чтобы получить основную частоту, мы должны разделить частоту дискретизации на размер буфера:

8192/512 = 32;

32 - разрешение значений FFT означает, что мы знакомы с частотами высоких амплитуд вблизи чисел, кратных 32.

Как будто у нас есть волна

частота: 3 48 23 128 Амплитуда: 10 5 12 8 дБ (ref = 1)

после FFT получаем:

частота: 0 32 64 128 Амплитуда: 9 8 2 8

БПФ - это частотная область, которая соответствует его частоте Временная область с другой стороны означает упорядочение по времени, когда мы слушаем музыку со второго нуля на второй.

БПФ может прослушивать только при его частоте от частоты 0 до частоты N.

Таким образом, он упорядочивает частоты в порядке возрастания, поскольку он не принимает все фактические отсчеты из звука (которые приближаются к бесконечности), например, каждый наносекунду и меньше для БПФ, к счастью, этого не происходит. БПФ принимает образцы из аудио, берет образец каждый (1/частота выборки) второй. эти образцы получают буферизацию (в нашем случае: 512), каждый 512 выборок буферизуется в БПФ, выход - 512 значений FFT.

Поскольку FFT устраивает частоты, он беспорядок с образцами времени, выборки теперь расположены в соответствии с их частотами.

Частоты, показанные на регулярной основе, которая является основной частотой, которая представляет собой частоту дискретизации, деленную на размер буфера, которая в нашем случае равна 8192/512 = 32.

Таким образом, мощность мощности, отображаемая каждые 32 частоты, показана мощность ближайшей частоты в зависимости от того, насколько силовая частота близка к индексу.

Высокое разрешение может быть достигнуто за счет использования более высокой частоты дискретизации.

Чтобы показать частоты, мы печатаем индекс в восходящем, соответствующем амплитуде.

Amplitude = 20log10 (output/ref)

Амплитуды, напечатанные рядом с каждым индексом, показывают мощность частоты и становятся точнее в соответствии с точностью разрешения.

Заключение, FFT вырабатывает индекс амплитуд, каждая амплитуда выражает мощность его соответствующего индекса (частоты).