DSP设计报告.docx
《DSP设计报告.docx》由会员分享,可在线阅读,更多相关《DSP设计报告.docx(13页珍藏版)》请在冰豆网上搜索。
DSP设计报告
DSP技术及应用
课程设计报告
学生姓名
汪宥男
学 号
0807040207
教学院系
电气信息工程学院
专业年级
电信08级
指导教师
曹玉英
完成日期
2012
年
1
月
12
日
目录
一、设计题目2
FIR滤波器设计2
二、设计目的3
三、设计任务3
3.2任务简介3
四、设计原理3
4.1FIR的原理和参数生成公式3
4.2用MATLAB计算滤波系数4
4.3程序的自编函数及其功能4
五、设计方案5
六、设计结果7
七、设计结论8
附录:
9
输入低通滤波信号代码:
9
滤波系数程序代码:
9
滤波源程序:
9
FIR.cmd程序:
12
一、设计题目
FIR滤波器设计
二、设计目的
⑴掌握用窗函数法设计FIR数字滤波器的原理和方法。
⑵熟悉线性相位FIR数字滤波器特性。
⑶了解各种窗函数对滤波器特性的影响。
三、设计任务
3.1任务要求
设计一个FIR低通(或高通、带通)滤波器。
此次选择运用MATLAB窗函数法进行设计FIR低通滤波器。
要求:
(1)通带边界频率为1500Hz,通带波纹小于1dB;
(2)阻带边界频率为2000Hz,阻带衰减大于40dB;
(3)采样频率为8000Hz。
3.2任务简介
FIR(FiniteImpulseResponse)滤波器:
有限长单位冲激响应滤波器,是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而滤波器是稳定的系统。
有限长单位冲激响应(FIR)滤波器有以下特点:
(1)系统的单位冲激响应h(n)在有限个n值处不为零
(2)系统函数H(z)在|z|>0处收敛,极点全部在z=0处(因果系统)
(3)结构上主要是非递归结构,没有输出到输入的反馈,但有些结构中(例如频率抽样结构)也包含有反馈的递归部分。
四、设计原理
4.1FIR的原理和参数生成公式
N阶有限冲激响应滤波器(FIR)公式:
N/2-1
y(n)=∑h(k)[x(n-k)+(n-(N-1+K))]N=0,1,2,3......
K=0
FIR设计原理:
根据系数h是偶对称为了简化运算产生如下计算方法
如果一个FIR滤波有一个冲激响应,h(0),h
(1),...,h(N-1),和x(n)描绘输入的时常滤波n,输出滤波y(n)的n给出以下方程式:
Y(n)=h(0)+h
(1)x(n-1)+h
(2)x(n-2)+...+h(N-1)x[n-(n-1)]
4.2用MATLAB计算滤波系数
用来设计标准频率响应的基于窗函数的FIR滤波器,可实现加窗线性相位FIR数字滤波器的设计。
语法:
b=fir1(n,Wn)
b=fir1(n,Wn,'ftype')
b=fir1(n,Wn,Window)
b=fir1(n,Wn,'ftype',Window)
n:
滤波器的阶数;Wn:
滤波器的截止频率;
ftype:
用来决定滤波器的类型,
当ftype=high时,可设计高通滤波器;
当ftype=stop时,可设计带阻滤波器。
Window:
用来指定滤波器采用的窗函数类型,其默认值为汉明(hamming)窗。
采用汉明窗设计低通FIR滤波器
使用b=fir1(n,Wn)可得到低通滤波。
0≤Wn≤1,Wn=1相当于0.5fs。
格式:
b=fir1(n,Wn)
例如:
设计一个FIR低通滤波器,通带便捷频率为1500Hz,通带波纹小于1dB;阻带边界频率为2000Hz,阻带衰减大于40dB;采样频率为8000Hz。
FIR滤波器的设计可以用MATLAB窗函数法设计。
如选择Hamming窗,则程序为:
b=fir1(16,1500/8000*2);即可算出滤波系数。
4.3程序的自编函数及其功能
(1).globalstart,fir设定全局变量。
(2)COFF_FIR_START:
.sect"coff_fir"
Include"lowpass.inc"(设定系数文件)
提示:
“lowpass.inc”提供低通系数(用MATLAB计算得出)。
(3)K_FIR_BFFR.set32(滤波阶数)
(4)d_filin(存放输入波形)
(5)d_filout(存放输出波形)
(6)指定寄存器:
指定AR4为FIR_DATA_P数据寄存器。
指定AR6为INBUF_P输入数据寄存器。
指定AR7为OUTBUF_P输出数据寄存器。
(7)汇编程序部分说明:
Start部分:
程序初始化部分指定寄存器,清空寄存器。
fir_loop部分:
循环调入输入数据,并调用子程序fir进行计算。
main_end部分:
跳转至循环部分。
fir部分:
子程序部分。
其中fir_task部分:
进行计算并返回计算结果。
五、设计方案
5.1设计设备
计算机,ICETEK-VC5416-EDU实验箱(或ICETEK仿真器+ICETEK-VC5416-A系统板+相关连线及电源)。
5.2设计步骤
⑴设计准备
运用MATLAB建立工程“lowpass”生成一个.INC文件(滤波系数);
再建立一个新工程“dtinput”生成.DAT文件(滤波器输入低通信号)。
将“LabFIR”文件夹中子文件夹“lowpass”中的所有内容清除,并将之前生成的.INC文件和.DAT文件放入。
导入工程文件,工程目录为D:
\ti\myproject中新建一个文件夹命名为“wangyounan”,
再将LABFIR中的所有文件放入"wangyounan"中。
⑵启动“CodeComposerStudioSetup”,在“ImportConfiguration”对话框中单击“clear”按钮,消除原系统设置。
在“AvailableConfigurations”列表中选择C5402Simulator,关闭窗口,重启CCS。
⑶编译并下载程序。
⑷打开观察窗口
选择菜单“view”“Graph”“Time/Frequency...”进行如下设置:
地址分别为input和output,
buffersize:
1,
displaydatasize:
200,
samplingrate:
8000,
dspdatatype选择16位。
在弹出的图形窗口中单击鼠标右键,选择“cleardisplay”。
⑸设置断点和探点
在标号“fir_loop”下面的“NOP”语句设置软件断点和探针。
选择菜单“fileI/O”;加载之前“lowpass”文件夹中的.DAT文件,并在“adress”中输入d_filin,在“length”中输入1;在“warparound”项前面加上选中符号;
单击“probepoint”列表中的“FIR.asmline38”行;在“connect”项选择“FILEIN:
D:
\..\dtinput.dat”;单击“replace”。
⑹运行并观察结果
1.选择“debug”菜单的“animate”项,或按F12键运行程序。
2.观察“input”、“output”窗口中时域图形;观察滤波效果。
3.设置“input”、“output”的时域图形窗口为频域窗口,即设置“displaytype”为“FFTmagitude”。
4.按F12运行程序。
5.观察“input”、“output”窗口中频域图形;理解滤波效果。
⑺停止程序运行并退出。
六、设计结果
此图四个窗口,分别是“input”和“output”的时域与频域窗口。
窗口一:
输入信号的时域波形
此信号由三个信号叠加而成,一个为900赫兹,一个为2200赫兹,一个为3000赫兹;
窗口二:
输入信号的频域波形
可以看到,信号的能量都集中于900赫兹,2200赫兹,3000赫兹附近,从另一个侧面证明了输入信号的正确性。
窗口三:
输出信号的时域波形
滤波之后,波形规律性强,可以看出,滤波的效果。
窗口四:
输出信号的频域波形
从结果看,低频信号(900赫兹)顺利通过滤波器,而高频信号(2200赫兹和3000赫兹)不能顺利通过滤波器,受到了削减。
七、设计结论
本次设计,我选择的是低通滤波器,运用MATLAB作为辅助工具,设计中我选择了三个信号相叠加,通过滤波器实现低频信号通过,高频信号滤除的功能。
根据DSP教材、实验指导书、DSP参考书、期刊、网上资源等完成滤波系数的计算,编写产生滤波器输入信号的源程序、FIR数字滤波器的汇编源程序,以及调试验证工作。
最终,成功滤除2200赫兹和3000赫兹的两个高频信号。
八、设计心得
其实这次设计并没有想象中的难,运用的只是也是平时上课时老师讲过的东西,实验课上也验证过滤波器的特性,所以总的来说,这次设计还是比较顺利的。
在平时的实验课上积累了一些经验,再结合设计指导,一步一步的进行设计。
先将程序通过MATLAB生成可加载的.dat和.inc文件,再运行CCS加载编译程序,实现了滤波器的设计。
在此过程中也出现了一些小问题,第一次运行程序后,显示结果并不如意,虽然有一定的滤波效果,但不能完全滤除高频信号,左右也没查出怎么回事,最终我将程序代码重新加载,编译,最终运行,才将问题解决。
高频信号最终也能完全滤除,毛刺也消除了。
其实在总体设计过程中,一定要清晰。
通过这次对滤波器的设计,让我了解FIR滤波器设计的基本步骤,也让我了解了关于滤波器的原理与设计理念。
因为,在实践接线中有各种各样的条件制约着。
经过这次学习,让我对各种电路都有了更深的了解,所以说,坐而言不如立而行,虽然滤波器设计很简单,还是应该自己动手实际操作才会有深刻理解。
更要熟悉每个步骤实现的功能。
这样才能很好的利用来实现特定的功能。
通过本次设计实验对DSP技术知识有了更深入的了解,将其运用到了实际中来,明白了学习DSP技术的意义,也达到了其培养的目的。
在实验中,我也遇到一些小问题无法理解,不过我都一一克服了,通过努力解决了问题,使我明白了和他人共同合作的重要性。
在以后的道路上我们也必须深刻认识到团队合作的精神,投入今后的发展之中,成功就是在不断摸索中前进实现的,遇到问题我们不能灰心、烦躁、甚至放弃,而要静下心来仔细思考,分部检查,找出最终的原因进行改正,这样才会有进步,才会一步步向自己的目标靠近,才会取得自己所要追求的成功。
附录:
输入低通滤波信号代码:
closeall;
clearall;
clc
y=round(fir1(32,1600/8000*2)*32768);
fid=fopen('lowpass.inc','w');
fprintf(fid,'.word%d\n',y);
fclose(fid);
滤波系数程序代码:
closeall;
clearall;
clc
i=0:
1:
255;
y=((sin(2*pi*[i]*900/8000)+sin(2*pi*[i]*2200/8000)+sin(2*pi*[i]*3000/8000))*32768/3);
fid=fopen('dtinput.dat','w');
fprintf(fid,'16512010\n');
fprintf(fid,'%d\n',y);
fclose(fid);
滤波源程序:
;HIGHPASS.set0;ifyouwanttouse,pleasesetthevalueto1
;BANDPASS.set0
LOWPASS.set1
.globalstart,fir
.mmregs
COFF_FIR_START:
.sect"coff_fir"
.include"lowpass\\lowpass.inc"
K_FIR_BFFR.set32
d_data_buffer.usect"fir_bfr",64
FIR_DP.usect"fir_vars",0
d_filin.usect"fir_vars",1
output.usect"fir_vars",1
input.usect"fir_vars",1
d_filout.usect"fir_vars",100h
stacksize.set256
stack.usect"fir_vars",stacksize
.asgAR4,FIR_DATA_P
.asgAR6,INBUF_P
.asgAR7,OUTBUF_P
.asgAR3,OUTBUF
.asgAR2,INBUF
.sect"fir_prog"
nop
start:
stm#stack+stacksize,SP
LD#FIR_DP,DP
STM#d_data_buffer,FIR_DATA_P
RPTZA,#K_FIR_BFFR-1
STLA,*FIR_DATA_P+
STM#d_filin,INBUF_P
STM#d_filout,OUTBUF_P
STM#output,OUTBUF
STM#input,INBUF
STM#100h,BK
fir_loop:
NOP;AddBreakpoint&porbepoint
LD*INBUF_P,A
STLA,*INBUF
CALLfir
STHA,*OUTBUF_P+%
STHA,*OUTBUF
main_end:
bfir_loop
fir:
;SSBXSXM
;SSBXFRCT
STM#d_data_buffer,FIR_DATA_P
STLA,*FIR_DATA_P
STM#(d_data_buffer+K_FIR_BFFR-1),FIR_DATA_P
fir_task:
RPTZA,#K_FIR_BFFR-1
MACD*FIR_DATA_P-,COFF_FIR_START,A
RET
.end
FIR.cmd程序:
MEMORY
{
PAGE0:
PROG:
o=100h,l=2000h
PAGE1:
DATA1:
o=2600h,l=1000h
DATA2:
o=2100h,l=100h
DATA3:
o=2200h,l=100h
DATA4:
o=2300h,l=100h
DATA5:
o=2400h,l=100h
DATA6:
o=2500h,l=100h
}
SECTIONS
{
coff_fir:
{}>PROGPAGE0
fir_prog:
{}>PROGPAGE0
fir_vars:
{}>DATA1PAGE1
fir_coff:
{}>DATA2PAGE1
fir_bfr:
{}>DATA3PAGE1
}