资源简介
本程序通过直接法,实现了给定参数的IIR低通滤波器的设计。
本程序所设计的滤波器的参数与Matlab校准过。
将需要的数据输入.dat文件,实现自动处理。其输出与Matlab一致。
详细的设计过程,参看博客。
http://blog.csdn.net/thnh169/article/details/9076283
代码片段和文件信息
#include
#include
#include
#include
#define pi ((double)3.1415926)
typedef struct
{
double Real_part;
double Imag_Part;
} COMPLEX;
struct DESIGN_SPECIFICATION
{
double Cotoff;
double Stopband;
double Stopband_attenuation;
};
int Ceil(double input)
{
if(input != (double)((int)input)) return ((int)input) +1;
else return ((int)input);
}
int Complex_Multiple(COMPLEX aCOMPLEX b
double *Res_Realdouble *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;
}
int Complex_Division(COMPLEX aCOMPLEX b
double *Res_Realdouble *Res_Imag)
{
*(Res_Real) = ((a.Real_part)*(b.Real_part) + (a.Imag_Part)*(b.Imag_Part))/
((b.Real_part)*(b.Real_part) + (b.Imag_Part)*(b.Imag_Part));
*(Res_Imag)= ((a.Real_part)*(b.Imag_Part) - (a.Imag_Part)*(b.Real_part))/
((b.Real_part)*(b.Real_part) + (b.Imag_Part)*(b.Imag_Part));
return (int)1;
}
double Complex_Abs(COMPLEX a)
{
return (double)(sqrt((a.Real_part)*(a.Real_part) + (a.Imag_Part)*(a.Imag_Part)));
}
double IIRFilter (double *a int Lenth_a
double *b int Lenth_b
double Input_Data
double *Memory_Buffer)
{
int Count;
double Output_Data = 0;
int Memory_Lenth = 0;
if(Lenth_a >= Lenth_b) Memory_Lenth = Lenth_a;
else Memory_Lenth = Lenth_b;
Output_Data += (*a) * Input_Data; //a(0)*x(n)
for(Count = 1; Count < Lenth_a ;Count++)
{
Output_Data -= (*(a + Count)) *
(*(Memory_Buffer + (Memory_Lenth - 1) - Count));
}
//------------------------save data--------------------------//
*(Memory_Buffer + Memory_Lenth - 1) = Output_Data;
Output_Data = 0;
//----------------------------------------------------------//
for(Count = 0; Count < Lenth_b ;Count++)
{
Output_Data += (*(b + Count)) *
(*(Memory_Buffer + (Memory_Lenth - 1) - Count));
}
//------------------------move data--------------------------//
for(Count = 0 ; Count < Memory_Lenth -1 ; Count++)
{
*(Memory_Buffer + Count) = *(Memory_Buffer + Count + 1);
}
*(Memory_Buffer + Memory_Lenth - 1) = 0;
//-----------------------------------------------------------//
return (double)Output_Data;
}
int Direct( double Cotoff
double Stopband
double Stopband_attenuation
int N
double *azdouble *bz)
{
printf(“Wc = %lf [rad/sec] \n“ Cotof
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1358 2013-05-02 19:00 input.dat
文件 9755 2013-05-02 15:25 IIR.c
----------- --------- ---------- ----- ----
11113 2
相关资源
- 基于verilog的iir滤波器设计
- 基于Matlab的IIR高通、带通、低通和带
- IIR数字滤波器的Matlab和FPGA实现.pdf
- MATLAB中用FIR和IIR滤波器滤除高频噪声
- 数字下变频MATLAB仿真
- 低通滤波器 MATLAB程序
- 基于Matlab GUI的简易数字均衡器设计
- 利用切比雪夫一致逼近法设计一个F
- IIR数字高通滤波器
- 用双线性变换法设计一个巴特沃斯低
- 指数低通滤波器对图像进行增强
- 基于matlab的低通滤波器设计
- 基于matlab的iir滤波器和gui设计.rar
- 26TDOA定位的Chan算法MATLAB源代码
- matlab FIR IIR 滤波器
- IIR数字滤波器-巴特沃斯滤波器的设计
- 低通滤波器
- ADRC算法
- 可用于单片机或STM32自制IIR数字滤波器
- IIR高通滤波器的matlab设计和在dsp上的
- IIR_带阻_带通_高通_低通滤波器MATLAB源
- 用MATLAB设计IIR数字滤波器
- 基于matlab的布莱克曼窗函数法设计的
- ADRC 自抗扰控制算法ADRC完整的C语言程
- 光伏最大功率点跟踪
- MC9S12XS128程序五IIC程序
- DDC中低通滤波器的设计,含word文档说
- 低通滤波器设计与实现基于MATLAB.zip
- 利用MATLAB仿真软件系统结合双线性变
- 基于matlab虹膜识别源程序
评论
共有 条评论