exponenta event banner

designAuditoryFilterBank

Расчетный набор слуховых фильтров

Описание

пример

filterBank = designAuditoryFilterBank(fs) возвращает набор слуховых фильтров в частотной области, filterBank.

пример

filterBank = designAuditoryFilterBank(fs,Name,Value) указывает параметры, использующие один или несколько Name,Value аргументы пары.

[filterBank,Fc,BW] = designAuditoryFilterBank(___) возвращает центральную частоту и полосу пропускания каждого фильтра в наборе фильтров. Этот выходной синтаксис можно использовать с любым из предыдущих входных синтаксисов.

Примеры

свернуть все

Звонить designAuditoryFilterBank с заданной частотой выборки для разработки набора слуховых фильтров по умолчанию.

fs = 44.1e3;
fb = designAuditoryFilterBank(fs);

Набор фильтров по умолчанию состоит из 32 треугольных полосовых фильтров, равномерно распределенных по шкале от 0 до fs/ 2 Гц.

numBands = size(fb,1)
numBands = 32

designAuditoryFilterBank предназначен для фильтрации в частотной области. По умолчанию designAuditoryFilterBank предполагает 1024-точечный DFT и возвращает полусторонний банк фильтров частотной области с 513 точками.

numPoints = size(fb,2)
numPoints = 513

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

[audioIn,fs] = audioread("Laughter-16-8-mono-4secs.wav");

win = hamming(1024,"periodic");
noverlap = 512;
fftLength = 1024;
[S,F,t] = stft(audioIn,fs, ...
               "Window",win, ...
               "OverlapLength",noverlap, ...
               "FFTLength",fftLength, ...
               "FrequencyRange","onesided");
PowerSpectrum = S.*conj(S);

Разработать набор слуховых фильтров на основе mel. Постройте график банка фильтров.

numBands = 32;
range = [0,4000];
normalization = "bandwidth";

[fb,cf] = designAuditoryFilterBank(fs, ...
                                   "FFTLength",fftLength, ...
                                   "NumBands",numBands, ...
                                   "FrequencyRange",range, ...
                                   "Normalization",normalization);

