资源简介
本程序通过直接法,实现了给定参数的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
相关资源
- IIR数字滤波器设计实验报告
- 数字信号处理原理及其MATLAB实现
- Matlab中,用c或m语言编写s函数.rar
- IIR 数字低通滤波器(用MATLAB GUI设计
- 基于TMS320C5402的IIR低通滤波器设计
- 数字图像处理DSP_IIR带通滤波器的设计
- MATLAB-机器视觉工具箱MVTB Peter Corke推荐
- 数字信号处理及MATLAB仿真
- 数字 一阶低通滤波器 matlab 幅频响应
- 基于MATLAB的FIR数字低通滤波器分析和
- 基于IIR对信号进行频谱分析及滤波处
- IIR数字滤波器设计及软件实现 Matlab
- 基于matlab的IIR数字滤波器的设计与仿
- 数字信号处理实验.zip
- 汉宁窗FIR数字低通滤波器MATLAB
- 音频低通滤波
- 基于MATLAB的IIR和FIR滤波器设计-实验
- LMS 自适应滤波的 C 语言源代码
- 低通滤波器 matlab 实现
- matlab程序 理想低通滤波器
- MATLAB脉冲响应不变法设计IIR巴特沃斯
- matlab中低通IIR巴特沃斯滤波器的设计
- mATlab自编理想低通滤波器
- 基于MATLAB的IIR数字滤波器的设计 毕业
- FIR低通滤波器+matlab程序
- FIR低通滤波器设计
- matlab编写的FIR哈明窗低通滤波器的设
- 基于verilog的iir滤波器设计
- 基于Matlab的IIR高通、带通、低通和带
- IIR数字滤波器的Matlab和FPGA实现.pdf
评论
共有 条评论