EQ的實現

文章產品的配圖來自深圳同創音頻技術有限公司公開的數字音頻處理器產品界面。

 

前言

 

EQ,我們常見的就是很多播放器上面帶的一個均衡器,可以選擇流行、重低、金屬等等音樂風格,這個是參量均衡EQ。而廣義的EQ包含很多種類型:

1. 參量(PEQ)

2. 低架(LowShelf)

3. 高架(HighShelf)

4. 低通(LowPass)

5. 高通(HighPass)

6. 全通(APF)

7. 帶通(BPF)

 

從界面上看出,它是一個8段EQ,每段EQ分別有四個參數:

頻率(Hz) , 增益(dB) , Q(品質因子)或者Oct(倍頻程),還有一個開關

 

 

濾波器原型

 

所有的數字濾波器模型都是從模擬濾波器通過雙線性變換得到而來。下面直接給出每個濾波器的原型和變換後它的係數計算。

LPF:        H(s) = 1 / (s^2 + s/Q + 1)            b0 =  (1 - cos(w0))/2            b1 =   1 - cos(w0)            b2 =  (1 - cos(w0))/2            a0 =   1 + alpha            a1 =  -2*cos(w0)            a2 =   1 - alphaHPF:        H(s) = s^2 / (s^2 + s/Q + 1)            b0 =  (1 + cos(w0))/2            b1 = -(1 + cos(w0))            b2 =  (1 + cos(w0))/2            a0 =   1 + alpha            a1 =  -2*cos(w0)            a2 =   1 - alphaBPF:        H(s) = s / (s^2 + s/Q + 1)  (constant skirt gain, peak gain = Q)            b0 =   sin(w0)/2  =   Q*alpha            b1 =   0            b2 =  -sin(w0)/2  =  -Q*alpha            a0 =   1 + alpha            a1 =  -2*cos(w0)            a2 =   1 - alphaBPF:        H(s) = (s/Q) / (s^2 + s/Q + 1)      (constant 0 dB peak gain)            b0 =   alpha            b1 =   0            b2 =  -alpha            a0 =   1 + alpha            a1 =  -2*cos(w0)            a2 =   1 - alphanotch:      H(s) = (s^2 + 1) / (s^2 + s/Q + 1)            b0 =   1            b1 =  -2*cos(w0)            b2 =   1            a0 =   1 + alpha            a1 =  -2*cos(w0)            a2 =   1 - alphaAPF:        H(s) = (s^2 - s/Q + 1) / (s^2 + s/Q + 1)            b0 =   1 - alpha            b1 =  -2*cos(w0)            b2 =   1 + alpha            a0 =   1 + alpha            a1 =  -2*cos(w0)            a2 =   1 - alphapeakingEQ:  H(s) = (s^2 + s*(A/Q) + 1) / (s^2 + s/(A*Q) + 1)            b0 =   1 + alpha*A            b1 =  -2*cos(w0)            b2 =   1 - alpha*A            a0 =   1 + alpha/A            a1 =  -2*cos(w0)            a2 =   1 - alpha/AlowShelf: H(s) = A * (s^2 + (sqrt(A)/Q)*s + A)/(A*s^2 + (sqrt(A)/Q)*s + 1)            b0 =    A*( (A+1) - (A-1)*cos(w0) + 2*sqrt(A)*alpha )            b1 =  2*A*( (A-1) - (A+1)*cos(w0)                   )            b2 =    A*( (A+1) - (A-1)*cos(w0) - 2*sqrt(A)*alpha )            a0 =        (A+1) + (A-1)*cos(w0) + 2*sqrt(A)*alpha            a1 =   -2*( (A-1) + (A+1)*cos(w0)                   )            a2 =        (A+1) + (A-1)*cos(w0) - 2*sqrt(A)*alphahighShelf: H(s) = A * (A*s^2 + (sqrt(A)/Q)*s + 1)/(s^2 + (sqrt(A)/Q)*s + A)            b0 =    A*( (A+1) + (A-1)*cos(w0) + 2*sqrt(A)*alpha )            b1 = -2*A*( (A-1) + (A+1)*cos(w0)                   )            b2 =    A*( (A+1) + (A-1)*cos(w0) - 2*sqrt(A)*alpha )            a0 =        (A+1) - (A-1)*cos(w0) + 2*sqrt(A)*alpha            a1 =    2*( (A-1) - (A+1)*cos(w0)                   )            a2 =        (A+1) - (A-1)*cos(w0) - 2*sqrt(A)*alpha

以上有一些中間變量,它們的計算公式如下:

A  = sqrt( 10^(dBgain/20) )A  =  10^(dBgain/40) (for peaking and shelving EQ filters only)          w0 = 2*pi*f0/Fsalpha = sin(w0)/(2*Q)                      

 

Q和Oct的關係

 

Oct是倍頻程,1個倍頻程相當於頻率高了一倍。

2^oct = f2/f1;

Q:  q=fc/bw;

bw=f2-f1;

fc^2 =f1*f2;

Q= sqrt(2^oct)/(2^oct -1 )

 

如果想要了解更多知識,可以關注公衆號【DSP-Tech】.你也可以加我微信,和我一起共同成長學習吧。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章