Audio Toolbox™ обеспечивает набор функций, которые описывают форму, иногда называемую тембром, аудио. Этот пример определяет уравнения, используемые, чтобы определить спектральные функции, цитирует общее использование каждой функции и обеспечивает примеры так, чтобы можно было получить интуицию о том, что описывают спектральные дескрипторы.
Спектральные дескрипторы широко используются в приложениях машинного и глубокого обучения и перцепционном анализе. Спектральные дескрипторы были применены к области значений приложений, включая:
Spectral Centroid
Спектральный центроид (spectralCentroid
) взвешенная сумма частоты, нормированная на невзвешенную сумму [1]:
где
частота в Гц, соответствующем интервалу .
спектральное значение в интервале . Спектр величины и спектр мощности оба обычно используются.
и ребра полосы, в интервалах, по которым можно вычислить спектральный центроид.
Спектральный центроид представляет "центр тяжести" спектра. Это используется в качестве индикации относительно яркости [2] и обычно используется в музыкальном анализе и классификации жанров. Например, наблюдайте скачки в центроиде, соответствующем высоким хитам шляпы в звуковом файле.
[audio,fs] = audioread('FunkyDrums-44p1-stereo-25secs.mp3'); audio = sum(audio,2)/2; centroid = spectralCentroid(audio,fs); subplot(2,1,1) t = linspace(0,size(audio,1)/fs,size(audio,1)); plot(t,audio) ylabel('Amplitude') subplot(2,1,2) t = linspace(0,size(audio,1)/fs,size(centroid,1)); plot(t,centroid) xlabel('Time (s)') ylabel('Centroid (Hz)')
Спектральный центроид также обычно используется, чтобы классифицировать речь, как озвучено или неречевой [3]. Например, центроид переходит в областях неречевой речи.
[audio,fs] = audioread('Counting-16-44p1-mono-15secs.wav'); centroid = spectralCentroid(audio,fs); subplot(2,1,1) t = linspace(0,size(audio,1)/fs,size(audio,1)); plot(t,audio) ylabel('Amplitude') subplot(2,1,2) t = linspace(0,size(audio,1)/fs,size(centroid,1)); plot(t,centroid) xlabel('Time (s)') ylabel('Centroid (Hz)')
Spectral Spread
Спектральное распространение (spectralSpread
) стандартное отклонение вокруг спектрального центроида [1]:
где
частота в Гц, соответствующем интервалу .
спектральное значение в интервале . Спектр величины и спектр мощности оба обычно используются.
и ребра полосы, в интервалах, по которым можно вычислить спектральное распространение.
спектральный центроид.
Спектральное распространение представляет "мгновенную полосу пропускания" спектра. Это используется в качестве индикации относительно преобладания тона. Например, увеличения распространения как тоны отличаются и уменьшения, когда тоны сходятся.
fs = 16e3; tone = audioOscillator('SampleRate',fs,'NumTones',2,'SamplesPerFrame',512,'Frequency',[2000,100]); duration = 5; numLoops = floor(duration*fs/tone.SamplesPerFrame); signal = []; for i = 1:numLoops signal = [signal;tone()]; if i<numLoops/2 tone.Frequency = tone.Frequency + [0,50]; else tone.Frequency = tone.Frequency - [0,50]; end end spread = spectralSpread(signal,fs); subplot(2,1,1) spectrogram(signal,round(fs*0.05),round(fs*0.04),2048,fs,'yaxis') subplot(2,1,2) t = linspace(0,size(signal,1)/fs,size(spread,1)); plot(t,spread) xlabel('Time (s)') ylabel('Spread')
Spectral Skewness
Спектральная скошенность (spectralSkewness
) вычисляется с третьего момента порядка [1]:
где
частота в Гц, соответствующем интервалу .
спектральное значение в интервале . Спектр величины и спектр мощности оба обычно используются.
и ребра полосы, в интервалах, по которым можно вычислить спектральную скошенность.
спектральный центроид.
спектральное распространение.
Спектральная скошенность измеряет симметрию вокруг центроида. В фонетике спектральная скошенность часто упоминается как спектральный наклон и используется с другими спектральными моментами, чтобы отличить место разборчивости [4]. Для гармонических сигналов это указывает на относительную силу выше и более низкие гармоники. Например, в сигнале с четырьмя тонами, существует положительный скос, когда более низкий тон является доминирующим и отрицательный скос, когда верхний тон является доминирующим.
fs = 16e3; duration = 99; tone = audioOscillator('SampleRate',fs,'NumTones',4,'SamplesPerFrame',fs,'Frequency',[500,2000,2500,4000],'Amplitude',[0,0.4,0.6,1]); signal = []; for i = 1:duration signal = [signal;tone()]; tone.Amplitude = tone.Amplitude + [0.01,0,0,-0.01]; end skewness = spectralSkewness(signal,fs); t = linspace(0,size(signal,1)/fs,size(skewness,1))/60; subplot(2,1,1) spectrogram(signal,round(fs*0.05),round(fs*0.04),round(fs*0.05),fs,'yaxis','power') view([-58 33]) subplot(2,1,2) plot(t,skewness) xlabel('Time (minutes)') ylabel('Skewness')
Spectral Kurtosis
Спектральный эксцесс (spectralKurtosis
) вычисляется с четвертого момента порядка [1]:
где
частота в Гц, соответствующем интервалу .
спектральное значение в интервале . Спектр величины и спектр мощности оба обычно используются.
и ребра полосы, в интервалах, по которым можно вычислить спектральный эксцесс.
спектральный центроид.
спектральное распространение.
Спектральный эксцесс измеряет плоскость или non-Gaussianity, спектра вокруг его центроида. С другой стороны это используется, чтобы указать на остроконечность спектра. Например, когда белый шум увеличен на речевом сигнале, уменьшениях эксцесса, указав на менее остроконечный спектр.
[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav'); noiseGenerator = dsp.ColoredNoise('Color','white','SamplesPerFrame',size(audioIn,1)); noise = noiseGenerator(); noise = noise/max(abs(noise)); ramp = linspace(0,.25,numel(noise))'; noise = noise.*ramp; audioIn = audioIn + noise; kurtosis = spectralKurtosis(audioIn,fs); t = linspace(0,size(audioIn,1)/fs,size(audioIn,1)); subplot(2,1,1) plot(t,audioIn) ylabel('Amplitude') t = linspace(0,size(audioIn,1)/fs,size(kurtosis,1)); subplot(2,1,2) plot(t,kurtosis) xlabel('Time (s)') ylabel('Kurtosis')
Spectral Entropy
Спектральная энтропия (spectralEntropy
) измеряет остроконечность спектра [6]:
где
частота в Гц, соответствующем интервалу .
спектральное значение в интервале . Спектр величины и спектр мощности оба обычно используются.
и ребра полосы, в интервалах, по которым можно вычислить спектральную энтропию.
Спектральная энтропия использовалась успешно в речевых/неречевых решениях для автоматического распознавания речи [6]. Поскольку энтропия является мерой разупорядочения, области речевой речи имеют более низкую энтропию по сравнению с областями неречевой речи.
[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav'); entropy = spectralEntropy(audioIn,fs); t = linspace(0,size(audioIn,1)/fs,size(audioIn,1)); subplot(2,1,1) plot(t,audioIn) ylabel('Amplitude') t = linspace(0,size(audioIn,1)/fs,size(entropy,1)); subplot(2,1,2) plot(t,entropy) xlabel('Time (s)') ylabel('Entropy')
Спектральная энтропия также использовалась, чтобы различить между речью и музыкой 7[] 8[]. Например, сравните гистограммы энтропии для речи, музыки и фоновых звуковых файлов.
fs = 8000; [speech,speechFs] = audioread('Rainbow-16-8-mono-114secs.wav'); speech = resample(speech,fs,speechFs); speech = speech./max(speech); [music,musicFs] = audioread('RockGuitar-16-96-stereo-72secs.flac'); music = sum(music,2)/2; music = resample(music,fs,musicFs); music = music./max(music); [background,backgroundFs] = audioread('Ambiance-16-44p1-mono-12secs.wav'); background = resample(background,fs,backgroundFs); background = background./max(background); speechEntropy = spectralEntropy(speech,fs); musicEntropy = spectralEntropy(music,fs); backgroundEntropy = spectralEntropy(background,fs); figure h1 = histogram(speechEntropy); hold on h2 = histogram(musicEntropy); h3 = histogram(backgroundEntropy); h1.Normalization = 'probability'; h2.Normalization = 'probability'; h3.Normalization = 'probability'; h1.BinWidth = 0.01; h2.BinWidth = 0.01; h3.BinWidth = 0.01; title('Spectral Entropy') legend('Speech','Music','Background','Location',"northwest") xlabel('Entropy') ylabel('Probability') hold off
Spectral Flatness
Спектральная плоскость (spectralFlatness
) измеряет отношение геометрического среднего значения спектра к среднему арифметическому спектра [9]:
где
спектральное значение в интервале . Спектр величины и спектр мощности оба обычно используются.
и ребра полосы, в интервалах, по которым можно вычислить спектральную плоскость.
Спектральная плоскость является индикацией относительно остроконечности спектра. Более высокая спектральная плоскость указывает на шум, в то время как более низкая спектральная плоскость указывает на тональность.
[audio,fs] = audioread('WaveGuideLoopOne-24-96-stereo-10secs.aif'); audio = sum(audio,2)/2; noise = (2*rand(numel(audio),1)-1).*linspace(0,0.05,numel(audio))'; audio = audio + noise; flatness = spectralFlatness(audio,fs); subplot(2,1,1) t = linspace(0,size(audio,1)/fs,size(audio,1)); plot(t,audio) ylabel('Amplitude') subplot(2,1,2) t = linspace(0,size(audio,1)/fs,size(flatness,1)); plot(t,flatness) ylabel('Flatness') xlabel('Time (s)')
Спектральная плоскость была также применена успешно к обнаружению певческого голоса [10] и к аудио распознаванию сцены [11].
Spectral Crest
Спектральный гребень (spectralCrest
) измеряет отношение максимума спектра к среднему арифметическому спектра [1]:
где
спектральное значение в интервале . Спектр величины и спектр мощности оба обычно используются.
и ребра полосы, в интервалах, по которым можно вычислить спектральный гребень.
Спектральный гребень является индикацией относительно остроконечности спектра. Более высокий спектральный гребень указывает на большее количество тональности, в то время как более низкий спектральный гребень указывает на большее количество шума.
[audio,fs] = audioread('WaveGuideLoopOne-24-96-stereo-10secs.aif'); audio = sum(audio,2)/2; noise = (2*rand(numel(audio),1)-1).*linspace(0,0.2,numel(audio))'; audio = audio + noise; crest = spectralCrest(audio,fs); subplot(2,1,1) t = linspace(0,size(audio,1)/fs,size(audio,1)); plot(t,audio) ylabel('Amplitude') subplot(2,1,2) t = linspace(0,size(audio,1)/fs,size(crest,1)); plot(t,crest) ylabel('Crest') xlabel('Time (s)')
Spectral Flux
Спектральный поток (spectralFlux
) мера изменчивости спектра в зависимости от времени [12]:
где
спектральное значение в интервале . Спектр величины и спектр мощности оба обычно используются.
и ребра полосы, в интервалах, по которым можно вычислить спектральный поток.
тип нормы.
Спектральный поток обычно используется в обнаружении начала [13] и аудио сегментация [14]. Например, удары в дорожке ударных соответствуют высокому спектральному потоку.
[audio,fs] = audioread('FunkyDrums-48-stereo-25secs.mp3'); audio = sum(audio,2)/2; flux = spectralFlux(audio,fs); subplot(2,1,1) t = linspace(0,size(audio,1)/fs,size(audio,1)); plot(t,audio) ylabel('Amplitude') subplot(2,1,2) t = linspace(0,size(audio,1)/fs,size(flux,1)); plot(t,flux) ylabel('Flux') xlabel('Time (s)')
Spectral Slope
Спектральный наклон (spectralSlope
) измеряет объем уменьшения спектра [15]:
где
частота в Гц, соответствующем интервалу .
средняя частота.
спектральное значение в интервале . Спектр величины обычно используется.
среднее спектральное значение.
и ребра полосы, в интервалах, по которым можно вычислить спектральный наклон.
Спектральный наклон использовался экстенсивно в речевом анализе, особенно в моделировании напряжения динамика [19]. Наклон непосредственно связан с резонирующими характеристиками вокальных сгибов и был также применен к идентификации динамика [21]. Спектральный наклон является социально важным аспектом тембра. Спектральная наклонная дискриминация, как показывали, произошла в ранней разработке детства [20]. Спектральный наклон является самым явным, когда энергия в более низких формантах очень больше энергии в более высоких формантах.
[female,femaleFs] = audioread('FemaleSpeech-16-8-mono-3secs.wav'); female = female./max(female); femaleSlope = spectralSlope(female,femaleFs); t = linspace(0,size(female,1)/femaleFs,size(femaleSlope,1)); subplot(2,1,1) spectrogram(female,round(femaleFs*0.05),round(femaleFs*0.04),round(femaleFs*0.05),femaleFs,'yaxis','power') subplot(2,1,2) plot(t,femaleSlope) title('Female Speaker') ylabel('Slope') xlabel('Time (s)')
Spectral Decrease
Спектральное уменьшение (spectralDecrease
) представляет объем уменьшения спектра, при подчеркивании наклонов более низких частот [1]:
где
спектральное значение в интервале . Спектр величины обычно используется.
и ребра полосы, в интервалах, по которым можно вычислить спектральное уменьшение.
Спектральное уменьшение используется менее часто, чем спектральный наклон в речевой литературе, но это обычно используется, наряду с наклоном, в анализе музыки. В частности, спектральное уменьшение, как показывали, выполняло хорошо как функция в инструментальном распознавании [22].
[guitar,guitarFs] = audioread('RockGuitar-16-44p1-stereo-72secs.wav'); guitar = mean(guitar,2); [drums,drumsFs] = audioread('RockDrums-44p1-stereo-11secs.mp3'); drums = mean(drums,2); guitarDecrease = spectralDecrease(guitar,guitarFs); drumsDecrease = spectralDecrease(drums,drumsFs); t1 = linspace(0,size(guitar,1)/guitarFs,size(guitarDecrease,1)); t2 = linspace(0,size(drums,1)/drumsFs,size(drumsDecrease,1)); subplot(2,1,1) plot(t1,guitarDecrease) title('Guitar') ylabel('Decrease') axis([0 10 -0.3 0.3]) subplot(2,1,2) plot(t2,drumsDecrease) title('Drums') ylabel('Decrease') xlabel('Time (s)') axis([0 10 -0.3 0.3])
Spectral Rolloff Point
Спектральная точка спада (spectralRolloffPoint
) измеряет полосу пропускания звукового сигнала путем определения интервала частоты, под которым данный процент полной энергии существует [12]:
где
спектральное значение в интервале . Спектр величины и спектр мощности оба обычно используются.
и ребра полосы, в интервалах, по которым можно вычислить спектральную точку спада.
заданный энергетический порог, обычно 95% или 85%.
преобразован в Гц, прежде чем он будет возвращен spectralRolloffPoint
.
Спектральная точка спада использовалась, чтобы различать речевую и неречевую речь, дискриминация речи/музыки [12], музыкальная классификация [16] жанров, акустическое распознавание сцены [17], и музыкальную классификацию [18] настроения. Например, наблюдайте различное среднее значение и отклонение точки спада для речи, рок-гитары, акустической гитары и акустической сцены.
dur = 5; % Clip out 5 seconds from each file. [speech,fs1] = audioread('SpeechDFT-16-8-mono-5secs.wav'); speech = speech(1:min(end,fs1*dur)); [electricGuitar,fs2] = audioread('RockGuitar-16-44p1-stereo-72secs.wav'); electricGuitar = mean(electricGuitar,2); % Convert to mono for comparison. electricGuitar = electricGuitar(1:fs2*dur); [acousticGuitar,fs3] = audioread('SoftGuitar-44p1_mono-10mins.ogg'); acousticGuitar = acousticGuitar(1:fs3*dur); [acousticScene,fs4] = audioread('MainStreetOne-16-16-mono-12secs.wav'); acousticScene = acousticScene(1:fs4*dur); r1 = spectralRolloffPoint(speech,fs1); r2 = spectralRolloffPoint(electricGuitar,fs2); r3 = spectralRolloffPoint(acousticGuitar,fs3); r4 = spectralRolloffPoint(acousticScene,fs4); t1 = linspace(0,size(speech,1)/fs1,size(r1,1)); t2 = linspace(0,size(electricGuitar,1)/fs2,size(r2,1)); t3 = linspace(0,size(acousticGuitar,1)/fs3,size(r3,1)); t4 = linspace(0,size(acousticScene,1)/fs4,size(r4,1)); figure plot(t1,r1) title('Speech') ylabel('Rolloff Point (Hz)') xlabel('Time (s)') axis([0 5 0 4000])
figure plot(t2,r2) title('Rock Guitar') ylabel('Rolloff Point (Hz)') xlabel('Time (s)') axis([0 5 0 4000])
figure plot(t3,r3) title('Acoustic Guitar') ylabel('Rolloff Point (Hz)') xlabel('Time (s)') axis([0 5 0 4000])
figure plot(t4,r4) title('Acoustic Scene') ylabel('Rolloff Point (Hz)') xlabel('Time (s)') axis([0 5 0 4000])
[1] Петерс, G. "Большой набор функций аудио для звукового описания (Подобие и классификация) в проекте CUIDADO". Технический отчет; IRCAM: Париж, Франция, 2004.
[2] Серый, Джон М. и Джон В. Гордон. “Перцепционные Эффекты Спектральных Модификаций на Музыкальных Тембрах”. Журнал Акустического Общества Америки. Издание 63, Выпуск 5, 1978, стр 1493–1500.
[3] Raimy, Эрик и Чарльз Э. Кэрнс. Сегмент в фонетике и фонологии. Хобокен, NJ: John Wiley & Sons Inc., 2015.
[4] Джонгмен, Allard, и др. “Акустические Характеристики английских Фрикативных звуков”. Журнал Акустического Общества Америки. Издание 108, Выпуск 3, 2000, стр 1252–1263.
[5] С. Чжан, И. Го и Ц. Чжан, "Устойчивый Речевой Проект Функции Обнаружения Действия На основе Спектрального Эксцесса". Первый Международный семинар на Образовательной Технологии и Информатике, 2009, стр 269–272.
[6] Misra, H., С. Икбэл, Х. Боерлард и Х. Херманский. "Спектральная основанная на энтропии функция устойчивого ASR". 2 004 международных конференции IEEE по вопросам акустики, речи и обработки сигналов.
[7] А. Пикракис, Т. Джиэннэкопулос и С. Зэодоридис. "В вычислительном отношении Эффективный Различитель Речи/Музыки для Радио-Записей". Международная конференция по вопросам Музыкального Информационного поиска и Связанных Действий, 2006.
[8] Pikrakis, A., и др. “Различитель Речи/Музыки Радио-Записей На основе Динамического Программирования и Байесовых Сетей”. Транзакции IEEE на Мультимедиа. Издание 10, Выпуск 5, 2008, стр 846–857.
[9] Джонстон, J.d. “Преобразуйте Кодирование Звуковых сигналов Используя Перцепционные Шумовые Критерии”. Журнал IEEE на Выбранных областях в Коммуникациях. Издание 6, Выпуск 2, 1988, стр 314–323.
[10] Lehner, Бернхард, и др. “На Сокращении Ложных Положительных сторон в Обнаружении Певческого голоса”. 2 014 Международных конференций IEEE по вопросам Акустики, Речи и Обработки сигналов (ICASSP), 2014.
[11] И. Пететин, К. Ларош и А. Майоу, "Глубокие нейронные сети для аудио распознавания сцены", 2 015 23-х европейских конференций по обработке сигналов (EUSIPCO), 2015.
[12] Scheirer, E. и М. Слэни. “Конструкция и Оценка Устойчивого Различителя Речи/Музыки Мультифункции”. 1 997 Международных конференций IEEE по вопросам Акустики, Речи и Обработки сигналов, 1997.
[13] С. Диксон, "Пересмотренное Обнаружение Начала". Международная конференция по вопросам Эффектов Цифрового аудио. Издание 120, 2006, стр 133–137.
[14] Tzanetakis, G. и П. Кук. “Мультипокажите аудио сегментацию для просмотра и аннотации”. Продолжения 1 999 семинаров IEEE по приложениям обработки сигналов к аудио и акустике, 1999.
[15] Lerch, Александр. Введение в аналитические приложения звукового содержимого в информатике обработки сигналов и музыки. Пискатауэй, NJ: нажатие IEEE, 2012.
[16] Литий, дао и М. Оджихара. "Музыкальная классификация жанров с таксономией". Международная конференция IEEE по вопросам акустики, речи и обработки сигналов, 2005.
[17] Eronen, A.j., V.t. Peltonen, J.t. Туоми, A.p. Klapuri, С. Фэджерланд, Т. Сорса, Г. Лорхо и Дж. Хуопэними. "Основанное на аудио Распознавание Контекста". Транзакции IEEE на Аудио, Речи и Обработке Языка. Издание 14, Выпуск 1, 2006, стр 321–329.
[18] Жэнь, Jia-Min, Мин-Цзюй Ву и Джих-Шинг Роджер Дженг. "Автоматическая Музыкальная Классификация Настроения На основе Функций Тембра и Модуляции". Транзакции IEEE на Эмоциональных вычислениях. Издание 6, Выпуск 3, 2015, стр 236–246.
[19] Хансен, Джон Х. Л. и Санджай Патил. "Речь Под Напряжением: Анализ, Моделирование и Распознавание". Читайте лекции Примечаниям в Информатике. Издание 4343, 2007, стр 108–137.
[20] Цанг, Кристин Д. и Лорель Дж. Трейнор. "Спектральная Наклонная Дискриминация в Младенчестве: Чувствительность к Социально Важным Тембрам". Младенческое Поведение и Разработка. Издание 25, Выпуск 2, 2002, стр 183–194.
[21] Murthy, H.a., Ф. Беофейс, L.p. Heck и М. Вейнтроб. "Устойчивая Независимая от текста Идентификация Динамика по Телефонным Каналам". Транзакции IEEE о Речи и Обработке аудиоданных. Издание 7, Выпуск 5, 1999, стр 554–568.
[22] Essid, S., Г. Ричард и Б. Дэвид. "Инструментальное Распознавание в Полифонической Музыке На основе Автоматического Taxonomies". Транзакции IEEE на Аудио, Речи и Обработке Языка. Vol 14, Выпуск 1, 2006, стр 68–80.