概述
IIR滤波信号实验
一、IIR滤波器原理
数字滤波器是对数字信号实现滤波的线性时不变系统。数字滤波实质上是一种运算过程,实现对信号的运算处理。输入数字信号(数字序列)通过特定的运算转变为输出的数字序列,因此,数字滤波器本质上是一个完成特定运算的数字计算过程,也可以理解为是一台计算机。描述离散系统输出与输入关系的卷积和差分方程只是给数字信号滤波器提供运算规则,使其按照这个规则完成对输入数据的处理。时域离散系统的频域特性:
其中
分别是数字滤波器的输出序列和输入序列的频域特性(或称为频谱特性),
是数字滤波器的单位取样响应的频谱,又称为数字滤经过滤波后的频域响应。只要按照输入信号频谱的特点和处理信号的目的,适当选择
,使得滤波后
满足设计的要求,这就是数字滤波器的滤波原理。
数字滤波器根据其冲激响应函数的时域特性,可分为两种,即无限长冲激响应(IIR)数字滤波器和有限长冲激响应(FIR)数字滤波器。IIR 数字滤波器的特征是,具有无限持续时间冲激响应,需要用递归模型来实现,其差分方程为:
进行Z变换,可得:
于是得到IIR数字滤波器的系统函数:
设计IIR滤波器的任务就是寻求一个物理上可实现的系统函数H(z),使其频率响应H(z)满足所希望得到的频域指标,即符合给定的通带截止频率、阻带截止频率、通带衰减系数和阻带衰减系数。
二、FFT仿真过程
第一步、创建工程
1、在ccs安装位置下ccsstudio_v3.3Myprojects文件夹创建一个文件夹命名为IIR.
2、将编写的程序文件保存在FFT中
3、打开ccs软件
4、在ccs中新建一个工程,从project菜单中选择New
5、在Project Name中输入“IIR”
然后点击Finish,ccs就创建了一个名为IIR.pjt的工程。
第二步、添加文件到工程中
1选择Project--Add Files to Project 添加IIR.c等文件
2、选择Project--Add Files Project,找到.ccstudio_v3.3c2000cgtoolslib,选择与c54xx CA Simulators对应的库文件.
3、在IIR.pjt上右击,选择Scan All File Dependencies,系统会添加相关的头文件。
第三步、查看程序,并编译运行
1、选择Project-Rebuild All,程序将编译、综合、连接。
也可以选择工具栏中的按钮;默认情况下,工程文件的debug文件夹中将生成.out文件。
2、选择File-Load Program,选择刚才生成的IIR.out,点击OPen
第四步、观察图形
1、选择View-Graph-Time/Frequency
2、在对话框中修改参数如下图
3、点击ok,运行后将会出现一个图形窗口,运行程序得到输入信号的时域图如下
输入信号的频域图
4、再次选择View-Graph-Time/Frequency 修改参数如下:
输出信号时域图如下:
输出频域图
三、总结
仿真结果:有仿真输入波形时域是混合波的叠加,在频域分析时我们可以看出该输入信号是一低频和一高频的叠加。当我们将该信号通过一IIR滤波器时,我们从输出波形看到,时域是一余弦波,频域也只保留了低频频率成分,这说明混合信号通过IIR滤波器后,高频成分被滤除,符合滤波器功能,因此CCS可以作为一种模拟滤波器功能的软件。
附:程序
IIR.c
#include <math.h>
#define signal_1_f 500
#define signal_2_f 10000
#define signal_sample_f 25000
#define pi 3.1415926
#define IIRNUMBER_L 2
#define bufer_L 256
int N_L=IIRNUMBER_L;
int data_in[bufer_L];
int out[bufer_L] ;
int x[IIRNUMBER_L+1];
int y[IIRNUMBER_L+1];
int k=0;
int bufer=bufer_L;
int fBn[IIRNUMBER_L]={0,0x634a};
int fAn[IIRNUMBER_L]={0xe5c,0xe5c};
extern int iir(int *x,int *y,int *fAn,int *fBn,int N_L);
extern int init(int *,int *,int);
extern int outdata(int *,int,int);
void inputwave();
void main()
{int iirout;
inputwave();
init(x,y,N_L);
while(1)
{x[0]=data_in[k];
iirout=iir(x,y,fAn,fBn,N_L);
outdata(out,iirout,bufer);
k++;
if(k>=bufer_L)
{
k=0;
}}}
void inputwave()
{
float wt1;
float wt2;
int i;
for(i=0;i<=bufer_L;i++)
{
wt1=2*pi*i*signal_1_f;
wt1=wt1/signal_sample_f;
wt2=2*pi*i*signal_2_f;
wt2=wt2/signal_sample_f;
data_in[i]=(cos(wt1)+cos(wt2))/2*32768;
}
}
最后
以上就是文静玉米为你收集整理的频率响应函数与数字滤波实验_IIR滤波信号实验的全部内容,希望文章能够帮你解决频率响应函数与数字滤波实验_IIR滤波信号实验所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复