我试图在音频范围内使用直接2转置配置实现双二阶峰值滤波器。我相信我的“a”和“b”参数是正确的,因为它们对应于EarLevel Engineering Biquad Calculator v3(https://www.earlevel.com/main/2021/09/02/biquad-calculator-v3/)生成的参数。下面是我处理差分方程的代码(请忽略FType 1和3)。SignalIn是440 Hz正弦波。计算使用Double数据类型。
function TFrmFilters.Filter(SignalIn: double; FType: integer): double;
begin
case FType of
1: // AllPass (no filter)
Result := SignalIn;
2: // Biquad Peak
begin
Yn := SignalIn + S1n_1;
S1n := S2n_1 + b1 * SignalIn - a1 * Yn;
S2n := b2 * SignalIn - a2 * Yn;
S1n_1 := S1n;
S2n_1 := S2n;
Result := Yn;
end;
3: // Resonator (not implemented)
Result := SignalIn;
end;
end;
字符串
滤波器在宽范围的增益、Q和SignalIn频率上表现出不稳定性。我对差分方程的处理似乎有问题。
1条答案
按热度按时间iq0todco1#
我无意中交换了'a'和'B'参数。这似乎是网上一些食谱过滤器解决方案的情况。
我很抱歉在做足够的研究之前提交一个问题。