exponenta event banner

poctave

Генерировать октавный спектр

Описание

пример

p = poctave(x,fs) возвращает октавный спектр сигнала x дискретизировано со скоростью fs. Октавный спектр - средняя мощность по октавным полосам, определенная стандартом ANSI S1.11 [2]. Если x является матрицей, то функция оценивает октавный спектр независимо для каждого столбца и возвращает результат в соответствующем столбце p.

p = poctave(xt) возвращает октавный спектр сигнала, сохраненного в расписании MATLAB ®xt.

пример

p = poctave(pxx,fs,f) выполняет октавное сглаживание путем преобразования спектральной плотности мощности, pxx, к спектру октавной мощности 1/b, где b - число поддиапазонов в октавной полосе. Частоты в f соответствуют оценкам PSD в pxx.

пример

p = poctave(___,type) определяет вид спектрального анализа, выполняемого функцией. Определить type как 'power' или 'spectrogram'.

пример

p = poctave(___,Name,Value) задает дополнительные параметры для любого из предыдущих синтаксисов с использованием аргументов пары имя-значение.

[p,cf] = poctave(___) также возвращает центральные частоты октавных полос, по которым вычисляется октавный спектр.

[p,cf,t] = poctave(___) дополнительно возвращает вектор времени, t, соответствующее времени центра сегментов, используемых для вычисления оценок спектра мощности, когда type является 'spectrogram'.

poctave(___) без выходных аргументов строит график октавного спектра или спектрограммы на текущем рисунке. Если type указывается как 'spectrogram', то эта функция поддерживается только для одноканального входа.

Примеры

свернуть все

Генерировать 105 выборок белого гауссова шума. Создайте сигнал псевдопечатного шума, фильтруя белый шум фильтром, нули и полюса которого находятся на положительной оси X. Визуализация нулей и полюсов.

N = 1e5;
wn = randn(N,1);

z = [0.982231570015379 0.832656605953720 0.107980893771348]';
p = [0.995168968915815 0.943841773712820 0.555945259371364]';

[b,a] = zp2tf(z,p,1);
pn = filter(b,a,wn);

zplane(z,p)

Figure contains an axes. The axes contains 3 objects of type line.

Создайте двухканальный сигнал, состоящий из белого и розового шума. Вычислите октавный спектр. Предположим, частота дискретизации составляет 44,1 кГц. Установите диапазон частот от 30 Гц до частоты Найквиста.

sg = [wn pn];

fs = 44100;

poctave(sg,fs,'FrequencyLimits',[30 fs/2])
legend('White noise','Pink noise','Location','SouthEast')

Figure contains an axes. The axes with title Octave Spectrum contains 2 objects of type stair. These objects represent White noise, Pink noise.

Белый шум имеет октавный спектр, который увеличивается с частотой. Октавный спектр розового шума приблизительно постоянен во всем диапазоне частот. Октавный спектр сигнала иллюстрирует, как человеческое ухо воспринимает сигнал.

Генерация 105 выборок белого гауссова шума, дискретизированного при 44,1 кГц. Создайте сигнал розового шума, фильтруя белый шум с помощью фильтра, нули и полюса которого находятся на положительной оси X.

N = 1e5;
fs = 44.1e3;
wn = randn(N,1);

z = [0.982231570015379 0.832656605953720 0.107980893771348]';
p = [0.995168968915815 0.943841773712820 0.555945259371364]';
[b,a] = zp2tf(z,p,1);

pn = filter(b,a,wn);

Вычислите оценку Уэлча спектральной плотности мощности для обоих сигналов. Разделите сигналы на 2048 сегментов выборки, укажите 50% перекрытие между соседними сегментами, окнах каждого сегмента с окном Хэмминга и используйте 4096 точек DFT.

[pxx,f] = pwelch([wn pn],hamming(2048),1024,4096,fs);

Отображение спектральных плотностей в диапазоне частот от 200 Гц до частоты Найквиста. Используйте логарифмическую шкалу для частотной оси.

