designParamEQ

Спроектируйте параметрический эквалайзер

Описание

пример

[B,A] = designParamEQ(N,gain,centerFreq,bandwidth) проектирует Nпараметрический эквалайзер th-порядка с заданным усилением, сосредоточьте частоту и пропускную способность. B и A матрицы числителя и коэффициентов знаменателя, со столбцами, соответствующими каскадным фильтрам секции второго порядка (SOS).

пример

[B,A] = designParamEQ(N,gain,centerFreq,bandwidth,mode) задает, реализован ли параметрический эквалайзер с секциями второго порядка или разделами четвертого порядка (FOS).

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

Примеры

свернуть все

Укажите, что порядок фильтра, пиковое усиление в дБ, нормировал центральные частоты и нормировал пропускную способность полос вашего параметрического эквалайзера.

N = [2, ...
     4];
 
получите = [6, ...
      -4]; 
  
centerFreq = [0.25, ...
              0.75]; 
          
пропускная способность = [0.12, ...
              0.1];

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

[B,A] = designParamEQ(N,gain,centerFreq,bandwidth,"Orientation","row");

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

fvtool([B,A]);

Спроектируйте параметрический эквалайзер секций второго порядка (SOS) с помощью designParamEQ и отфильтруйте аудиопоток.

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

frameSize = 256;

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

sampleRate = fileReader.SampleRate;

deviceWriter = audioDeviceWriter("SampleRate",sampleRate);

setup(fileReader)
setup(deviceWriter,ones(frameSize,2))

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

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

Спроектируйте параметрический эквалайзер SOS, подходящий для использования с dsp.BiquadFilter.

N = [4,4];
gain = [-25,35];
centerFreq = [0.01,0.5];
bandwidth = [0.35,0.5];
[B,A] = designParamEQ(N,gain,centerFreq,bandwidth);

Визуализируйте свое создание фильтра. Вызовите designParamEQ с теми же спецификациями проекта. Задайте выходную ориентацию как "row" так, чтобы это подошло для использования с fvtool.

[Bvisualize,Avisualize] = designParamEQ(N,gain,centerFreq,bandwidth,"Orientation","row");
fvtool([Bvisualize,Avisualize], ...
    "Fs",fileReader.SampleRate, ...
    "FrequencyScale","Log");

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

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

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

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

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

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

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

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

Спроектируйте параметрический эквалайзер разделов четвертого порядка (FOS) с помощью designParamEQ и отфильтруйте аудиопоток.

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

frameSize = 256;

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

sampleRate = fileReader.SampleRate;

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

setup(fileReader)
setup(deviceWriter,ones(frameSize,2))

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

count = 0;
while count < 2500
    x = fileReader();
    deviceWriter(x);
    count = count + 1;
end
reset(fileReader)

Спроектируйте коэффициенты параметрического эквалайзера FOS.

N = [2,4];
gain = [5,10];
centerFreq = [0.025,0.65];
bandwidth = [0.025,0.35];
mode = "fos";

[B,A] = designParamEQ(N,gain,centerFreq,bandwidth,mode,"Orientation","row");

Создайте БИХ-фильтры FOS.

myFilter = dsp.FourthOrderSectionFilter(B,A);

Визуализируйте частотную характеристику своего параметрического эквалайзера.

fvtool(myFilter)

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

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

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

setup(scope,ones(frameSize,2));

count = 0;
while count < 2500
    x = fileReader();
    y = myFilter(x);
    
    scope([x(:,1),y(:,1)]);
    
    deviceWriter(y);
    
    count = count + 1;
end

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

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

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

свернуть все

Порядок фильтра, заданный как скалярный или вектор-строка та же длина как centerFreq. Элементы вектора должны быть даже целыми числами.

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

Пиковое усиление в дБ, заданном как скалярный или вектор-строка та же длина как centerFreq. Элементы вектора должны быть с действительным знаком.

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

Нормированная центральная частота полос эквалайзера, заданных как скалярный или вектор-строка из действительных значений в области значений от 0 до 1, где 1 соответствует частоте Найквиста (π рад/выборка). Если centerFreq задан как вектор-строка, отдельные эквалайзеры спроектированы для каждого элемента centerFreq.

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

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

Нормированная пропускная способность измеряется на уровне дБ усиления/2. Если усиление установлено в -Inf (отметьте фильтр), нормированная пропускная способность измеряется в точке затухания на 3 дБ: 10×журнал10(0.5).

Чтобы преобразовать пропускную способность октавы в нормированную пропускную способность, вычислите связанный Q - фактор как

Q=2(octavebandwidth)2(octavebandwidth)1.

Затем преобразуйте в пропускную способность

bandwidth=centerFreqQ.

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

Режим проектирования, заданный как 'sos' или 'fos'.

  • 'sos' – Реализует ваш эквалайзер как расположенные каскадом фильтры второго порядка.

  • 'fos' – Реализует ваш эквалайзер как расположенные каскадом фильтры четвертого порядка. Поскольку разделы четвертого порядка не требуют расчета корней, они обычно более в вычислительном отношении эффективны.

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

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

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

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

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

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

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

свернуть все

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

  • Если 'Orientation' установлен в "column" и mode установлен в "sos", затем B возвращен как L-by-3 матрица. Каждый столбец соответствует коэффициентам числителя ваших каскадных секций второго порядка.

  • Если 'Orientation' установлен в "column" и mode установлен в "fos", затем B возвращен как L-by-5 матрица. Каждый столбец соответствует коэффициентам числителя ваших каскадных разделов четвертого порядка.

  • Если 'Orientation' установлен в "row" и mode установлен в "sos", затем B возвращен как 3 L матрицей. Каждая строка соответствует коэффициентам числителя ваших каскадных секций второго порядка.

  • Если 'Orientation' установлен в "row" и mode установлен в "fos", затем B возвращен как 5 L матрицей. Каждая строка соответствует коэффициентам числителя ваших каскадных разделов четвертого порядка.

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

  • Если 'Orientation' установлен в "column" и mode установлен в "sos", затем A возвращен как L-by-2 матрица. Каждый столбец соответствует коэффициентам знаменателя ваших каскадных секций второго порядка. A не включает ведущие коэффициенты единицы.

  • Если 'Orientation' установлен в "column" и mode установлен в "fos", затем A возвращен как L-by-4 матрица. Каждый столбец соответствует коэффициентам знаменателя ваших каскадных разделов четвертого порядка. A не включает ведущие коэффициенты единицы.

  • Если 'Orientation' установлен в "row" и mode установлен в "sos", затем A возвращен как 3 L матрицей. Каждая строка соответствует коэффициентам знаменателя ваших каскадных секций второго порядка.

  • Если 'Orientation' установлен в "row" и mode установлен в "fos", затем A возвращен как 5 L матрицей. Каждая строка соответствует коэффициентам знаменателя ваших каскадных разделов четвертого порядка.

Ссылки

[1] Orfanidis, Софокл Дж. "Старший Цифровой Проект Параметрического эквалайзера". Журнал Общества звукоинженеров. Издание 53, ноябрь 2005, стр 1026–1046.

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

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

Введенный в R2016a

Для просмотра документации необходимо авторизоваться на сайте