designAuditoryFilterBank

Спроектируйте слуховой набор фильтров

Описание

пример

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

пример

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

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

Примеры

свернуть все

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

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

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

numBands = size(fb,1)
numBands = 32

designAuditoryFilterBank предназначается для фильтрации частотного диапазона. По умолчанию, designAuditoryFilterBank принимает ДПФ с 1024 точками и возвращает полупримкнутый набор фильтров частотного диапазона с 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;
расположитесь = [0,4000];
нормализация = "bandwidth";

[fb, cf] = designAuditoryFilterBank (фс, ...
                                   "FFTLength", fftLength, ...
                                   "NumBands", numBands, ...
                                   "FrequencyRange"Область значений, ...
                                   "Normalization", нормализация);

график (F, fb. ')
сетка on
заголовок"Mel Filter Bank")
xlabel"Frequency (Hz)")

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

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

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

[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;
расположитесь = [0,22050];
нормализация = "area";
designDomain = "linear";

[fb, cf] = designAuditoryFilterBank (фс, ...
    "FrequencyScale","bark", ...
    "FFTLength", fftLength, ...
    "NumBands", numBands, ...
    "FrequencyRange"Область значений, ...
    "Normalization", нормализация, ...
    "FilterBankDesignDomain", designDomain);

график (F, fb. ');
сетка on
заголовок"Bark Filter Bank")
xlabel"Frequency (Hz)")

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

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

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

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

[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;
расположитесь = [0,11025];
нормализация = "bandwidth";

[fb, cf] = designAuditoryFilterBank (фс, ...
    "FrequencyScale","erb", ...
    "FFTLength", fftLength, ...
    "NumBands", numBands, ...
    "FrequencyRange"Область значений, ...
    "Normalization", нормализация);

график (F, fb. ');
сетка on
заголовок"ERB Filter Bank")
xlabel"Frequency (Hz)")

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

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

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

свернуть все

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

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

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

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

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

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

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

Число точек раньше вычисляло ДПФ в виде разделенной запятой пары, состоящей из 'FFTLength' и положительное целое число.

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

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

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

  • Если FrequencyScale установлен в "erb", затем NumBands значения по умолчанию, чтобы перекрыть (hz2erb(FrequencyRange(2))-hz2erb(FrequencyRange(1))).

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

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

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

Метод нормализации использовал на весах набора фильтров:

  • "bandwidth" – Веса каждого полосового фильтра нормированы на соответствующую пропускную способность фильтра.

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

  • "none" – Веса фильтров не нормированы.

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

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

Типы данных: логический

Область, в которой набор фильтров спроектирован в виде разделенной запятой пары, состоящей из 'FilterBankDesignDomain' и любой "linear" или "warped". Установите область проекта набора фильтров на "linear" спроектировать полосовые фильтры в линейном (Гц) область. Установите область проекта набора фильтров на "warped" спроектировать полосовые фильтры в деформированном (mel или Кора) область.

Зависимости

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

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

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

свернуть все

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

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

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

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

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

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

Алгоритмы

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

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

Набор фильтров ERB спроектирован как gammatone фильтры [4], чьи центральные частоты равномерно распределены по шкале ERB. [3]

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

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

Поведение изменяется в R2020b

Ссылки

[1] О'Шэгнесси, Дуглас. Речевая коммуникация: человек и машина. Чтение, MA: Addison-Wesley Publishing Company, 1987.

[2] Traunmüller, Hartmut. "Аналитические Выражения для Тонотемы Сенсорная Шкала". Журнал Акустического Общества Америки. Издание 88, Выпуск 1, 1990, стр 97–100.

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

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

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

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

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

| | | | | | |

Введенный в R2019b