pwelch([wn pn],hamming(2048),1024,4096,fs)
ax = gca;
ax.XScale = 'log';
xlim([200 fs/2]/1000)
legend('White','Pink')

Figure contains an axes. The axes with title Welch Power Spectral Density Estimate contains 2 objects of type line. These objects represent White, Pink.

Вычислите и отобразите октавные спектры сигналов. Используйте тот же диапазон частот, что и на предыдущем графике. Укажите шесть полос на октаву и вычислите спектры с помощью фильтров 8-го порядка.

poctave(pxx,fs,f,'BandsPerOctave',6,'FilterOrder',8,'FrequencyLimits',[200 fs/2],'psd')
legend('White','Pink')

Figure contains an axes. The axes with title 1/6 - Octave Smoothing contains 2 objects of type stair. These objects represent White, Pink.

Прочитайте аудиозапись электронной зубной щетки в MATLAB ®. Зубная щетка включается приблизительно через 1,75 секунды и остается включенной приблизительно в течение 2 секунд.

[y,fs] = audioread('toothbrush.m4a');

Вычислите октавную спектрограмму звукового сигнала. Укажите 48 полос на октаву и перекрытие 82%. Ограничить общий диапазон частот от 100 Гц до fs/ 2 Гц и используйте C-взвешивание.

poctave(y,fs,'spectrogram','BandsPerOctave',48,'OverlapPercent',82,'FrequencyLimits',[100 fs/2],'Weighting','C')

Figure contains an axes. The axes with title 1/48 - Octave Spectrogram contains an object of type image.

Генерация 105 выборок белого гауссова шума, дискретизированного при 44,1 кГц. Создайте сигнал розового шума, фильтруя белый шум с помощью фильтра, нули и полюса которого находятся на положительной оси X.

N = 1e5;
fs = 44.1e3;
wn = randn(N,1);

z = [0.982231570015379 0.832656605953720 0.107980893771348]';
p = [0.995168968915815 0.943841773712820 0.555945259371364]';
[b,a] = zp2tf(z,p,1);

pn = filter(b,a,wn);

Вычислите октавный спектр сигнала. Укажите три полосы на октаву и ограничьте общий диапазон частот от 200 Гц до 20 кГц. Сохраните пары имя-значение в массиве ячеек для последующего использования. Отображение спектра.

flims = [200 20e3];
bpo = 3;
opts = {'FrequencyLimits',flims,'BandsPerOctave',bpo};

poctave(pn,fs,opts{:});

Figure contains an axes. The axes with title 1/3 - Octave Spectrum contains an object of type bar.

Вычислите октавный спектр сигнала с теми же настройками, но используйте C-взвешивание. Взвешенный С-спектр падает на частотах выше 6 кГц.

hold on
poctave(pn,fs,opts{:},'Weighting','C')

Figure contains an axes. The axes with title 1/3 - Octave Spectrum contains 2 objects of type bar.

Вычислите октавный спектр еще раз, но теперь используйте А-взвешивание. А-взвешенный спектр достигает пика при частоте около 3 кГц и падает выше 6 кГц и на нижнем конце полосы частот.

poctave(pn,fs,opts{:},'Weighting','A')
hold off
legend('Pink noise','C-weighted','A-weighted','Location','SouthWest')

Figure contains an axes. The axes with title 1/3 - Octave Spectrum contains 3 objects of type bar. These objects represent Pink noise, C-weighted, A-weighted.

Входные аргументы

свернуть все

Входной сигнал, заданный как вектор или матрица. Если x является вектором, то poctave рассматривает его как единый канал. Если x является матрицей, то poctave вычисляет октавный спектр или спектрограмму независимо для каждого столбца и возвращает результат в соответствующем столбце p. Если type имеет значение 'spectrogram'функция объединяет спектрограммы вдоль третьего измерения p.

Пример: sin(2*pi*(0:127)/16)+randn(1,128)/100 задает шумную синусоиду.

