Спектральный центроид для аудиосигналов и слуховых спектрограмм
Прочтите в аудио файла, вычислите центроид с помощью параметров по умолчанию, а затем постройте график результатов.
[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav'); centroid = spectralCentroid(audioIn,fs); t = linspace(0,size(audioIn,1)/fs,size(centroid,1)); plot(t,centroid) xlabel('Time (s)') ylabel('Centroid (Hz)')
Считайте аудио файла и затем буферизуйте сигнал в 30 мс систем координат с 20 мс перекрытия. Вычислите октавный спектр степени с помощью poctave
функция.
[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav'); audioBuffered = buffer(audioIn,round(fs*0.03),round(fs*0.02),'nodelay'); [p,cf] = poctave(audioBuffered,fs);
Вычислите центроид октавного спектра степени с течением времени. Постройте график результатов.
centroid = spectralCentroid(p,cf); t = linspace(0,size(audioIn,1)/fs,size(centroid,1)); plot(t,centroid) xlabel('Time (s)') ylabel('Centroid (Hz)')
Чтение в аудио файла.
[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav');
Вычислите центроид спектра степени с течением времени. Вычислите центроид для 50 мс Окон Хэмминга данных с перекрытием 25 мс. Используйте область значений от 62,5 Гц до fs
/ 2 для вычисления центроида. Постройте график результатов.
centroid = spectralCentroid(audioIn,fs, ... 'Window',hamming(round(0.05*fs)), ... 'OverlapLength',round(0.025*fs), ... 'Range',[62.5,fs/2]); t = linspace(0,size(audioIn,1)/fs,size(centroid,1)); plot(t,centroid) xlabel('Time (s)') ylabel('Centroid (Hz)')
Создайте dsp.AudioFileReader
объект для чтения в аудио данных кадр за кадром. Создайте dsp.SignalSink
для логгирования вычисления спектрального центроида.
fileReader = dsp.AudioFileReader('Counting-16-44p1-mono-15secs.wav');
logger = dsp.SignalSink;
В цикле аудиопотока:
Чтение в систему координат аудио данных.
Вычислите спектральный центроид для системы координат аудио.
Логгирование спектрального центроида для последующего графического изображения.
Чтобы вычислить спектральный центроид только для заданного входного кадра, задайте окно с таким же количеством выборок, как и вход, и установите длину перекрытия равного нуля.
Постройте график записанных данных.
while ~isDone(fileReader) audioIn = fileReader(); centroid = spectralCentroid(audioIn,fileReader.SampleRate, ... 'Window',hamming(size(audioIn,1)), ... 'OverlapLength',0); logger(centroid) end plot(logger.Buffer) ylabel('Centroid (Hz)')
Если вход в цикл аудиопотока имеет переменную samples-per-кадр, то несогласованные samples-per-кадр с размером окна анализа spectralCentroid
, или если вы хотите вычислить спектральный центроид для перекрывающихся данных, используйте dsp.AsyncBuffer
.
Создайте dsp.AsyncBuffer
объект, сбросьте logger и отпустите средство чтения файлов.
buff = dsp.AsyncBuffer; reset(logger) release(fileReader)
Задайте, что спектральный центроид вычисляется для систем координат 50 мс с перекрытием 25 мс.
fs = fileReader.SampleRate; samplesPerFrame = round(fs*0.05); samplesOverlap = round(fs*0.025); samplesPerHop = samplesPerFrame - samplesOverlap; win = hamming(samplesPerFrame); while ~isDone(fileReader) audioIn = fileReader(); write(buff,audioIn); while buff.NumUnreadSamples >= samplesPerHop audioBuffered = read(buff,samplesPerFrame,samplesOverlap); centroid = spectralCentroid(audioBuffered,fs, ... 'Window',win, ... 'OverlapLength',0); logger(centroid) end end release(fileReader)
Постройте график записанных данных.
plot(logger.Buffer)
ylabel('Centroid (Hz)')
x
- Входной сигналВходной сигнал, заданный как вектор, матрица или трехмерный массив. Как интерпретируется функция x
зависит от формы f
.
Типы данных: single
| double
f
- Частота дискретизации или вектор частоты (Гц)Частота дискретизации или вектор частоты в Гц, заданная в виде скаляра или вектора, соответственно. Как интерпретируется функция x
зависит от формы f
:
Если f
является скаляром, x
интерпретируется как сигнал временной области и f
интерпретируется как частота дискретизации. В этом случае x
должен быть вектором действительных чисел или матрицей. Если x
задается как матрица, столбцы интерпретируются как отдельные каналы.
Если f
является вектором, x
интерпретируется как сигнал частотного диапазона и f
интерпретируется как частоты в Гц, соответствующие строкам x
. В этом случае x
должен быть вещественным L -by M -by N массивом, где L - количество спектральных значений на заданных частотах f
M - количество отдельных спектров, а N - количество каналов.
Количество строк x
, L, должно быть равно количеству элементов f
.
Типы данных: single
| double
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
'Window',hamming(256)
Примечание
Следующие аргументы пары "имя-значение" применяются, если x
является сигналом временной области. Если x
является сигналом частотного диапазона, аргументы пары "имя-значение" игнорируются.
'Window'
- Окно применяется во временном интервалеректвин (раунд (f
*0.03))
(по умолчанию) | векторОкно, примененное во временном интервале, задается как разделенная разделенными запятой парами, состоящая из 'Window'
и вектор действительных чисел. Количество элементов в векторе должно быть в области значений [1, size
]. Количество элементов в векторе также должно быть больше (x
,1)OverlapLength
.
Типы данных: single
| double
'OverlapLength'
- Количество проб, перекрывающихся между смежными окнамираунд (f
*0.02)
(по умолчанию) | неотрицательный скалярКоличество выборок, перекрывающихся между смежными окнами, заданное как разделенная разделенными запятой парами, состоящая из 'OverlapLength'
и целое число в области значений [0, размер
).(Window
,1)
Типы данных: single
| double
'FFTLength'
- Количество интервалов в ДПФnumel (Window
)
(по умолчанию) | положительное скалярное целое числоКоличество интервалов, используемых для вычисления ДПФ оконных входных выборок, заданное как разделенная разделенными запятой парами, состоящая из 'FFTLength'
и положительное скалярное целое число. Если не задано, FFTLength
по умолчанию задается количество элементов в Window
.
Типы данных: single
| double
'Range'
- Частотная область значений (Гц)[0, f
/2]
(по умолчанию) | двухэлементный вектор-строкаЧастотная область значений в Гц, заданный как разделенная разделенными запятой парами, состоящая из 'Range'
и двухэлементный вектор-строка с увеличением вещественных значений в области значений [0, f
/2].
Типы данных: single
| double
'SpectrumType'
- Спектральный тип'power'
(по умолчанию) | 'magnitude'
Тип спектра, заданный как разделенная разделенными запятой парами, состоящая из 'SpectrumType'
и 'power'
или 'magnitude'
:
'power'
- Спектральный центроид вычисляется для одностороннего спектра степени.
'magnitude'
- Спектральный центроид вычисляется для одностороннего спектра величин.
Типы данных: char
| string
centroid
- Спектральный центроид (Гц)Спектральный центроид в Гц, возвращенный в виде скаляра, вектора или матрицы. Каждая строка centroid
соответствует спектральному центроиду окна x
. Каждый столбец centroid
соответствует независимому каналу.
Спектральный центроид вычисляется как описано в [1]:
где
fk - частота в Гц, соответствующая k интервала.
sk - спектральное значение в k интервала.
b 1 и b 2 являются ленточными краями в интервалах, по которым можно вычислить спектральный центроид.
[1] Peeters, G. «A Large Set of Audio Features for Sound Description (Simility and Classification) in the CUIDADO Project». Технический отчет; IRCAM: Париж, Франция, 2004.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.