Спектральная плоскостность для аудиосигналов и слуховых спектрограмм
задает опции с использованием одного или нескольких flatness
= spectralFlatness(x
,f
,Name,Value
)Name,Value
аргументы в виде пар.
[
возвращает среднее спектральное арифметическое и среднее спектральное геометрическое.flatness
,arithmeticMean
,geometricMean
] = spectralFlatness(___)
Прочтите в аудио файла, вычислите плоскостность с помощью параметров по умолчанию, а затем постройте график результатов.
[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav'); flatness = spectralFlatness(audioIn,fs); t = linspace(0,size(audioIn,1)/fs,size(flatness,1)); plot(t,flatness) xlabel('Time (s)') ylabel('Flatness')
Прочтите в аудио файла, а затем вычислите mel spectrogram с помощью melSpectrogram
функция.
[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav');
[s,cf,t] = melSpectrogram(audioIn,fs);
Вычислите плоскостность мел-спектрограммы с течением времени. Постройте график результатов.
flatness = spectralFlatness(s,cf); plot(t,flatness) xlabel('Time (s)') ylabel('Flatness')
Чтение в аудио файла.
[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav');
Вычислите плоскостность спектра степени с течением времени. Вычислите плоскостность для 50 мс Окон Хэмминга данных с перекрытием 25 мс. Используйте область значений от 62,5 Гц до fs
/ 2 для расчета плоскостности. Постройте график результатов.
flatness = spectralFlatness(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(flatness,1)); plot(t,flatness) xlabel('Time (s)') ylabel('Flatness')
Создайте 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(); flatness = spectralFlatness(audioIn,fileReader.SampleRate, ... 'Window',win, ... 'OverlapLength',0); logger(flatness) end plot(logger.Buffer) ylabel('Flatness')
Использование dsp.AsyncBuffer
если
Вход в цикл аудиопотока имеет переменную samples-per-кадр.
Вход в цикл аудиопотока имеет несогласованные выборки-в-кадре с окном анализа spectralFlatness
.
Вы хотите вычислить спектральную плоскостность для перекрывающихся данных.
Создайте 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); flatness = spectralFlatness(audioBuffered,fs, ... 'Window',win, ... 'OverlapLength',0); logger(flatness) end end release(fileReader)
Постройте график записанных данных.
plot(logger.Buffer)
ylabel('Flatness')
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
flatness
- Спектральная плоскостностьСпектральная плоскостность, возвращенная в виде скаляра, вектора или матрицы. Каждая строка flatness
соответствует спектральной плоскостности окна x
. Каждый столбец flatness
соответствует независимому каналу.
arithmeticMean
- Среднее спектральное арифметическоеСпектральная арифметика, возвращаемое в виде скаляра, вектора или матрицы. Каждая строка arithmeticMean
соответствует арифметике спектру окна x
. Каждый столбец arithmeticMean
соответствует независимому каналу.
geometricMean
- Среднее спектральное геометрическоеСпектральная плоскостность вычисляется как описано в [1]:
где
sk - спектральное значение в k интервала.
b 1 и b 2 являются краями диапазона в интервалах, по которым можно вычислить спектральный разброс.
[1] Джонстон, J.D. «Преобразование кодирования аудиосигналов с использованием критериев перцепционного шума». Журнал IEEE по выбранным областям в коммуникациях. Том 6, № 2, 1988, стр. 314-323.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.