gammatoneFilterBank

Набор фильтров Gammatone

Описание

gammatoneFilterBank анализирует сигнал путем передачи его через банк фильтров gammatone, равномерно распределенных в шкале ERB. Наборы фильтров Gammatone были разработаны, чтобы смоделировать человеческую слуховую систему.

Смоделировать человеческую слуховую систему:

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

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

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

Создание

Синтаксис

gammaFiltBank = gammatoneFilterBank
gammaFiltBank = gammatoneFilterBank(range)
gammaFiltBank = gammatoneFilterBank(range,numFilts)
gammaFiltBank = gammatoneFilterBank(range,numFilts,fs)
gammaFiltBank = gammatoneFilterBank(___,Name,Value)

Описание

gammaFiltBank = gammatoneFilterBank возвращает gammatone набор фильтров. Объектные фильтры информационно-независимо через каждый вход образовывают канал в зависимости от времени.

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) создает gammatone набор фильтров, gammaFiltBank, с полосовыми фильтрами, помещенными между 62,5 Гц и 12 кГц. gammaFiltBank действует на уровне частоты дискретизации 24 кГц.

Свойства

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

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

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

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты (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)

Описание

пример

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

Входные параметры

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

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

Типы данных: 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Сбросьте внутренние состояния Системного объекта

Примеры

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

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

gammaFiltBank = gammatoneFilterBank('SampleRate',fs)
gammaFiltBank = 

  gammatoneFilterBank with properties:

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

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

audioOut = gammaFiltBank(audioIn);

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

      685056


numChannels =

    32

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

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

gammatone набор фильтров ввел различные групповые задержки выходных каналов, который приводит к плохой реконструкции. Чтобы компенсировать групповую задержку, удалите начинающуюся задержку из отдельных каналов и нулевой клавиатуры концы каналов. Используйте 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 MS Windows с перекрытием на 25 мс. Используйте dsp.AsyncBuffer, чтобы разделить сигналы на перекрытые окна. Используйте dsp.SignalSink, чтобы регистрировать значение RMS каждого окна для каждого канала.

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

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

sink = dsp.SignalSink;

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

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

D = 20*log10(sink.Buffer');

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

Алгоритмы

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

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

Ссылки

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

[2] Паттерсон, R.d., К. Робинсон, Дж. Холдсуорт, Д. Маккеаун, Ц. Чжан и М. Аллерхэнд. "Комплексные Звуки и Слуховые Изображения". Слуховая Физиология и Восприятие. 1992, стр 429–446.

[3] Аертсен, утра H. J. и П. Ай. М. Джохэннесма. "Спектровременные Восприимчивые Поля Слуховых Нейронов в Grassfrog". Биологическая Кибернетика. Издание 38, Выпуск 4, 1980, стр 223–234.

[4] Glasberg, Брайан Р. и главный судья Брайана Мур. "Деривация Слуховых Форм Фильтра от С пазами шумовых Данных". Слушание Исследования. Издание 47. Выпуск 1-2, 1990, стр 103 - 138.

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

Смотрите также

|

Введенный в R2019a