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) устанавливает каждое имя свойства на заданное значение. Неопределенные свойства имеют значения по умолчанию.

Пример: 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

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

расширить все

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

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

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

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

release(obj)

расширить все

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

Примеры

свернуть все

Создайте группу гамматоновых фильтров по умолчанию для частоты дискретизации 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 до 20 000 Гц. Передайте аудиосигнал через банк фильтров.

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

audioOut = gammaFiltBank(audio);

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

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] Слейни, Малкольм. «Эффективная реализация банка аудиторных фильтров Паттерсона-Холдворта». Apple Computer Technical Report 35, 1993.

[2] Patterson, R.D., K. Robinson, J. Holdsworth, D. Mckeown, C. Zhang, and M. Allerhand. «Сложные звуки и слуховые изображения». Слуховая физиология и восприятие. 1992, стр 429–446.

[3] Aertsen, A. M. H. J., and P. I. M. Johannesma. Спектро-временные рецептивные поля слуховых нейронов в Грассфроге. Биологическая кибернетика. Том 38, Выпуск 4, 1980, стр. 223-234.

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

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

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