
巴特沃斯低通滤波器的C语言代码实现。
5星
- 浏览量: 0
- 大小:None
- 文件类型:None
简介:
巴特沃斯低通滤波器的C语言实现 巴特沃斯低通滤波器作为一种常见的数字信号处理技术,主要功能是去除高频信号,同时保留低频信号。这种技术在音频处理、图像处理以及通信系统等多个领域有着广泛的应用。本文将深入探讨巴特沃斯低通滤波器的C语言实现,内容涵盖滤波器的设计、传递函数的计算、极点的选择以及相应的C语言程序开发。
1. 巴特沃斯低通滤波器的设计 巴特沃斯低通滤波器的设计过程基于模拟滤波器设计的思想。首先,需要根据所需的设计参数计算出合适的次数 N。通过分析给定的参数,确定阻带频率,并将其代入相关公式,从而得出次数 N 的值。2. 巴特沃斯滤波器的传递函数 巴特沃斯低通滤波器的传递函数可以通过其振幅特性的分母多项式来获得。该分母多项式通过求解 S 可以得到极点的位置。为了便于计算,我们针对 N 为偶数和 N 为奇数两种情况分别进行极点求解,并均采用了欧拉公式。综上所述,极点的解为在 s 平面内,以半径为 Ωc 的圆上等间距的点,这些点共有 2N 个。3. 巴特沃斯滤波器的实现(C语言) 确定了次数后,接下来进行极点的计算。极点计算采用如下公式: 其对应的 C 语言程序如下:
```c
typedef struct {
double Real_part;
double Imag_Part;
} COMPLEX;
COMPLEX poles[N];
for(int k = 0; k <= ((2*N)-1) ; k++){
if(Cotoff*cos((k+dk)*(pi/N)) < 0) {
poles[count].Real_part = -Cotoff*cos((k+dk)*(pi/N));
poles[count].Imag_Part = -Cotoff*sin((k+dk)*(pi/N));
count++;
if(count == N) break;
}
}
```
计算出稳定的极点之后,就可以进行传递函数的计算了。传递函数的计算方法类似于以下表达式: 计算出传递函数后,可以得到模拟滤波器的系数;这些系数需要对分母进行展开运算。值得注意的是,这里的极点可能不是整数值, 因此展开运算需要运用复数乘法来进行处理. 复数乘法代码如下:
```c
int Complex_Multiple(COMPLEX a, COMPLEX b, double *Res_Real, double *Res_Imag){
*Res_Real = (a.Real_part)*(b.Real_part) - (a.Imag_Part)*(b.Imag_Part);
*Res_Imag = (a.Imag_Part)*(b.Real_part) + (a.Real_part)*(b.Imag_Part);
return (int)1;
}
```
在简化假设下, 我们将观察其如何计算滤波器系数, 其传递函数大致的关系如以下图所示。
全部评论 (0)


