designVarSlopeFilter

Разработайте переменный наклон lowpass или highpass БИХ-фильтр

Синтаксис

[B,A] = designVarSlopeFilter(slope,Fc)
[B,A] = designVarSlopeFilter(slope,Fc,type)

Описание

пример

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

пример

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

Примеры

свернуть все

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

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

Fs = 48e3;

slope = 18;

Fc1 = 10000/(Fs/2);
Fc2 = 16000/(Fs/2);

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

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

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

SOS1 = [B1',[ones(4,1),A1']];
SOS2 = [B2',[ones(4,1),A2']];

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

fvtool(SOS1,SOS2,'Fs',Fs);

legend('Fc = 10000 Hz',...
    'Fc = 16000 Hz',...
    'Location','SouthWest');

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

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

Разработайте фильтр lowpass с наклоном на 12 дБ/октавы и 0,15 нормированными сокращениями частоты.

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

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

SOS = [B',[ones(4,1),A']];
fvtool(SOS, ...
    'Fs',sampleRate);

Создайте Системный объект фильтра 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'});

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

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

Разработайте два раздела второго порядка (SOS) highpass БИХ-фильтры с помощью designVarSlopeFilter.

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

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

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

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

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

SOS1 = [B1',[ones(4,1),A1']];
SOS2 = [B2',[ones(4,1),A2']];

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

fvtool(SOS1,SOS2,...
    'Fs',Fs,...
    'FrequencyScale','Log');
legend('slope = 18 dB/octave',...
    'slope = 36 dB/octave',...
    'Location','NorthWest')

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

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

fileReader   = dsp.AudioFileReader( ...
    fullfile(matlabroot,'examples','audio','Plosives.wav'));
deviceWriter = audioDeviceWriter;

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

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

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

crossFilt = crossoverFilter( ...
    '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 = dsp.TimeScope( ...
    'SampleRate',fileReader.SampleRate, ...
    'TimeSpan',3, ...
    'BufferLength',fileReader.SampleRate*3*2, ...
    'YLimits',[-1 1], ...
    'ShowGrid',true, ...
    'ShowLegend',true, ...
    'ChannelNames',{'Original','Processed'});

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

  1. Читайте в кадре звукового файла.

  2. Примените highpass, фильтрующий использование вашего фильтра biquad.

  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(scope)
release(crossFilt)
release(dRCompressor)

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

свернуть все

Наклон фильтра в дБ/октаве, заданном как действительный скаляр в области значений [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

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

свернуть все

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

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

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

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

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

Введенный в R2016a