基于DSP的FIR滤波器设计.docx
《基于DSP的FIR滤波器设计.docx》由会员分享,可在线阅读,更多相关《基于DSP的FIR滤波器设计.docx(38页珍藏版)》请在冰豆网上搜索。
基于DSP的FIR滤波器设计
一、课题研究的目的和意义:
在信号与信息处理中,提取有用信息需要对信号进行滤波。
借助DSP数字信号处理器的高速运算能力,可以实时地对信号进行数字滤波。
本设计要求利用DSP的DMA方式进行信号采集和信号输出,同时对外部输入的信号进行数字滤波。
掌握利用DSP实现信号实时FIR滤波设计可使学生更加透彻的理解信号的采集方法和滤波方法。
学会利用Matlab对信号进行FIR滤波,掌握Matlab的信号仿真。
同时通过对DSP信号处理器及A/D、D/A转换器以及DMA的编程,可以培养学生C语言编程能力以及使用DSP硬件平台实现数字信号处理算法的能力。
二、课题研究主要内容:
1.基本部分:
(1)掌握利用滤波器设计FIR滤波器的方法,并提取滤波器参数。
(2)掌握利用Matlab的信号处理工具箱的使用,以及利用Matlab对信号进行滤波。
(3)设计数字滤波算法,或调用DSPLIB中的滤波函数,实现对信号的滤波。
(4)利用C语言对A/D、D/A进行初始化。
(5)利用C语言对DMA进行初始化。
(6)编写DMA中断服务程序,实现信号的实时滤波。
(7)利用CCS信号分析工具分析信号的频谱成分,确定滤波器的参数
2.发挥部分:
(1)比较加不同窗和阶数时滤波器的滤波效果。
(2)测试所设计滤波器的幅频特性和相频特性,并与MATLIB下的设计结果进行比较。
(3)在实验板的Linein输入端接入正弦信号,分左右声道分别采集,并分别滤波。
三、要求完成的任务:
(1)利用Matlab设计FIR滤波器,并对信号进行滤波。
(2)掌握CCS的安装、设置,工程的建立、工程设置、编译运行和调试方法。
(3)编写C语言程序实现设计要求,并在CCS集成开发环境下调试通过,实现设计所要求。
的各项功能。
(4)利用信号发生器产生输入信号,经DSP运算后正确地在示波器上显示。
(5)按要求撰写课程设计报告。
四、研究方法及技术途径:
利用DSP实现对模拟信号滤波的框图
外部模拟信号先进行A/D转换,利用MCBSP的接收寄存器接收数据。
利用CCS的频谱分析工具对输入信号进行频谱分析;根据频谱成分确定滤波器参数,然后利用Matlab设计FIR滤波器,将参数提取出来,存放到DSP存储区中。
调用DSPLIB中的FIR滤波函数,对信号进行滤波。
滤波后的数据利用DMA方式送到D/A转换器转换为模拟信号。
本设计可以分为两部分:
(1)信号仿真
(a)首先利用Matlab的fdatool工具箱设计滤波器,在sptool工具箱进行信号分析与滤波。
(b)利用CCS进行信号滤波算法的仿真,即利用simulator进行仿真。
调用DSPLIB库中的fir()滤波函数实现信号FIR滤波,或自行编写FIR滤波程序实现信号FIR滤波。
(2)利用Emulator,即DSP硬件板、采用DMA方式实现信号采集与传输,结合FIR滤波算法,实现实时FIR滤波。
五、实验背景:
1.课题研究的现状:
凡是有能力进行信号处理的装置都可以称为滤波器。
在近代电信设备和各类控制系统中,滤波器应用极为广泛;在所有的电子部件中,使用最多,技术最为复杂的要算滤波器了。
滤波器的优劣直接决定产品的优劣,器的研究和生产历来为各国所重视。
1917年美国和德国科学家分别发明了LC滤波器,次年导致了美国第一个多路复用系统的出现。
20世纪50年代无源滤波器日趋成熟。
自60年代起由于计算机技术、集成工艺和材料工业的发展,滤波器发展上了一个新台阶,并且朝着低功耗、高精度、小体积、多功能、稳定可靠和价廉方向努力,其中小体积、多功能、高精度、稳定可靠成为70年代以后的主攻方向。
导致RC有源滤波器、数字滤波器、开关电容滤波器和电荷转移器等各种滤波器的飞速发展,到70年代后期,上述几种滤波器的单片集成已被研制出来并得到应用。
80年代,致力于各类新型滤波器的研究,努力提高性能并逐渐扩大应用范围。
90年代至现在主要致力于把各类滤波器应用于各类产品的开发和研制。
当然,对滤波器本身的研究仍在不断进行。
我国广泛使用滤波器是50年代后期的事,当时主要用于话路滤波和报路滤波。
经过半个世纪的发展,我国滤波器在研制、生产和应用等方面已纳入国际发展步伐,但由于缺少专门研制机构,集成工艺和材料工业跟不上来,使得我国许多新型滤波器的研制应用与国际发展有一段距离。
我国现有滤波器的种类和所覆盖的频率己基本上满足现有各种电信设备。
从整体而言,我国有源滤波器发展比无源滤波器缓慢,尚未大量生产和应用。
从下面的生产应用比例可以看出我国各类滤波器的应用情况:
LC滤波器占50%;晶体滤波器占20%:
机械滤波器占15%;陶瓷和声表面滤波器各占1%;其余各类滤波器共占13%。
从这些应用比例来看,我国电子产品要想实现大规模集成,滤波器集成化仍然是个重要课题。
在上一个世纪中,电滤波器的发展经历了从无源到有源和从模拟到数字两个过程。
高精度无源滤波器从设计到制造都是难度非常高的技术。
有源滤波器虽然很大地改进了滤波器的性能,也降低了一些制造工艺的难度,但从其性能的大幅度改进,与其它信号处理技术的结合,实现的手段之便捷,还是要数数字滤波器后来居上。
随着电子工业的发展,对滤波器的性能要求越来越高,功能也越来越多,并且要求它们向集成方向发展。
我国滤波器研制和生产与上述要求相差甚远,为缩短这个差距,电子工程和科技人员负有重大的历史责任阴。
所以,对滤波器的研究和生产历来为各国所重视。
2.国内外相关领域的研究:
20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生,并得到了迅猛的发展。
当时还没有DSP,数字信号处理只能依靠MPU来完成。
但MPU(微处理器)的速度无法满足高速实时的要求。
因此数字信号处理技术多是停留在理论上,得不到广泛的应用,但这为DSP的诞生打下了基础。
70年代至80年代初是DSP发展的第二阶段。
70年代初,有人提出了DSP的理论和算法基础。
但是直到1978,世界上第一个世界上第一枚DSP才诞生,它是由1978AMI公司发布的S2811。
1979年美国Intel公司发布的商用可编程器件2920是DSP芯片的一个主要里程碑;1980年NEC公司推出的PD7720是第一个具有乘法器的商用DSP芯片。
美国德州仪器公司TexasInstruments也于1982年推出了其第一代DSP芯片TMS32010及其系列产品,它们都是基于NMOS工艺。
此时的DSP运行速度较以前的MPU有了较大的提高,但由于制造工艺所限,体积和功耗都比较大,内部资源较少,且价格昂贵。
80年代中期直到现在是DSP得到了蓬勃发展并广泛应用的时期。
80年代中期,随着大规模集成电路技术尤其是CMOS技术的发展,基于CMOS工艺的DSP应运而生,体积功耗都大大减少,而存储容量和运算速度都得到成倍提高,成为语音处理、图像硬件处理技术的基础;80年代后期,DSP运算速度进一步提高,应用范围逐步扩大到通信、计算机领域。
90年代直到现在,DSP发展最快,此时的DSP集成度极高,体积、功耗进一步减少,内部资源更是成倍增加,而价格却进一步下降。
此时,DSP芯片不仅在通信、计算机领域大显身手,而且已扩大到人们的学习、工作和生活的各个方面。
生产DSP器件的公司也不断壮大,目前,市场占有率前四名依次为:
TexasInstruments、Lucent、AnalogDevice、Motorola。
在所有生产DSP的公司中,TI可谓一枝独秀,它是世界上最大的DSP供应商,TI系列的DSP也是公认的最成功的DSP。
其DSP市场份额占全世界份额近50%。
其产品覆盖了高、中、低端几乎所以市场,广泛应用于各种领域。
自从在1982年成功推出了其第一代DSPTMS32010及其系列产品TMS32011、TMS320C10/C14/C15等,TI相继推出了第二代DSPTMS32020、TMS320C25/C26/C28,第三代DSPTMS320C30/C31/C32,第四代DSPTMS320C40/C44,第五代DSPTMS3205X/C54X/C55X及目前速度最快的第六代DSPTMS320C62X/C67X等等。
DSP器件应用面从起初的局限于军工,航空航天等军事领域,扩展到今天的诸多电子行业及消费类电子产品中。
在TI公司的DSP产品中C1X、C2X、C2XX、C5XX、C54X、C62X等系列是定点运算指令系统的DSP;C3X、C4X、C67X等系列是浮点运算指令系统的DSP;AV7100、AV7110等系列是用于视频、音频领域的专用数字压缩产品。
六、实验原理:
1.DSP:
一个典型的DSP系统如下图所示:
该图是一个用DSP做信号处理的典型框图。
由于DSP是用来对数字信号进行处理的,所以首先必须将输入的模拟信号变换为数字信号。
于是先对输入模拟信号进行调整,输出的模拟信号经过A/D变换后变成DSP可以处理的数字信号,DSP根据实际需要对其进行相应的处理,如FFT、卷积等;处理得到的结果仍然是数字信号,可以直接通过相应通信接口将它传输出去,或者对它进行D/A变换将其转换为模拟采样值,最后再经过内插和平滑滤波就得到了连续的模拟波形模拟信号。
当然,图中的有些环节并不是必需的。
如A/D转换,如果输入的是数字信号,就可以直接交给DSP进行运算。
由于数字信号处理系统是以数字信号处理理论为基础,所以具有数字信号处理的全部优点:
(1)接口方便
DSP系统与其它以数字技术为基础的系统或设备都是相互兼容的,比模拟系统与这些系统接口要容易的多。
(2)编程方便
DSP系统中的可编程DSP芯片可以使设计人员在开发过程中灵活方便的进行修改和升级,可以将C语言与汇编语言结合使用。
(3)具有高速性
DSP系统的运行较高,最新的DSP芯片运行速度高达10GMIPS以上。
(4)稳定性好
DSP系统以数字处理为基础,受周围环境,如噪声、温度等的影响小、可靠性高;
(5)精度高
例如16位数字系统可以达到10-5的精度;
(6)可重复性好
模拟系统的性能受元件参数性能变化影响大,而数字系统基本不受影响,更便于测试、调试和大规模生产。
(7)集成方便
DSP系统中的数字部件有高度的规范性,便于大规模生产。
当然DSP也存在一定的缺点。
例如,对于一些简单的信号处理任务,如与模拟交换线的电话接口,若采用DSP则使成本增加。
另外,DSP系统中的高速时钟通常在几十兆赫,可能带来高频干扰和电磁泄漏等问题,而且DSP的功率消耗在系统中也是较大的。
此外,DSP技术发展得很快,数学知识要求多,开发和调试工具还很不完善。
虽然DSP系统还存在一些缺点,但是随着近两年来DSP技术突飞猛进的发展,成本的下降,很多问题都得到了缓解。
其突出的优点已经使其在通信、语音、图像、雷达、生物医学、工业控制、仪器仪表等许多领域得到越来越广泛的应用。
2.DMA技术:
直接存储器访问(DirectMemoryAccess,简称DMA)是C55xDSP非常重要的片上外设,DMA控制器可以在不影响CPU的情况下完成数据的传输,因此数据传输速度快,在要求信号实时采集和处理的系统中常采用DMA方式进行信号采集与传输。
TMS320C5502有6个可独立编程的DMA通道,每个DMA通道受各自的5个16位寄存器控制:
源地址寄存器DMSRC、目的地址寄存器DMDST、单元计数寄存器DMCTR、同步事件和帧计数寄存器DMSFC、发送模式控制寄存器DMMCR。
此外,DMA的6个通道还受通道优先级和使能控制寄存器DMPREC控制。
DMA是指一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据,既不通过CPU,也不需要CPU干预。
整个数据传输操作在一个称为“DMA控制器”的控制下进行。
CPU除了在数据传输开始和结束时做一点处理外,在传输过程中还可以进行其他的工作。
这样,在大部分时间里,CPU和输入输出都处于并行操作,因此使整个计算机系统的效率大大提高。
DMA是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依于CPU的大量中断负载,否则,CPU需要从来源把每一片段的资料复制到暂存器,然后把它们再次写回到新的地方,在这个时间中,CPU对于其他的工作来说就无法使用。
DMA传输将数据从一个地址空间复制到另外一个地址空间,当CPU初始化这个传输动作,传输动作本身是由DMA控制器来实行和完成。
典型的例子就是移动一个外部内存的区块到芯片内部更快的内存区。
像是这样的操作并没有让处理器工作拖延,反而可以被重新排程去处理其他的工作。
DMA传输对于高效能嵌入式系统算法和网络是很重要的。
一个设备接口试图通过总线直接向另一个设备发送数据(一般是大批量的数据),它会先向CPU发送DMA请求信号。
外设通过DMA的一种专门接口电路――DMA控制器(DMAC),向CPU提出接管总线控制权的总线请求,CPU收到该信号后,在当前的总线周期结束后,会按DMA信号的优先级和提出DMA请求的先后顺序响应DMA信号。
CPU对某个设备接口响应DMA请求时,会让出总线控制权。
于是在DMA控制器的管理下,外设和存储器直接进行数据交换,而不需CPU干预。
数据传送完毕后,设备接口会向CPU发送DMA结束信号,交还总线控制权。
实现DMA传送的基本操作如下:
1、外设可通过DMA控制器向CPU发出DMA请求;
2、CPU响应DMA请求,系统转变为DMA工作方式,并把总线控制权交给DMA控制器;
3、由DMA控制器发送存储器地址,并决定传送数据块的长度;
4、执行DMA传送;
5、DMA操作结束,并把总线控制权交还CPU。
DMA方式主要适用于一些高速的I/O设备。
这些设备传输字节或字的速度非常快。
对于这类高速I/O设备,如果用输入输出指令或采用中断的方法来传输字节信息,会大量占用CPU的时间,同时也容易造成数据的丢失。
而DMA方式能使I/O设备直接和存储器进行成批数据的快速传送。
3.FIR低通滤波器:
假设数字滤波器的频率响应函数H用下式表示:
幅频特性表示信号通过该滤波器后各频率成分振幅衰减情况,而相频特性反映各频率成分通过滤波器后在时间上的延时情况。
一般选频滤波器的技术要求由幅频特性给出,其相频特性是确定的,所以在设计过程中,对相频特性一般不作要求。
在低通滤波器的幅频特性中,Wp和Ws分别称为通带边界频率和阻带截止频率。
从Wp到Ws称为过渡带,过渡带上的频响一半是单调下降的。
当冲击响应满足下列条件时,FIR滤波器具有对称结构,为线性相位滤波器:
这种对称性,可使得乘法器数量减半:
对n价滤波器,当n为偶数时,乘法器的个数为n/2个;当n为奇数时,乘法器的个数为(n+1)/2个。
在电路实现中,乘法器占用的逻辑单元数较多。
乘法器的增加,意味着电路成本增加,另外对电路的工作速度也有影响。
在DSP的应用中,可以应用Matlab的滤波器设计工具箱fdatool工具箱生成需要的FIR滤波器,在生成C文件,提取出相应的滤波数据,应用CCS来调用这些数据,从而应用DSP产生信号的滤波效果,这样就实现了FIR的低通滤波效果。
在信号处理中,滤波占有十分重要的地位。
数字滤波是数字信号处理的基本方法。
数字滤波与模拟滤波相比有很多优点,它除了可避免模拟滤波器固有的电压漂移、温度漂移和噪声等问题外,还能满足滤波器对幅度和相位的严格要求。
低通有限冲激响应滤波器(低通FIR滤波器)有其独特的优点,因为FIR系统只有零点,因此,系统总是稳定的,而且容易实现线性相位和允许实现多通道滤波器。
DSP(数字信号处理器)与一般的微处理器相比有很大的区别,它所特有的系统结构、指令集合、数据流程方式为解决复杂的数字信号处理问题提供了便利,本文选用TMS320C54X作为DSP处理芯片,通过对其编程来实现FIR滤波器。
对数字滤波器而言,从实现方法上,有FIR滤波器和无限冲激响应(IIR)滤波器之分。
由于FIR滤波器只有零点,因此这一类系统不像IIR系统那样易取得比较好的通带与阻带衰减特性。
但是FIR系统有自己突出的优点:
①系统总是稳定的;②易实现线性相位;③允许设计多通带(阻带)滤波器。
其中后两项是IIR系统不易实现的。
设ai(i=0,1,2,…,N-1)为滤波器的冲激响应,输入信号为x(n),则FIR滤波器的输入输出关系为:
FIR滤波器的结构如下图所示:
4.乒乓操作:
输入数据流通过“输入数据选择单元”将数据流等时分配到两个数据缓冲区,数据缓冲模块可以为任何存储模块,比较常用的存储单元为双口RAM(DPRAM)、单口RAM(SPRAM)、FIFO等。
在第一个缓冲周期,将输入的数据流缓存到“数据缓冲模块1”;在第2个缓冲周期,通过“输入数据选择单元”的切换,将输入的数据流缓存到“数据缓冲模块2”,同时将“数据缓冲模块1”缓存的第1个周期数据通过“输出数据选择单元”的选择,送到“数据流运算处理模块”进行运算处理;在第3个缓冲周期通过“输入数据选择单元”的再次切换,将输入的数据流缓存到“数据缓冲模块1”,同时将“数据缓冲模块2”缓存的第2个周期的数据通过“输出数据选择单元”切换,送到“数据流运算处理模块”进行运算处理。
如此循环。
通过“输入数据选择单元”和“输出数据选择单元”按节拍、相互配合的切换,将经过缓冲的数据流没有停顿地送到“数据流运算处理模块”进行运算与处理。
把乒乓操作模块当做一个整体,站在这个模块的两端看数据,输入数据流和输出数据流都是连续不断的,没有任何停顿,因此非常适合对数据流进行流水线式处理。
所以乒乓操作常常应用于流水线式算法,完成数据的无缝缓冲与处理。
通过乒乓操作实现低速模块处理高速数据的实质是:
通过DPRAM这种缓存单元实现了数据流的串并转换,并行用“数据预处理模块1”和“数据预处理模块2”处理分流的数据,是面积与速度互换原则的体现。
7、实验流程:
1.首先利用Matlab的fdatool工具箱设计滤波器,在sptool工具箱进行信号分析与滤波:
Matlab编程,产生题所要求的数字信号
k=0:
255;%取256点数据
a=sin(2*pi*k*2000/32000);
b=sin(2*pi*k*2000/32000)+sin(2*pi*k*12000/32000);
2.利用CCS进行工程打开、编译链接、装载、运行:
3.利用信号发生器产生输入信号,经DSP运算后正确地在示波器上显示:
4.变量观察、图形观察:
输入时域、频域:
输出时域、频域:
噪声时域、频域:
5.比较加不同窗和阶数时滤波器的滤波效果:
Hamming
Hann
Blackman
七、实验程序:
/*
利用DSP实现实时信号FIR滤波
*/
/************main_dma4.c**************/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include"5502_FLASH.h"
#include"E2PROM_Function.h"
#include"CODEC.h"
#include
#include
#include
#include"fir.h"
//---------Globaldatadefinition---------
/*Constantsforthebufferedping-pongtransfer*/
#defineBUFFSIZE96
#definePING0
#definePONG1
/*
*Databufferdeclarations-theprogramusesfourlogicalbuffersofsize
*BUFFSIZE,onepingandonepongbufferonbothreceiveandtransmitsides.
*/
#pragmaDATA_SECTION(gBufferXmtPing,"buffer_sect");
Int16gBufferXmtPing[BUFFSIZE];//TransmitPINGbuffer
#pragmaDATA_SECTION(gBufferXmtPong,"buffer_sect");
Int16gBufferXmtPong[BUFFSIZE];//TransmitPONGbuffer
#pragmaDATA_SECTION(gBufferRcvPing,"buffer_sect");
Int16gBufferRcvPing[BUFFSIZE];//ReceivePINGbuffer
#pragmaDATA_SECTION(gBufferRcvPong,"buffer_sect");
Int16gBufferRcvPong[BUFFSIZE];//ReceivePONGbuffer
DATA*dbptr=&db[0];
DATA*dbptrx=&dbx[0];
/*------------------------------------------------------------------------------------*/
//
//ConfigMcBSP:
UseMcBSPtosendandreceivethedatabetweenDSPandAIC23B
//
/*------------------------------------------------------------------------------------*/
MCBSP_ConfigMcbsp1Config={
MCBSP_SPCR1_RMK(
MCBSP_SPCR1_DLB_OFF,//DLB=0
MCBSP_SPCR1_RJUST_LZF,//RJUST=0,rightjustifythedataandzerofilltheMSBs
MCBSP_SPCR1_CLKSTP_DISABLE,//CLKSTP=0
MCBSP_SPCR1_DXENA_ON,//DXENA=1,DXdelayenableron
0,//Reserved=0
MCBSP_SPCR1_RINTM_RRDY,//RINTM=0
MCBSP_SPCR1_RSYNCERR_NO,//RSYNCER=0
//MCBSP_SPCR1_RFULL_NO,//RFULL=0
//MCBSP_SPCR1_RRDY_NO,//RRDY=0
MCBSP_SPCR1_RRST_DISABLE//RRST=0;Disablereceiver