我有 5 个“负峰值”双二阶,它们将改变中心频率,同时在实时微控制器(ARM cortex-m4)上保持恒定的 Q 和 A(幅度减小),编解码器通过 i2s 控制,i2c 系统以 96kHz 运行。我担心(我的示波器引起的担忧)我将被除法和正弦/余弦所困扰。我能做些什么来加快速度?
使用 RBJ 的 EQ 食谱,峰值滤波器采用以下系数:
w0 = 2*pi*f0/Fs;
A = sqrt(10^(dBgain/40));
alpha = (sin(w0)/(2*Q));
b0 = 1 + alpha*A;
b1 = -2*cos(w0);
b2 = 1 - alpha*A;
a0 = 1 + alpha/A;
a1 = -2*cos(w0);
a2 = 1 - alpha/A;
此外,反馈系数将采用形式 c0 = b0/a0 c1 = b1/a0 c2 = b2/a0 和前馈系数: c3 = a1 / a0;c4 = a2 / a0;
扩大这些部门:
c0 = (1 + (sin(w0)/(2*Q))*A)/(1 + (sin(w0)/(2*Q))/A);
c1 = -2*cos(w0) / (1 + sin(w0)/(2*Q)/A);
c2 = (1 - (sin(w0)/(2*Q))*A)/(1 + (sin(w0)/(2*Q))/A);
c3 = c1;
c4 = (1 - (sin(w0)/(2*Q))/A) / (1 + (sin(w0)/(2*Q))/A);
在 MATLAB 中使用带有符号变量 w0、Q 和 A 的 simple(),我们得到:
c0 = (2AQ + A^2*sin(w0))/(2AQ+sin(w0))
c1 = -(4AQ*cos(w0))/(sin(w0) + 2AQ)
c2 = -(A^2*sin(w0) - 2AQ)/(2AQ + sin(w0));
c3 = c1;
c4 = -(sin(w0)- 2AQ)/(2AQ + sin(w0));
如果 Q 和 A 是常数,没问题,这些可以提前计算。将要杀死我的是除法和正弦/余弦计算。
可以使用哪些技巧或过程来加快计算速度,或者如果有的话,可以进一步简化或近似滤波器系数?