octaveFilterBank

Октава и набор фильтров дробной октавы

Описание

octaveFilterBank разлагает сигнал на поддиапазоны дробной октавы или октаву. Полоса октавы является диапазоном частот, где самая высокая частота является дважды самой низкой частотой. Полоса октавы и дробные ленточные фильтры октавы обычно используются, чтобы подражать, как люди чувствуют громкость.

Применять банк полосы октавы или дробных ленточных фильтров октавы:

  1. Создайте octaveFilterBank объект и набор его свойства.

  2. Вызовите объект с аргументами, как будто это была функция.

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты?

Создание

Описание

octFiltBank = octaveFilterBank возвращает набор фильтров октавы. Фильтры объектов информационно-независимо через каждый вход образовывают канал в зависимости от времени.

octFiltBank = octaveFilterBank(bandwidth) устанавливает Bandwidth свойство к bandwidth.

octFiltBank = octaveFilterBank(bandwidth,fs) устанавливает SampleRate свойство к fs.

octFiltBank = octaveFilterBank(___,Name,Value) наборы каждое свойство Name к заданному Value. Незаданные свойства имеют значения по умолчанию.

Пример: octFiltBank = octaveFilterBank('1/2 octave','FrequencyRange',[62.5,12000]) создает ½ банка ленточного фильтра октавы, octFiltBank, с полосовыми фильтрами, помещенными между 62,5 Гц и 12 000 Гц.

Свойства

развернуть все

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

Если свойство является настраиваемым, можно изменить его значение в любое время.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты.

Отфильтруйте полосу пропускания в октавах в виде '1 octave', '2/3 octave', '1/2 octave', '1/3 octave', '1/6 octave', '1/12 octave', '1/24 octave', или '1/48 octave'.

Настраиваемый: нет

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

Введите частоту дискретизации в Гц в виде положительной скалярной величины.

Настраиваемый: да

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

Частотный диапазон набора фильтров в Гц в виде двухэлементного вектора-строки из положительных монотонно увеличивающих значений. Частоты центра набора фильтров помещаются согласно Bandwidth, RefererenceFrequency, и OctaveRatioBase свойства. Фильтры, которые имеют центральную частоту вне FrequencyRange проигнорированы.

Настраиваемый: нет

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

Настраиваемый: нет

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Порядок октавы фильтрует в виде ровного целого числа. Порядок фильтра применяется к каждому индивидууму, просачиваются набор фильтров.

Настраиваемый: нет

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Отношение октавы базируется в виде 10 или 2. Основа отношения октавы определяет распределение центральных частот фильтров октавы. Стандарт ANSI S1.11 рекомендует основу 10. Основа 2 популярна для музыкальных приложений. Основа 2 задает октаву как фактор 2, и основа 10 задает октаву как фактор 100.3.

Настраиваемый: нет

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Использование

Описание

пример

audioOut = octFiltBank(audioIn) применяет набор фильтров октавы на вход и возвращает отфильтрованный выходной параметр.

Входные параметры

развернуть все

Аудиовход к набору фильтров октавы в виде скаляра, вектора или матрицы. Если задано как матрица, столбцы обработаны как независимые звуковые каналы.

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

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

развернуть все

Аудиовыход от набора фильтров октавы, возвращенного как скаляр, вектор, матрица или трехмерный массив. Форма audioOut зависит от формы audioIn и количество просачивается набор фильтров. Если M является количеством фильтров и audioIn L-by-N матрица, затем audioOut возвращен как L-by-M-by-N массив. Если N равняется 1, то audioOut матрица.

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

Функции объекта

Чтобы использовать объектную функцию, задайте Систему object™ как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием obj, используйте этот синтаксис:

release(obj)

развернуть все

coeffsПолучите коэффициенты фильтра
freqzВычислите частотную характеристику
fvtoolВизуализируйте набор фильтров
getBandedgeFrequenciesПолучите фильтр bandedges
getCenterFrequenciesЦентральные частоты фильтров
getGroupDelaysПолучите групповые задержки
infoПолучите информацию фильтра
isStandardCompliantПроверьте, что набор фильтров октавы является совместимым ANSI S1.11-2004
stepЗапустите алгоритм Системного объекта
releaseВысвободите средства и позвольте изменения в значениях свойств Системного объекта и введите характеристики
resetСбросьте внутренние состояния Системного объекта

