Спектральный центроид для звуковых сигналов и слуховых спектрограмм
Читайте в звуковом файле, вычислите центроид с помощью параметров по умолчанию, и затем постройте результаты.
[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)')

Если вход к вашему циклу аудиопотока имеет переменные выборки на систему координат, противоречивые выборки на систему координат с аналитическим размером окна spectralCentroid, или если вы хотите вычислить спектральный центроид для перекрытых данных, используйте dsp.AsyncBuffer.
Создайте dsp.AsyncBuffer объект, сброс регистратор и релиз средство чтения файлов.
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 — Окно применяется во временном интервалеrectwin (вокруг (f*0.03)) (значение по умолчанию) | векторОкно, примененное во временном интервале в виде разделенной запятой пары, состоящей из 'Window' и вектор действительных чисел. Число элементов в векторе должно быть в области значений [1, размер (]. Число элементов в векторе должно также быть больше 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] Петерс, G. "Большой набор функций аудио для звукового описания (Подобие и классификация) в проекте CUIDADO". Технический отчет; IRCAM: Париж, Франция, 2004.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.