信息处理课程设计.docx
- 文档编号:9608558
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:13
- 大小:196.96KB
信息处理课程设计.docx
《信息处理课程设计.docx》由会员分享,可在线阅读,更多相关《信息处理课程设计.docx(13页珍藏版)》请在冰豆网上搜索。
信息处理课程设计
信息处理课程设计
信科04-2班
指导老师:
孙统风
设计人员:
岳元成
一种基于VC++的数字滤波器模拟的设计
引言
由于现实的信号往往和人们需要的有一定的误差,并且其中夹杂着很多不需要的其他信号,这样就需要用滤波器滤除无用的信号,大多数情况下人们是通过傅立叶变换得到信号的频率成分和幅值,剔除了某些不需要的频率成分,以得到实际需要的信号,便于下一步的处理,这就涉及到滤波。
而数字滤波器是其中最常用的,它是语音与图像处理、模式识别、雷达信号处理、频谱分析等应用中最基本的处理部件。
数字滤波既能满足滤波器对幅度和相位特性的严格要求,又避免模拟滤波器所无法克服的电压漂移、温度漂移和噪声等问题。
根据其冲激响应函数的时域特性,可分为无限长冲激响应(IIR)滤波器和有限长冲激响应(FIR)滤波器。
既然FFT和数字滤波有着广泛的应用,实现一套基于FFT和数字滤波的信号分析与处理系统就显得尤其重要。
所以借着此次设计机会,了解滤波器的工作原理,并通过vc++语言模拟几种简单的滤波模型,更加形象的理解滤波器的原理与应用。
数字滤波器的设计原理
数字滤波器可分为两大类,经典滤波器与现代滤波器。
经典滤波器是假定输入信号中的有用成分和希望去除的成分各自占有不同的频带,当输入信号通过一个线性系统后可将欲去除成分有效的去除。
现代滤波器研究的主要内容是从含有噪声的数据记录中估计出信号的某些特征或信号本身,这里主要先讨论经典滤波器。
经典滤波器从功能上可分为四种:
低通,高通,带通,带阻滤波器,每一种又分为模拟滤波器和数字滤波器。
主要针对经典滤波器中的数字滤波器做讨论。
FIR滤波器的转移函数是:
直接由H(z)得出,表示输入输出关系的常系数线性差分方程为:
M阶(长度N=M+1)的FIR数字滤波器
其实滤波器的设计问题在于寻求一系统函数
,使其频率响应
逼近滤波器要求的理想频率响应
,其对应的单位脉冲响应
。
例如下图一得到的波形,往往和需要的有一定的差别,为了下一步应用的方便,进行滤波,可以看出,一个波形在没有处理时候包括通带(我们需要的)、过度带、阻带,这里我们需要的是通带,其他不需要的部分进行必要的化简。
用函数设计FIR滤波器的基本方法
设计思想:
从时域从发,设计
逼近理想
。
设理想滤波器
的单位脉冲响应为
。
以低通线性相位FIR数字滤波器为例。
一般是无限长的,且是非因果的,不能直接作为FIR滤波器的单位脉冲响应。
要想得到一个因果的有限长的滤波器h(n),最直接的方法是截断
,即截取为有限长因果序列,并用合适的窗函数进行加权作为FIR滤波器的单位脉冲响应。
按照线性相位滤波器的要求,h(n)必须是偶对称的。
对称中心必须等于滤波器的延时常数,即
用矩形窗设计的FIR低通滤波器,所设计滤波器的幅度函数在通带和阻带都呈现出振荡现象,且最大波纹大约为幅度的9%,这个现象称为吉布斯(Gibbs)效应。
为了消除吉布斯效应,一般采用其他类型的窗函数。
2.典型的窗函数
(1)矩形窗(RectangleWindow)
其频率响应和幅度响应分别为:
,
(2)三角形窗(BartlettWindow)
其频率响应为:
(3)汉宁(Hanning)窗,又称升余弦窗
其频率响应和幅度响应分别为:
数字滤波器的方案
冲激响应不变法:
双线性变换法:
设计步骤:
按一定技术指标将给出的数字滤波器转换为模拟低通滤波器;根据转换后的技术指标设计模拟低通滤波器H(s)。
再将H(s)转换成H(z):
对于高通、带通或带阻数字滤波器的设计,先将其技术指标转化为与之相应的作为“样本”的低通模拟滤波器的技术指标,再进行频率变换,然后按上述步骤设计出低通H(s),再将H(s)转换成需要的H(z)。
冲激响应不变法设计IIR数字滤波器的主要缺点是数字滤波器的幅度响应产生混迭失真,双线性变换法可克服这个缺点,但是他却引起频率失真。
双线性变换的频率标度的非线性失真可以通过预畸变的方法来补偿,即:
模拟滤波器按这两个预畸变了的频率ΩP和ΩT来设计,这样用双线性变换得到的数字滤波器便具有所希望的截止频率特性,因此,本文讨论的是后一种方法,双线性变换法设计首先找出模拟滤波器的转移函数H(s),然后求出对应的数字滤波器的转移函数H(z):
T为采样周期。
数字滤波器的设计与实现
●设计步骤
在这里我用软件熟悉的软件vc++.设计模拟对几种简单的信号进行数字滤波的过程,设计窗口如下:
分为输入波形窗口与输出波形窗口,其中输入波形的大致形状已经固定,下面的波形为通过滤波整形后的波形,可以明显的看到,输出波形已经具有一定的规则,容易进行下面的应用。
这里设计了三种常用的滤波器的模拟波形分别是:
固定带通滤波、可变带通滤波、噪音的滤波,另外还有一个是对滤波的误差波形的模拟。
下面阐述具体设计实现的方法。
一、应用vc++中提供的mfc文件建立一个相关工程文件。
并且制作相关的可视界面,如下:
并对其中的执行按键进行编辑,可以看出,这几个按键都有相似之处,都可以看作是界面切换命令所以可以用以下的函数来实现:
voidCFilterDlg:
:
OnWav1()
{
CalWav1();//调用相应的工作命令
UpdateStaticBox
(1);
CRectrect(20,50,520,500);//初始化
InvalidateRect(rect);
EnableRegulate(false);//对频率变换的按键的启动函数
CurrentWav=1;
}
由于输出可视波形这样就要联系到波形的绘制上,由于这三个基本滤波器的输入波形的不同,滤波的功能也相应的不同,所以实现滤波所用的函数也就不同了,根据滤波器的原理可以在vc++中找到相对的函数来实现。
实现带通滤波的函数在vc++中是
voidCFilterDlg:
:
CalWav1()
{sinwn(a,f,ph,m,fs,snr,seed,y,n);//输入波形相应的函数
DataSuccess=true;
/////////////////////滤波后的波形/////////////////
sinwn(a2,f2,ph2,m,fs,snr,seed,d,n);//输出波形相应的函数
lms(y,d,y2,n,w,m,mu);//画图
}
二、由于第二种是在第一种滤波基础上进行可变频率的带通滤波,所以实现功能时候频率变换函数需要激活,即EnableRegulate(true);这里就是简单的可视图像对应的操作,即通过改变函数的最低频率与最高频率来实现不同频率下的滤波模拟。
与固定频率带通滤波不同的是,根据不同的频率改变需要更新输出的波形图像,即改变图像的显示所以在这里应该加一个循环函数来解决频率变化时候的波形变化所以在执行函数里应用了for(i=0;i<10;i++)
{
a[i]=1;
ph[i]=rand()*90;
f[i]=10*i;
}实现输入波形的变化。
另外用m=(fh-/10;fl);
for(i=0;i<=m;i++)
{
a[i]=1;
ph[i]=0;
f[i]=i*10+fl;
}
其中fh是输入的最高频率,f1是输入的最低频率。
这样就可以实现可变频率的带通滤波。
三、在对噪音进行滤波时候,因为输入的波形具有一定的规则,但是很明显有一定的抖动,这个在生活中经常遇到,理想的波形是不存在的,一般正如下面的输入波形一样。
但是这里我们可以看到一些规律,就是在理想的波形的基础上,加入了一些频率较高的噪音波形所以在实现噪音波形的输入时候我用了
for(i=0;i y[i]=uniform(0,1,&seed); 其中uniform是math.h中的函数功能如下: doubleuniform(doublea,doubleb,long*seed) { doublet; *seed=2045*(*seed)+1; *seed=*seed-(*seed/1048576)*1048576; t=(*seed)/1048576.0; t=a+(b-a)*t; return(t); 可见这个函数可以帮我实现高斯白噪音波形的实现,并且通过 for(i=0;i<500;i++) y[i]=x[i]+y[i]; 实现了噪音与理想的波形的叠加。 可见,输出的波形处理上要简单很多。 四、在模拟滤波的误差时候,可以选择理想、简单的波形来作为输入,所以我选择了简单的正弦信号作为输入,实现简单的正弦就简单很多了。 用一组 a[]={1,1,1,1,1,1,1,1,1,1,1},b[]={1,0,0,0,0,0,0,0,0,0,0} gain(b,a,10,10,y,x,500,2);//实现正弦输入波形 gain(b,a,10,10,x,y2,500,2);///实现输出波形 其中gain函数在math.h中进行定义。 输入波形 输出波形为误差: ●设计中的说明 1、在选择输入函数时候采用混合同余法产生输入区间上的随机数yi.根据一定的间隔来产生随机的输入波形,通过对随机波形进行滤波处理。 2、实现滤波所用的函数是math.h中定义的sinwn具体实现为: voidsinwn(doublea[],doublef[],doubleph[],intm,doublefs,doublesnr,longseed,doublex[],intn) { inti,k; doublez,pi,nsr; pi=4.0*atan(1.0); z=snr/10.0; z=pow(10.0,z); z=1.0/(2*z); nsr=sqrt(z); for(i=0;i { f[i]=2*pi*f[i]/fs; ph[i]=ph[i]*pi/180.0; } for(k=0;k { x[k]=0.0; for(i=0;i { x[k]=x[k]+a[i]*sin(k*f[i]+ph[i]); } x[k]=x[k]+nsr*gauss(0.0,1.0,&seed); } } //LMS自适应滤波器 //x--双精度实型一维数组,长度n。 输入信号 //d--双精度实型一维数组,长度n。 理想输出信号 //y--双精度实型一维数组,长度n。 实际输出信号 //n--整形变量。 输入信号的长度 //w--双精度实型一维数组,长度为m。 自适应滤波器的加权系数 //m--整形变量。 自适应滤波器的长度(阶数-1) //mu--双精度实型变量。 收敛因子 3、在实现画图时采用lms函数,也是在math.h中定义,在此不做介绍。 4、在计算误差时候采用的voidgain(doubleb[],doublea[],intm,intn,doublex[],doubley[],intlen,intsign) //len--频率响应的长度 //当sign=0,计算实部Re[H(w)]和虚部Im[H(w)] //当sign=1,计算幅频响应|H(w)|和相频响应 //当sign=2,计算幅频响应|H(w)|用db表示和相频响应 5结语 数字滤波器可以通过编程实现各种不同系统,满足不同的需要,又可以随时改动系数,调整滤波器参数,选择最佳方案。 使用虚拟仪器逐步代替传统仪器已经成为测试领域发展的趋势。 但是在实际应用中,仍需要根据具体情况进行程序的优化和软硬件的结合,使虚拟仪器发挥更高的性能。 本文作者创新点是使用了VB软件平台开发电气参数测量仪等,虚拟仪器实现了更高的效率,节省了更多的硬件开销,方便了系统的维护并减轻了仪器更新的负担。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息处理 课程设计