octaveFilterBank

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

Описание

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

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

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

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

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

Создание

Синтаксис

octFiltBank = octaveFilterBank
octFiltBank = octaveFilterBank(bandwidth)
octFiltBank = octaveFilterBank(bandwidth,fs)
octFiltBank = octaveFilterBank(___,Name,Value)

Описание

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 Используя Системные объекты (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)

Описание

пример

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Получите информацию фильтра
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