Как я могу сделать обнаружение поля в реальном времени в .NET?
-
26-09-2019 - |
Вопрос
Я хочу сделать программу, которая обнаруживает примечание, которая воспроизводится перед микрофоном. Я проверяю функцию FFT Naudio, но с тестами, которые я сделал в Audacity, кажется, что FFT не обнаруживает поле правильно. Я сыграл C5, но самый высокий выбор был на E7.
Я изменил первый выпадающий коробку в окне анализа частоты, чтобы «запустить автокорреляцию» и после этого максимальный выбор был на C5.
Я гурил "энтученную автокорреляцию" и не повезло.
Решение
Самый высокий пик в звуковом спектре не обязательно является музыкальным шагом, как человеком воспринимает его, особенно в звуке с сильными переплетениями. Это потому, что поле - это человеческое психоплосценные явления, мозг часто выводят частоты, которые даже не присутствуют в форме волны.
Методы автоматической корреляции частоты или оценки тона (примерно находятся на том, насколько далеко не повторяется даже смешные и / или несусусиоидальные формы волны), как правило, является лучшим совпадением для того, что человек позвонит поле. Причиной различных улучшений алгоритма автокорреляции заключается в том, что простое автокорреляция найдет ближние бесконечное число повторяющихся длин волн (например, если он повторяется каждые 1 секунду, он также повторяется два раза каждые 2 секунды и т. Д.) Так что хитрость весит корреляцию Каким-то образом статистически лучше соответствовать тому, что у человека догадается о том же формы волны.
Другие советы
Вы, скорее всего, выброшенные гармониками. Вы пытались тестировать с синусоидной волной, чтобы увидеть, если ваша Naudio FFF в балкомпарке?
Смотрите эти ссылки:http://cnx.org/content/m11714/latest/
http://www.gamedev.net/community/forums/topic.asp?topic_id=506592&whichpage=1�.
Линия 48 в Spectrum.cpp
В исходный код Audacity, кажется, близок к тому, что вы хотите. Они также ссылаются IEEE Paper от Tolonen и Karjalainen.
Ну, если вы можете жить с GPLV2, почему бы не взять заглянуть на исходный код Audacity?