Как Вы анализируете основную частоту образца WAV или PCM? [закрытый]

25
задан RJFalconer 18 February 2014 в 17:26
поделиться

7 ответов

Существуют также другие алгоритмы, которые основаны на времени, не базирующаяся частота. Автокорреляция является относительно простым алгоритмом для обнаружения подачи. Ссылка: http://cnx.org/content/m11714/latest/

я записал c# реализации автокорреляции и других алгоритмов, которые читаемы. Выезд http://code.google.com/p/yaalp/ .

http://code.google.com/p/yaalp/source/browse/#svn/trunk/csaudio/WaveAudio/WaveAudio Списки файлы и PitchDetection.cs являются тем, который Вы хотите.

(Проект является GPL; поэтому поймите условия при использовании кода).

17
ответ дан jmnben 28 November 2019 в 20:36
поделиться

Тюнеры гитары не используют FFT's или DFT. Обычно они просто считают нулевые пересечения. Вы не могли бы получить основную частоту, потому что некоторые формы сигнала имеют больше нулевых пересечений, чем другие, но можно обычно получать несколько из основной частоты тот путь. Этого достаточно для получения примечания, хотя Вы могли бы быть одной или несколькими октавами прочь.

Фильтрация низких частот перед считением нулевых пересечений может обычно избавляться от избыточных нулевых пересечений. Настройка фильтра низких частот требует некоторого knowlegde диапазона частоты, которую Вы хотите обнаружить хотя

6
ответ дан Mendelt 28 November 2019 в 20:36
поделиться

БПФ (быстрые преобразования Фурье) действительно будут задействованы. БПФ позволяют аппроксимировать любой аналоговый сигнал суммой простых синусоидальных колебаний фиксированных частот и различных амплитуд. По сути, вы будете делать выборку и разбивать ее на пары амплитуды> частоты, а затем брать частоту, соответствующую наибольшей амплитуде.

Надеюсь, еще один читатель СО сможет заполнить пробелы, которые я оставляю между теорией и кодом!

5
ответ дан Daniel Papasian 28 November 2019 в 20:36
поделиться

Немного более конкретно:

, Если Вы запускаете с необработанного PCM во входном массиве, что Вы в основном имеете, график амплитуды волны по сравнению со временем. Выполнение FFT преобразует это к гистограмме частоты для частот от 0 до 1/2 входная частота дискретизации. Значение каждой записи в массиве результата будет 'силой' соответствующей подчастоты.

Так для нахождения корневой частоты, учитывая входной массив размера N выбранной при образцах/секунда S:

FFT(N, input, output);
max = max_i = 0;
for(i=0;i<N;i++)
  if (output[i]>max) max_i = i;
root = S/2.0 * max_i/N ;
4
ответ дан AShelly 28 November 2019 в 20:36
поделиться

Извлечение основных частот в аудиосигнале ИКМ является сложной задачей, и о ней было бы много говорить ...

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

Более подходящим способом было бы преобразование с постоянным Q, которое DFT применяется после процесса фильтрации нижних частот и прореживания на 2 (т. Е. Вдвое уменьшая частоту дискретизации каждого шага) сигнала, чтобы получить разные поддиапазоны. с разным частотным разрешением. Таким образом, расчет DFT оптимизирован. Проблема в том, что разрешение по времени также является переменным и увеличивается для нижних поддиапазонов ...

Наконец, если мы пытаемся оценить основную частоту одной ноты, методы FFT / DFT в порядке. Ситуация меняется для полифонического контекста, в котором частички различных звуков перекрываются и суммируют / компенсируют свою амплитуду в зависимости от разности фаз, поэтому одиночный спектральный пик может принадлежать разным гармоническим содержимым (принадлежащим разным нотам). Корреляция в этом случае не дает хороших результатов ...

3
ответ дан 28 November 2019 в 20:36
поделиться

Подайте заявку DFT и затем получите основную частоту из результатов. Гугление вокруг для получения информации о DFT даст Вам информацию, в которой Вы нуждаетесь - я связал бы Вас с некоторыми, но они отличаются значительно по ожиданиям математического знания.

Удача.

1
ответ дан Cody Brocious 28 November 2019 в 20:36
поделиться

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

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

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

Ничего из этого не будет работать, если фундаментальный отсутствует . :)

Я описал несколько различных алгоритмов здесь , и интерполированное БПФ обычно является наиболее точным (хотя это работает только , когда основная гармоника является самой сильной гармоникой - в противном случае вам нужно быть умнее, чтобы найти его), с переходом через ноль за секунду (хотя это работает только для сигналов с одним пересечением за цикл ). Ни одно из этих условий не является типичным.

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

Чтобы получить действительно точное значение частоты. , Я бы сказал, чтобы использовать автокорреляцию, чтобы угадать фундаментальное значение, а затем найти истинный пик, используя квадратичную интерполяцию. (Вы можете выполнить автокорреляцию в частотной области, чтобы сэкономить циклы процессора.) Есть много ошибок, и правильный метод использования действительно зависит от вашего приложения.

20
ответ дан 28 November 2019 в 20:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: