Fir低通滤波实验报告.docx

上传人:b****3 文档编号:4890289 上传时间:2022-12-11 格式:DOCX 页数:22 大小:798.87KB
下载 相关 举报
Fir低通滤波实验报告.docx_第1页
第1页 / 共22页
Fir低通滤波实验报告.docx_第2页
第2页 / 共22页
Fir低通滤波实验报告.docx_第3页
第3页 / 共22页
Fir低通滤波实验报告.docx_第4页
第4页 / 共22页
Fir低通滤波实验报告.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

Fir低通滤波实验报告.docx

《Fir低通滤波实验报告.docx》由会员分享,可在线阅读,更多相关《Fir低通滤波实验报告.docx(22页珍藏版)》请在冰豆网上搜索。

Fir低通滤波实验报告.docx

Fir低通滤波实验报告

 

CHANGCHUNINSTITUTEOFTECHNOLOGY

设计题目:

FIR数字低通滤波器

学生姓名:

胡扬、李元林、黄一师、周通

学院名称:

长春工程学院

专业名称:

电子信息工程

班级名称:

电子1041

学号:

35、29、34、8

完成时间:

2013-12-11

 

2013年12月11日

任务分配表

班级

学号

姓名

完成主要任务

电子1041

35

胡扬

程序调试及

软件仿真

电子1041

29

李元林

Protel原理图

及PCB图

电子1041

34

黄一师

整理报告、

协同软件仿真

电子1041

8

周通

查找资料

理论研究

FIR数字低通滤波器

胡扬、李元林、黄一师、周通

(电子1041:

35、29、34、8)

摘要:

本文设计了一个一种基于Matlab和CCS软件的FIR数字低通滤波器,符合通带边界频率8600Hz,阻带边界频率12000Hz,通带最大衰减3db,阻带最小衰减80db的技术指标。

文中深入分析了该滤波器系统设计的功能特点、实现原理以及技术关键,阐述了使用MATLAB进行Fir低通滤波器设计及仿真的具体方法。

最后把整个设计方案用CCS编写代码并用Matlab和CCS联合进行仿真。

仿真结果与理论相符,因此,该设计方法实现了FIR数字低通滤波。

关键词:

Fir数字低通滤波器TMS320VC54xx

 

0引言

随着电子技术的飞速发展,人们正逐步进入数字化时代,数字滤波器越来越受到人们的关注,并且在近代电信设备和各类控制系统中的应用极为广泛,如语音处理、图像处理、通信、电视、雷达、生物医学信号处理等。

数字滤波器根据其冲激响应函数的时域特性,可分为有无限长单位冲激响应(IIR)滤波器和有限长单位冲击响应(FIR)滤波器。

IIR滤波器虽然可以利用模拟滤波器设计的结果,方便简单,但它的相位是非线性的。

图像处理以及数据传输都要求信道具有线性相位,同时又可以具有任意的幅度特性,而FIR滤波器的单位冲激响应是有限长的,因而滤波器一定是稳定的。

随着Matlab软件和信号处理工具箱的不断完善,可以利用Matlab信号处理工具箱快速有效地实现数字滤波器的设计、分析和仿真。

1系统原理及设计方法

1.1FIR滤波器的基本结构

FIR滤波器[7]的单位抽样响应为有限长度,一般采用非递归形式实现。

通常的FIR数字滤波器有横截性和级联型两种。

FIR滤波器实现的基本结构有:

(1)FIR滤波器的横截型结构

表示系统输入输出关系的差分方程可写作:

 

   直接由差分方程得出的实现结构如图2-2所示:

图1-1、横截型(直接型﹑卷积型)

若h(n)呈现对称特性,即此FIR滤波器具有线性相位,则可以简化加横截型结构,下面分情况讨论:

图1-2、N为奇数时线形相位实现结构图1-3、N为偶数时线性相位实现结构

(2)FIR滤波器的级联型结构

将H(z)分解成实系数二阶因子的乘积形式:

(1-1)

   这时FIR滤波器可用二阶节的级联结构来实现,每个二阶节用横截型结构实现。

如图所示:

图1-4、FIR滤波器的级联结构

这种结构的每一节控制一对零点,因而在需要控制传输零点时可以采用这种结构。

1.2FIR数字滤波器的设计方法

IIR滤波器[7]的优点是可利用模拟滤波器设计的结果,缺点是相位是非线性的,若需要线性相位,则要用全通网络进行校正。

FIR滤波器的优点是可方便地实现线性相位。

FIR滤波器单位冲激响应h(n)的特点:

其单位冲激响应h(n)是有限长(

),系统函数为:

(1-2)

在有限Z平面有(N-1)个零点,而它的(N-1)个极点均位于原点z=0处。

Fir滤波器线性相位的特点:

    如果FIR滤波器的单位抽样响应h(n)为实数,而且满足以下任一条件:

