Спектральное уменьшение для звуковых сигналов и слуховых спектрограмм
Прочтите аудиофайл, рассчитайте уменьшение с помощью параметров по умолчанию, а затем постройте график результатов.
[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav'); decrease = spectralDecrease(audioIn,fs); t = linspace(0,size(audioIn,1)/fs,size(decrease,1)); plot(t,decrease) xlabel('Time (s)') ylabel('Decrease')

Прочитайте аудиофайл, а затем рассчитайте спектрограмму mel с помощью melSpectrogram функция.
[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav');
[s,cf] = melSpectrogram(audioIn,fs);Рассчитайте уменьшение спектрограммы mel с течением времени. Постройте график результатов.
decrease = spectralDecrease(s,cf); t = linspace(0,size(audioIn,1)/fs,size(decrease,1)); plot(t,decrease) xlabel('Time (s)') ylabel('Decrease')

Чтение в аудиофайле.
[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav');Вычислите уменьшение амплитудного спектра с течением времени. Рассчитайте уменьшение для окон Хэмминга 50 мс данных с перекрытием 25 мс. Используйте диапазон от 62,5 Гц до fs/ 2 для расчета уменьшения. Постройте график результатов.
decrease = spectralDecrease(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(decrease,1)); plot(t,decrease) xlabel('Time (s)') ylabel('Decrease')

Создать dsp.AudioFileReader объект для считывания в кадре аудиоданных. Создать dsp.SignalSink для регистрации вычисления спектрального уменьшения.
fileReader = dsp.AudioFileReader('Counting-16-44p1-mono-15secs.wav');
logger = dsp.SignalSink;В цикле аудиопотока:
Считывание в кадре аудиоданных.
Вычислите спектральное уменьшение для кадра звука.
Запишите спектральное уменьшение для последующего построения графика.
Чтобы вычислить спектральное уменьшение только для данного входного кадра, укажите окно с тем же количеством выборок, что и на входе, и установите нулевую длину перекрытия. Постройте график зарегистрированных данных.
while ~isDone(fileReader) audioIn = fileReader(); decrease = spectralDecrease(audioIn,fileReader.SampleRate, ... 'Window',hamming(size(audioIn,1)), ... 'OverlapLength',0); logger(decrease) end plot(logger.Buffer) ylabel('Decrease')

Использовать dsp.AsyncBuffer если
Вход в контур аудиопотока имеет переменную выборку на кадр.
Вход в цикл аудиопотока имеет несовместимые выборки на кадр с окном анализа spectralDecrease.
Требуется вычислить спектральное уменьшение для перекрывающихся данных.
Создать 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); decrease = spectralDecrease(audioBuffered,fs, ... 'Window',win, ... 'OverlapLength',0); logger(decrease) end end release(fileReader)
Постройте график зарегистрированных данных.
plot(logger.Buffer)
ylabel('Decrease')
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' - Тип спектра'magnitude' (по умолчанию) | 'power'Тип спектра, указанный как разделенная запятыми пара, состоящая из 'SpectrumType' и 'power' или 'magnitude':
'power' - Спектральное уменьшение рассчитывается для одностороннего спектра мощности.
'magnitude' - Спектральное уменьшение рассчитывается для одностороннего спектра амплитуды.
Типы данных: char | string
decrease - Спектральное уменьшениеСпектральное уменьшение в Гц, возвращаемое как скаляр, вектор или матрица. Каждая строка decrease соответствует спектральному центроиду окна x. Каждый столбец decrease соответствует независимому каналу.
Спектральное уменьшение рассчитывают, как описано в [1]:
где
sk - спектральное значение в ячейке k.
b1 и b2 - края полосы в ячейках, по которым вычисляется спектральное уменьшение.
[1] Peeters, G. «Большой набор звуковых функций для описания звука (подобие и классификация) в проекте CUIDADO». Технический отчет; ИРКАМ: Париж, Франция, 2004 год.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.