designParamEQ

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

Синтаксис

[B,A] = designParamEQ(N,gain,centerFreq,bandwidth)
[B,A] = designParamEQ(N,gain,centerFreq,bandwidth,mode)

Описание

пример

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

пример

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

Примеры

свернуть все

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

N = [2,4];
gain = [6,-4]; 
centerFreq = [0.25,0.75]; 
bandwidth = [0.12,0.10];

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

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

Создайте матрицу фильтра, совместимую с fvtool.

SOS = [B',[ones(sum(N)/2,1),A']];

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

fvtool(SOS)

Разработайте параметрический эквалайзер разделов второго порядка (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.

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

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

SOS = [B',[ones(4,1),A']];
fvtool(SOS,...
    '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(scope)
release(deviceWriter)
release(fileReader)

Разработайте параметрический эквалайзер разделов четвертого порядка (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);

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

section1 = dsp.IIRFilter('Numerator',B(:,1)','Denominator',[1,A(:,1)']);
section2 = dsp.IIRFilter('Numerator',B(:,2)','Denominator',[1,A(:,2)']);

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

[H1,w] = freqz(section1,8192,sampleRate);
H2 = freqz(section2,8192,sampleRate);

H = 20.*log10(abs(H1.*H2));

semilogx(w,H);
title('Magnitude Response (dB)')
xlabel('Frequency (Hz)')
ylabel('Magnitude (dB)')
grid on

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

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 = section1(x);
    z = section2(y);
    
    scope([x(:,1),z(:,1)]);
    
    deviceWriter(z);
    
    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

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

свернуть все

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

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

A не включает ведущий коэффициент единицы для каждого раздела.

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

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

Введенный в R2016a