偶对称h(n)=h(N-1-n)

    奇对称h(n)=-h(N-1-n)

其对称中心在n=(N-1)/2处,则滤波器具有准确的线性相位。

窗函数设计法:

   一般是先给定所要求的理想滤波器频率响应

,由

导出

,我们知道理想滤波器的冲击响应

是无限长的非因果序列,而我们要设计的是

是有限长的FIR滤波器,所以要用有限长序列

来逼近无限长序列

,设:

(1-3)

常用的方法是用有限长度的窗函数w(n)来截取

即:

(1-4)

这里窗函数就是矩形序列RN(n),加窗以后对理想低通滤波器的频率响应将产生什么样的影响呢?

根据在时域是相乘关系,在频域则是卷积关系:

(1-5)

   其中,

为矩形窗谱,

是FIR滤波器频率响应.

 通过频域卷积过程看

的幅度函数H(ω)的起伏现象,可知,加窗处理后,对理想矩形的频率响应产生以下几点影响:

(1)使理想频率特性不连续点处边沿加宽,形成一个过渡带,其宽度等于窗的频率响应的主瓣宽度。

(2)在截止频率的两边的地方即过渡带的两边,出现最大的肩峰值,肩峰的两侧形成起伏振荡,其振荡幅度取决于旁瓣的相对幅度,而振荡的多少,则取决于旁瓣的多少。

(3)改变N,只能改变窗谱的主瓣宽度,改变ω的坐标比例以及改变的绝对值大小,但不能改变主瓣与旁瓣的相对比例(此比例由窗函数的形状决定)。

(4)对窗函数的要求

    a、窗谱主瓣尽可能窄,以获取较陡的过渡带;

b、尽量减小窗谱的最大旁瓣的相对幅度;即能量集中于主瓣,使肩峰和波纹减小,增大阻带的衰减。

频率采样法:

窗函数设计法是从时域出发,把理想的hd(n)用一定形状的窗函数截取成有限长的h(n),来近似理想的hd(n),这样得到的频率响应

逼近于所要求的理想的频率响应

频率抽样法则是从频域出发,把给定的理想频率响应

加以等间隔抽样得到

,然后以此

作为实际FIR滤波器的频率特性的抽样值H(k),即

(1-6)

   知道H(k)后,由DFT定义可唯一确定有限长序列h(n),利用这N个频域抽样值H(k)同样利用频率内插公式可得FIR滤波器的系统函数H(z),及频率响应

,即:

 

   频率抽样法内插公式:

(1-7)

  频率抽样法小结

    优点:

可以在频域直接设计,并且适合于最优化设计。

    缺点:

抽样频率只能等于2π/N的整数倍,或等于2π/N的整数倍加上π/N。

因而不能确保截止频率

的自由取值,要想实现自由地选择截止频率,必须增加抽样点数N,但这又使计算量增大。

为了提高逼近质量,减少通带边缘由于抽样点的陡然变化而引起的起伏振荡。

有目的地在理想频率响应的不连续点的边缘,加上一些过渡的抽样点,增加过渡带,减少起伏振荡。

2系统硬件电路

 

图1-5、系统原理框图

2.1复位电路设计

图2-1、复位电路

2.2电源电路设计

图2-2、电源电路

2.3JTAG电路设计及时钟电路设计

图2-3、JTAG电路设计及时钟电路

3系统软件设计

图3-1、系统主流程图

4系统调试与结果分析

4.1、Matlab仿真结果

1、利用MATLAB编写程序产生一个由三种频率信号复合的信号;

2、程序运行产生此混合信号的时域图;

图4-1

3、混合信号的频域图;

图4-2

4、混合信号经滤波器后的时域图;

图4-3

5、混合信号经滤波器后的频域图;

图4-4

6、用Matlab自带的滤波器设计工具FDAtool设定FIR低通滤波器类型及参数。

在MATLAB左下角的Start菜单中选择Toolboxes->FilterDesign->FilterDesign&AnalysisTools(fdatool),启动滤波器分析器。

启动成功后界面如图4-5

图4-5

7、在选项中选择或输入滤波器参数,完成后单机“DesignFilter”按钮,实现滤波器设计。

结果如图4-6

图4-6

8、从MATLAB中导出FIR滤波器系数。

a.在Fdatool中,选择Targets->GenerateCheader,产生如下图4-7界面:

图4-7

b.点击“Exportas”,输出系数类型选择为Signed16-bitinteger。

然后点击“Generate”,选择路径,即可输出前一步设计出的FIR滤波器的系数表。

(假设生成的系数表文件为fdacoefs.h)

4.2CCS仿真

1、打开CCS软件,新建工程。

2、编写C语言程序、cmd文件,完成后导入工程。

3、导入rts.lib文件,在...\ti\c5400\cgtool\lib文件夹下。

4、在编译成功并完成工程建立后产生*.Out文件,在File->LoadProgram里打开。

