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

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

Ленточный фильтр октавы

Октава является интервалом между двумя частотами, имеющими отношение 2:1 (или 103/101.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')

График visualizer синхронизируется с объектом, таким образом, вы видите, что ответ величины обновляется, когда вы изменяете параметры фильтра. Маска вокруг ответа величины является зеленой, если фильтр выполняет стандарт 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 object and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes object 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 object. The axes object with title 1/3-Octave Filter Bank Magnitude Response contains 30 objects of type line.

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

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 object and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes object 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 Гц эквивалентна между 5 000 Гц и 10 000 Гц. Следовательно, в спектре анализатор, можно наблюдать спад на 10 дБ/десятилетие, который является характеристическим для розового шума на двойной логарифмической шкале, и как тот сигнал разделен в 30 1/3-octave полосы. Более высокие диапазоны частот имеют меньше плотности энергии, но логарифмическая шкала означает, что они также более широки, так, чтобы их общая степень была постоянной.

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

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 object. The axes object with title 1/3-Octave Power Spectrum contains an object of type bar.

SPL октавы

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

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