Сравнение "тона" музыкальных инструментов в MATLAB

Я пытаюсь найти способ сравнить сходство коротких 500 миллисекундных записей с использованием MATLAB одной и той же ноты, воспроизводимой на разных инструментах.

вдаваясь в детали по этой конкретной теме: я студент музыки, которому была дана задача объективно определить тон различных современных низких духовых инструментов, чтобы определить, какой инструмент должен заменить устаревший "ophicleide"или басовый горн. Сначала я использовал визуальное сравнение спектрографа it и 6 другие инструменты, но этот подход слишком субъективен.

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

Я считаю, что сравнения fft это будет самый точный расчет. Сначала я попробовал корреляцию freq-домена и протестировал разные сегменты одного и того же тона (eu и eu2 будучи переменные)

>> corr(abs(fft(eu)),abs(fft(eu2)))
ans = 0.9963

что является шагом в правильном направлении, но я, кажется, получаю противоположный результат, когда сравниваю разные сигналы: (euphonium и ophicleide звучат почти одинаково)

>> corr(abs(fft(eu)),abs(fft(ophi)))  
ans =   0.5242

euphonium и бас-кларнет звучат совершенно по-разному, но это показывает более высокую корреляцию

>> corr(abs(fft(eu)),abs(fft(basscl)))   
ans = 0.8506

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

>> norm_max_xcorr_mag = @(x,y)(max(abs(xcorr(x,y)))/(norm(x,2)*norm(y,2))); x =eu2; y = eu; norm_max_xcorr_mag(x,y)
ans =   0.9638

I получите аналогичный результат при сравнении других образцов

 >> norm_max_xcorr_mag = @(x,y)(max(abs(xcorr(x,y)))/(norm(x,2)*norm(y,2))); x = eu; y = basscl; 
ans = 0.6825

по сравнению с

>> norm_max_xcorr_mag = @(x,y)(max(abs(xcorr(x,y)))/(norm(x,2)*norm(y,2))); x = eu; y = ophi; norm_max_xcorr_mag(x,y)
ans = 0.3519

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

Я обеспокоен тем, что эти корреляции показывают корреляцию истинного тона (я играю в то же самое Примечание На всех этих инструментах, но офиклеид может быть не настроен до 1 Гц), он также может учитывать фазу или даже общую амплитуду.

кто-нибудь знает лучший четкий метод сравнения пропорций гармонических обертонов этих сложных сигналов?

или я лаю не на то дерево?

2 ответов


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

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

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

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

удачи с тем, что звучит как интересная проблема !


Я не эксперт в этом вопросе, но я знаю о нескольких звуковых функциях, которые могут помочь в таких проблемах: линейное предсказательное кодирование (LPC) и Mel-частотные Цепстральные коэффициенты (MFCC).

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

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

удачи!