Спектральная плоскость для звуковых сигналов и слуховых спектрограмм
задает опции с помощью одного или нескольких 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 спектрограмму с помощью melSpectrogram
функция.
[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav');
[s,cf,t] = melSpectrogram(audioIn,fs);
Вычислите плоскость mel спектрограммы в зависимости от времени. Постройте график результатов.
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
если
Вход к вашему циклу аудиопотока имеет переменные выборки на систему координат.
Вход к вашему циклу аудиопотока имеет противоречивые выборки на систему координат с аналитическим окном spectralFlatness
.
Вы хотите вычислить спектральную плоскость для перекрытых данных.
Создайте 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); 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'
— Окно применяется во временном интервале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
flatness
— Спектральная плоскостьСпектральная плоскость, возвращенная как скаляр, вектор или матрица. Каждая строка flatness
соответствует спектральной плоскости окна x
. Каждый столбец flatness
соответствует независимому каналу.
arithmeticMean
— Спектральное среднее арифметическоеСпектральное среднее арифметическое, возвращенное как скаляр, вектор или матрица. Каждая строка arithmeticMean
соответствует среднему арифметическому спектра окна x
. Каждый столбец arithmeticMean
соответствует независимому каналу.
geometricMean
— Спектральное среднее геометрическоеСпектральное среднее геометрическое, возвращенное как скаляр, вектор или матрица. Каждая строка geometricMean
соответствует геометрическому среднему значению спектра окна x
. Каждый столбец geometricMean
соответствует независимому каналу.
Спектральная плоскость вычисляется как описано в [1]:
где
sk является спектральным значением в интервале k.
b 1 и b 2 является ребрами полосы в интервалах, по которым можно вычислить спектральное распространение.
[1] Джонстон, J.d. "Преобразуйте Кодирование Звуковых сигналов Используя Перцепционные Шумовые Критерии". Журнал IEEE на Выбранных областях в Коммуникациях. Издание 6, Номер 2, 1988, стр 314–323.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.