DSP课程设计报告Word文档格式.docx
《DSP课程设计报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《DSP课程设计报告Word文档格式.docx(26页珍藏版)》请在冰点文库上搜索。
FIR滤波器的传递函数为:
(2-1)
可得FIR滤波器的系统差分方程为:
因此,FIR滤波器又称为卷积滤波器。
根据系统频率响应,FIR滤波器的频率响应表达式为:
(2-2)
信号通过FIR滤波器不失真条件与(6-6)式所描述的相同,即滤波器在通带内具有恒定的幅频特性和线性相位特性。
理论上可以证明(这里从略):
当FIR滤波器的系数满足下列中心对称条件:
(2-3)
滤波器设计在逼近平直幅频特性的同时,还能获得严格的线性相位特性。
线性相位FIR滤波器的相位滞后和群延迟在整个频带上是相等且不变的。
对于一个N阶的线性相位FIR滤波器,群延迟为常数,即滤波后的信号简单地延迟常数个时间步长。
这一特性使通带频率内信号通过滤波器后仍保持原有波形形状而无相位失真。
表1.FIR滤波器设计的主要方法
函数设计方法
说明
工具函数
窗函数法
理想滤波器加窗处理
fir1(单频带),fir2(多频带),kaiserord
最优化设计
平方误差最小化逼近理想幅频响应或Park-McClellan算法产生等波纹滤波器
firls,remez,remezord
约束最小二乘逼近
在满足最大误差限制条件下使整个频带平方误差最小化
fircls,fircls1
升余弦函数
具有光滑、正弦过渡带的低通滤波器设计
Fircos
2.3窗函数设计方法
FIR滤波器设计的主要任务是根据给定的性能指标确定滤波器的系数b,即系统单位脉冲序列h(n),它是一个有限长序列。
FIR滤波器的理想频率响应,可写成复数形式的Fourier级数形式:
(2-4)
式中,hd(n)是对应的单位脉冲响应序列。
这说明滤波器的频率响应和单位脉冲响应互为Fourier变换对。
因此其单位脉冲响应可由下式求得,
(2-5)
求得序列
后,通过z变换,可得到
(2-6)
注意,这里
为无限长序列,因此
是物理上不可实现的。
如何变成物理上可实现呢?
一个自然的想法是只取其中的某些项,即只截取
中的一部分,比如n=0,…,N-1,N为正整数。
这种处理相当于将
n=-∞~∞与函数w(n)相乘,w(n)具有下列形式:
w(n)相当于一个矩形,我们称之为矩形窗。
即我们可采用矩形窗函数w(n)将无限脉冲响应
截取一段h(n)来近似为
,这种截取在数学上表示为:
h(n)=
w(n)(2-7)
这里应该强调的是,加窗函数不是可有可无的,而是将设计变为物理可实现所必须的。
截取之后的滤波器传递函数变为:
(2-8)
式中,N为窗口宽度,H(z)是物理可实现系统。
为了获得线性相位,FIR滤波器h(n)必须满足中心对称条件(即7-3式),序列h(n)的延迟为
。
这种方法的基本原理是用一定宽度的矩形窗函数截取无限脉冲响应序列获得有限长的脉冲响应序列,从而得到FIR滤波器的脉冲响应,故称为FIR滤波器的窗函数设计法。
经过加矩形窗后所得的滤波器实际频率响应能否很好地逼近理想频率响应呢?
图2示意给出了理想滤波器加矩形窗后的情况。
理想低通滤波器的频率响应如图中左上角图,矩形窗的频率响应为左下角图。
时间域内的乘积(2-7)式要求实际频率响应为这两个频率响应函数在频域内的卷积(卷积定理),即得到图形为图2(下图)。
图2.FIR滤波器理想与实际频率响应
由图可看出,加矩形窗后使实际频率响应偏离理想频率响应,主要影响有三个方面:
(1)理想幅频特性陡直边缘处形成过渡带,过渡带宽取决于矩形窗函数频率响应的主瓣宽度。
(2)过渡带两侧形成肩峰和波纹,这是矩形窗函数频率响应的旁瓣引起的,旁瓣相对值越大,旁瓣越多,波纹越多。
(3)随窗函数宽度N的增大,矩形窗函数频率响应的主瓣宽度减小,但不改变旁瓣的相对值。
为了改善FIR滤波器性能,要求窗函数的主瓣宽度尽可能窄,以获得较窄的过渡带;
旁瓣相对值尽可能小,数量尽可能少,以获得通带波纹小,阻带衰减大,在通带和阻带内均平稳的特点,这样可使滤波器实际频率响应更好地逼近理想频率响应。
这里我们明确两个概念:
截断和频谱泄漏。
信号是无限长的,而在进行信号处理时只能采取有限长信号,所以需要将信号“截断”。
在信号处理中,“截断”被看成是用一个有限长的“窗口”看无限长的信号,或者从分析的角度是无限长的信号x(t)乘以有限长的窗函数w(t)。
由傅立叶变换性质可知,时间域内的乘积对应于频率域的卷积,即
(2-9)
这里,x(t)是频宽有限信号,而w(t)是频宽无限信号,
表示互为Fourier变换对。
截断后的信号也必须是频宽无限信号,这样就是有限频带的信号分散到无限频带中去,这样就产生了所谓频谱泄漏。
从能量的角度来看,频谱泄漏也是能量的泄漏,因为加窗后使原来信号集中的窄频带内的能量分散到无限的频带宽度范围内。
频谱泄漏是不可避免的,但要尽量减小。
上边只考虑了矩形窗,如果我们使窗的主瓣宽度尽可能地窄,旁瓣尽可能地小,可以获得性能更好的滤波器,能否改变窗的形状而达到这个目的呢?
回答是肯定的。
其实数字信号处理的前驱者们设计了不同于矩形窗的很多窗函数,这些窗函数在主瓣和旁瓣特性方面各有特点,可满足不同的要求。
为此,用窗函数法设计FIR数字滤波器时,要根据给定的滤波器性能指标选择窗口宽度N和窗函数w(n)。
2.4FIR滤波器的DSP实现方案
一个典型的DSP系统如图3所示
图3.典型DSP系统的构成
其中的输入信号可以是麦克风输出的语音信号、电话线的已调数据信号,可以是编码后在数字链路上传输或存储在计算机里的摄像机图像信号等输入号。
首先进行带限滤波和抽样,然后进行A/D转换成数字比特流,由耐奎斯特样定理可知为了保证信息完整抽样频率至少是输入带限信号最高频率的2倍。
之后输入DSP芯片的是以抽样形式表示的数字信号,DSP芯片对输入信号行处理,如进行一系列的乘累加操作,最后经过处理后的数字样值经D/A换成为模拟样值再经过内插和平滑滤波就得到了连续的模拟波形。
TMS320VC5416是定点的数字信号处理器。
它采用先进的修正哈佛结构,片内共有8条16位的总线,其中包括4条程序/数据总线和4条地址总线,各条总线的作用如下:
①程序总线PB传输来自程序存储器的指令代码和立即数;
②三条数据总线CB,DB,EB相互连接不同的单元,如中央处理单元、数据地址产生逻辑、程序地址产生逻辑、片内外设和数据存储器。
其中,CB和DB传输从程序存储器读来的数据,EB传输待写入存储器的数据;
.PAB,CAB,DAB和EAB这4条地址总线传输指令执行所需要的地址。
图4为TMS320C5416DSP的内部硬件组成框图。
CPU采用并行结构设计特点,使其能在一条指令周期内,高速地完成多项算术运算。
CPU的基本组成如下:
①40位算术逻辑运算单元(ALU),包括一个40位桶形移位寄存器和2个独立的40位累加器;
②17X17位并行乘法器,与40位专用加法器相连,用于非流水线式单周期乘法/累加(MAC)运算:
③比较、选择和存储单元(CSSU),用于加法/比较选择。
④指数编码器,可以在单个周期内计算40位累加器中数值的指数。
DSP5402的片上外围电路包括:
通用u0引脚(XF和BIO#),定时器,时钟发生器,一个与外部处理器通信的8位的HPI(HostPortInterface)接口,两个多通道缓冲串行口McBSP(MultichannelBSP)。
器片内存储器的种类只要有以下几种:
双访问RAM(DARAM),单访问RAM(SRAM)和ROM.RAM一般映射在数据空间。
DRAM一般由若干块构成,由于每块DARAM在一个机器周期内可以被访问2次,中央处理单元和片内外设在一个周期内可以同时对其进行一次读和一次写操作。
根据需要,通过改变处理器状态寄存器的三个位MP/MC,OVLY和DROM来灵活地改变存储器的配置。
数据存储空间还有一块特殊的区域,OOH--08H。
这块区域包含的是存储器映像寄存器,它包含了DSP中所有的寄存器,可以通过读这块存储器来了解各个寄存器的值,或者通过写这块寄存器来改变寄存器的值。
因此编程时不能随便向这个区域存储数据,除非根据需要来改变相应寄存器的值,否则会导致程序运行结果错误。
具有高度专业化的指令系统,包括单指令重复和块指令重复操作,块存储器传输指令,32位长操作数指令,同时读入2或3个操作数的指令,能并行存储和并行加载的算术指令,条件存储指令和从中断快速返回。
图4.TMS320C5416DSP的内部硬件组成框图
2.5FIR滤波器的Matlab设计
MATLAB被称为第四代计算机语言,又称为“草稿纸式”的语言,它具有不同于其他语言如Fortran、C语言等的特点,是边解释边执行的计算机语言。
MATLAB是一款具有强大的矩阵运算、数据处理和图形显示功能的软件,其输出结果可视化,编程效率极高,用极少的代码即可实现复杂的运行,因此它使工程技术人员摆脱了繁琐的程序代码,以便快速地验证自己的模型和算法。
fir1就是采用经典窗函数法设计线性相位FIR数字滤波器的函数,且具有标准低通,带通,高通,带阻等类型。
函数调用格式为:
b=fir1(n,wn[,'
ftype'
window])
式中,n为FIR滤波器的阶数,对于高通,带阻滤波器,n需取偶数;
wn为滤波器截止频率,范围为0~1(归一化频率)。
对于带通,带阻滤波器,wn=[w1,w2](w1<
w2);
对于多带滤波器,如wn=[w1,w2,w3,w4],频率分段为:
0<
w<
w1,w1<
w2,w2<
w3,w3<
w4。
‘ftype'
为滤波器的类型:
缺省时为低通或带通滤波器;
'
high'
为高通滤波器;
‘stop'
为带阻滤波器,'
DC-1'
为第一频带为通带的多带滤波器;
DC-0'
为第一频带为阻带的多带滤波器。
window为窗函数列向量,其长度为n+1。
缺省时,自动取哈明窗。
MATLAB提供的窗函数有boxcar、hanning、hamming、bartlett、blackman、kaiser、chebwin,调用方式见上节。
b为FIR滤波器系数向量,长度为n+1。
FIR滤波器的传递函数具有下列形式:
(4-21)
用函数fir1设计的FIR滤波器的群延迟为n/2。
考虑到n阶滤波器系数个数为N,即n+1,这里的延迟与前面所讲的(N-1)/2的延迟一致。
注意这里的滤波器的最小阶数比窗函数的长度少1。
2.6硬件连接及通信协议
2.6.1硬件连接
根据图2和图4的时序,则容易实现TLC320AIC23与TMS320VC5416的硬件连接,如图5所示。
图5.TLC320AIC23与TMS320VC5416的硬件连接
TLC320AIC23的MCLK外接8.192MHz的晶振,TMS320VC5416的FSX和FSR由TLC320AIC23设置。
如果选择D7=0,N=8,则采样速率为8kHz。
2.6.2通信协议
TLC320AIC23的通信有两种格式:
一次通信格式和二次通信格式。
一次通信格式的16位都用来传输数据。
DAC的数据长度由寄存器1的D0位决定。
启动和复用时,缺省值为15+1位模式,最后一位要求二次通信。
如果工作在16位传输模式,则必须由FC产生二次通信请求。
二次通信格式则用来初始化和修改TLC320AIC23内部寄存器的值。
在二次通信中可以通过向DIN写数据来初始化。
系统复位后,必须通过DSP的DX口向TLC320AIC23的DIN写数据,如果采用一片TLC320AIC23,只需初始化其寄存器1、寄存器2和寄存器4。
由于通信数据长度为16位,初始化时应通过RCR1和XCR1设置McBSP的传输数据长度为16。
考虑到TLC320AIC23复位后至少经过6个MCLK才可以脱离复位,故可以在此时间内初始化DSP的串行口。
3.软件设计
图6.MATLAB的人机交互软件设计
3.1用MATLAB控制串口接收数据
1.先进行串口的初始化操作,然后打开串口,用到的函数为:
serial和open。
2.设定MATLAB和DSP的握手方式,可通过串口目标的FlowControl属性设定。
3.接收和发送数据,用到fread和fwrite函数。
对于用DSP器件设计的语音信号滤波器,其系统软件设计可使用CCS(CodeComposerStudio)软件来进行调试。
设计调试时,首先应对各个设备进行初始化配置,然后再调用子程序来处理音频数据的输入和输出。
在子程序中,首先初始化语音缓冲区和工作变量,等待MCBSP通道0传送结束后,再采集语音信号,然后传送到MCBSP并保存于左声道缓冲区,此时即可调用材料计算FIR滤波输出,滤波后的结果存放于右声道缓冲区,最后将滤波后的信号输出到MCBSP接口,再将此信号传送到TMS320C5410中。
通过DSP的串口0输入/输出数据。
在串口通讯中,数据时钟和帧同步信号都由AC01产生,所以VC5410将使用外部时钟和帧同步信号。
串口设置代码如下:
stm#0,spsa0
stm#2000h,spcr10
stm#1,spsa0
stm#0c0h,spcr20
stm#2,spsa0
stm#40h,39h
stm#3,spsa0
stm#0,39h
stm#4,spsa0
stm#40h,xcr10
stm#5,spsa0
stm#0eh,spsa0
stm#0dh,pcr0
stm#7h,spsa0
stm#8000h,39h
rpt#0ffffh
nop
stm#00h,dxr10
ldm22h,a
stm#1,38h
stm#0c1h,39h
完成串口设置后,还需要修改中断向量表以便正确响应串口0的接收和发送中断请求。
使用发送中断产生送出滤波之后的数字语音信号;
使用接收中断存贮输入的数据,并设置新数据到达标志。
主循环在检测到该标志后,调用FIR滤波程序,完成对输入数据的处理。
3.2matlab设计fir带通滤波器
[n,Wn,beta,ftype]=kaiserord([7131723],[010],[0.010.010.01],100);
//得出滤波器的阶数n=38,beta=3.4
w1=2*fc1/fs;
w2=2*fc2/fs;
//将模拟滤波器的技术指标转换为数
字滤波器的技术指标
window=kaiser(n+1,beta);
//使用kaiser窗函数
b=fir1(n,[w1w2],window);
//使用标准频率响应的加窗设计函数
fir1
freqz(b,1,512);
//数字滤波器频率响应
t=(0:
100)/Fs;
s=sin(2*pi*t*5)+sin(2*pi*t*15)+sin(2*pi*t*30);
//混和正弦波信号
sf=filter(b,1,s);
//对信号s进行滤波
图7.滤波前后的波形
运行程序后,使用DSP的集成开发环境CCS可以将输入数据与滤波结果显示出来,通过与使用MATLAB的SIMULINK功能仿真出的滤波结果进行比较,可以验证用DSP芯片C54x实现的该FIR滤波器的滤波过程是否正确。
利用MATLAB的滤波器设计函数fir1设计了一个具有线性相位的数字低通FIR滤波器,得到了该滤波器的滤波系数及幅频特性曲线、相频特性曲线,并且用MATLAB的仿真工具SIMULINK仿真了该FIR滤波器的滤波过程;
通过线性缓冲区法对FIR滤波器在DSP芯片C54x的实现做了理论上的分析。
用MATLAB语言可方便、快捷地设计具有线性相位的FIR滤波器,而且对于参数的修改也十分方便。
用MATLAB仿真工具可以清晰地仿真出FIR滤波器的滤波过程,有利于理解滤波过程,且可以判断滤波结果的正确性。
利用DSP芯片实现FIR滤波器,不仅具有准确度高、执行速度快等特点,而且用程序可移植性好,实用性强可以十分方便地改变滤波器特性。
在实际应用中,只需要按照要求修改滤波器的参数,并对程序作微小的改动,即可实现不同要求的FIR滤波器。
4.运行步骤与结果
启动CCS,输入实验程序代码,进行编译并加载到DSP中。
采用单步运行或执行到光标处,或全速运行,并打开波形观察窗口,跟踪观察其执行过程和滤波效果。
先打开项目,然后编译、加载实验程序,然后点击菜单debug—Gomain就进入预先编译的实验程序
然后打开波形观察窗口,路径是View—Graph—Time/Frequence,将出现如下图5.1所示的图形属性框,在DisplayType一栏中选择DualTime项;
InterleavedDataSources一栏中选择No项;
StartAddress-upperdisplay一栏中输入x,StartAddress-upperdisplay一栏中输入r;
AcquistitionBufferSize一栏中输入256;
DisplayDataSize一栏中输入256;
DSPDataType一栏中选择16-bitsignedinteger项;
其他为默认值,然后点击“OK”就可打开图形观察窗口如图8。
图8.图形属性窗口
之后输入语音数据文件,将文件所在路径输入,然后就会出现如图9所示的输入波形窗口。
图9.语音数据波形
之后再运行已编写的程序,就可观察到输入数据经过FIR滤波后的效果,如图10所示,至此就可观察信号经过FIR滤波后的信号的改变.
图10.FIR滤波后的输出波形数据
通过硬件测试证明,当未进行FIR滤波时,声音中含有的高频杂音将明显地影响听觉效果。
但是在进行滤波以后,高频杂音去掉了,声音质量明显的改善了。
因此,在实际应用中对语音信号进行FIR滤波,可以很好的将噪音部分去掉。
5.心得体会
通过这次的课程设计使我进一步加深了对于DSP这门课程的学习以及对于CCS软件的应用。
在课程设计过程中我遇到一些课堂中从未有过、也从未思考过的问题,通过上网查找资料和老师同学交流,在实践中不断解决问题,并加以改进,最终得出了结果。
这次的课程设计使我对DSP的功能的认识有了进一步了解,从对CCS软件一无所知,到能利用此软件进行基本操作,通过自己动手做课程设计我才真正看到其功能的广泛性和便捷性。
在编程的过程中也对汇编语言渐渐熟悉起来,把课堂上学过的知识真正转化成能够实践运行的程序。
在实际操作中我发现,CCS和其他的编程语言不一样,它的基本思想更接近于机器语言,和以前所学的MATLAB不同,更不能用C语言的思想来套用。
在应用中我掌握了用汇编语言编写输出正弦波信号的程序,学会了利用TMS320C54x对基本的文件的汇编、编译、链接和调试。
相信这些会对我今后的学习有所帮助。
在课设过程中我还认识到细节对于编程和运行的重要性,理解老师上课所讲的东西打好基础也尤为重要。
作为一个应用软件,学好CCS的关键就是在实践中不断积累,勤加练习,习惯于用CCS来解决实际问题。
对于每个写过的程序都要问明白,真正理解每一步的操作原理,这样才能为以后的学习打好基础。
学习新的知识就是要有耐心和好奇心,才能真正掌握知识,才是真正好的学习态度。
参考文献
[1]邹彦.DSP原理及应用[M].北京:
电子工业出版社,2005,1.
[2]戴明桢.TMS320C54xDSP结构、原理及应用[M].北京航空航天大学出版社,2001,8.
[3]胡圣尧.DSP原理及应用[M].东南大学出版社,2008.7.
[4]清源科技.TMS320C54xDSP应用程序设计教程[M].机械工业出版社,2004,1.
[5]清源科技.TMS320C54x硬件开发教程[M].机械工业出版社,2003,1.
附录:
程序代码
BSP.set0;
//当前使用McBsp0
;
McBsp0内存映射寄存器
SPSA0.set038h;
//定义子地址寄存器映射位置
SPSD0.set039h;
//定义子块数据寄存器映射位置
DRR10.set021h;
//接收数据寄存器1映射位置
DRR20.set020h;
//接收数据寄存器2映射位置
DXR10.set023h;
//发送数据寄存器1映射地址
DXR20.set022h;
//发送数据寄存器2映射地址
McBsp1//内存映射寄存器
SPSA1.set048h
SPSD1.set049h
DRR11.set