2012-03-08 6 views
1

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

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

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

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

+2

Сколько тонов или синусоиды мы говорим в исходном сигнале? Если это всего лишь несколько (например, 2 основных тона в сигнале DTMF), FFT, вероятно, сработает. Просто найдите пики. В противном случае, для музыки это, как известно, является сложной проблемой в информатике и обработке сигналов. Вы можете выполнить поиск в Интернете по «автоматической транскрипции музыки», и вы можете найти некоторые программы или код, которые пытаются это сделать. – selbie

+0

Существует известная часть программного обеспечения под названием Melodyne, которая может делать это для сложных звуков. – cmannett85

+0

Возможный дубликат этого вопроса: http://stackoverflow.com/questions/4337487/chord-detection-algorithms/4339225#4339225 – hotpaw2

ответ

2

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

+0

Это в значительной степени то, что я ищу; достаточно ли он достаточно для получения живых результатов (т. е. давать живую обратную связь гитаристу)? – Adam

+0

В зависимости от вашего размера данных. Мне больше нравится ESPRIT, и в этом случае вы должны сделать два eigendecompositions. Для матрицы автокорреляции M на M это соответствует операциям M^3. Дело в том, что ваш M должен быть больше K (K - количество частот в вашем сигнале). Поэтому я не думаю, что это будет огромная проблема в вашем случае, так как у вас слишком много частот. – YBE

+1

@YBE: Сообщается, что MUSIC и ESPRIT работают плохо, когда не известно точное количество экспонентов, и гитары могут производить некоторое большое и различное количество обертонов для каждой строки (могут быть десятки), некоторые из них потенциально незначительны нарушающая гармония. – hotpaw2

1

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

1

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

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

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

My Pitch Detection Algorithm - фактически двухэтапный процесс: a) сначала обнаружен ScalePitch («ScalePitch» имеет 12 возможных значений высоты тона: {E, F, F #, G, G #, A, A #, B, C , C#, D, D #}) b) и после определения ScalePitch, то Octave вычисляется путем изучения всех гармоник для 4 возможных заметок Octave-Candidate. Алгоритм предназначен для обнаружения наиболее доминирующего тона (музыкальной ноты) в любой момент времени в полифоническом файле 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

Смежные вопросы