Обнаружение множественного шага: БПФ или другое? - PullRequest
1 голос
/ 08 марта 2012

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

Если нет, есть ли другой метод обнаружения высоты тона, который может обнаружить несколько тонов в режиме реального времени?

РЕДАКТИРОВАТЬ: я пытаюсь сделать не более шести шагов за раз, так как программное обеспечение, которое я пишу, имеет дело с гитарами; в случайном случае, если у пользователя программы есть семиструнная гитара, он должен был бы иметь возможность взять максимум семь шагов.

В таком случае, способен ли БПФ (или какой-либо другой метод) справиться с этим по сигналу с одного микрофона, или мне нужно сделать звукосниматель на гитаре, который читает каждую строку по отдельности?

Ответы [ 3 ]

3 голосов
/ 09 марта 2012

Существует два хорошо известных статистических метода параметрической оценки спектра.Один - МУЗЫКА , а другой - ESPRIT .Если вы можете выразить свой сигнал в виде суммы взвешенных комплексных экспонент (т.е. синусоидальных), вы можете применить любой из них.Более того, собственное разложение корреляционной матрицы также скажет вам количество частот в сигнале, так что вы даже не должны это знать.ESPRIT лучше, чем MUSIC, поскольку вы не должны выполнять поиск пиков в частотной области.Частоты даны вам непосредственно в результате.Тем не менее, МУЗЫКА, как известно, более устойчива.

1 голос
/ 16 января 2017

Вы должны сначала понять, что на самом деле означает « pitch » (см. Ссылку на Википедию ниже). Когда на гитаре или пианино делается одна нота, мы слышим не одну частоту звуковых колебаний, а совокупность множества звуковых колебаний, возникающих на разных математически связанных частотах. Элементы этой совокупности колебаний на разных частотах называются гармониками или частями. Например, если мы нажмем среднюю клавишу C на фортепиано, отдельные частоты гармоник композита начнутся с 261,6 Гц в качестве основной частоты, 523 Гц будет 2-й гармоникой, 785 Гц будет 3-й гармоникой, 1046 Гц будет 4-ая гармоника и т. д. Более поздние гармоники представляют собой целые кратные основной частоты, 261,6 Гц (например: 2 x 261,6 = 523, 3 x 261,6 = 785, 4 x 261,6 = 1046).

Ниже, на GitHub.com, приведен исходный код C ++ для необычного двухэтапного алгоритма, который я разработал, который может выполнять обнаружение высоты тона в реальном времени для полифонических файлов MP3 во время воспроизведения в Windows. Это бесплатное приложение (PitchScope Player, доступное в Интернете) часто используется для обнаружения нот гитары или саксофона в записи MP3. Вы можете скачать исполняемый файл для Windows, чтобы увидеть мой алгоритм при работе с выбранным вами mp3-файлом. Алгоритм предназначен для обнаружения наиболее доминирующего тона (музыкальной ноты) в любой момент времени в музыкальном файле MP3 или WAV. Начальные ноты точно определяются изменением самой доминирующей высоты (музыкальной ноты) в любой момент во время записи MP3.

Я использую модифицированное логарифмическое преобразование DFT (аналогично FFT), чтобы сначала обнаружить эти возможные гармоники путем поиска частот с пиковыми уровнями (см. Диаграмму ниже). Из-за способа, которым я собираю данные для моего модифицированного Log DFT, мне не нужно применять функцию Windowing к сигналу, а также добавлять и перекрывать друг друга. И я создал DFT так, чтобы его частотные каналы были логарифмически расположены, чтобы напрямую выравниваться с частотами, на которых гармоники создаются нотами на гитаре, саксофоне и т. Д.

Мой алгоритм определения высоты тона на самом деле представляет собой двухэтапный процесс: a) Сначала определяется ScalePitch (ScalePitch имеет 12 возможных значений высоты тона: {E, F, F #, G, G #, A, A #, B, C, C #, D, D #}) b) и после определения ScalePitch вычисляется октава путем изучения всех гармоник для 4 возможных нот октавы-кандидата. Алгоритм предназначен для обнаружения наиболее доминирующего тона (музыкальной ноты) в любой данный момент времени в полифоническом файле MP3. Это обычно соответствует нотам инструментального соло. Те, кто интересуется исходным кодом C ++ для моего алгоритма обнаружения двухэтапной подачи, могут захотеть начать с функции Estimate_ScalePitch () в файле SPitchCalc.cpp на GitHub.com.

https://github.com/CreativeDetectors/PitchScope_Player

https://en.wikipedia.org/wiki/Transcription_(music)#Pitch_detection

enter image description here

1 голос
/ 04 апреля 2012

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

...