exponenta event banner

gammatoneFilterBank

Банк фильтров гамматона

Описание

gammatoneFilterBank разлагает сигнал, пропуская его через банк гамматоновых фильтров, равноотстоящих по шкале ERB. Банки фильтров гамматона были разработаны для моделирования слуховой системы человека.

Для моделирования слуховой системы человека:

  1. Создать gammatoneFilterBank и задайте его свойства.

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

Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.

Создание

Описание

gammaFiltBank = gammatoneFilterBank возвращает набор фильтров гамматона. Объект фильтрует данные независимо по каждому входному каналу с течением времени.

gammaFiltBank = gammatoneFilterBank(range) устанавливает Range свойство для range.

gammaFiltBank = gammatoneFilterBank(range,numFilts) устанавливает NumFilters свойство для numFilts.

gammaFiltBank = gammatoneFilterBank(range,numFilts,fs) устанавливает SampleRate свойство для fs.

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

Пример: gammaFiltBank = gammatoneFilterBank([62.5,12e3],'SampleRate',24e3) создает набор фильтров гамматона, gammaFiltBank, с полосовыми фильтрами, расположенными между 62,5 Гц и 12 кГц. gammaFiltBank работает с частотой дискретизации 24 кГц.

Свойства

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

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

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

Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.

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

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

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

Число фильтров в наборе фильтров, указанное как положительный целочисленный скаляр.

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

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

Частота входных выборок в Гц, заданная как положительный скаляр.

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

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

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

Описание

пример

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

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

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

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

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

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

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

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

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

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

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

release(obj)

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

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

Примеры

свернуть все

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

fs = 16e3;
gammaFiltBank = gammatoneFilterBank('SampleRate',fs)
gammaFiltBank = 

  gammatoneFilterBank with properties:

    FrequencyRange: [50 8000]
        NumFilters: 32
        SampleRate: 16000

Использовать fvtool визуализировать отклик банка фильтров.

fvtool(gammaFiltBank)

Обработка белого гауссова шума через блок фильтров. Используйте анализатор спектра для просмотра спектра выходных сигналов фильтра.

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

for i = 1:5000
    x = randn(256,1);
    y = gammaFiltBank(x);
    sa(y);
end

Этот пример иллюстрирует неоптимальный, но простой подход к анализу и синтезу с использованием gammatoneFilterBank.

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

[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav');
sound(audioIn,fs)

Создание значения по умолчанию gammatoneFilterBank. Диапазон частот по умолчанию для набора фильтров составляет от 50 до 8000 Гц. Частоты вне этого диапазона ослабляются в восстановленном сигнале.

gammaFiltBank = gammatoneFilterBank('SampleRate',fs)
gammaFiltBank = 
  gammatoneFilterBank with properties:

    FrequencyRange: [50 8000]
        NumFilters: 32
        SampleRate: 44100

Передайте звуковой сигнал через блок фильтров гамматона. На выходе 32 канала, где количество каналов устанавливается NumFilters имущества gammatoneFilterBank.

audioOut = gammaFiltBank(audioIn);

[N,numChannels] = size(audioOut)
N = 685056
numChannels = 32

Для восстановления исходного сигнала суммируйте каналы. Слушай результат.

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

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

infoStruct = info(gammaFiltBank);
groupDelay = round(infoStruct.GroupDelays); % round for simplicity

audioPadded = [audioOut;zeros(max(groupDelay),gammaFiltBank.NumFilters)];

for i = 1:gammaFiltBank.NumFilters
    audioOut(:,i) = audioPadded(groupDelay(i)+1:N+groupDelay(i),i);
end

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

Считывайте аудиосигнал и преобразуйте его в моно для удобной визуализации.

[audio,fs] = audioread('WaveGuideLoopOne-24-96-stereo-10secs.aif');
audio = mean(audio,2);

Создать gammatoneFilterBank с 64 фильтрами, которые охватывают диапазон от 62,5 до 20000 Гц. Передайте звуковой сигнал через блок фильтров.

gammaFiltBank = gammatoneFilterBank('SampleRate',fs, ...
                                    'NumFilters',64, ...
                                    'FrequencyRange',[62.5,20e3]);

audioOut = gammaFiltBank(audio);

Расчет энергии на полосу с использованием окон 50 мс с перекрытием 25 мс. Использовать dsp.AsyncBuffer разделять сигналы на перекрывающиеся окна и затем регистрировать среднеквадратичное значение каждого окна для каждого канала.

samplesPerFrame = round(0.05*fs);
samplesOverlap = round(0.025*fs);

buff = dsp.AsyncBuffer(numel(audio));
write(buff,audioOut.^2);

sink = dsp.AsyncBuffer(numel(audio));

while buff.NumUnreadSamples > 0
    currentFrame = read(buff,samplesPerFrame,samplesOverlap);
    write(sink,mean(currentFrame,1));
end

Преобразуйте значения энергии в дБ. Постройте график энергии на полосу с течением времени.

gammatoneSpec = read(sink);
D = 20*log10(gammatoneSpec');

timeVector = ((samplesPerFrame-samplesOverlap)/fs)*(0:size(D,2)-1);
cf = getCenterFrequencies(gammaFiltBank)./1e3;

surf(timeVector,cf,D,'EdgeColor','none')
axis([timeVector(1) timeVector(end) cf(1) cf(end)])
view([0 90])
caxis([-150,-60])
colorbar
xlabel('Time (s)')
ylabel('Frequency (kHz)')

Figure contains an axes. The axes contains an object of type surface.

Алгоритмы

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

Банк гамматоновых фильтров часто используется в качестве переднего конца имитации улитки, которая преобразует сложные звуки в многоканальную картину активности, подобную наблюдаемой в слуховом нерве. [2] gammatoneFilterBank следует алгоритму, описанному в [1]. Алгоритм представляет собой реализацию идеи, предложенной в [2]. Конструкция блока фильтров гамматона может быть описана в двух частях: форма фильтра (гамматон) и шкала частот. Эквивалентная прямоугольная полоса пропускания (ERB) определяет относительный интервал и полосу пропускания фильтров гамматона. Вывод шкалы ERB также обеспечивает оценку реакции слухового фильтра, которая сильно напоминает фильтр гамматона.

Ссылки

[1] Slaney, Малкольм. «Эффективная реализация банка слуховых фильтров Паттерсона-Холдворта». Технический отчет Apple Computer 35, 1993.

[2] Паттерсон, Р. Д., К. Робинсон, Дж. Холдсворт, Д. Маккаун, К. Чжан и М. Аллерханд. «Сложные звуки и слуховые изображения». Слуховая физиология и восприятие. 1992, стр 429–446.

[3] Аэрцен, А. М. Х. Дж. и П. И. М. Йоханнесма. «Спектрально-временные рецептивные поля слуховых нейронов в Грассфроге». Биологическая кибернетика. Том 38, выпуск 4, 1980, стр. 223-234.

[4] Глазберг, Брайан Р. и Брайан Си Джей Мур. «Получение форм слухового фильтра из данных с надрезом-шумом». Исследование слуха. Том 47. Выпуск 1-2, 1990, стр. 103 -138.

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

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