octaveFilter

Октавный и дробный октавный фильтр

Описание

The octaveFilter Система object™ выполняет октавно-диапазонную или дробно-октавно-диапазонную фильтрацию независимо по каждому входному каналу. Октавный диапазон является полосой частот, где самая высокая частота в два раза ниже самой низкой частоты. Октавно-диапазонные и дробные октавно-диапазонные фильтры обычно используются, чтобы имитировать, как люди воспринимают громкость. Октавные фильтры лучше всего понять при просмотре по логарифмической шкале, которая моделирует, как человеческое ухо взвешивает спектр.

Чтобы выполнить октавно-диапазонную или дробно-октавно-диапазонную фильтрацию на вашем входе:

  1. Создайте octaveFilter Объекту и установите его свойства.

  2. Вызывайте объект с аргументами, как будто это функция.

Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».

Создание

Описание

octFilt = octaveFilter создает Системный объект, octFilt, который выполняет октавно-полосную фильтрацию независимо по каждому входному каналу.

octFilt = octaveFilter(centerFreq) устанавливает свойство CenterFrequency на centerFreq.

octFilt = octaveFilter(centerFreq,bw) устанавливает свойство Bandwidth на bw.

octFilt = octaveFilter(___,Name,Value) устанавливает каждое свойство Name к заданной Value. Неопределенные свойства имеют значения по умолчанию.

Пример: octFilt = octaveFilter(1000,'1/3 octave','SampleRate',96000) создает Системный объект, octFilt, с центральной частотой 1000 Гц, шириной полосы фильтра 1/3 октавы и частотой дискретизации 96 000 Гц.

Свойства

расширить все

Если не указано иное, свойства являются нетронутыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируются, когда вы вызываете их, и release функция разблокирует их.

Если свойство настраивается, можно изменить его значение в любой момент.

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

Порядок октавного фильтра, заданный как четное целое число.

Настраиваемый: Нет

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

Центральная частота октавного фильтра в Гц, заданная как положительная скалярная величина.

При использовании parameterTunerцентральная частота должна находиться в области значений [0,2, SampleRate/2] Гц.

Настраиваемый: Да

Типы данных: single | double

Пропускная способность фильтра в октавах, задается как '1 octave', '2/3 octave', '1/2 octave', '1/3 octave', '1/6 octave', '1/12 octave', '1/24 octave', или '1/48 octave'.

Настраиваемый: Да

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

Переключатель Oversample, заданный как false или true.

  • false - Октавный фильтр запускается с входной частотой выборки.

  • true - Октавный фильтр запускается с двукратной частотой выборки входа. Избыточная дискретизация минимизирует эффекты искривления частоты, введенные билинейным преобразованием. Интерполятор конечной импульсной характеристики полуполосы реализует избыточную дискретизацию перед октавной фильтрацией. Полудиапазонный дециматор уменьшает частоту дискретизации до входной частоты дискретизации после октавной фильтрации.

Настраиваемый: Нет

Типы данных: logical

Вход скорость выборки в Гц, заданная как положительная скалярная величина.

Настраиваемый: Да

Типы данных: single | double

Использование

Синтаксис

Описание

пример

audioOut = octFilt(audioIn) применяет фильтрацию октавного диапазона к входному сигналу, audioIn, и возвращает отфильтрованный сигнал, audioOut. Тип фильтрации задается алгоритмом и свойствами octaveFilter Системный объект, octFilt.

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

расширить все

Аудио вход в октавный фильтр, заданный как матрица. Столбцы матрицы рассматриваются как независимые аудиоканалы.

Типы данных: single | double

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

расширить все

Аудио выхода из октавного фильтра, возвращенный как матрица того же размера, что и audioIn.

Типы данных: single | double

Функции объекта

Чтобы использовать функцию объекта, задайте системный объект в качестве первого входного параметра. Например, чтобы освободить системные ресурсы системного объекта с именем obj, используйте следующий синтаксис:

