Спектральный поток для звуковых сигналов и слуховых спектрограмм
flux = spectralFlux(x,f)
flux = spectralFlux(x,f,Name,Value)
Читайте в звуковом файле, вычислите поток с помощью параметров по умолчанию, и затем постройте результаты.
[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav'); flux = spectralFlux(audioIn,fs); t = linspace(0,size(audioIn,1)/fs,size(flux,1)); plot(t,flux) xlabel('Time (s)') ylabel('Flux')
Читайте в звуковом файле и затем вычислите mel спектрограмму с помощью функции melSpectrogram
. Вычислите поток mel спектрограммы в зависимости от времени. Постройте график результатов.
[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav'); [s,cf,t] = melSpectrogram(audioIn,fs); flux = spectralFlux(s,cf); plot(t,flux) xlabel('Time (s)') ylabel('Flux')
Читайте в звуковом файле.
[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav');
Вычислите поток спектра мощности в зависимости от времени. Вычислите поток для Окон Хэмминга на 50 мс данных с перекрытием на 25 мс. Используйте диапазон от 62,5 Гц до fs
/2 для вычисления потока. Постройте график результатов.
flux = spectralFlux(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(flux,1)); plot(t,flux) xlabel('Time (s)') ylabel('Flux')
Спектральный поток измеряет изменение в последовательных спектрах. Чтобы вычислить спектральный поток для сигнала передачи потокового аудио, необходимо ввести по крайней мере два кадра аудиоданных.
Создайте объект dsp.AudioFileReader
читать в покадровых аудиоданных. Создайте dsp.AsyncBuffer
, чтобы буферизовать аудио в перекрытые кадры. Создайте dsp.SignalSink
, чтобы регистрировать спектральное вычисление потока.
fileReader = dsp.AudioFileReader('Counting-16-44p1-mono-15secs.wav');
buff = dsp.AsyncBuffer;
logger = dsp.SignalSink;
В цикле аудиопотока:
Читайте в кадре аудиоданных из вашего источника.
Запишите аудиоданные в dsp.AsyncBuffer
Если кадр данных доступен от буфера, считайте кадр и один транзитный участок данных с перекрытием, равным выборкам на кадр. Это представляет два новых аудио кадра.
Вычислите спектральный поток для двух новых аудио кадров.
Регистрируйте спектральный поток для более позднего графического вывода. Поскольку поток задан текущим кадром и предыдущим кадром, и потому что условие перед первым кадром неизвестно функции, спектральный поток выводит поток нуля для первого кадра. Регистрируйте только второе значение вывод от spectralFlux
.
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+samplesPerHop,samplesPerFrame); flux = spectralFlux(audioBuffered,fs, ... 'Window',win, ... 'OverlapLength',samplesOverlap); logger(flux(end)) end end release(fileReader)
Постройте записанные данные.
plot(logger.Buffer)
ylabel('Flux')
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
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
'Window',hamming(256)
'NormType'
— Тип нормы2
(значение по умолчанию) | 1
Тип нормы раньше вычислял, заданный как пара, разделенная запятой, состоящая из 'NormType'
и 2
или 1
.
Типы данных: single | double
Следующие аргументы пары "имя-значение" применяются, если 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'
— Количество интервалов в ДПФnumel(Window)
(значение по умолчанию) | положительное скалярное целое числоКоличество интервалов раньше вычисляло ДПФ оконных входных выборок, заданных как пара, разделенная запятой, состоящая из 'FFTLength'
и положительного скалярного целого числа. Если незаданный, значения по умолчанию FFTLength
к числу элементов в Window
.
Типы данных: single | double
Область значений
Частотный диапазон (Гц)[0,f/2]
(значение по умолчанию) | двухэлементный вектор - строкаЧастотный диапазон в Гц, заданном как пара, разделенная запятой, состоящая из 'Range'
и двухэлементный вектор - строка из увеличения действительных значений в области значений [0, f
/2].
Типы данных: single | double
'SpectrumType'
— Тип спектра'power'
(значение по умолчанию) | 'magnitude'
Тип спектра, заданный как пара, разделенная запятой, состоящая из 'SpectrumType'
и 'power'
или 'magnitude'
:
'power'
– Спектральный поток вычисляется для одностороннего спектра мощности.
'magnitude'
– Спектральный поток вычисляется для одностороннего спектра значения.
Типы данных: char | string
flux
— Спектральный поток (Гц)Спектральный поток в Гц, возвращенном как скаляр, вектор или матрица. Каждая строка flux
соответствует спектральному потоку окна x
. Каждый столбец flux
соответствует независимому каналу.
Спектральный поток вычисляется, как описано в [1]:
где
sk является спектральным значением в интервале k.
b 1 и b 2 является ребрами полосы в интервалах, по которым можно вычислить спектральный поток.
P является типом нормы. Можно задать тип нормы с помощью NormType
.
[1] Scheirer, E. и М. Слэни. "Конструкция и Оценка Устойчивого Различителя Речи/Музыки Мультифункции". Международная конференция IEEE по вопросам Акустики, Речи и Обработки сигналов. Объем 2, 1997, стр 1221–1224.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.