巴特沃斯(Butterworth)滤波器(一)

首先考虑一个归一化(截止频率为1rad/s)的低通滤波器,其幅频特性表达式如下:
在这里插入图片描述
其幅频特性曲线如下图:
在这里插入图片描述
当n–> ∞ \infty 时,得到一个理想的低通滤波器:
当w>1(截止频率)时,增益为0;
当w<1(截止频率)时,增益为1;
当w=1(截止频率)时,增益为0.707(衰减到-3dB);

其次,我们根据上面的幅频特性表达式求滤波器传递函数

根据以下三个公式:

  • s = jw
  • ∣ H ( s ) ∣ 2 = H ( s ) H ( s ) ‾ \left | H_{(s)}\right |^{2}=H_{(s)}\overline{ H_{(s)}} H(s)2=H(s)H(s)
  • H ( − s ) = H ( s ) ‾ H_{(-s)} = \overline{ H_{(s)}} H(s)=H(s)

推导下:
在这里插入图片描述
因此极点为:
在这里插入图片描述
下面是n=1到n=4阶的极点位置:
在这里插入图片描述
例如,四阶Butterworth低通滤波器的极点所在角度为:
在这里插入图片描述
这样 1到10阶的Butterworth多项式因子表格如下:
在这里插入图片描述
以上我们考虑的是截止频率为1的情况,其它截止频率可将传递函数中的s替换为:s/wc ,wc为截止频率,单位rad/s。例如二阶截止频率为100rad/s的传递函数为:
在这里插入图片描述
转载:https://www.cnblogs.com/xpvincent/p/5557659.html

  • 10
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 巴特沃斯带通滤波器是一种常用的数字滤波器,可以在一定频率范围内通过信号,并在其他频率范围内抑制信号。实现巴特沃斯带通滤波器的主要步骤如下: 1. 确定滤波器的通带和阻带频率,以及通带和阻带的衰减量。 2. 根据通带和阻带频率计算出滤波器的截止频率。 3. 根据截止频率计算出滤波器的阶数。 4. 根据阶数设计巴特沃斯滤波器传递函数。 5. 将传递函数转换为巴特沃斯滤波器的差分方程式。 6. 使用差分方程式实现巴特沃斯滤波器的数字滤波器。 下面是一个用C语言实现巴特沃斯带通滤波器的示例代码: ```c #include <stdio.h> #include <math.h> #define PI 3.14159265358979323846 double b[5]; // 分子系数 double a[5]; // 分母系数 void butterworth_bandpass_filter(double f1, double f2, int n, int fs) { double w1 = 2.0 * PI * f1 / fs; double w2 = 2.0 * PI * f2 / fs; double bw = w2 - w1; double q = 1.0 / tan(bw / 2.0); double q2 = q * q; double a0 = 1.0 + sqrt(2.0) * q + q2; double a1 = 2.0 * (q2 - 1.0) / a0; double a2 = (1.0 - sqrt(2.0) * q + q2) / a0; double b0 = q2 / a0; double b1 = 2.0 * q2 / a0; double b2 = q2 / a0; b[0] = b0; b[1] = b1; b[2] = b2; a[0] = 1.0; a[1] = a1; a[2] = a2; } double butterworth_bandpass_filter_apply(double x) { static double x_1 = 0.0, x_2 = 0.0, y_1 = 0.0, y_2 = 0.0; double y = b[0] * x + b[1] * x_1 + b[2] * x_2 - a[1] * y_1 - a[2] * y_2; x_2 = x_1; x_1 = x; y_2 = y_1; y_1 = y; return y; } int main() { double x[] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0}; double y[10]; int i, n = 10, fs = 1000; double f1 = 50.0, f2 = 150.0; butterworth_bandpass_filter(f1, f2, 2, fs); for (i = 0; i < n; i++) { y[i] = butterworth_bandpass_filter_apply(x[i]); printf("%f -> %f\n", x[i], y[i]); } return 0; } ``` 在这个示例代码中,我们使用了一个二阶巴特沃斯滤波器来实现带通滤波器。我们先计算出了滤波器传递函数,然后通过差分方程式来实现数字滤波器。最后,我们将这个数字滤波器应用于一组输入信号,得到了滤波后的输出信号。 ### 回答2: 巴特沃斯带通滤波器是一种常用的信号处理工具,可以在给定的频率范围内通过滤除其他频率的信号。其设计基于巴特沃斯滤波器的原理,可以通过选择适当的参数实现不同的带通滤波效果。 具体实现巴特沃斯带通滤波器的步骤如下: 1. 确定滤波器的阶数:巴特沃斯滤波器的阶数越高,滤波效果越好但计算复杂度也越高。根据滤波器的要求,选择合适的阶数。 2. 确定滤波器的通带和阻带边界:根据需要的带通范围,确定滤波器的通带上下界。 3. 计算截止频率:根据通带上下界,计算得到对应的截止频率。 4. 计算极点:利用巴特沃斯滤波器的特性,计算得到滤波器的极点。 5. 设计巴特沃斯带通滤波器传递函数:将计算得到的极点代入巴特沃斯带通滤波器传递函数表达式中,得到滤波器传递函数。 6. 实现滤波器:根据得到的传递函数,可以使用各种信号处理工具或编程语言中提供的函数,如Matlab中的butter函数,来实现巴特沃斯带通滤波器。 总之,巴特沃斯带通滤波器可以通过确定滤波器的阶数、通带和阻带边界、计算截止频率和极点、设计传递函数等步骤来实现。通过合理的参数选择,可以得到满足要求的带通滤波效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值