c++低通数字滤波器_滤波器的设计__带通

本文介绍了如何设计带通滤波器,包括宽带和窄带两种。宽带滤波器由高通和低通滤波器组成,通过计算不同电阻和电容的值来确定截止频率。窄带滤波器的设计涉及选择电容和电阻,计算增益,并关注带宽问题。文章鼓励读者根据上次教程自行计算具体数值。
摘要由CSDN通过智能技术生成

    哈喽,大家好!!!因为实习公司需要排练年会节目,最近自己开始花时间健身,所以很久没更新了。望理解哈!

    今天就讲设计一个带通滤波器吧!!!!

    如图宽带带通滤波器:

1f1e3c40fb7d9ec1bb31cdc5f918ff1e.png

c491f0d0e1be7f9dc894c877480f005d.png

宽带滤波器是由一个高通和一个低通组成,其截止频率就按照上次说的那个公式分别计算高低通滤波器的截止频率从而计算出fL和fH。

  第一步:

选择C1=C3的大小

    第二步:

计算R1=1/(1.414*π*C1*f)(f是你想要的频率)

计算R2=(1/2)*R1

    第三步:

选择C2的大小

    第四步:

计算C5=2*C2

    第五步:

计算R1=R2=1/(2*1.414*π*C2*f)(f是你想要的频率)

    第六步:

选择C1和C4,为C1的100-1000倍,很多经验用10uF

设计完成了!!!!!

因为和上次差不多,所以这次其电容电阻值就大家自己计算一下!!

    接下来我来分享一个窄带的带通滤波器。可能也是很多人希望看到的。

如图:

524b00a4e1d7d6b5907918b56e316c13.png

    第一步:

选择C3=C5

    第二步:

计算R1=R4=1/(2*π*C1*f)

    第三步:

计算R3=a*R1 (a为设定值,有关于Q)

    第四步:

计算R2=R1/a

    第五步

选择C1和C4,一般10uF

设计完成!!!!

增益=Q=(R3+R4)/(2*R1)

注意增益大小和带宽问题!!!!

db4ee9e2f70eeb6289864b68697626f0.png

cb3d1d993af6370ced79d7642e89d764.pngcb3d1d993af6370ced79d7642e89d764.png

3bfd74310b3122a640b5ea05a3d1c39b.png

可以看出带宽比较窄为1KHz左右!!!

计算值我也不带数字进去了,毕竟上次的文章里面都带进去了,比较容易,掌握了上次的这次也就容易掌握了!!!!

至于陷波器,我就下次再说吧!!!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
float DigFil(invar, setic) float invar; int setic; /******************************************************************************/ /* Filter Solutions Version 2009 Nuhertz Technologies, L.L.C. */ /* www.nuhertz.com */ /* +1 602-279-2448 */ /* 3rd Order Band Pass Butterworth */ /* Bilinear Transformation with Prewarping */ /* Sample Frequency = 5.000 KHz */ /* Standard Form */ /* Arithmetic Precision = 4 Digits */ /* */ /* Center Frequency = 300.0 Rad/Sec */ /* Pass Band Width = 20.00 Rad/Sec */ /* */ /******************************************************************************/ /* */ /* Input Variable Definitions: */ /* Inputs: */ /* invar float The input to the filter */ /* setic int 1 to initialize the filter to zero */ /* */ /* Option Selections: */ /* Standard C; Initializable; Internal States; Not Optimized; */ /* */ /* There is no requirement to ever initialize the filter. */ /* The default initialization is zero when the filter is first called */ /* */ /******************************************************************************/ /* */ /* This software is automatically generated by Filter Solutions */ /* no restrictions from Nuhertz Technologies, L.L.C. regarding the use and */ /* distributions of this software. */ /* */ /******************************************************************************/ { float sumnum=0.0, sumden=0.0; int i=0; static float states[6] = {0.0,0.0,0.0,0.0,0.0,0.0}; static float znum[7] = { -7.968e-09, 0.0, 2.39e-08, 0.0, -2.39e-08, 0.0, 7.968e-09 }; static float zden[6] = { .992, -5.949, 14.88, -19.86, 14.92, -5.981 }; if (setic==1){ for (i=0;i<6;i++) states[i] = [i] = [i]*invar; return 0.0; } else{ sumnum = sumden = 0.0; for (i=0;i<6;i++){ sumden += states[i]*zden[i]; sumnum += states[i]*znum[i]; if (i<5) states[i] = states[i+1]; } states[5] = invar-sumden; sumnum += states[5]*znum[6]; return sumnum; } }
C++ 中实现滤波器的一般步骤如下: 1. 设计滤波器的传递函数:高通、低通带通滤波器的传递函数可以使用各种数学方法进行设计,例如巴特沃斯、切比雪夫、椭圆等方法。 2. 将传递函数转换为离散时间域的差分方程:通过使用双线性变换或其他数字滤波器设计方法将传递函数转换为差分方程。 3. 在 C++ 中实现差分方程:将差分方程转换为代码实现,在 C++ 中可以使用循环或递归等方法实现。 4. 对输入信号进行滤波:将输入信号输入到滤波器中,通过差分方程进行滤波。 下面是一个简单的 C++ 实现低通滤波器的例子: ```c++ #include <iostream> #include <cmath> using namespace std; const int N = 100000; double x[N], y[N]; double a = 0.2; // 滤波器系数 void low_pass_filter(double *x, double *y, int n, double a) { y[0] = x[0]; for (int i = 1; i < n; i++) { y[i] = a * x[i] + (1 - a) * y[i-1]; } } int main() { // 生成一个正弦波 double fs = 1000; // 采样率 double f = 50; // 信号频率 double t = 1/fs; for (int i = 0; i < N; i++) { x[i] = sin(2*M_PI*f*i*t); } // 对正弦波进行低通滤波 low_pass_filter(x, y, N, a); // 输出结果 for (int i = 0; i < N; i++) { cout << y[i] << endl; } return 0; } ``` 在这个例子中,我们实现了一个简单的低通滤波器,使用了一个一阶滤波器滤波器系数为 a。我们首先生成了一个正弦波作为输入信号,然后使用低通滤波器对其进行滤波。最后输出滤波后的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值