Спектральная плоскостность для звуковых сигналов и слуховых спектрограмм
указывает параметры, использующие один или несколько 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 - Входной сигналВходной сигнал, заданный как вектор, матрица или 3-D массив. Как интерпретируется функция x зависит от формы f.
Типы данных: single | double
f - Частота дискретизации или частотный вектор (Гц)Частота дискретизации или частотный вектор в Гц, заданный как скаляр или вектор соответственно. Как интерпретируется функция x зависит от формы f:
Если f является скаляром, x интерпретируется как сигнал временной области, и f интерпретируется как частота выборки. В этом случае x должен быть действительным вектором или матрицей. Если x задается как матрица, столбцы интерпретируются как отдельные каналы.
Если f является вектором, x интерпретируется как сигнал частотной области, и f интерпретируется как частоты, в Гц, соответствующие строкам x. В этом случае x должен быть действительным массивом L-за-M-за-N, где L - число спектральных значений на заданных частотах fM - количество отдельных спектров, а N - число каналов.
Количество строк x, L, должно быть равно числу элементов f.
Типы данных: single | double
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
'Window',hamming(256)Примечание
Следующие аргументы пары имя-значение применяются, если x является сигналом временной области. Если x является сигналом частотной области, аргументы пары имя-значение игнорируются.
'Window' - Окно, примененное во временной областиrectwin(round(f*0.03)) (по умолчанию) | векторОкно, примененное во временной области, указанное как разделенная запятыми пара, состоящая из 'Window' и реальный вектор. Число элементов в векторе должно находиться в диапазоне [1, size(]. Число элементов в векторе также должно быть больше x,1)OverlapLength.
Типы данных: single | double
'OverlapLength' - Количество проб, перекрывающихся между соседними окнамиround(f*0.02) (по умолчанию) | неотрицательный скалярКоличество выборок, перекрывающихся между соседними окнами, указанное как пара, разделенная запятыми, состоящая из 'OverlapLength' и целое число в диапазоне [0, size().Window,1)
Типы данных: single | double
'FFTLength' - Количество ячеек в DFTnumel(Window) (по умолчанию) | положительное скалярное целоеКоличество ячеек, используемых для вычисления DFT входных выборок с окнами, указанных как разделенная запятыми пара, состоящая из '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]:
1b2−b11b2−b1∑k=b1b2sk
где
sk - спектральное значение в ячейке k.
b1 и b2 - края полосы в ячейках, по которым вычисляется спектральный разброс.
[1] Джонстон, Джей Ди. «Преобразование кодирования аудиосигналов с использованием критериев воспринимаемого шума». Журнал IEEE по выбранным областям в коммуникациях. Том 6, номер 2, 1988, стр. 314-323.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.