exponenta event banner

octaveFilter

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

Описание

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

Для выполнения октавной или дробной октавной фильтрации на входе:

  1. Создать octaveFilter и задайте его свойства.

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

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

Создание

Описание

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

octFilt = octaveFilter(centerFreq) устанавливает для свойства StartFrequency значение centerFreq.

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

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

Пример: octFilt = octaveFilter(1000,'1/3 octave','SampleRate',96000) создает объект System, 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

Переключатель «Избыточная выборка», указанный как false или true.

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

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

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

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

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

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

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

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

Синтаксис

Описание

пример

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

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

развернуть все

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

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

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

развернуть все

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

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

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

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

release(obj)

развернуть все

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

Примечание

octaveFilter поддерживает дополнительные функции анализа фильтров. Дополнительные сведения см. в разделе Анализ конструкции октавного фильтра.

Примеры

свернуть все

Использовать 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.

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. Получите список допустимых частот центра ANSI S1.11-2004, указанных вами 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 кГц и визуализируйте отклик с помощью маски соответствия «класс 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 Гц и визуализируйте отклик с помощью маски соответствия «класс 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] Орфанидис, Софокл Дж. Введение в обработку сигналов. Энглвуд Клиффс, Нью-Джерси: Прентис Холл, 2010.

[2] Акустичное общество Америки. Американская национальная стандартная спецификация для октавных и дробных октавных аналоговых и цифровых фильтров. ANSI S1.11-2004. Мелвилл, Нью-Йорк: Акустичное общество Америки, 2009.

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

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