옥타브 대역 및 분수 옥타브 대역 필터
이 예제에서는 필터 뱅크 및 옥타브 SPL 미터를 포함해 옥타브 대역 및 분수 옥타브 대역 필터를 설계하는 방법을 보여줍니다. 옥타브 대역 및 분수 옥타브 대역 필터는 일반적으로 음향학에 사용됩니다. 예를 들어, 옥타브 필터는 잡음 제어를 위한 스펙트럼 분석을 수행하는 데 사용됩니다. 음향학자들은 옥타브 또는 분수(종종 1/3) 옥타브 필터 뱅크를 사용합니다. 이는 다양한 주파수 대역에서 의미 있는 잡음 전력의 측정값을 제공하기 때문입니다.
옥타브 대역 필터
한 옥타브는 2:1 비율(즉, 밑수가 10인 옥타브 비율에서 )을 갖는 두 주파수 사이의 간격입니다. 옥타브 대역 또는 분수 옥타브 대역 필터는 중심 주파수, 차수, 대역폭에 따라 결정되는 대역통과 필터입니다. 크기 감쇠량 제한은 필터의 3개 클래스(클래스 0, 클래스 1, 클래스 2)에 대해 ANSI® S1.11-2004 표준에 정의되어 있습니다. 클래스 0은 통과대역에서 +/-0.15dB의 리플만 허용하는 반면, 클래스 1은 +/-0.3dB, 클래스 2는 +/-0.5dB를 허용합니다. 저지대역 감쇠량 수준은 필터의 클래스에 따라 60dB에서 75dB까지 다양합니다.
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)
스펙트럼 분석기를 열어 옥타브 필터로 필터링된 백색 잡음을 표시합니다. 루프가 실행되는 동안 파라미터 조정기를 사용하여 필터 설정을 수정할 수 있습니다.
Nx = 100000; scope1 = 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,N=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 = 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
핑크 잡음은 각 옥타브 대역에서 총 전력이 동일하므로 5Hz에서 10Hz 사이의 전력은 5,000Hz에서 10,000Hz 사이의 전력과 동일합니다. 따라서 스펙트럼 분석기에서, 로그-로그 스케일에서 핑크 잡음의 특징인 10dB/decade 감소와 해당 신호가 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
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