В этом примере показано, как проектировать октавные и дробные октавные фильтры, включая блоки фильтров и счетчики SPL октавы. Фильтры октавной и дробной октавной полос обычно используются в акустике. Например, октавные фильтры используются для выполнения спектрального анализа для управления шумом. Акустики работают с блоками октавных или дробных (часто 1/3) октавных фильтров, потому что они обеспечивают значимую меру мощности шума в различных частотных диапазонах.
Октава - это интервал между двумя частотами, имеющими отношение 2:1 (или для отношений основа-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.](../../examples/audio/win64/OctaveBandAndFractionalOctavebandFilterExample_02.png)
Откройте анализатор спектра для отображения белого шума, отфильтрованного октавным фильтром. Настройки фильтра можно изменить с помощью тюнера параметров во время выполнения цикла.
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

Многие приложения требуют полного набора октавных фильтров для формирования набора фильтров. Для проектирования каждого фильтра вручную используется 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')

Фильтрация выходного сигнала генератора розового шума с помощью 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

Розовый шум имеет одинаковую общую мощность в каждой октавной полосе, поэтому мощность между 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)')

Объект измерителя 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
