exponenta event banner

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

В этом примере показано, как проектировать октавные и дробные октавные фильтры, включая блоки фильтров и счетчики SPL октавы. Фильтры октавной и дробной октавной полос обычно используются в акустике. Например, октавные фильтры используются для выполнения спектрального анализа для управления шумом. Акустики работают с блоками октавных или дробных (часто 1/3) октавных фильтров, потому что они обеспечивают значимую меру мощности шума в различных частотных диапазонах.

Фильтр октавной полосы

Октава - это интервал между двумя частотами, имеющими отношение 2:1 (или 103/10≈1.995 для отношений основа-10 октава). Фильтр октавной или дробной октавной полосы - полосовой фильтр, определяемый его центральной частотой, порядком и полосой пропускания. Пределы ослабления амплитуды определены в стандарте ANSI ® S1.11-2004 для трех классов фильтров: класса 0, класса 1 и класса 2. Класс 0 допускает только +/-0,15 дБ пульсации в полосе пропускания, в то время как класс 1 допускает +/-0,3 дБ и класс 2 допускает +/-0,5 дБ. Уровни затухания полосы останова варьируются от 60 до 75 дБ в зависимости от класса фильтра.

Проектирование полного октавного фильтра с использованием octaveFilter.

BW = '1 octave';  % Bandwidth
N  = 8;           % Filter order
F0 = 1000;        % Center frequency (Hz)
Fs = 48000;       % Sampling frequency (Hz)
of = octaveFilter('FilterOrder',N,'CenterFrequency',F0,  ...
                  'Bandwidth',BW,'SampleRate',Fs);

Визуализируйте амплитудную характеристику фильтра.

visualize(of,'class 1')

График визуализатора синхронизирован с объектом, поэтому при изменении параметров фильтра можно увидеть обновление отклика на величину. Если фильтр соответствует стандарту ANSI S1.11-2004 (в том числе центрирован с допустимой частотой), маска вокруг амплитудной характеристики становится зеленой, а в противном случае - красной. Чтобы изменить спецификации фильтра с помощью графического интерфейса пользователя, используйте parameterTuner. Вы также можете использовать приложение Audio Test Bench для быстрой настройки тестового стенда для разработанного вами октавного фильтра. Например, выполнить audioTestBench(of) для запуска испытательного стенда с октавным фильтром.

Откройте тюнер параметров, который позволяет изменять фильтр в реальном времени.

parameterTuner(of)

Figure Audio Parameter Tuner: octaveFilter [of] contains an object of type uigridlayout.

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

Nx = 100000;
scope1 = dsp.SpectrumAnalyzer('SampleRate',Fs,'Method','Filter bank', ...
    'AveragingMethod','Exponential','PlotAsTwoSidedSpectrum',false, ...
    'FrequencyScale','Log','FrequencySpan','Start and stop frequencies', ...
    'StartFrequency',1,'StopFrequency',Fs/2,'YLimits',[-60 10], ...
    'RBWSource','Property','RBW',1);
tic
while toc < 20
    % Run for 20 seconds
    x1 = randn(Nx,1);
    y1 = of(x1);
    scope1(y1)
end

Figure Spectrum Analyzer contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes contains an object of type line. This object represents Channel 1.

Банк фильтров октавной полосы

Многие приложения требуют полного набора октавных фильтров для формирования набора фильтров. Для проектирования каждого фильтра вручную используется getANSICenterFrequencies(of) для получения списка центральных частот для каждого отдельного фильтра. Однако обычно гораздо проще использовать octaveFilterBank объект.

Создание octaveFilterBank объект и постройте график его амплитудной характеристики.

ofb = octaveFilterBank('1/3 octave',Fs,'FilterOrder',N);
freqz(ofb,'NFFT',2^16)   % Increase FFT length for better low-frequency resolution
set(gca,'XScale','log')
axis([20 Fs/2 -50 5])
title('1/3-Octave Filter Bank Magnitude Response')

Figure contains an axes. The axes with title 1/3-Octave Filter Bank Magnitude Response contains 30 objects of type line.

Фильтрация выходного сигнала генератора розового шума с помощью 1/3-октавного набора фильтров и вычисление суммарной мощности на выходе каждого фильтра.

pinkNoise = dsp.ColoredNoise('Color','pink', ...
                             'SamplesPerFrame',Nx, ...
                             'NumChannels',1);

scope2 = dsp.SpectrumAnalyzer('SampleRate',Fs,'Method','Filter bank', ...
    'AveragingMethod','Exponential','PlotAsTwoSidedSpectrum',false, ...
    'FrequencyScale','Log','FrequencySpan','Start and stop frequencies', ...
    'StartFrequency',20,'StopFrequency',Fs/2,'YLimits',[-40 30], ...
    'RBWSource','Property','RBW',10);

centerOct = getCenterFrequencies(ofb);
nbOct = numel(centerOct);
bandPower = zeros(1,nbOct);
nbSamples = 0;

tic
while toc < 10
    xp = pinkNoise();
    yp = ofb(xp);
    bandPower = bandPower + sum(yp.^2,1);
    nbSamples = nbSamples + Nx;
    scope2(yp)    
end

Figure Spectrum Analyzer contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes contains 30 objects of type line. These objects represent Channel 1, Channel 2, Channel 3, Channel 4, Channel 5, Channel 6, Channel 7, Channel 8, Channel 9, Channel 10, Channel 11, Channel 12, Channel 13, Channel 14, Channel 15, Channel 16, Channel 17, Channel 18, Channel 19, Channel 20, Channel 21, Channel 22, Channel 23, Channel 24, Channel 25, Channel 26, Channel 27, Channel 28, Channel 29, Channel 30.

Розовый шум имеет одинаковую общую мощность в каждой октавной полосе, поэтому мощность между 5 Гц и 10 Гц такая же, как между 5000 Гц и 10000 Гц. Следовательно, в анализаторе спектра можно наблюдать падение 10 дБ/декада, которое характерно для розового шума на логарифмической шкале, и то, как этот сигнал разделяется на 30 1/3-октавных полос. Более высокие полосы частот имеют меньшую плотность мощности, но логарифмическая шкала означает, что они также шире, так что их общая мощность постоянна.

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

b = 10^(3/10); % base-10 octave ratio
% Compute power (including pressure reference)
octPower = 10*log10(bandPower/nbSamples/4e-10);

bar(log(centerOct)/log(b),octPower);
set(gca,'Xticklabel',round(b.^get(gca,'Xtick'),2,'significant'));
title('1/3-Octave Power Spectrum')
xlabel('Octave Frequency Band (Hz)')
ylabel('Power (dB)')

Figure contains an axes. The axes with title 1/3-Octave Power Spectrum contains an object of type bar.

Octave SPL

Объект измерителя SPL (splMeter) также поддерживает измерения октавной полосы. Воспроизводите одно и то же измерение спектра мощности в реальном времени. Использовать dsp.ArrayPlot объект для визуализации мощности на полосу. Используйте опцию Z-weighting, чтобы опустить фильтр частотного взвешивания.

spl = splMeter('Bandwidth','1/3 octave', ...
               'OctaveFilterOrder',N, ...
               'SampleRate',Fs, ...
               'FrequencyWeighting','Z-weighting');

scope3 = dsp.ArrayPlot('Title','Pink Noise SPL', ...
                       'XLabel','Octave Frequency Band Number', ...
                       'YLabel','Power (dB)','YLimits',[0 100]);
tic
while toc < 10
    xp = pinkNoise();
    yp = spl(xp);
    ypm = mean(yp,1).';
    scope3(ypm)
end