designVarSlopeFilter

Проектируйте lowpass или БИХ с переменным уклоном

Описание

пример

[B,A] = designVarSlopeFilter(slope,Fc) проектирует lowpass с заданным наклоном и частотой среза. B и A являются матрицами коэффициентов числителя и знаменателя с столбцами, соответствующими каскадным секциям второго порядка (SOS).

пример

[B,A] = designVarSlopeFilter(slope,Fc,type) задает тип проекта как lowpass или highpass фильтр.

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

Примеры

свернуть все

Проектируйте lowpass секции второго порядка фильтры БИХ (SOS) с помощью designVarSlopeFilter.

Укажите частоту дискретизации, наклон и нормированную частоту среза для двух lowpass БИХ. Частота дискретизации находится в Гц. Наклон указан в дБ/октаве.

Fs = 48e3;

slope = 18;

Fc1 = 10e3/(Fs/2);
Fc2 = 16e3/(Fs/2);

Спроектируйте коэффициенты фильтра, используя указанные параметры.

[B1,A1] = designVarSlopeFilter(slope,Fc1,"Orientation","row");
[B2,A2] = designVarSlopeFilter(slope,Fc2,"Orientation","row");

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

fvtool([B1,A1],[B2,A2],"Fs",Fs,"FrequencyScale","Log");

legend("Fc = 10 kHz", ...
       "Fc = 16 kHz", ...
       "Location","SouthWest");

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 2 objects of type line. These objects represent Fc = 10 kHz, Fc = 16 kHz.

Проектируйте lowpass секции второго порядка (SOS) БИХ фильтруйте с помощью designVarSlopeFilter. Используйте фильтр lowpass для обработки аудиосигнала.

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

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)

Проектируйте lowpass с наклоном 12 дБ/октавы и нормализованной частотой среза 0,15.

slope = 12;
cutoff = 0.15;
[B,A] = designVarSlopeFilter(slope,cutoff);

Визуализация вашего создания фильтра. Для вывода коэффициентов фильтра, подходящих для fvtool, вызов designVarSlopeFilter снова с теми же спецификациями проекта, но с Orientation установлено на "row".

[Bvisualize,Avisualize] = designVarSlopeFilter(slope,cutoff,"Orientation","row");
fvtool([Bvisualize,Avisualize],"Fs",sampleRate);

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

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

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

Воспроизведение фильтрованного аудиосигнала и визуализация исходного и фильтрованного спектров.

count = 0;
while count < 2500
    originalSignal = fileReader();
    filteredSignal = myFilter(originalSignal,B,A);
    scope([originalSignal(:,1),filteredSignal(:,1)]);
    deviceWriter(filteredSignal);
    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 Signal contains 2 objects of type line. These objects represent Original Signal, Filtered Signal.

Проектируйте две секции второго порядка (SOS) высокоскоростных фильтра БИХ с помощью designVarSlopeFilter.

Задайте частоту дискретизации в Гц, наклон в дБ/октаве и нормализованную частоту среза.

Fs = 48e3;
slope1 = 18;
slope2 = 36;
Fc = 4000/(Fs/2);

Спроектируйте коэффициенты фильтра, используя указанные параметры.

[B1,A1] = designVarSlopeFilter(slope1,Fc,"hi","Orientation","row");
[B2,A2] = designVarSlopeFilter(slope2,Fc,"hi","Orientation","row");

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

fvtool([B1,A1],[B2,A2],...
       "Fs",Fs,...
       "FrequencyScale","Log");
legend("slope = 18 dB/octave", ...
       "slope = 36 dB/octave", ...
       "Location","NorthWest")

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 2 objects of type line. These objects represent slope = 18 dB/octave, slope = 36 dB/octave.

Плозивы являются созвучными звуками, возникающими в результате внезапного релиза воздушного потока. Они наиболее выражены в словах, начинающихся со звуков p, d и g. Плозивы могут быть подчеркнуты процессом записи и часто неприятно слышны. В этом примере вы минимизируете plosives речевого сигнала, применяя высокочастотную фильтрацию и низкополосное сжатие.

Создайте dsp.AudioFileReader объект и audioDeviceWriter объект для считывания аудиосигнала из файла и записи аудиосигнала в устройство. Воспроизведите необработанный сигнал. Затем отпустите средство чтения файлов и средство записи.

fileReader = dsp.AudioFileReader('audioPlosives.wav');
deviceWriter = audioDeviceWriter('SampleRate',fileReader.SampleRate);