plot(F,fb.')
grid on
title("Mel Filter Bank")
xlabel("Frequency (Hz)")

Figure contains an axes. The axes with title Mel Filter Bank contains 32 objects of type line.

Для применения фильтрации в частотной области выполните матричное умножение набора фильтров и спектрограммы мощности.

X = fb*PowerSpectrum;

Визуализация мощности на полосу в дБ.

XdB = 10*log10(X);

surf(t,cf,XdB,"EdgeColor","none");
xlabel("Time (s)")
ylabel("Frequency (Hz)")
zlabel("Power (dB)")
view([45,60])
title('Mel-Based Spectrogram')
axis tight

Figure contains an axes. The axes with title Mel-Based Spectrogram contains an object of type surface.

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

[audioIn,fs] = audioread("RockDrums-44p1-stereo-11secs.mp3");

win = hann(round(0.03*fs),"periodic");
noverlap = round(0.02*fs);
fftLength = 2048;

[S,F,t] = stft(audioIn,fs, ...
               "Window",win, ...
               "OverlapLength",noverlap, ...
               "FFTLength",fftLength, ...
               "FrequencyRange","onesided");
PowerSpectrum = S.*conj(S);

Разработать набор слуховых фильтров на основе Барка. Постройте график банка фильтров.

numBands = 32;
range = [0,22050];
normalization = "area";
designDomain = "linear";

[fb,cf] = designAuditoryFilterBank(fs, ...
    "FrequencyScale","bark", ...
    "FFTLength",fftLength, ...
    "NumBands",numBands, ...
    "FrequencyRange",range, ...
    "Normalization",normalization, ...
    "FilterBankDesignDomain",designDomain);

plot(F,fb.');
grid on
title("Bark Filter Bank")
xlabel("Frequency (Hz)")

Figure contains an axes. The axes with title Bark Filter Bank contains 32 objects of type line.

Для применения фильтрации в частотной области выполните матричное умножение набора фильтров и левой и правой спектрограмм мощности.

X = pagemtimes(fb,PowerSpectrum);

Визуализация мощности на полосу в дБ.

XLdB = 10*log10(X(:,:,1));
XRdB = 10*log10(X(:,:,2));

surf(t,cf,XLdB,"EdgeColor","none");
xlabel("Time (s)")
ylabel("Frequency (Hz)")
view([0,90])
title("Bark-Based Spectrogram (Left Channel)")
axis tight

Figure contains an axes. The axes with title Bark-Based Spectrogram (Left Channel) contains an object of type surface.

surf(t,cf,XRdB,"EdgeColor","none");
xlabel("Time (s)")
ylabel("Frequency (Hz)")
view([0,90])
title("Bark-Based Spectrogram (Right Channel)")
axis tight

Figure contains an axes. The axes with title Bark-Based Spectrogram (Right Channel) contains an object of type surface.

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

[audioIn,fs] = audioread("NoisySpeech-16-22p5-mono-5secs.wav");

win = hann(round(0.04*fs),"periodic");
noverlap = round(0.02*fs);
fftLength = 1024;

[S,F,t] = stft(audioIn,fs, ...
               "Window",win, ...
               "OverlapLength",noverlap, ...
               "FFTLength",fftLength, ...
               "FrequencyRange","onesided");
PowerSpectrum = S.*conj(S);

Проектирование банка слуховых фильтров на основе ERB. Постройте график банка фильтров.

numBands = 32;
range = [0,11025];
normalization = "bandwidth";

[fb,cf] = designAuditoryFilterBank(fs, ...
    "FrequencyScale","erb", ...
    "FFTLength",fftLength, ...
    "NumBands",numBands, ...
    "FrequencyRange",range, ...
    "Normalization",normalization);

plot(F,fb.');
grid on
title("ERB Filter Bank")
xlabel("Frequency (Hz)")

Figure contains an axes. The axes with title ERB Filter Bank contains 32 objects of type line.

Для применения фильтрации в частотной области выполните матричное умножение набора фильтров и спектрограммы мощности.

X = fb*PowerSpectrum;

Визуализация мощности на полосу в дБ.

XdB = 10*log10(X);
surf(t,cf,XdB,"EdgeColor","none");
xlabel("Time (s)")
ylabel("Frequency (Hz)")
view([0,90])
title("ERB-Based Spectrogram")
axis tight

Figure contains an axes. The axes with title ERB-Based Spectrogram contains an object of type surface.

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

свернуть все

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

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

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: "FrequencyScale","mel"

Частотная шкала, используемая для проектирования набора слуховых фильтров, определяемая как разделенная запятыми пара, состоящая из 'FrequencyScale' и "mel", "bark", или "erb".

Типы данных: char | string

Количество точек, используемых для вычисления DFT, указанных как разделенная запятыми пара, состоящая из 'FFTLength' и положительное целое число.

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

Количество полосовых фильтров, указанных как разделенная запятыми пара, состоящая из 'NumBands' и положительное целое число. Количество полосовых фильтров по умолчанию зависит от FrequencyScale:

  • Если FrequencyScale имеет значение "bark" или "mel", то NumBands по умолчанию: 32.

  • Если FrequencyScale имеет значение "erb", то NumBands по умолчанию: ceil(hz2erb(FrequencyRange(2))-hz2erb(FrequencyRange(1))).

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

Диапазон частот для проектирования набора слуховых фильтров в Гц, определяемый как разделенная запятыми пара, состоящая из 'FrequencyRange' и двухэлементный вектор строк монотонно возрастающих значений в диапазоне [0, fs/2].

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

Метод нормализации, используемый для весов набора фильтров:

  • "bandwidth" - Веса каждого полосового фильтра нормализуются соответствующей полосой пропускания фильтра.

  • "area" - Веса каждого полосового фильтра нормируются соответствующей областью полосового фильтра.

  • "none" - Веса фильтров не нормируются.

Типы данных: char | string

Спроектируйте односторонний или двусторонний набор фильтров, указанный как пара, разделенная запятыми, состоящая из 'OneSided' и либо true или false.

Типы данных: logical

Домен, в котором разработан банк фильтров, указанный как разделенная запятыми пара, состоящая из 'FilterBankDesignDomain' и либо "linear" или "warped". Задайте для домена разработки банка фильтров значение "linear" для проектирования полосовых фильтров в линейной (Гц) области. Задайте для домена разработки банка фильтров значение "warped" для проектирования полосовых фильтров в деформированном (mel или Bark) домене.

Зависимости

Этот параметр применяется только в том случае, если FrequencyScale имеет значение "mel" (по умолчанию) или "bark".

Типы данных: char | string

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

свернуть все

Набор слуховых фильтров, возвращаемый в виде матрицы M-by-N, где M - количество полос (NumBands), а N - количество частотных точек одностороннего спектра (ceil(FFTLength/2)).

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

Центральные частоты полосовых фильтров в Гц, возвращаемые в виде вектора строки с NumBands элементы.

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

Полоса пропускания полосовых фильтров в Гц, возвращаемая в виде вектора строки с NumBands элементы.

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

Алгоритмы

Набор фильтров выполнен в виде полузамкнутых треугольников, равномерно разнесенных по шкале фильтров. [1]

Набор фильтров Барка выполнен в виде полузамкнутых треугольников, равноудаленных по шкале Барка. [2]

Блок фильтров ERB выполнен в виде гамматоновых фильтров [4], центральные частоты которых равномерно разнесены по шкале ERB. [3]

Вопросы совместимости

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

В R2020b изменилось поведение

Ссылки

[1] О'Шэгнесси, Дуглас. Речевое общение: человек и машина. Рединг, Массачусетс: Издательская компания Эддисон-Уэсли, 1987.

[2] Траунмюллер, Хартмут. «Аналитические выражения для тонотопической сенсорной шкалы». Журнал Акустического общества Америки. Том 88, выпуск 1, 1990, стр. 97-100.

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

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

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

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

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