资源简介
用C语言实现的Butterworth滤波器,附带滤波数据,VC6.0控制台程序。
代码片段和文件信息
#include
#include
#include
#include
#include
#include
using namespace std;
#define pi ((double)3.1415926)
struct DESIGN_SPECIFICATION
{
double Passband;
double Stopband;
double Passband_attenuation;
double Stopband_attenuation;
};
//复数乘
_complex ComplexMul( _complex a _complex b )
{
_complex c;
c.x = a.x*b.x - a.y*b.y;
c.y = a.y*b.x + a.x*b.y;
return c;
}
//复数除
_complex ComplexDiv( _complex a _complex b)
{
_complex c;
double dTmp = b.x * b.x + b.y * b.y;
//除数太小防溢出
if( dTmp < 1.0E-300 ){
c.x = 1.0E300;
c.y = 1.0E300;
return c;
}
c.x = ( a.x * b.x + a.y * b.y) / dTmp;
c.y = ( a.x * b.y - a.y * b.x) / dTmp;
return c;
}
//计算滤波器阶数N
int Buttord(double Passband
double Stopband
double Passband_attenuation
double Stopband_attenuation)
{
int N;
printf(“Wp = %lf [rad/sec] \n“ Passband);
printf(“Ws = %lf [rad/sec] \n“ Stopband);
printf(“Ap = %lf [dB] \n“ Passband_attenuation);
printf(“As = %lf [dB] \n“ Stopband_attenuation);
printf(“--------------------------------------------------------\n“ );
N = ceil(0.5*( log10 (( pow (10 Stopband_attenuation/10) - 1)/
( pow (10 Passband_attenuation/10) - 1)) / log10 (Stopband/Passband) ));
return (int)N;
}
//计算S平面的滤波器系数
int Butter(int N double Cutoff double *a double *b)
{
double dk = 0;
int k = 0;
int count = 0count_1 = 0;
_complex *poles *Res *Res_Save;
poles = new _complex[N]();
Res = new _complex[N+1]();
Res_Save = new _complex[N+1]();
memset(poles 0 sizeof(_complex)*(N));
memset(Res 0 sizeof(_complex)*(N+1));
memset(Res_Save 0 sizeof(_complex)*(N+1));
if((N % 2) == 0) dk = 0.5;
else dk = 0;
for(k = 0;k <= ((2*N)-1) ; k++)
{
if(Cutoff*cos((2*k+N-1)*(pi/(2*N))) < 0.0)
{
poles[count].x = -Cutoff*cos((2*k+N-1)*(pi/(2*N)));
poles[count].y = -Cutoff*sin((2*k+N-1)*(pi/(2*N)));
count++;
if (count == N) break;
}
}
printf(“Pk = \n“ );
for(count = 0; count < N; count++)
{
printf(“(%lf) + (%lf i) \n“ -poles[count].x -poles[count].y);
}
printf(“--------------------------------------------------------\n“ );
Res[0].x = poles[0].x;
Res[0].y = poles[0].y;
Res[1].x = 1;
Res[1].y= 0;
for(count_1 = 0;count_1 < N-1;count_1++)//N个极点相乘次数
{
for(count = 0;count <= count_1 + 2;count++)
{
if(0 == count)
{
Res_Save[count] = ComplexMul( Res[count] poles[count_1+1] );
}
else if((count_1 + 2) == count)
{
Res_Save[count].x += Res[count - 1].x;
Res_Save[count].y += Res[count - 1].y;
}
else
{
Res_Save[count] = Comple
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-04-27 15:55 Butterworth\
文件 48322 2017-04-06 09:27 Butterworth\1.txt
文件 145792 2017-03-27 19:25 Butterworth\123.txt
文件 149793 2017-04-01 15:24 Butterworth\1234.txt
文件 106912 2017-05-01 10:16 Butterworth\butter1.txt
文件 4335 2017-04-06 21:29 Butterworth\Butterworth.dsp
文件 530 2017-04-04 19:34 Butterworth\Butterworth.dsw
文件 41984 2017-05-01 10:16 Butterworth\Butterworth.ncb
文件 53760 2017-05-01 10:16 Butterworth\Butterworth.opt
文件 1165 2017-05-01 10:16 Butterworth\Butterworth.plg
目录 0 2017-04-27 15:55 Butterworth\Debug\
文件 254976 2017-05-01 10:16 Butterworth\Debug\Butterworth.bsc
文件 315455 2017-05-01 10:16 Butterworth\Debug\Butterworth.exe
文件 418012 2017-05-01 10:16 Butterworth\Debug\Butterworth.ilk
文件 2095684 2017-05-01 10:10 Butterworth\Debug\Butterworth.pch
文件 1131520 2017-05-01 10:16 Butterworth\Debug\Butterworth.pdb
文件 28267 2017-05-01 10:16 Butterworth\Debug\main.obj
文件 0 2017-05-01 10:16 Butterworth\Debug\main.sbr
文件 123904 2017-05-01 10:16 Butterworth\Debug\vc60.idb
文件 110592 2017-05-01 10:16 Butterworth\Debug\vc60.pdb
文件 10932 2017-05-01 10:16 Butterworth\main.cpp
文件 106912 2017-04-06 09:28 Butterworth\output22.txt
- 上一篇:基于QT的简单文本编辑器
- 下一篇:人工智能归结反演c++代码
相关资源
- 扩展卡尔曼滤波项目C++代码
- 双边滤波器C++ 代码
- 粒子滤波跟踪程序源代码
- 图像滤波常用算法
- 高斯滤波+卡尔曼滤波+粒子滤波C++&M
- 双边滤波C++实现
- 卡尔曼滤波算法
- KCF跟踪算法(C++)146187
- C++编写S-G滤波
- STM32实战系列源码,按键/定时器/PWM
- Matlab的IIR滤波器设计C语言M语言
- FIR滤波器c语言代码
- 基于导向滤波和人脸检测的美颜算法
- 卡尔曼滤波算法及C语言代码.
- 数字滤波器的C语言实现,包括高通、
- 卡尔曼滤波算法航迹预测.rar
- 四轴飞行器简介与姿态传感器卡尔曼
- 维纳滤波opencv
- 中值滤波的c程序,附带图片
- 捷联惯导算法+kalman滤波c程序
- c语言实现iir滤波器
- Gabor滤波器C++程序
- vc++实现图像处理:中值滤波
- kalman和ukf滤波C语言源码和
- 双边滤波器 C语言程序可用
- FIR滤波器的C语言实现
- C语言FIR滤波器
- 巴特沃斯低通滤波器的MFC程序
- 图像处理-读取bmp图像均值滤波-C++
- LMS自适应滤波C程序,语音降噪的
评论
共有 条评论