release(obj)

расширить все

createAudioPluginClassСоздайте класс аудиоплагина, который реализует функциональность Системного объекта
visualizeВизуализируйте и проверьте ответ фильтра
isStandardCompliantПроверьте, создание фильтра октава совместимо с ANSI S1.11-2004
getFilterВозврат объекта биквадного фильтра с набором расчётных параметров
getANSICenterFrequenciesПолучите список допустимых частот центра S1.11-2004 ANSI
parameterTunerНастройка параметров объекта во время потоковой передачи
configureMIDIСконфигурируйте соединения MIDI между аудио объекта и MIDI контроллера
disconnectMIDIОтсоедините элементы управления MIDI от аудио объекта
getMIDIConnectionsПолучите MIDI-соединения аудио объекта
cloneСоздайте повторяющийся системный объект
isLockedОпределите, используется ли системный объект
releaseОтпустите ресурсы и допустите изменения в значениях свойств системного объекта и входных характеристиках
resetСброс внутренних состояний Системного объекта
stepЗапуск алгоритма системного объекта

Примечание

octaveFilter поддерживает дополнительные функции анализа фильтра. Для получения дополнительной информации смотрите Analyze Octave Filter Design.

Примеры

свернуть все

Использование octaveFilter для разработки фильтра диапазона 1/3 октавы с центром 1000 Гц. Обработайте аудиосигнал, используя создание фильтра.

Создайте dsp.AudioFileReader объект.

samplesPerFrame = 1024;
reader = dsp.AudioFileReader('RockGuitar-16-44p1-stereo-72secs.wav','SamplesPerFrame',samplesPerFrame);

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

centerFreq = 1000;
bw = '1/3 octave';
Fs = reader.SampleRate;

octFilt = octaveFilter(centerFreq,bw,'SampleRate',Fs);

Визуализируйте ответ фильтра и проверьте, что он соответствует классу 0 маске стандарта ANSI S1.11-2004.

visualize(octFilt,'class 0')

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

scope = dsp.SpectrumAnalyzer( ...
    'SampleRate',Fs, ...
    'PlotAsTwoSidedSpectrum',false, ...
    'FrequencyScale','Log', ...
    'FrequencyResolutionMethod','WindowLength', ...
    'WindowLength',samplesPerFrame, ...
    'Title','Octave-Band Filtering', ...
    'ShowLegend',true, ...
    'ChannelNames',{'Original signal','Filtered signal'});

Обработайте аудиосигнал в цикле аудиопотока. Визуализация отфильтрованного аудио и исходного аудио. В качестве наилучшей практики отпустите системные объекты по завершении.

while ~isDone(reader)
    x = reader();
    y = octFilt(x);
    scope([x(:,1),y(:,1)])
end

release(octFilt)
release(reader)
release(scope)

Figure Spectrum Analyzer contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes with title Octave-Band Filtering contains 2 objects of type line. These objects represent Original signal, Filtered signal.

Создайте октавный фильтр. Визуализируйте ответ фильтра и проверьте, что он совместим с классом 2.

octFilt = octaveFilter('CenterFrequency',1000);
visualize(octFilt,'class 2')

Анализируйте фильтр с помощью fvtool.

