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]:
где
- частота в Гц, соответствующая интервалу .
- спектральное значение в интервале координат . Спектр величины и спектр степени обычно используются.
и являются полосой ребер в интервалах, над которой можно вычислить спектральный куртоз.
- спектральный центроид.
- спектральный спред.
Спектральный куртоз измеряет плоскостность, или негауссовость, спектра вокруг его центроида. И наоборот, он используется для указания пикности спектра. Для примера, когда белый шум увеличивается на речевом сигнале, куртоз уменьшается, указывая на менее пиковый спектр.
[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] Peeters, G. «A Large Set of Audio Features for Sound Description (Simility and Classification) in the CUIDADO Project». Технический отчет; IRCAM: Париж, Франция, 2004.
[2] Грей, Джон М. и Джон В. Гордон. «Перцептивные эффекты спектральных модификаций на музыкальных тембрах». Журнал Акустического общества Америки. Том 63, Выпуск 5, 1978, стр. 1493-1500.
[3] Рейми, Эрик и Чарльз Э. Кэрнс. Сегмент в фонетике и фонологии. Hoboken, NJ: John Wiley & Sons Inc., 2015.
[4] Jongman, Allard, et al. «Акустические характеристики английских фрикативов». Журнал Акустического общества Америки. Том 108, Выпуск 3, 2000, стр. 1252-1263.
[5] S. Zhang, Y. Guo, and Q. Zhang, «Robust Voice Activity Detection Проект Based on Spectral Kurtosis». Первый Международный практикум по технологии образования и компьютерным наукам, 2009 год, стр. 269-272.
[6] Misra, H., S. Ikbal, H. Bourlard, and H. Hermansky. «Spectral Entropy Based Feature for Robust ASR». 2004 IEEE International Conference on Acoustics, Speech, and Signal Processing.
[7] А. Пикракис, Т. Джаннакопулос, и С. Теодоридис. «Computationally Effective Speech/Music Discriminator for Radio Recordings» (неопр.) (недоступная ссылка). Международная конференция по поиску музыкальной информации и связанной с ней деятельности, 2006 год.
[8] Pikrakis, A., et al. A Speech/Music Discriminator of Radio Recordings Based on Dynamic Programming and Bayesian Networks (неопр.) (недоступная ссылка) Транзакции IEEE на мультимедиа. Том 10, Выпуск 5, 2008, стр. 846-857.
[9] Джонстон, J.D. «Преобразование кодирования аудиосигналов с использованием критериев перцепционного шума». Журнал IEEE по выбранным областям в коммуникациях. Том 6, Выпуск 2, 1988, стр. 314-323.
[10] Lehner, Bernhard, et al. «О сокращении ложных срабатываний в обнаружении поющего голоса». 2014 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP), 2014.
[11] Y. Petetin, C. Laroche and A. Mayoue, «Глубокие нейронные сети for Audio Scene Recognition», 2015 23-я Европейская конференция по обработке сигналов (EUSIPCO), 2015.
[12] Шейрер, Э. и М. Слейни. Конструкция и оценка робастного дискриминатора Мультифункции речи/музыки. 1997 IEEE International Conference on Acoustics, Speech, and Signal Processing, 1997.
[13] С. Диксон, «Повторное обнаружение начала». Международная конференция по цифровому аудио Эффектов. Том 120, 2006, стр. 133-137.
[14] Цанетакис, Г. и П. Кук. «Мультифеатурная сегментация аудио для просмотра и аннотации». Материалы 1999 семинара IEEE по применению обработки сигналов к аудио и акустике, 1999.
[15] Лерч, Александр. Введение в приложения для анализа аудио Содержимого в обработке сигналов и музыкальной информатике. Piscataway, NJ: IEEE Press, 2012.
[16] Ли, Тао и М. Огихара. Музыкальная жанровая классификация с таксономией. Международная конференция IEEE по акустике, речи и обработке сигналов, 2005.
[17] Eronen, A.J., V.T. Peltonen, J.T. Tuomi, A.P. Klapuri, S. Fagerlund, T. Sorsa, G. Lorho, and J. Huopaniemi. «Распознавание контекста на основе звука». Транзакции IEEE по обработке звука, речи и языка. Том 14, Выпуск 1, 2006, стр. 321-329.
[18] Ren, Jia-Min, Ming-Ju Wu, and Jyh-Shing Roger Jang. Автоматическая классификация настроения музыки на основе функций Timbre и Modulation. Транзакции IEEE на аффективных вычислениях. Том 6, Выпуск 3, 2015, стр. 236-246.
[19] Hansen, John H. L., and Sanjay Patil. «Речь под напряжением: анализ, моделирование и распознавание». Лекции по информатике. Том 4343, 2007, стр. 108-137.
[20] Цанг, Кристин Д. и Лорел Дж. Трейнор. «Спектральная дискриминация по склону в младенчестве: чувствительность к социально важным тембрам». Детское поведение и развитие. Том 25, Выпуск 2, 2002, стр. 183-194.
[21] Murthy, H.A., F. Beaufays, L.p. Heck, and M. Weintraub. «Независимая от текста идентификация динамика по телефонным каналам». Транзакции IEEE по обработке речи и аудио. Том 7, Выпуск 5, 1999, стр. 554-568.
[22] Эссид, С., Г. Ричард и Б. Дэвид. «Распознавание инструментов в полифонической музыке на основе автоматических таксономий». Транзакции IEEE по обработке звука, речи и языка. Том 14, Выпуск 1, 2006, стр. 68-80.