designShelvingEQ

Спроектируйте отлогий эквалайзер

Описание

пример

[B,A] = designShelvingEQ(gain,slope,Fc) проектирует эквалайзер низкой полки с заданным усилением, наклоном, и частотой среза, Fc. Эквалайзер возвращен как расположенные каскадом БИХ-фильтры секции второго порядка (SOS).

пример

[B,A] = designShelvingEQ(gain,slope,Fc,type) задает тип проекта как низко откладывающий или высоко откладывающий эквалайзер.

[B,A] = designShelvingEQ(___,Name,Value) задает опции с помощью одного или нескольких Name,Value парные аргументы.

Примеры

свернуть все

Спроектируйте три БИХ-эквалайзера низкой полки второго порядка с помощью designShelvingEQ. Три отлогих эквалайзера используют три отдельных наклонных технических требований.

Задайте частоту дискретизации, пиковое усиление, наклонный коэффициент и нормированную частоту среза для трех отлогих эквалайзеров. Частота дискретизации находится в Гц. Пиковое усиление находится в дБ.

Fs = 44.1e3;

gain = 5;

slope1 = 0.5;
slope2 = 0.75;
slope3 = 1;

Fc = 1000/(Fs/2);

Спроектируйте коэффициенты фильтра с помощью заданных параметров.

[B1,A1] = designShelvingEQ(gain,slope1,Fc,"Orientation","row");
[B2,A2] = designShelvingEQ(gain,slope2,Fc,"Orientation","row");
[B3,A3] = designShelvingEQ(gain,slope3,Fc,"Orientation","row");

Визуализируйте свое создание фильтра.

fvtool( ...
    dsp.BiquadFilter([B1,A1]), ...
    dsp.BiquadFilter([B2,A2]), ...
    dsp.BiquadFilter([B3,A3]), ...
    "Fs",Fs, ...
    "FrequencyScale","Log");

legend("slope = 0.5", ...
    "slope = 0.75", ...
    "slope = 1");

Создайте считывающее устройство звукового файла и объекты средства записи аудио устройства. Используйте частоту дискретизации читателя как частота дискретизации средства записи.

frameSize = 256;

fileReader = dsp.AudioFileReader("RockGuitar-16-44p1-stereo-72secs.wav","SamplesPerFrame",frameSize);

deviceWriter = audioDeviceWriter("SampleRate",fileReader.SampleRate);

Проигрывайте звуковой сигнал через свое устройство.

count = 0;
while count < 2500
    audio = step(fileReader);
    play(deviceWriter,audio);
    count = count + 1;
end
reset(fileReader)

Спроектируйте эквалайзер низкой полки секций второго порядка (SOS).

gain = 10;
slope = 3;
Fc = 0.025;

[B,A] = designShelvingEQ(gain,slope,Fc);

Визуализируйте свое отлогое создание фильтра.

SOS = [B',[1,A']];
fvtool(dsp.BiquadFilter("SOSMatrix",SOS), ...
    "Fs",fileReader.SampleRate, ...
    "FrequencyScale","Log");

Создайте biquad объект фильтра.

myFilter = dsp.BiquadFilter( ...
    "SOSMatrixSource","Input port", ...
    "ScaleValuesInputPort",false);

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

scope = dsp.SpectrumAnalyzer( ...
    "SampleRate",fileReader.SampleRate, ...
    "PlotAsTwoSidedSpectrum",false, ...
    "FrequencyScale","Log", ...
    "FrequencyResolutionMethod","WindowLength", ...
    "WindowLength",frameSize, ...
    "Title","Original and Equalized Signal", ...
    "ShowLegend",true, ...
    "ChannelNames",{'Original Signal','Equalized Signal'});

Проигрывайте компенсируемый звуковой сигнал и визуализируйте исходные и компенсируемые спектры.

count = 0;
while count < 2500
    originalSignal = fileReader();
    equalizedSignal = myFilter(originalSignal,B,A);
    scope([originalSignal(:,1),equalizedSignal(:,1)]);
    deviceWriter(equalizedSignal);
    count = count + 1;
end

Как лучшая практика, выпустите свои объекты, однажды сделанные.

release(fileReader)
release(deviceWriter)
release(scope)

Спроектируйте трех БИХ второго порядка высокие эквалайзеры полки с помощью designShelvingEQ. Три отлогих эквалайзера используют три отдельных технических требований усиления.

Задайте частоту дискретизации, пиковое усиление, наклонный коэффициент и нормированную частоту среза для трех отлогих эквалайзеров. Частота дискретизации находится в Гц. Пиковое усиление находится в дБ.

Fs = 44.1e3;

gain1 = -6;
gain2 = 6;
gain3 = 12;

slope = 0.8;

Fc = 18000/(Fs/2);

Спроектируйте коэффициенты фильтра с помощью заданных параметров.

[B1,A1] = designShelvingEQ(gain1,slope,Fc,"hi","Orientation","row");
[B2,A2] = designShelvingEQ(gain2,slope,Fc,"hi","Orientation","row");
[B3,A3] = designShelvingEQ(gain3,slope,Fc,"hi","Orientation","row");

Визуализируйте свое создание фильтра.

fvtool([B1,A1;[1 0 0 1 0 0]], ...
       [B2,A2;[1 0 0 1 0 0]], ...
       [B3,A3;[1 0 0 1 0 0]], ...
       "Fs",Fs);
   
legend("gain = -6 dB", ...
       "gain =  6 dB", ...
       "gain = 12 dB", ...
       "Location","NorthWest")

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

свернуть все

Пиковое усиление в дБ в виде действительного скаляра в области значений –12 к 12.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Наклонный коэффициент в виде действительного скаляра в области значений от 0 до 5.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Нормированная частота среза в виде действительного скаляра в области значений от 0 до 1, где 1 соответствует частоте Найквиста (π рад/выборка).

Нормированная частота среза реализована как половина отлогого усиления фильтра или gain/2 дБ.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Отфильтруйте тип в виде 'lo' или 'hi'.

  • 'lo'– Низко откладывание эквалайзера

  • 'hi'– Высоко откладывание эквалайзера

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

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

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

Пример: 'Orientation',"row"

Ориентация возвращенных коэффициентов фильтра в виде разделенной запятой пары, состоящей из 'Orientation' и "column" или "row":

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

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

свернуть все

Коэффициенты фильтра числителя, возвращенные как вектор. Размер и интерпретация B зависит от Orientation:

  • Если 'Orientation' установлен в "column", затем B возвращен как трехэлементный вектор-столбец.

  • Если 'Orientation' установлен в "row", затем B возвращен как трехэлементный вектор-строка.

.

Коэффициенты фильтра знаменателя спроектированного БИХ-фильтра второго порядка, возвращенного как вектор. Размер и интерпретация A зависит от Orientation:

  • Если 'Orientation' установлен в "column", затем A возвращен как двухэлементный вектор-столбец. A не включает ведущий коэффициент единицы.

  • Если 'Orientation' установлен в "row", затем A возвращен как трехэлементный вектор-строка.

Ссылки

[1] Бристоу-Джонсон, Роберт. "Формулы поваренной книги для Аудио Коэффициенты Фильтра EQ Biquad". Полученный доступ 02 марта 2016. http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt.

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

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

Введенный в R2016a