带通一般方程到差分方程

信息处理 过滤器 离散信号 转换功能 带通
2022-02-05 10:49:49

我知道这是一个非常基本的问题,而且我是 DSP 的四分之一。我想在 Java 中创建一个函数,它可以接受两个参数,要么(double centerFrequency, double bandWidth)要么(double startFrequency, double cutoffFrequency).

根据我收集的信息,我想要一个非理想的 IIR 滤波器,因为这是我正在使用需要实时更新的加速度计的项目。希望我不会过多地编程,但我的过滤器函数的一般形式是这样的:

double BPFilter(double x, double centerFrequency, double bandWidth) {
    double filteredY;
    static double[] y = {0, 0, 0};
    //y[0] represents y[n]
    //y[1] represents y[n-1]
    //y[2] represents y[n-2]

    y[0] = A*y[2] + B*y[1] + C*x;
    y[2] = y[1];
    y[1] = y[0];
    return y[0];
}

A计算,B的最佳方法是C什么?目前我知道如何做连续传递函数,H(s), 所以如果可以翻译成A, B,C我可以那样做。采样率为100 Hz.

TL;DR:手动离散连续传递函数(无 MATLAB)

1个回答

连续时间二阶带通滤波器的传递函数由下式给出

(1)H(s)=ω0Qss2+ω0Qs+ω02

在哪里ω0是以弧度每秒为单位的中心频率,并且Q品质因数为了Q1, 术语ω0/Q非常接近3分贝带宽W(以弧度/秒为单位)。注意条件Q1相当于Wω0.

如果要转换传递函数(1)对于离散时间域,有几种可能性。最常用的两种是双线性变换法和脉冲不变法两者都在文献和网络(包括本网站)中得到了广泛的介绍。请注意,双线性变换引入了频率扭曲,因此您必须预先扭曲连续时间滤波器的参数,以便在变换后离散时间滤波器具有所需的属性。可以在SJ Orfanidis的《信号处理简介》(免费提供)一书的第 11 章中找到对使用双线性变换的 IIR 滤波器设计的一个很好的解释。

您可以在Audio-EQ-Cookbook中找到源自双线性变换的二阶离散时间滤波器的特定公式还要看看这个问题及其答案。