Как найти частоту первой гармоники по частотному спектру записи удара этой гармоники по гитаре?

Как следует из названия, я пытался найти основную частоту гитарной струны при различном натяжении в рамках эксперимента по нахождению ее модуля Юнга. В ходе эксперимента я подключил гитару к компьютеру через интерфейс для записи и записал ее при ударе первой гармоники (открытая струна) в Audacity. Затем короткий участок записи с минимальным резонансом был подвергнут частотной диаграмме.

Призрак

Проблема с моим методом заключается в том, что, как видно на изображении, появляется несколько пиков (на самом деле это лучший график, потому что обычно было несколько самых больших пиков). Кроме того, пики очень широкие или, возможно, слились вместе, так что определить реальную частоту ноты очень сложно. Мой вопрос в том, как мне определить частоту по такому графику, или, в более общем плане: есть ли у вас какие-либо предложения относительно того, как я мог бы найти основную частоту струны, каким-то образом записав звук? Это кажется реалистичным ожиданием, поскольку существуют хроматические тюнеры, которые очень точно определяют частоту (высоту) ноты.

Одной из идей, которые у меня были как у гитариста, было использование моего музыкального слуха и сравнение записанной высоты звука с высотой звука генератора чистого звука (такого, как этот http://plasticity.szynalski.com/tone-generator.htm ) до тех пор, пока они звучат похоже. Затем я смог найти на графике пик, ближайший к частоте генератора основного тона. Это действительно надежно, потому что слух музыканта очень точен, но это не совсем «научный» метод. Кто-нибудь знает, как сделать этот метод более научным?

ОБНОВЛЯТЬ:

Огромное спасибо Флорису, который нашел решение этой проблемы.

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

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

Я обнаружил, что 1,5-секундная проба является наиболее оптимальной для точного анализа. Это примерно минимальная длина, которая позволяет использовать самый большой «размер», предлагаемый Audacity, который составляет 65536. Все, что больше 1,5, похоже, не имеет большого значения в разрешении, но создает более высокую вероятность шумовых помех. Ниже приведены три сэмпла разной длины из одной и той же записи удара по струне.

Образец 0,75 с: 0,75Образец 1,5 с: 1,50Первый пик между 168 175 ЧАС г

Образец 2,25 с: 2,25первый пик между 168 175 ЧАС г Пик немного более определен в этом. Впрочем, это тоже довольно "удачный" график, так как обычно при выборе сэмпла длиннее 2-3 секунд можно было увидеть пики от шумовых помех и других нежелательных звуков.

Если кто-то рассматривает возможность проведения подобного эксперимента, один дополнительный совет — исключить первый вариант. 0,5 1 секунд записи вашего семпла, так как удар по струне создает много начального резонанса и негармонических частот (до тех пор, пока струна не стабилизируется), а также потому, что высота тона также имеет тенденцию быть немного выше в начале (вероятно, из-за эти негармонические частоты увеличивают натяжение струны, но это всего лишь предположение).

Судя по вашему графику, он выглядит именно так, как мы и ожидали — не серия бесконечно тонких пиков, а серия «горбов». Все частотные линии реального мира имеют ширину. Судя по вашему графику, пик находится где-то между 300-500 Гц, чего я и ожидал от нижних нот гитары (вы играли в середине A?).
Ваше обновление — ПОТРЯСАЮЩИЙ пример «отдачи» — теперь вопрос и ответ вместе станут полезным ресурсом для будущих посетителей. Спасибо за это!

Ответы (2)

Несколько наблюдений.

Во-первых, если вы записываете звук в течение короткого времени, ширина полосы сэмпла приведет к размытию пиков. Это действительно имеет значение только в том случае, если выборка очень короткая — при 1-секундной выборке у вас будет разрешение 1 Гц, но при выборке в течение 0,01 секунды полоса пропускания составляет 100 Гц.

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

В прошлом я использовал дешевое приложение для iPhone, чтобы записывать звуки (Signal Spy — я не подключен к продукту) и получать представление об их спектральном составе. Я только что сыграл простую гамму на своей гитаре и получил следующее (время по горизонтальной оси, частота по вертикали, интенсивность показывает, какие частоты обнаружены):

введите описание изображения здесь

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

Это означает, что либо ваша частота непостоянна, либо ваши настройки записи очень не оптимальны для задачи. Возможно, вы можете прокомментировать настройки, которые вы использовали, и мы сможем выяснить, как получить аналогичные результаты для вас. Вы использовали слова "использовался короткий участок записи с минимальным резонансом..." - Интересно, у вас окно записи было слишком коротким. Мне также интересно, какую оконную технику вы использовали. Когда вы выполняете частотный анализ, вы не просто выполняете преобразование Фурье фрагмента звука — потому что, если вы это сделаете, вы сгенерируете кучу частотного контента из-за того, как сигнал «обрывается» в начале и в конце. запись. Вместо этого вам нужно применить аподизирующее окно (обычно окно Хэмминга или Ханнинга), чтобы избавиться от посторонних пиков и получить более чистые частотные пики.

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

Вы были абсолютно правы. Я пытался взять как можно более короткий семпл, чтобы минимизировать влияние шума. Я не думал, что более длинный образец означает более высокое разрешение. Увеличив длину семпла примерно до 2-3 секунд, я получил пики шириной 2-3 Гц в тех местах, где они должны были быть. Большое спасибо за вашу помощь!
Рад, что это сработало. Было бы интересно, если бы вы разместили изображение «после» в качестве обновления в своем вопросе.
Хорошая идея, я сделаю это позже сегодня.
С нетерпением ждем ваших результатов. Вы можете обнаружить, что 2-3 секунды — это немного долго, так как звук гитарной струны за это время значительно затухает. Возможно, вы захотите поэкспериментировать с промежуточным временем — я предполагаю, что 0,5–1 секунда дадут самое высокое разрешение (около 1 Гц).
На самом деле это было не так. 1,5 оказался оптимальным, но более крупные выборки на самом деле были менее точными. Я разместил пару сюжетов в обновлении моего вопроса.
Частота дискретизации играет роль. Если вы выполняете выборку с частотой 44 кГц, а алгоритм БПФ использует размер степени двойки, то 1,5 секунды имеют смысл в качестве оптимального интервала. Хорошее обновление - спасибо!

Я не хочу вас разочаровывать, но частота щипковой струны почти не зависит от модуля Юнга, поэтому, если вы пытаетесь измерить E, это плохой способ!

Однако это был не тот вопрос, который вы задали.

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

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

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

Эта общая тема слишком велика, чтобы охватить ее в ответе здесь (по ней написаны целые книги, и она по-прежнему является темой для исследований на уровне доктора философии). Это дает общий (и не слишком технический) обзор: http:// www .modalshop.com/techlibrary/Fundamentals%20of%20Modal%20Testing.pdf

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

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