while ~isDone(fileReader)
    audioIn = fileReader();
    deviceWriter(audioIn);
end
release(deviceWriter)
release(fileReader)

Проектируйте высокочастотный фильтр с крутым сгибом всех частот ниже 120 Гц. Использование dsp.BiquadFilter объект для реализации создания фильтра highpass. Создайте перекрестный фильтр с одним кроссовером на частоте 250 Гц. Перекрестный фильтр позволяет вам разделить интересующие полосы для обработки. Создайте динамический компрессор области значений для сжатия динамической области значений взрывных звуков. Чтобы не применять усиление подпитки, установите MakeUpGainMode в "Property" и используйте 0 дБ по умолчанию MakeUpGain значение свойства. Создайте временные возможности, чтобы визуализировать обработанный и необработанный аудиосигнал.

[B,A] = designVarSlopeFilter(48,120/(fileReader.SampleRate/2),"hi");
biquadFilter = dsp.BiquadFilter( ...
    "SOSMatrixSource","Input port", ...
    "ScaleValuesInputPort",false);

crossFilt = crossoverFilter( ...
    "SampleRate",fileReader.SampleRate, ...
    "NumCrossovers",1, ...
    "CrossoverFrequencies",250, ...
    "CrossoverSlopes",48);

dRCompressor = compressor( ...
    "Threshold",-35, ...
    "Ratio",10, ...
    "KneeWidth",20, ...
    "AttackTime",1e-4, ...
    "ReleaseTime",3e-1, ...
    "MakeUpGainMode","Property", ...
    "SampleRate",fileReader.SampleRate);

scope = timescope( ...
    "SampleRate",fileReader.SampleRate, ...
    "TimeSpanSource","property","TimeSpan",3, ...
    "BufferLength",fileReader.SampleRate*3*2, ...
    "YLimits",[-1 1], ...
    "ShowGrid",true, ...
    "ShowLegend",true, ...
    "ChannelNames",{'Original','Processed'});

В цикле аудиопотока:

  1. Чтение в систему координат аудио файла.

  2. Применить фильтрацию highpass с помощью биквадного фильтра.

  3. Разделите аудиосигнал на две полосы.

  4. Примените динамическое сжатие области значений к нижней полосе.

  5. Ремикшируйте каналы.

  6. Запишите обработанный аудиосигнал в аудио устройство для прослушивания.

  7. Визуализируйте обработанные и необработанные сигналы во временных возможностях.

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

while ~isDone(fileReader)
    audioIn = fileReader();
    audioIn = biquadFilter(audioIn,B,A);
    [band1,band2] = crossFilt(audioIn);
    band1compressed = dRCompressor(band1);
    audioOut = band1compressed + band2;
    deviceWriter(audioOut);
    scope([audioIn audioOut])
end

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

release(deviceWriter)
release(fileReader)
release(crossFilt)
release(dRCompressor)
release(scope)

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

свернуть все

Наклон фильтра в дБ/октаве, заданный как действительный скаляр в области значений [0:6:48]. Значения, которые не множители 6, округлены.

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

Нормированная частота отсечения, заданная как действительный скаляр в диапазоне от 0 до 1, где 1 соответствует частоте Нюквиста (

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

Тип фильтра, заданный как 'lo' или 'hi'.

  • 'lo'-- Lowpass фильтр

  • 'hi'-- Фильтр Highpass

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

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

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

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

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

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

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

свернуть все

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

  • Если 'Orientation' установлено в "column", затем B возвращается как матрица 3 на 4. Каждый столбец B соответствует коэффициентам числителя другой секции второго порядка вашего каскадного БИХ.

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

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

  • Если 'Orientation' установлено в "column", затем A возвращается как матрица 2 на 4. Каждый столбец A соответствует коэффициентам знаменателя другой секции второго порядка вашего каскадного БИХ. A не включает начальный коэффициент единства для каждого раздела.

  • Если 'Orientation' установлено в "row", затем B возвращается как матрица 4 на 3. Каждая строка B соответствует коэффициентам знаменателя другой секции второго порядка вашего каскадного БИХ.

Ссылки

[1] Orfanidis, Sophocles J. «High-Order Digital Parametric Equalizer Design». Журнал Общества аудиотехники. Том 53, ноябрь 2005, стр. 1026-1046.

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

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

.
Введенный в R2016a