5、选择File->Data->Load...打开MATLAB生成的input.dat文件。

6、将Address设置为input,Length设置为200,Page设置为Data。

7、运行程序,点击

按钮,程序即开始运行。

8、打开View->Graph->Time/Frequency,设置参数图如图4-9:

图4-8

9、重复前3个步骤,改变图形选项中的DisplayType、StartAddress,出现如下图形:

图4-9、输入数据时域图

图4-10、输出数据时域图

图4-11、输入数据频谱

图4-12、输出数据频谱

5结论

本次实习我们成功实现数字信号的Fir低通滤波,当然在这过程中我们遇到了很多困难,尤其是调试程序时,花费了好几天时间,一开始总是Build不成功,后来发现是确少Matlab产生的数据文件和相应头文件,后来通过上网查资料以及和同学讨论最终解决。

并且通过本次的课程设计,我明白了细节决定成败这句话的道理,在实验中,有很多注意的地方,都被我忽视了,导致我再花费时间去修改,这严重影响了我试验的进度。

同时,在实验中我了解了FIR滤波器的原理,熟练掌握了MATLAB的操作,不仅是我学到了知识,更锻炼了我的动手能力。

也进一步认识了CCS软件的使用,了解了各种窗函数对滤波器特性的影响。

参考文献:

(1)程佩青; <<数字信号处理教程>>  清华大学出版社.

(2)吴镇扬;<<数字信号处理>>; 高等教育出版社.

(3)胡广书; <<数字信号处理导论 >>; 清华大学出版社. 

(4)高西全,丁玉美.数字信号处理.3版.西安:

西安电子科技大学出版社,2008年  

(6)楼顺天,李伯菡. 基于Matlab的系统分析与设计. 西安;西安电子科技大学出版社. 

(7)周浩敏,王睿.  测试信号处理技术. 北京航空航天大学出版社. 

附录一:

protel原理图

附录二:

程序源代码

一、Matlab代码:

sl=500;%有效信号

ns1=5000;%高频噪声1

ns2=10000;%高频噪声2

fs=25000;%采样频率

N=800;%序列长度

T=1/fs;%采样周期

n=0:

N;%序列的长度范围

signal=sin(2*pi*sl*n*T);%离散序列

noise1=0.7*sin(2*pi*ns1*n*T);

noise2=0.4*sin(2*pi*ns2*n*T);

x=(signal+noise1+noise2);%待滤波信号

subplot(2,2,1),

plot(x)

subplot(2,2,2),

y=abs(fft(x));%待滤波频谱做1000点FFT,显示幅频特性

df=n*(fs/N);

plot(df,y)

subplot(2,2,3),

plot(signal)%所需信号的离散信号的图形

subplot(2,2,4),

ysignal=abs(fft(signal));%滤波后频谱

df=n*(fs/N);

plot(df,ysignal)

%滤波数据导出

xout=x/max(x);%归一化

xto_css=round(32767*xout);%数据取整

fid=fopen('input.dat','w');%打开文件

fprintf(fid,'16511000\n');%输出文件头

fprintf(fid,'%d\n',xto_css);%输出

fclose(fid);

二、CCS源代码:

Iirh.c:

#include"stdio.h"

#include"fdacoefs.h"//头文件包含滤波器的系数

#defineN81//定义滤波器的阶数为81阶

#defineLength200//定义缓冲区数组大小为200

longyn;

intinput[Length];//存放输入数据

intoutput[Length];//存放输出数据

voidmain()

{

inti,j;

int*x;

for(j=0;j

{

x=&input[j];//指针指向每次导入的数据

yn=0;//每做完一次乘累加后,把值赋给output数组后,从新归0

for(i=0;i

yn+=B[i]*(*x++);//做N次的乘累加

output[j]=yn>>15;//把值赋给output数组

}

while

(1);//做完滤波后使程序保持在本循环中

}

三、CCS命令文件:

MEMORY

{

PAGE0:

/*programspace*/

VECS:

origin=0x0100,length=0x0200/*128bytesvectortablespace*/

PROG:

origin=0x0300,length=0x1F00/*8Kprogrammemoryspace*/

PAGE1:

/*dataspace*/

STCK:

origin=0x2000,length=0x0800/*1Kwordsforstack*/

DAT1:

origin=0x2800,length=0x0100/*256wordsforsysdata*/

DAT2:

origin=0x2900,length=0x1000/*12Kwordsforappldata*/

}

SECTIONS

{

.vectors:

{}>VECSPAGE0/*interruptvectortable*/

.text:

{}>PROGPAGE0/*programcode*/

.coeffs:

{}>PROGPAGE0/*initializedparameters*/

.data:

{}>DAT2PAGE1/*initializeddata*/

.stack:

{}>STCKPAGE1/*softwarestacksection*/

.variable:

{}>DAT1PAGE1/*uninitializedvarsforDSP&AIC10*/

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1