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]);

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains an object of type line.

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

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

frameSize = 256;

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

sampleRate = fileReader.SampleRate;

deviceWriter = audioDeviceWriter("SampleRate",sampleRate);

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

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");

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains an object of type line.

Создайте фильтр 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'});

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

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)

Figure Spectrum Analyzer contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes with title Original and Equalized Signals contains 2 objects of type line. These objects represent Original Signal, Equalized Signal.

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

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

frameSize = 256;

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

sampleRate = fileReader.SampleRate;

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

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

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)

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains an object of type line.

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

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'});

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

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)

Figure Spectrum Analyzer contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes with title Original and Equalized Signals contains 2 objects of type line. These objects represent Original Signal, Equalized Signal.

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

свернуть все

Порядок фильтра в виде скалярного или вектора-строки та же длина как 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×log10(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