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. Base 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Получите полосы пропускания фильтра
getCenterFrequenciesЦентральные частоты фильтров
getGroupDelaysПолучите задержки группы
infoПолучите информацию о фильтре
isStandardCompliantПроверьте, что группа фильтров октавы соответствует S1.11-2004 ANSI
stepЗапуск алгоритма системного объекта
releaseОтпустите ресурсы и допустите изменения в значениях свойств системного объекта и входных характеристиках
resetСброс внутренних состояний Системного объекта

Примеры

свернуть все

Создайте 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

The 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)

Алгоритмы

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

Ссылки

[1] Orfanidis, Sophocles J. Введение в обработку сигналов. Englewood Cliffs, Нью-Джерси: Prentice Hall, 2010.

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

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

.
Введенный в R2019a