octaveFilter

Полоса октавы и дробный ленточный фильтр октавы

Описание

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

Выполнять полосу октавы или дробную фильтрацию полосы октавы на вашем входе:

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

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

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

Создание

Описание

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, с центральной частотой 1 000 Гц, 1/3 пропускной способностью фильтра октавы и частотой дискретизации 96 000 Гц.

Свойства

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

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

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

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

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

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

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

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

  • Максимальная центральная частота является значением, которое заставляет ребро верхней полосы быть равным частоте Найквиста, Fs/2. Частоты выше этого значения насыщаются.

  • Минимальная центральная частота является значением, которое заставляет ребро нижней полосы быть равным 1 Гц. Частоты ниже этого значения квантуются к значению, которое соответствует ребру нижней полосы, равному 1 Гц.

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

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

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

Типы данных: логический

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

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

Типы данных: 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Возвратите biquad объект фильтра с набором расчетных параметров
getANSICenterFrequenciesПолучите список допустимых частот центра ANSI S1.11-2004
parameterTunerНастройте параметры объекта при потоковой передаче
configureMIDIСконфигурируйте связи MIDI между аудио объектным и MIDI-контроллером
disconnectMIDIОтключите средства управления MIDI от аудио объекта
getMIDIConnectionsПолучите связи MIDI аудио объекта
cloneСоздайте объект дублированной системы
isLockedОпределите, используется ли Системный объект
releaseВысвободите средства и позвольте изменения в значениях свойств Системного объекта и введите характеристики
resetСбросьте внутренние состояния Системного объекта
stepЗапустите алгоритм Системного объекта

Примечание

octaveFilter поддерживает дополнительные аналитические функции фильтра. Смотрите Анализируют Создание фильтра Октавы для деталей.

Примеры

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

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

Создайте 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)

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

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

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

fvtool(octFilt,'Fs',octFilt.SampleRate)

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

Создайте банк ленточного фильтра октавы, который соответствует ANSI S1.11-2004. Передайте белый шум через набор фильтров и смотрите получившуюся степень в каждой полосе.

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

octFilt = octaveFilter;

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

centerFrequencies = getANSICenterFrequencies(octFilt);
for i = 1:11
    octaveFilterBank{i} = octaveFilter(centerFrequencies(i),'FilterOrder',12);
end

Используйте getFilter чтобы возвратить biquad объекты фильтра для каждого просачиваются ваш набор фильтров октавы. Визуализируйте набор фильтров октавы с линейной шкалой частоты. Визуализируйте набор фильтров октавы с логарифмической шкалой частоты. Логарифмическая шкала частоты заставляет центральные частоты казаться равномерно распределенными.

fvtool(octaveFilterBank{1}, ...
       octaveFilterBank{2}, ...
       octaveFilterBank{3}, ...
       octaveFilterBank{4}, ...
       octaveFilterBank{5}, ...
       octaveFilterBank{6}, ...
       octaveFilterBank{7}, ...
       octaveFilterBank{8}, ...
       octaveFilterBank{9}, ...
       octaveFilterBank{10}, ...
       octaveFilterBank{11}, ...
       'Fs',octaveFilterBank{1}.SampleRate, ...
       'FrequencyScale','Log');

Создайте белый шумовой сигнал. По определению белый шум имеет плоскую силу спектральная плотность.

whiteNoiseGenerator = dsp.ColoredNoise(0,1024);
whiteNoise = whiteNoiseGenerator();

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

for i = 1:11
    filteredWhiteNoise(:,i) = octaveFilterBank{i}(whiteNoise);
end

Вычислите и постройте степень в каждой октаве.

for i = 1:11
    powerPerBand(i) = bandpower(filteredWhiteNoise(:,i));
end

bar(powerPerBand)
title('Power Distribution of Octave-Band Filter Bank')
set(gca,'XTickLabel',{round(centerFrequencies)})
xlabel('Center Frequency of Octave-Band Filter (Hz)')
ylabel('Normalized Power')

Мощность полосы увеличивается фактором приблизительно двух, потому что пропускная способность октавы увеличивается фактором два. Распределение электроэнергии набора фильтров октавы подражает, как более высокие частоты восприняты громче в белом шуме. Можно использовать наборы фильтров октавы, чтобы взвесить спектр для воспринятой громкости.

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

Спроектируйте 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)

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

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

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

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

    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    2.5119    3.1623    3.9811

Установите центральную частоту фильтра октавы к 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×20
104 ×

    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]журналГц
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, Софокл Дж. Введение в обработку сигналов. Englewood Cliffs, NJ: Prentice Hall, 2010.

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

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

Введенный в R2017b