exponenta event banner

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 Гц и 12000 Гц.

Свойства

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

Если не указано иное, свойства не настраиваются, что означает невозможность изменения их значений после вызова объекта. Объекты блокируются при их вызове, и 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

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

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

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

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

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

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

release(obj)

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

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

Примеры

свернуть все

Создайте 1/3-октавный набор фильтров для сигнала, дискретизированного на частоте 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] Орфанидис, Софокл Дж. Введение в обработку сигналов. Энглвуд Клиффс, Нью-Джерси: Прентис Холл, 2010.

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

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

.
Представлен в R2019a