poctave

Сгенерируйте октавный спектр

Описание

пример

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

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

пример

p = poctave(pxx,fs,f) выполняет октавное сглаживание путем преобразования спектральной плотности степени, pxx, к спектру b 1/ степеней октавы, где 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 точек ДПФ.

[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-взвешивание. Взвешенный по 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.

Снова вычислите октавный спектр, но теперь используйте A-взвешивание. Спектр, взвешенный А, достигает максимума приблизительно 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-взвешивание на входе. Стандарт S1.42 ANSI задает кривую А-взвешивания. Стандарт МЭК 61672-1 определяет минимальные и максимальные пределы ослабления для А-взвешивающего фильтра. Стандарт S1.42.2001 ANSI задает кривую взвешивания путем определения аналоговых полюсов и нулей.

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

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

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

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

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

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

Пример: 'Weighting',fir1(30,0.5) задает КИХ-фильтр 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 лог10 (p) ≤ <reservedrangesplaceholder0> в нуль. Задайте 'MinThreshold' в децибелах.

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

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

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

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

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

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

свернуть все

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

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

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

Ссылки

[1] Smith, Julius Orion, III. «Example: Synthesis of 1/F Noise (Pink Noise)». В спектральной обработке аудиосигнала. https://ccrma.stanford.edu/~jos/sasp/.

[2] Спецификация для аналоговых и цифровых фильтров Octave-Band и Fractional-Octave-Band. Стандартные S1.11-2004 ANSI. Melville, NY: Acoustical Society of America, 2004.

См. также

Введенный в R2018a
Для просмотра документации необходимо авторизоваться на сайте