gammatoneFilterBank

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

Описание

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

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

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

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

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

Создание

Описание

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 Используя Системные объекты.

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

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

Типы данных: 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) применяет gammatone набор фильтров на вход и возвращает отфильтрованный выходной параметр.

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

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

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

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

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

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

Аудиовыход от набора фильтров, возвращенного как скаляр, вектор, матрица или трехмерный массив. Форма audioOut зависит от формы audioIn и NumFilters. Если audioIn M-by-N матрица, затем audioOut возвращен как M-by-NumFilters- 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 разделить сигналы на перекрытые окна и затем регистрировать значение 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 object. The axes object contains an object of type surface.

Алгоритмы

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

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