fvtool(octFilt,'Fs',octFilt.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.

The octaveFilter объект поддерживает несколько методов анализа фильтра. Для получения дополнительной информации используйте help в командной строке:

help octaveFilter.helpFilterAnalysis
    The following analysis methods are available for discrete-time filter System objects:
 
    fvtool       -  Filter visualization tool
    info         -  Filter information
    freqz        -  Frequency response
    phasez       -  Phase response
    zerophase    -  Zero-phase response
    grpdelay     -  Group delay response
    phasedelay   -  Phase delay response
    impz         -  Impulse response
    impzlength   -  Length of impulse response
    stepz        -  Step response
    zplane       -  Pole/zero plot
    cost         -  Cost estimate for implementation of the filter System object
    measure      -  Measure characteristics of the frequency response   
 
    order        -  Filter order
    coeffs       -  Filter coefficients in a structure
    firtype      -  Determine the type (1-4) of a linear phase FIR filter System object
    tf           -  Convert to transfer function
    zpk          -  Convert to zero-pole-gain
    ss           -  Convert to state space representation
 
    isallpass    -  Verify if filter System object is allpass
    isfir        -  Verify if filter System object is FIR
    islinphase   -  Verify if filter System object is linear phase
    ismaxphase   -  Verify if filter System object is maximum phase
    isminphase   -  Verify if filter System object is minimum phase
    isreal       -  Verify if filter System object is minimum real
    issos        -  Verify if filter System object is in second-order sections form
    isstable     -  Verify if filter System object is stable
 
    realizemdl   -  Filter realization (Simulink diagram)   
 
    specifyall   -  Fully specify fixed-point filter System object settings  
 
    cascade      -  Create a FilterCascade System object  
 
    Second-order sections:
 
    scale        -  Scale second-order sections of BiquadFilter System object
    scalecheck   -  Check scaling of BiquadFilter System object
    reorder      -  Reorder second-order sections of BiquadFilter System object
    cumsec       -  Cumulative second-order section of BiquadFilter System object
    scaleopts    -  Create an options object for second-order section scaling
    sos          -  Convert to second-order-sections (for IIRFilter System objects only)
 
    Fixed-Point (Fixed-Point Designer Required):
 
    freqrespest  -  Frequency response estimate via filtering
    freqrespopts -  Create an options object for frequency response estimate
    noisepsd     -  Power spectral density of filter output due to roundoff noise
    noisepsdopts -  Create an options object for output noise PSD computation
 
    Multirate Analysis:
 
    polyphase                - Polyphase decomposition of multirate filter System object
    gain (CIC decimator)     - Gain of CIC decimator filter System object
    gain (CIC interpolator)  - Gain of CIC interpolator filter System object
 
    For decimator, interpolator, or rate change filter System objects
    the analysis tools perform computations relative to the rate at
    which the filter is running. If a sampling frequency is specified,
    it is assumed that the filter is running at that rate.

Help for octaveFilter.helpFilterAnalysis is inherited from superclass DSP.PRIVATE.FILTERANALYSIS

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

Создайте фильтр 1/2 октавы с предполагаемой центральной частотой 800 Гц. Использование isStandardCompliant чтобы найти ближайшую подходящую центральную частоту.

octFilt = octaveFilter(800,'1/2 octave');
[complianceStatus,suggestedCenterFrequency] = isStandardCompliant(octFilt,'class 0')
complianceStatus =

  logical

   0


suggestedCenterFrequency =

  841.3951

Измените центральную частоту octFilt объект предложенной центральной частоты, возвращаемый isStandardCompliant. Получите список допустимых частот центра S1.11-2004 ANSI, учитывая вашу указанную octFilt центральная частота.

octFilt.CenterFrequency = suggestedCenterFrequency;
Fo = getANSICenterFrequencies(octFilt);

Создайте считыватель аудио файла и аудио устройства средства записи.

fileReader = dsp.AudioFileReader('Counting-16-44p1-mono-15secs.wav');
deviceWriter = audioDeviceWriter('SampleRate',fileReader.SampleRate);

Создайте возможности, чтобы визуализировать отфильтрованные и нефильтрованные сигналы.

scope = dsp.SpectrumAnalyzer(...
    'PlotAsTwoSidedSpectrum',false,...
    'FrequencyScale','Log',...
    'Title','Octave-Band Filtering',...
    'ShowLegend',true,...
    'ChannelNames',{'Original signal','Filtered signal'});

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

index = 12;
octFilt.CenterFrequency = Fo(index);
count = 1;
while ~isDone(fileReader)
    x = fileReader();
    y = octFilt(x);
    scope([x,y])
    deviceWriter(y);

    if mod(count,100)==0
        octFilt.CenterFrequency = Fo(index);
        index = index+1;
    end
    count = count+1;
end

release(scope)
release(deviceWriter)
release(fileReader)

Удалите аддитивный шум из шкалы звукового тона с помощью octaveFilter.

Создание audioOscillator и audioDeviceWriter объекты со свойствами по умолчанию. Создайте octaveFilter объект с центральной частотой, установленной на 100 Гц.

osc = audioOscillator;
deviceWriter = audioDeviceWriter;
octFilt = octaveFilter(100);

В цикле аудиопотока слушайте тон, созданный вашим аудиопотоком генератором. Тон содержит аддитивный Гауссов шум.

for i = 1:400
    x = osc();
    x1 = x + 0.1*randn(512,1);
    deviceWriter(x1);
    if rem(i,100)==0
        osc.Frequency = osc.Frequency*2;
    end
end

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

scope = dsp.SpectrumAnalyzer( ...
    'PlotAsTwoSidedSpectrum',false, ...
    'FrequencyScale','Log', ...
    'FrequencyResolutionMethod','WindowLength', ...
    'Title','Octave-Band Filtering', ...
    'ShowLegend',true, ...
    'SpectralAverages',10, ...
    'ChannelNames',{'Original signal','Filtered signal'});

Обнулите частоту аудио генератора по умолчанию, 100 Гц.

osc.Frequency = 100;

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

for i = 1:400
    x = osc();
    x1 = x + 0.1*randn(512,1);
    x2 = octFilt(x1);
    deviceWriter(x2);
    if rem(i,100)==0
        osc.Frequency = osc.Frequency*2;
        octFilt.CenterFrequency = octFilt.CenterFrequency*2;
    end
    scope([x1,x2])
end

release(deviceWriter)
release(scope)

Figure Spectrum Analyzer contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes with title Octave-Band Filtering contains 2 objects of type line. These objects represent Original signal, Filtered signal.

Создайте фильтр шестого порядка 1/3 октавы со скоростью дискретизации 96 кГц.

octFilt = octaveFilter('FilterOrder',6, ...
    'Bandwidth','1/3 octave', ...
    'SampleRate',96e3);

Получите центральные частоты, заданные стандартом ANSI S1.11-2004. Центральные частоты, заданные стандартом, зависят от Bandwidth и SampleRate свойства.

centerFrequencies = getANSICenterFrequencies(octFilt)
centerFrequencies = 1×53
104 ×

    0.0000    0.0000    0.0000    0.0001    0.0001    0.0001    0.0001    0.0001    0.0002    0.0002    0.0003    0.0003    0.0004    0.0005    0.0006    0.0008    0.0010    0.0013    0.0016    0.0020    0.0025    0.0032    0.0040    0.0050    0.0063    0.0079    0.0100    0.0126    0.0158    0.0200    0.0251    0.0316    0.0398    0.0501    0.0631    0.0794    0.1000    0.1259    0.1585    0.1995    0.2512    0.3162    0.3981    0.5012    0.6310    0.7943    1.0000    1.2589    1.5849    1.9953

Установите центральную частоту октавного фильтра равной 19,953 кГц и визуализируйте ответ с маской податливости 'class 0'.

octFilt.CenterFrequency = centerFrequencies(38);
visualize(octFilt,'class 0')

Красная маска на графике определяет границы для амплитудной характеристики фильтра. Амплитудная характеристика этого фильтра идет выше верхней границы маски податливости около 6,6 кГц. Один из способов противостоять этому - увеличить порядок фильтра, чтобы сгиб фильтра был круче.

Чтобы привести октавное создание фильтра в податливость, установите порядок октавного фильтра равным 8.

octFilt.FilterOrder = 8;

Другой вариант, чтобы привести создание фильтра октавы в податливость, это задать Oversample свойство к true. Это проектирует и запускает фильтр с удвоенным заданным SampleRate уменьшить эффекты билинейного преобразования на стадии проекта.

octFilt.FilterOrder = 6;
octFilt.Oversample = true;

Создайте фильтр шестого порядка 2/3 октавы со скоростью дискретизации 96 кГц.

octFilt = octaveFilter('FilterOrder',6, ...
    'Bandwidth','2/3 octave', ...
    'SampleRate',96e3);

Получите центральные частоты, заданные стандартом ANSI S1.11-2004. Центральные частоты, заданные стандартом, зависят от Bandwidth и SampleRate свойства.

centerFrequencies = getANSICenterFrequencies(octFilt)
centerFrequencies = 1×25
104 ×

    0.0000    0.0001    0.0001    0.0002    0.0003    0.0004    0.0006    0.0010    0.0016    0.0025    0.0040    0.0063    0.0100    0.0158    0.0251    0.0398    0.0631    0.1000    0.1585    0.2512    0.3981    0.6310    1.0000    1.5849    2.5119

Установите центральную частоту октавного фильтра равной ~ 6 Гц и визуализируйте ответ с маской податливости 'class 0'.

octFilt.CenterFrequency = centerFrequencies(2);
visualize(octFilt,'class 0')

Красная маска на графике определяет границы для амплитудной характеристики фильтра. Величина реакция этого фильтра идет ниже нижней границы маски податливости между 5,5 и 7,5 Гц.

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

Чтобы привести октавное создание фильтра в податливость, установите частоту дискретизации 48 кГц.

octFilt.SampleRate = 48e3;

Создайте dsp.AudioFileReader для чтения в аудиокадре за кадром. Создайте audioDeviceWriter чтобы записать аудио на звуковую карту. Создайте octaveFilter для обработки аудио данных. Функции visualize для построения графика частотной характеристики октавного фильтра.

frameLength = 1024;
fileReader = dsp.AudioFileReader('RockDrums-44p1-stereo-11secs.mp3', ...
    'SamplesPerFrame',frameLength);
deviceWriter = audioDeviceWriter('SampleRate',fileReader.SampleRate);

octFilt = octaveFilter('SampleRate',fileReader.SampleRate);
visualize(octFilt)

Функции parameterTuner чтобы открыть пользовательский интерфейс для настройки параметров octaveFilter во время потоковой передачи.

parameterTuner(octFilt)

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

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

  2. Применить октавную фильтрацию.

  3. Запишите систему координат аудио в своё аудио устройство для прослушивания.

Во время потоковой передачи настройте параметры октавного фильтра и прослушайте эффект.

while ~isDone(fileReader)
    audioIn = fileReader();
    audioOut = octFilt(audioIn);
    deviceWriter(audioOut);
    drawnow limitrate % required to update parameter
end

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

release(deviceWriter)
release(fileReader)
release(octFilt)

Подробнее о

расширить все

Совет

createAudioPluginClass и configureMIDI функции сопоставляют настраиваемые свойства octaveFilter к пользовательским параметрам:

СвойствоОбласть значенийОтображениеМодули
CenterFrequency[3, 22000]журналHz
Bandwidth'1 octave', '2/3 octave', '1/2 octave', '1/3 octave', '1/6 octave', '1/12 octave', '1/24 octave', или '1/48 octave'

Ваша область значений контроллеров MIDI дискретизирована на семь уровней, соответствующих семи Bandwidth варианты.

––

Алгоритмы

расширить все

Ссылки

[1] Orfanidis, Sophocles J. Введение в обработку сигналов. Englewood Cliffs, Нью-Джерси: Prentice Hall, 2010.

[2] Акустическое общество Америки. Американская национальная стандартная спецификация для аналоговых и цифровых фильтров Octave-Band и Fractional-Octave-Band. ANSI S1.11-2004. Melville, NY: Acoustical Society of America, 2009.

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

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