Примеры

свернуть все

Создайте 1/3-octave набор фильтров для сигнала, произведенного на уровне 48 кГц. Установите частотный диапазон на [18 22000] Гц.

octFilBank = octaveFilterBank('1/3 octave',48000, ...
                              'FrequencyRange',[18 22000]);

Используйте fvtool визуализировать ответ набора фильтров. Чтобы получить представление с высоким разрешением о более низких частотах, установите шкалу оси X к log и NFFT к 2^16. Добавьте легенду, указывающую на частоты центра набора фильтров.

fvtool(octFilBank,'NFFT',2^16);
set(gca,'XScale','log')
axis([.01 24 -20 1])

fc = getCenterFrequencies(octFilBank);
fcc = cell(size(fc));
for ii = find(fc<1000)
    fcc{ii} = sprintf('%.0f',round(fc(ii),2,'significant'));
end
for ii = find(fc>=1000)
    fcc{ii} = sprintf('%.1fk',fc(ii)/1000);
end
legend(fcc,'Location','eastoutside')

Белый Гауссов шум процесса через набор фильтров. Используйте спектр анализатор, чтобы просмотреть спектр фильтра выходные параметры.

sa = dsp.SpectrumAnalyzer('SampleRate',16e3,...
    'PlotAsTwoSidedSpectrum',false,...
    'FrequencyScale','log',...
    'SpectralAverages',100);

for index = 1:500
    x = randn(256,1);
    y = octFilBank(x);
    sa(y);
end

octaveFilterBank включает хорошую реконструкцию сигнала после анализа или изменения его поддиапазонов.

Читайте в звуковом файле и слушайте его содержимое.

[audioIn,fs] = audioread('RandomOscThree-24-96-stereo-13secs.aif');
sound(audioIn,fs)

Создайте octaveFilterBank по умолчанию. Частотный диапазон по умолчанию набора фильтров составляет 22 - 22 050 Гц. Частоты за пределами этой области значений ослабляются в восстановленном сигнале.

octFiltBank = octaveFilterBank('SampleRate',fs);

Передайте звуковой сигнал через набор фильтров октавы. Количество выходных параметров зависит от FrequencyRange, ReferenceFrequency, OctaveRatioBase, и Bandwidth свойства набора фильтров октавы. Каждый канал входа передается через набор фильтров независимо и возвращен как отдельная страница в выходе.

audioOut = octFiltBank(audioIn);

[N,numFilters,numChannels] = size(audioOut)
N = 1265935
numFilters = 10
numChannels = 2

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

groupDelay = round(getGroupDelays(octFiltBank)); % round for simplicity

audioPadded = [audioOut;zeros(max(groupDelay),numFilters,numChannels)];

for i = 1:numFilters
    audioOut(:,i,:) = audioPadded(groupDelay(i)+1:N+groupDelay(i),i,:);
end

Чтобы восстановить исходный сигнал, суммируйте выходные параметры наборов фильтров для каждого канала. Используйте squeeze перемещать второй канал от третьей размерности до второго в восстановленном сигнале.

reconstructedSignal = squeeze(sum(audioOut,2));
sound(reconstructedSignal,fs)

Алгоритмы

octaveFilterBank реализован как параллельная структура фильтров октавы. Отдельные фильтры октавы спроектированы аналогичные описанному octaveFilter. По умолчанию частоты центра набора фильтров октавы помещаются, как задано стандартом ANSI S1.11-2004. Можно изменить размещения фильтра с помощью Bandwidth, FrequencyRange, ReferenceFrequency, и OctaveRatioBase свойства.

Ссылки

[1] Orfanidis, Софокл Дж. Введение в обработку сигналов. Englewood Cliffs, NJ: Prentice Hall, 2010.

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

Расширенные возможности

Введенный в R2019a