JUCE에서 필터설계
Biquad filter 기반 모델링
JUCE에서는 기본적으로 Audio EQ Cookbook 의 Biquad filter formula를 기반으로 계산이 됨
H ( z ) = b 0 + b 1 z − 1 + b 2 z − 2 a 0 + a 1 z − 1 + a 2 z − 2 H(z) = \frac{b_0 + b_1 z^{-1} + b_2 z^{-2}}{a_0 + a_1 z^{-1} + a_2 z^{-2}} H ( z ) = a 0 + a 1 z − 1 + a 2 z − 2 b 0 + b 1 z − 1 + b 2 z − 2
해당 필터 계수 설계에 쓰이는 파라미터는 아래와 같음
1.F s F_s F s : 필터를 구성하는 오디오 시스템의 샘플링 레이트
2.F 0 F_0 F 0 : cut off frequeny이기도 하지만 band pass나 notch filter에서는 center frequency로 정의됨
3. d B g a i n dBgain d B g a i n : peaking이나 shelving filter 에서만 사용
4. Q Q Q : Quality factor로 공진정도를 설계하게 되는데 1에 가까울수록 시스템이 발진하는 형태로 나타나게 됨.
5. B W BW B W : center 주파수 기준으로 3dB값을 가지게 되는 주파수 값의 차이
즉 필터 특성에 따라서 위의 파라미터 계수가 결정되고 나서 아래의 중간 변수를 계산해주면 필터를 구성 할 수 있는계수를 얻을 수 있음
1. 디지털 주파수 계산
ω 0 = 2 π ⋅ f 0 F s \omega_0 = 2\pi \cdot \frac{f_0}{F_s} ω 0 = 2 π ⋅ F s f 0
2. 삼각함수 단축 표현
cos ω 0 , sin ω 0 \cos \omega_0, \quad \sin \omega_0 cos ω 0 , sin ω 0
3. Alpha 계산 방식
케이스에 따라 ( \alpha )는 다음 중 하나로 계산됩니다:
α = sin ω 0 2 Q \alpha = \frac{\sin \omega_0}{2Q} α = 2 Q sin ω 0
α = sin ω 0 ⋅ sinh ( log 2 2 ⋅ BW ⋅ ω 0 sin ω 0 ) \alpha = \sin \omega_0 \cdot \sinh \left( \frac{\log 2}{2} \cdot \text{BW} \cdot \frac{\omega_0}{\sin \omega_0} \right) α = sin ω 0 ⋅ sinh ( 2 log 2 ⋅ BW ⋅ sin ω 0 ω 0 )
α = sin ω 0 2 ⋅ ( A + 1 A ) ( 1 S − 1 ) + 2 \alpha = \frac{\sin \omega_0}{2} \cdot \sqrt{ \left( A + \frac{1}{A} \right) \left( \frac{1}{S} - 1 \right) + 2 } α = 2 sin ω 0 ⋅ ( A + A 1 ) ( S 1 − 1 ) + 2
LPF (Low-Pass Filter)
H ( s ) = 1 s 2 + s Q + 1 H(s) = \frac{1}{s^2 + \frac{s}{Q} + 1} H ( s ) = s 2 + Q s + 1 1
디지털 biquad 계수
b 0 = 1 − cos ω 0 2 b 1 = 1 − cos ω 0 b 2 = 1 − cos ω 0 2 a 0 = 1 + α a 1 = − 2 cos ω 0 a 2 = 1 − α \begin{aligned} b_0 &= \frac{1 - \cos \omega_0}{2} \\ b_1 &= 1 - \cos \omega_0 \\ b_2 &= \frac{1 - \cos \omega_0}{2} \\ a_0 &= 1 + \alpha \\ a_1 &= -2 \cos \omega_0 \\ a_2 &= 1 - \alpha \end{aligned} b 0 b 1 b 2 a 0 a 1 a 2 = 2 1 − cos ω 0 = 1 − cos ω 0 = 2 1 − cos ω 0 = 1 + α = − 2 cos ω 0 = 1 − α
HPF (High-Pass Filter)
H ( s ) = s 2 s 2 + s Q + 1 H(s) = \frac{s^2}{s^2 + \frac{s}{Q} + 1} H ( s ) = s 2 + Q s + 1 s 2
디지털 biquad 계수
b 0 = 1 + cos ω 0 2 b 1 = − ( 1 + cos ω 0 ) b 2 = 1 + cos ω 0 2 a 0 = 1 + α a 1 = − 2 cos ω 0 a 2 = 1 − α \begin{aligned} b_0 &= \frac{1 + \cos \omega_0}{2} \\ b_1 &= -(1 + \cos \omega_0) \\ b_2 &= \frac{1 + \cos \omega_0}{2} \\ a_0 &= 1 + \alpha \\ a_1 &= -2 \cos \omega_0 \\ a_2 &= 1 - \alpha \end{aligned} b 0 b 1 b 2 a 0 a 1 a 2 = 2 1 + cos ω 0 = − ( 1 + cos ω 0 ) = 2 1 + cos ω 0 = 1 + α = − 2 cos ω 0 = 1 − α
BPF (Band-Pass Filter)
H ( s ) = s s 2 + s Q + 1 H(s) = \frac{s}{s^2 + \frac{s}{Q} + 1} H ( s ) = s 2 + Q s + 1 s
디지털 biquad 계수
b 0 = sin ω 0 2 = Q α b 1 = 0 b 2 = − sin ω 0 2 = − Q α a 0 = 1 + α a 1 = − 2 cos ω 0 a 2 = 1 − α \begin{aligned} b_0 &= \frac{\sin \omega_0}{2} = Q \alpha \\ b_1 &= 0 \\ b_2 &= -\frac{\sin \omega_0}{2} = -Q \alpha \\ a_0 &= 1 + \alpha \\ a_1 &= -2 \cos \omega_0 \\ a_2 &= 1 - \alpha \end{aligned} b 0 b 1 b 2 a 0 a 1 a 2 = 2 sin ω 0 = Q α = 0 = − 2 sin ω 0 = − Q α = 1 + α = − 2 cos ω 0 = 1 − α
Notch (Band Stop Filter)
H ( s ) = s 2 + 1 s 2 + s Q + 1 H(s) = \frac{s^2 + 1}{s^2 + \frac{s}{Q} + 1} H ( s ) = s 2 + Q s + 1 s 2 + 1
디지털 biquad 계수
b 0 = 1 b 1 = − 2 cos ω 0 b 2 = 1 a 0 = 1 + α a 1 = − 2 cos ω 0 a 2 = 1 − α \begin{aligned} b_0 &= 1 \\ b_1 &= -2 \cos \omega_0 \\ b_2 &= 1 \\ a_0 &= 1 + \alpha \\ a_1 &= -2 \cos \omega_0 \\ a_2 &= 1 - \alpha \end{aligned} b 0 b 1 b 2 a 0 a 1 a 2 = 1 = − 2 cos ω 0 = 1 = 1 + α = − 2 cos ω 0 = 1 − α
4. Juce에서 설정방법
1. 대략적인 적용 순서
juce:: dsp:: LadderFilter< float > LadderFilter;
void Oscillator:: setSampleRate ( double input_rate) {
sampleRate = input_rate;
juce:: dsp:: ProcessSpec spec;
spec. sampleRate = sampleRate;
spec. maximumBlockSize = 512 ;
spec. numChannels = 2 ;
LadderFilter. prepare ( spec) ;
cutoffFreq = freq;
Qfactor = Q_num;
LadderFilter. setCutoffFrequencyHz ( freq) ;
LadderFilter. setResonance ( Q_num) ;
juce:: dsp:: AudioBlock< float > block ( buffer) ;
juce:: dsp:: ProcessContextReplacing< float > context ( block) ;
LadderFilter. process ( context) ;
출처
1. https://www.w3.org/TR/audio-eq-cookbook/#formulae