exponenta event banner

designVarSlopeFilter

Расчетный откос низкочастотного или высокопрочного фильтра БИХ

Описание

пример

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

пример

[B,A] = designVarSlopeFilter(slope,Fc,type) указывает тип конструкции как фильтр нижних или верхних частот.

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

Примеры

свернуть все

Проектирование двух низкочастотных IIR-фильтров второго порядка (SOS) с использованием designVarSlopeFilter.

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

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.

Проектирование фильтра нижних частот IIR секции второго порядка (SOS) с использованием designVarSlopeFilter. Используйте фильтр нижних частот для обработки звукового сигнала.

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

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)

Создайте фильтр нижних частот с наклоном 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.

Создайте биквадратный фильтр.

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 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.

Спроектировать два фильтра IIR высокого класса второго порядка (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. Плосивы могут быть подчеркнуты в процессе записи и часто неудивительны, чтобы услышать. В этом примере сведение к минимуму спозивов речевого сигнала осуществляется с помощью фильтрации верхних частот и низкополосного сжатия.

Создать 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 изобретение позволяет реализовать конструкцию фильтра верхних частот. Создайте перекрестный фильтр с одним перекрестным фильтром на частоте 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. Примените фильтрацию верхних частот с помощью биквад-фильтра.

  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'-- Фильтр нижних частот

  • 'hi'-- Фильтр верхних частот

Типы данных: 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] Орфанидис, Софокл Дж. «Дизайн цифрового параметрического эквалайзера высокого порядка». Журнал Общества аудиотехники. том 53, ноябрь 2005, стр. 1026-1046.

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

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.
Представлен в R2016a