Спектральный наклон для аудиосигналов и слуховых спектрограмм
Считайте в аудио файла, вычислите уклон с помощью параметров по умолчанию, а затем постройте график результатов.
[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav'); slope = spectralSlope(audioIn,fs); t = linspace(0,size(audioIn,1)/fs,size(slope,1)); plot(t,slope) xlabel('Time (s)') ylabel('Slope')
Прочтите в аудио файла, а затем вычислите mel spectrogram с помощью melSpectrogram
функция. Вычислите наклон спектрограммы mel с течением времени. Постройте график результатов.
[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav'); [s,cf,t] = melSpectrogram(audioIn,fs); slope = spectralSlope(s,cf); plot(t,slope) xlabel('Time (s)') ylabel('Slope')
Чтение в аудио файла.
[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav');
Вычислите наклон спектра величин с течением времени. Вычислите уклон для 50 мс Окон Хэмминга данных с перекрытием 25 мс. Используйте область значений от 62,5 Гц до fs
/ 2 для вычисления уклона. Постройте график результатов.
slope = spectralSlope(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(slope,1)); plot(t,slope) xlabel('Time (s)') ylabel('Slope')
Создайте dsp.AudioFileReader
объект для чтения в аудио данных кадр за кадром. Создайте dsp.SignalSink
для логгирования вычисления спектрального наклона.
fileReader = dsp.AudioFileReader('Counting-16-44p1-mono-15secs.wav');
logger = dsp.SignalSink;
В цикле аудиопотока:
Чтение в систему координат аудио данных.
Вычислите спектральный наклон для системы координат аудио.
Логгирование спектрального наклона для последующего графического изображения.
Чтобы вычислить спектральный наклон только для заданного входного кадра, задайте окно с таким же количеством выборок, как и вход, и установите длину перекрытия равного нуля. Постройте график записанных данных.
win = hamming(fileReader.SamplesPerFrame); while ~isDone(fileReader) audioIn = fileReader(); slope = spectralSlope(audioIn,fileReader.SampleRate, ... 'Window',win, ... 'OverlapLength',0); logger(slope) end plot(logger.Buffer) ylabel('Slope')
Использование dsp.AsyncBuffer
если
Вход в цикл аудиопотока имеет переменную samples-per-кадр.
Вход в цикл аудиопотока имеет несогласованные выборки-в-кадре с окном анализа spectralSlope
.
Вы хотите вычислить спектральный наклон для перекрывающихся данных.
Создайте 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); slope = spectralSlope(audioBuffered,fs, ... 'Window',win, ... 'OverlapLength',0); logger(slope) end end release(fileReader)
Постройте график записанных данных.
plot(logger.Buffer)
ylabel('Slope')
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'
- Спектральный тип'magnitude'
(по умолчанию) | 'power'
Тип спектра, заданный как разделенная разделенными запятой парами, состоящая из 'SpectrumType'
и 'power'
или 'magnitude'
:
'power'
- Спектральный наклон вычисляется для одностороннего спектра степени.
'magnitude'
- Спектральный наклон вычисляется для одностороннего спектра величин.
Типы данных: char
| string
slope
- Спектральный уклонСпектральный наклон в Гц, возвращенный в виде скаляра, вектора или матрицы. Каждая строка slope
соответствует спектральному наклону окна x
. Каждый столбец slope
соответствует независимому каналу.
Спектральный наклон вычисляется как описано в [1]:
где
fk - частота в Гц, соответствующая k интервала.
μf - средняя частота.
sk - спектральное значение в k интервала.
μs - среднее спектральное значение.
b 1 и b 2 являются краями диапазона в интервалах, над которыми можно вычислить спектральный наклон.
[1] Лерч, Александр. Введение в приложения для анализа аудио Содержимого в обработке сигналов и музыкальной информатике. Piscataway, NJ: IEEE Press, 2012.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.