Аудио Toolbox™ обеспечивает набор функций, которые описывают форму звука, иногда называемую тембром. В этом примере определяются уравнения, используемые для определения спектральных характеристик, приводится общее использование каждой характеристики и приводятся примеры, позволяющие получить интуицию о том, что описывают спектральные дескрипторы.
Спектральные дескрипторы широко используются в приложениях машинного и глубокого обучения, а также в анализе восприятия. Спектральные дескрипторы были применены в ряде областей применения, включая:
Spectral CentroidСпектральный центроид (spectralCentroid) - взвешенная по частоте сумма, нормализованная по невзвешенной сумме [1]:
где
- частота в Гц, соответствующая ячейке k
- спектральное значение в ячейке . Обычно используются спектр амплитуды и спектр мощности.
и - края полосы в ячейках, по которым вычисляется спектральный центроид.
Спектральный центроид представляет собой «центр тяжести» спектра. Используется как указание на яркость [2] и обычно используется в музыкальном анализе и жанровой классификации. Например, наблюдайте прыжки в центроиде, соответствующие попаданиям high hat в аудиофайл.
[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]:
2sk∑k=b1b2sk
где
- частота в Гц, соответствующая ячейке k
- спектральное значение в ячейке . Обычно используются спектр амплитуды и спектр мощности.
и - края полосы в ячейках, по которым вычисляется спектральный разброс.
- спектральный центроид.
Спектральный разброс представляет «мгновенную полосу пропускания» спектра. Используется как указание на доминирование тона. Например, разброс увеличивается, когда тоны расходятся и уменьшается, когда тоны сходятся.
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]:
3∑k=b1b2sk
где
- частота в Гц, соответствующая ячейке k
- спектральное значение в ячейке . Обычно используются спектр амплитуды и спектр мощности.
и являются краями полосы в ячейках, по которым вычисляется спектральная асимметрия.
- спектральный центроид.
- спектральный разброс.
Спектральный перекос измеряет симметрию вокруг центроида. В фонетике спектральный перекос часто называют спектральным наклоном и используют с другими спектральными моментами для различения места артикуляции [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]:
4∑k=b1b2sk
где
- частота в Гц, соответствующая ячейке k
- спектральное значение в ячейке . Обычно используются спектр амплитуды и спектр мощности.
и - края полосы в ячейках, по которым вычисляется спектральный куртоз.
- спектральный центроид.
- спектральный разброс.
Спектральный куртоз измеряет плоскостность, или негауссовость, спектра вокруг его центроида. И наоборот, он используется для указания пиковости спектра. Например, когда белый шум увеличивается на речевом сигнале, куртоз уменьшается, указывая на менее резкий спектр.
[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]:
b2-b1)
где
- частота в Гц, соответствующая ячейке k
- спектральное значение в ячейке . Обычно используются спектр амплитуды и спектр мощности.
и - границы полосы в ячейках, по которым вычисляется спектральная энтропия.
Спектральная энтропия успешно используется в голосовых/невокализированных решениях для автоматического распознавания речи [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]:
1b2-b11b2-b1∑k=b1b2sk
где
- спектральное значение в ячейке . Обычно используются спектр амплитуды и спектр мощности.
и - края полосы в ячейках, по которым вычисляется спектральная плоскостность.
Спектральная плоскостность является показателем пиковости спектра. Более высокая спектральная плоскостность указывает на шум, в то время как более низкая спектральная плоскостность указывает на тональность.
[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]:
1b2-b1∑k=b1b2sk
где
- спектральное значение в ячейке . Обычно используются спектр амплитуды и спектр мощности.
и - края полосы в ячейках, по которым вычисляется спектральный гребень.
Спектральный гребень является показателем пиковости спектра. Более высокий спектральный гребень указывает на большую тональность, в то время как более низкий спектральный гребень указывает на больший шум.
[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]:
) | p) 1p
где
- спектральное значение в ячейке . Обычно используются спектр амплитуды и спектр мощности.
и - границы полосы в ячейках, по которым вычисляется спектральный поток.
- тип нормы.
Спектральный поток широко используется при обнаружении начала [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]:
fk-мкф) 2
где
- частота в Гц, соответствующая ячейке k
- средняя частота.
- спектральное значение в ячейке . Обычно используется амплитудный спектр.
- среднее спектральное значение.
и - края полосы в ячейках, по которым вычисляется спектральный наклон.
Спектральный наклон широко использовался при анализе речи, в частности при моделировании напряжения динамиков [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. «Большой набор звуковых функций для описания звука (подобие и классификация) в проекте CUIDADO». Технический отчет; ИРКАМ: Париж, Франция, 2004 год.
[2] Грей, Джон М. и Джон В. Гордон. «Перцепционные эффекты спектральных модификаций на музыкальные тембры». Журнал Акустического общества Америки. Том 63, выпуск 5, 1978, стр. 1493-1500.
[3] Рэйми, Эрик и Чарльз Э. Кэрнс. Сегмент в фонетике и фонологии. Хобокен, Нью-Джерси: John Wiley & Sons Inc., 2015.
[4] Джонгмен, Allard, и др. «Акустические характеристики английских фрикативов». Журнал Акустического общества Америки. Том 108, выпуск 3, 2000, стр. 1252-1263.
[5] С. Чжан, Я. Го и К. Чжан, «Надежное проектирование функций обнаружения голосовой активности на основе спектрального куртоза». Первое международное рабочее совещание по вопросам образовательных технологий и компьютерных наук, 2009 год, стр. 269-272.
[6] Мисра, Х., С. Икбал, Х. Бурлард и Х. Херманский. Международная конференция IEEE 2004 по акустике, речи и обработке сигналов.
[7] А. Пикракис, Т. Джаннакопулос и С. Теодоридис. «Вычислительно эффективный дискриминатор речи/музыки для радиозаписей». Международная конференция по поиску музыкальной информации и смежной деятельности, 2006 год.
[8] Pikrakis, A., et al. «Дискриминатор речи/музыки радиозаписей на основе динамического программирования и байесовских сетей». Транзакции IEEE для мультимедиа. Том 10, выпуск 5, 2008, стр. 846-857.
[9] Джонстон, Джей Ди. «Преобразование кодирования аудиосигналов с использованием критериев воспринимаемого шума». Журнал IEEE по выбранным областям в коммуникациях. Том 6, выпуск 2, 1988, стр. 314-323.
[10] Lehner, Bernhard, et al. Международная конференция IEEE 2014 по акустике, речи и обработке сигналов (ICASSP), 2014.
[11] Y. Petetin, C. Laroche и A. Mayoue, «Deep Neural Networks for Audio Scene Recognition», 2015 23-я Европейская конференция по обработке сигналов (EUSIPCO), 2015.
[12] Scheirer, E. и М. Слэни. 1997 Международная конференция IEEE по акустике, речи и обработке сигналов, 1997.
[13] С. Диксон, «Повторное обнаружение начала». Международная конференция по цифровым звуковым эффектам. Том 120, 2006, стр. 133-137.
[14] Цанетакис, Г. и П. Кук. «Многофакторная сегментация звука для просмотра и аннотирования». Материалы семинара IEEE 1999 года по применению обработки сигналов к аудио- и акустике, 1999 год.
[15] Лерч, Александр. Введение в приложения для анализа аудиоконтента в области обработки сигналов и музыкальной информатики. Piscataway, NJ: IEEE Press, 2012.
[16] Литий, дао и М. Оджихара. «Классификация музыкальных жанров с таксономией». Международная конференция IEEE по акустике, речи и обработке сигналов, 2005 год.
[17] Эронен, А. Дж., В. Т. Пелтонен, Ж. Т. Туоми, А. П. Клапури, С. Фагерлунд, Т. Сорса, Г. Лорхо и Ж. Хуопаниеми. «Распознавание контекста на основе звука». Транзакции IEEE по обработке звука, речи и языка. Том 14, выпуск 1, 2006, стр. 321-329.
[18] Жэнь, Цзя-Мин, Мин-Джу Ву и Цзе-Шин Роджер Чан. «Автоматическая классификация музыкального настроения на основе параметров тембра и модуляции». Транзакции IEEE по аффективным вычислениям. Том 6, выпуск 3, 2015, стр. 236-246.
[19] Хансен, Джон Х. Л. и Санджай Патил. «Речь под напряжением: анализ, моделирование и распознавание». Лекции по информатике. Том 4343, 2007, стр. 108-137.
[20] Цанг, Кристин Д. и Лорел Дж. Трейнор. «Дискриминация спектрального наклона в младенчестве: чувствительность к социально важным тембрам». Детское поведение и развитие. Том 25, выпуск 2, 2002, стр. 183-194.
[21] Мурти, Х. А., Ф. Бофейс, Л. П. Хек и М. Вайнтрауб. «Надежная, независимая от текста идентификация громкоговорителя по телефонным каналам». Транзакции IEEE по обработке речи и звука. Том 7, выпуск 5, 1999, стр. 554-568.
[22] Эссид, С., Г. Ричард и Б. Дэвид. «Распознавание инструментов в многоголосной музыке на основе автоматических таксономий». Транзакции IEEE по обработке звука, речи и языка. Том 14, выпуск 1, 2006, стр. 68-80.