【发布时间】:2014-02-05 11:53:47
【问题描述】:
我已经计算出二阶低通和高通巴特沃斯滤波器的系数。
系数如下。我正在实现这个 C。
float cutoff = 600.00f * M_PI * 2;
float c = 2.0f / sampleRate;
float q = sqrt(2.0f)/2.0f;
g_a1LP = (2.0f * pow(c, 2.0f) - (2.0f * pow(cutoff, 2.0f))) / (pow(c, 2.0f) + ((cutoff*c)/q) + pow(cutoff, 2.0f));
g_a2LP = -(pow(c, 2.0f) + pow(cutoff, 2.0f) - (cutoff*c)/q ) / (pow(c, 2.0f) + ((cutoff*c)/q) + pow(cutoff, 2.0f));
g_b0LP = 1.0f;
g_b1LP = 2.0f;
g_b2LP = 1.0f;
g_a1HP = (2.0f - (2.0f * pow(cutoff, 2.0f))/ pow(c, 2.0f)) / (1.0f + (2.0f/sqrt(2.0f)) * (1.0f/c) * cutoff + (pow(cutoff, 2.0f) / pow(c, 2.0f)));
g_a2HP = -(1.0f - (2.0f/sqrt(2.0f) * 1.0f/c * cutoff) + pow(cutoff, 2.0f)/pow(c, 2.0f)) / (1.0f + (2.0f/sqrt(2.0f)) * (1.0f/c) * cutoff + (pow(cutoff, 2.0f) / pow(c, 2.0f)));
g_b0HP = 1.0;
g_b1HP = -2.0;
g_b2HP = 1.0;
我现在必须进行 4 阶 Linkwitz-Riley 交叉。我知道这是两个巴特沃斯的级联。我不太确定我应该怎么做。我只是将系数相乘吗?我在正确的轨道上吗?如果有人感到困扰,我的系数看起来还好吗?他们在 matlab 中绘制得很好。
【问题讨论】:
-
我可以补充一下,我使用双线性变换来获得这些系数
-
我不认为你可以乘以系数,你可以乘以频率空间中的传递函数。或者您可以按顺序通过它们运行您的信号。
-
但这不是先衰减高频,然后再衰减低频,反之亦然吗?
-
是的。这不是你想要的吗?基本上创建一个带通滤波器?这就是级联 LPF 和 HPF 的作用...您确定要级联它们吗?
-
在交叉网络中,两个过滤器没有级联。相反,将相同的信号并行应用于两个滤波器。每个滤波器的输出分别为您提供高频和低频(每个都被发送到不同的扬声器)。参见例如here
标签: c matlab audio signal-processing