Пример: [2 1].*sin(2*pi*(0:127)'./[16 64]) задает двухканальную синусоиду.

Типы данных: single | double

Частота выборки, заданная как положительный скаляр, выраженный в герцах. Частота дискретизации не может быть ниже 7 Гц.

Расписание ввода. xt должен содержать возрастающие, конечные, равномерно разнесенные по времени строки. Если xt представляет многоканальный сигнал, тогда он должен иметь либо одну переменную, содержащую матрицу, либо несколько переменных, состоящих из векторов.

Если расписание имеет отсутствующие или повторяющиеся моменты времени, его можно исправить с помощью подсказок в «Чистом расписании» с «Отсутствующим», «Повторяющимся» или «Неуниформным временем».

Пример: timetable(seconds(0:4)',randn(5,1)) указывает случайный процесс, дискретизированный с частотой 1 Гц в течение 4 секунд.

Спектральная плотность мощности (PSD), заданная как вектор или матрица с действительными неотрицательными элементами. Спектральная плотность мощности должна быть выражена в линейных единицах, а не децибелах. Использовать db2pow для преобразования децибел в значения мощности. Если type является 'spectrogram', затем каждый столбец в pxx считается PSD для определенного временного окна или выборки.

Пример: [pxx,f] = periodogram(cos(pi./[4;2]*(0:159))'+randn(160,2)) определяет оценку пародограммы PSD шумной двухканальной синусоиды, дискретизированной при 2δ Гц, и частоты, на которых она вычисляется.

Частоты PSD, указанные как вектор. f должны быть конечными, строго увеличивающимися и равномерно разнесенными в линейном масштабе.

Пример: [pxx,f] = periodogram(cos(pi./[4;2]*(0:159))'+randn(160,2)) определяет оценку пародограммы PSD шумной двухканальной синусоиды, дискретизированной при 2δ Гц, и частоты, на которых она вычисляется.

Тип вычисляемого спектра, указанный как 'power' или 'spectrogram'.

  • 'power' - Вычислить спектр октавной мощности входа.

  • 'spectrogram' - Вычислить октавную спектрограмму входного сигнала. Функция делит вход на сегменты и возвращает спектр коротко-временной октавной мощности каждого сегмента.

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: 'Weighting','A','FilterOrder',8 вычисляет октавный спектр с помощью фильтров А-взвешивания и 8-го порядка.

Число поддиапазонов в октавной полосе, указанное как пара, разделенная запятыми, состоящая из 'BandsPerOctave' и 1, 3/2, 2, 3, 6, 12, 24, 48 или 96. Этот параметр определяет ширину дробно-октавной полосы. В такой полосе частот частота верхнего края является частотой нижнего края, умноженной на 21/b, где b - число поддиапазонов.

Типы данных: single | double

Порядок полосовых фильтров, определяемый как разделенная запятыми пара, состоящая из 'FilterOrder' и положительное чётное целое число.

Типы данных: single | double

Диапазон частот, определяемый как разделенная запятыми пара, состоящая из 'FrequencyLimits' и возрастающий двухэлементный вектор, выраженный в Гц. Нижнее значение вектора должно быть не менее 3 Гц. Верхнее значение вектора должно быть меньше или равно частоте Найквиста. Если вектор не содержит октавного центра, poctave может возвращать центральную частоту за пределы указанных пределов. Для обеспечения стабильной конструкции фильтра фактический минимально достижимый предел частоты увеличивается до 3*fs/48e3 если частота дискретизации превышает 48 кГц. Если этот аргумент не указан, poctave использует интервал [max(3,3*fs/48e3) fs/2].

Типы данных: single | double

Взвешивание частоты, указанное как разделенная запятыми пара, состоящая из 'Weighting' и одно из следующих:

  • 'none'poctave не выполняет никакого частотного взвешивания на входе.

  • 'A'poctave Выполняет взвешивание A на входе. Стандарт ANSI S1.42 определяет кривую A-взвешивания. Стандарт IEC 61672-1 определяет минимальные и максимальные пределы затухания для фильтра A-weighting. Стандарт ANSI S1.42.2001 определяет весовую кривую путем указания аналоговых полюсов и нулей.

  • 'C'poctave выполняет взвешивание C на входе. Стандарт ANSI S1.42 определяет кривую весового коэффициента C. Стандарт IEC 61672-1 определяет минимальные и максимальные пределы ослабления для фильтра С-весов. Стандарт ANSI S1.42.2001 определяет весовую кривую путем указания аналоговых полюсов и нулей.

  • Вектор - poctave обрабатывает входной сигнал как вектор коэффициентов, которые задают фильтр конечной импульсной характеристики (FIR).

  • Матрица - poctave обрабатывает входной сигнал как матрицу коэффициентов сечения второго порядка, которые задают фильтр с бесконечной импульсной характеристикой (БИХ). Матрица должна содержать не менее двух строк и ровно шесть столбцов.

  • массив ячеек 1 на 2 - poctave обрабатывает входные данные как числительные и знаменательные коэффициенты в таком порядке, которые определяют передаточную функцию БИХ-фильтра.

  • digitalFilter объект - poctave обрабатывает входные данные как фильтр, который был разработан с использованием designfilt.

Этот аргумент поддерживается только в том случае, если вход является сигналом. Сглаживание октавы не поддерживает взвешивание частоты.

Пример: 'Weighting',fir1(30,0.5) задает фильтр FIR 30-го порядка с нормированной частотой отсечения 0,5δ рад/образец.

Пример: 'Weighting',[2 4 2 6 0 2;3 3 0 6 0 0] задает фильтр Баттерворта третьего порядка с нормированной частотой 3-dB 0,5δ рад/образец.

Пример: 'Weighting',{[1 3 3 1]/6 [3 0 1]/3} задает фильтр Баттерворта третьего порядка с нормированной частотой 3-dB 0,5δ рад/образец.

Пример: 'Weighting',designfilt('lowpassiir','FilterOrder',3,'HalfPowerFrequency',0.5) задает фильтр Баттерворта третьего порядка с нормированной частотой 3-dB 0,5δ рад/образец.

Типы данных: single | double | char | string | cell

Нижняя граница для ненулевых значений, заданная как разделенная запятыми пара, состоящая из 'MinThreshold' и реальный скаляр. Функция устанавливает эти элементы p 10 log10 (p) ≤ 'MinThreshold' до нуля. Определить 'MinThreshold' в децибелах.

Типы данных: single | double

Длина сегментов данных, указанная как разделенная запятыми пара, состоящая из 'WindowLength' и неотрицательное целое число. 'WindowLength' должна быть меньше или равна длине входного сигнала. Если не указано, то длина сегментов данных вычисляется на основе размера входного сигнала. Этот ввод допустим только в том случае, если type является 'spectrogram'.

Типы данных: single | double

Процент перекрытия между соседними сегментами, определяемый как пара, разделенная запятыми, состоящая из 'OverlapPercent' и действительный скаляр в интервале [0, 100). Если не указано, 'OverlapPercent' равно нулю. Этот ввод допустим только в том случае, если type является 'spectrogram'.

Типы данных: single | double

Выходные аргументы

свернуть все

Октавный спектр или спектрограмма, возвращаемые как вектор, матрица или 3-D массив. Третье измерение, если оно имеется, соответствует входным каналам.

Центральные частоты, возвращаемые в виде вектора. cf содержит список центральных частот октавных полос, над которыми poctave оценивали октавный спектр. cf содержит единицы герца.

Центровое время, возвращенное как вектор. Если вход является PSD, то t представляет индексы выборки, соответствующие столбцам pxx. Этот аргумент применяется только в том случае, если type является 'spectrogram'.

Ссылки

[1] Смит, Джулиус Орион, III. «Пример: синтез 1/F шума (розовый шум)». При обработке спектрального аудиосигнала. https://ccrma.stanford.edu/~jos/sasp/.

[2] Спецификация для октавных и дробных октавных аналоговых и цифровых фильтров. Стандарт ANSI S1.11-2004. Мелвилл, Нью-Йорк: Акустичное общество Америки, 2004.

См. также

Представлен в R2018a