数字信号处理课程设计--基于DSP-的-FIR-数字滤波器的设计.doc
《数字信号处理课程设计--基于DSP-的-FIR-数字滤波器的设计.doc》由会员分享,可在线阅读,更多相关《数字信号处理课程设计--基于DSP-的-FIR-数字滤波器的设计.doc(26页珍藏版)》请在冰豆网上搜索。
数字信号处理课程设计报告
设计题目:
基于DSP的FIR数字滤波器的设计
专业班级
学号
学生姓名
指导教师
教师评分
目录
一、摘要 1
二、概述 2
三、系统设计 3
3.1DSP系统原理框图 3
3.2DSP系统各部分分析 4
四、硬件设计 5
4.1硬件整体电路及框图 5
4.2硬件各部分组成简介 6
五、软件设计 10
5.1FIR数字滤波器的基本网络结构 10
5.2FIR数字滤波器的设计 10
5.2.1FIR滤波器的主要特点 10
5.2.2FIR滤波器设计方法 10
5.2.3窗函数法设计的基本思想 11
5.2.4用窗函数设计FIR滤波器的步骤 12
5.3FIR数字滤波器的MATLAB的实现 13
5.3.1Matlab软件介绍 13
5.3.2用Matlab实现FIR数字滤波器的几种方法 13
5.4FFT参数的计算 17
5.5DSP程序流程图 17
六、实验结果 19
七、个人总结 21
八、参考文献 22
附件:
23
数字信号处理课程设计
一、摘要
数字滤波器是数字信号处理中最重要的组成部分之一,数字滤波器是由数字乘法器、加法器和延时单元组成的一种算法或装置,可作为应用系统对信号的前期处理。
DSP芯片实现的数字滤波器具有稳定性好、精确度高、灵活性强及不受外界影响等特性。
因此基于DSP实现的数字滤波器广泛应用于语音图像处理、数字通信、频谱分析、模式识别、自动控制等领域,具有广阔的发展空间。
本文首先介绍了数字滤波器的概念及分类,以及数字滤波器的实现方法。
在理解FIR滤波器的工作原理及其设计方法的基础上,在MATLAB环境下利用矩形窗设计实现FIR滤波器。
然后通过DSP结合CCS2.0软件进行编程,最终实现了基于DSP的FIR数字低通滤波器的设计。
仿真结果表明,基于DSP实现的滤波器具有稳定性好、精确度高、灵活性强等优点,并能实现对信号的实时滤波。
关键词:
FIR数字滤波器DSP窗函数法MATLABTMS320VC5402
二、概述
随着信息时代的到来,数字信号处理已成为当今一门极其重要的学科和技术领域。
数字信号在通信、语音、图像、自动控制、雷达、航空航天、医疗和家用电器等众多领域得到了广泛的应用。
在数字信号处理中数字滤波占有极其重要的地位,与模拟滤波相比,数字滤波具有很多突出优点,比如精确度高、稳定、灵活、不要求阻抗匹配、容易实现线性相位、还可以避免模拟滤波器无法克服的电压漂移、温度漂移和噪声偏移等问题。
FIRFiniteImpulseResponse滤波器是有限长单位冲激响应滤波器,它是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而滤波器是稳定的系统。
数字滤波器的实现方法通常有三种:
(1)用计算机软件实现软件实现方法就是在通用的微型计算机上用软件来实现。
(2)采用DSP(DigitalSignalProcessing)处理器来实现。
(3)用FPGA可编程器件来实现。
DSP处理器是专为数字信号处理而设计的,它的主要数字运算单元是一个乘累加器MAC,能够在一个机器周期内完成一次成累加运算,配有适合于信号处理的指令,具备独特的循环寻址和倒序寻址能力。
通过比较以上三种方法可见:
可以采用MATLAB软件来学习数字滤波器的基本知识,计算数字滤波器是系数,研究算法的可行性,对数字滤波器进行前期的仿真。
然后利用DSP来实现数字滤波的设计。
为了实现这一目标,需要编写程序,在CCS上进行调试仿真。
三、系统设计
3.1DSP系统原理框图
图2.1典型的DSP系统
图2.1是一个用DSP做信号处理的典型框图。
由于DSP是用来对数字信号进行处理的,所以首先必须将输入的模拟信号变换为数字信号。
于是先对输入模拟信号进行调整,输出的模拟信号经过A/D变换后变成DSP可以处理的数字信号,DSP根据实际需要对其进行相应的处理,如FFT、卷积等;处理得到的结果仍然是数字信号,可以直接通过相应通信接口将它传输出去,或者对它进行D/A变换将其转换为模拟采样值,最后再经过内插和平滑滤波就得到了连续的模拟波形模拟信号。
一般来说DSP的设计过程应遵循一定的设计流程,如图2.2示
图2.2DSP系统流图
系统的简单设计如图所示,由给出所设计的FFT的技术指标,用MATLAB求解参数并仿真。
选出合适的DSP芯片,连接好硬件电路。
给出程序流程图,编写程序,在CCS中完成仿真。
3.2DSP系统各部分分析
通过初期在MATLAB中仿真,确定滤波器参数。
在MATLAB中可以通过编程用相应的窗函数来设计FIR滤波器。
再选择合适DSP,通过设计DSP硬件电路来产生合适的信号。
这期间会用到数模转换器,时钟电路,复位电路等,都需要提前设计好,之后调试硬件电路。
最后,编写代码,进行仿真调试。
四、硬件设计
4.1硬件整体电路及框图
根据使用DSP芯片的相关原则,以及芯片手册具体决定未用端子是接上拉电阻还是悬空。
可以得出DSP数字滤波器的整体硬件电路连线图,如图3.1所示。
图3.1硬件电路
图3.2硬件电路框图
在本系统设计中采用了TI的TMS320VC5402作为其核心处理单元。
TMS320VC5402为低功耗定点数字信号处理器,其运算速度最快可达532MIPS。
它采用先进的修正哈佛结构,片内共有8条总线(1条程序存储器总线、3条数据存储总线和4条地址总线)。
其CPU采用并行结构设计,使其能在一条指令周期内,高速地完成多项算术运算。
TMS320VC5402的丰富的片上外围电路(通用I/O引脚,定时器,时钟发生器,HPI接口,多通道缓冲串行口Mcbsp)使其与外部接口方便。
4.2硬件各部分组成简介
信号源单元:
频率,幅值可调双路三角波,方波和正弦波产生电路采用两片8038信号发生器,输出频率范围20~100kHZ,幅值范围-10V~+10V,频率,幅值可独立调节。
两路输出信号可以通过加法器进行信号模拟处理和混叠,作为信号滤波处理的混叠信号源,混叠后的信号从信号源1输出,信号源单元原理如图4所示。
图3.3信号源单元原理框图
(1)数模转换单元:
数模转换采用DAC08芯片,分辨率8位,精度1LSB,转换时间可达85ns。
DAC08可以应用在8-bit,1usA/D变换,波形发生,语音编码,衰减器,在本实验系统中,DAC08采用对称偏移二进制输出方式,输出电压范围-5V~+5V,数模转换的原理图如图3.4所示。
由于模数转换选择了10位器件,为了简化程序代码,减少DSP的运算工作量,在本数字滤波器系统中选择了TI公司的TLV5608芯片,它是一款8通道10位2.7到5.5V低电压数模转换芯片。
(2)模数转换单元:
模数转换芯选用AD7822,单极性输入,采样分辨率8BIT,并行输出;内含取样保持电路,以及可选择使用内部参考电压源,具有转换后自动Power-Down的模式,可应用在数据采样,DSP系统及移动通信等场合。
在本实验系统中,参考电压源+2.5V,偏置电压输入引脚Vmid2.5V。
模拟输入信号以过运放处理后输入AD7822输入电压范围-12V~+12V9,模数转换的原理图如图3.5所示。
图3.5模数转换单元原理图
本设计中采用了SPI接口器件实现数据的模数转换和数模转换。
在本数字滤波器系统中选择了TI公司的TLV1570芯片作为模数转换器件,8通道10位2.7到5.5V低电压模数转换芯片。
TLVl570在3V电压下的采样频率为625KSPS,输入信号最高频率不能超过300K。
从功能时序图可以看出该器件包含8通道输入多路复用器、高速的10位ADC、内部的电压参考源和高速的串行接口。
其高速串行接口包含五根信号线:
SCLK串行时钟输入、SDIN串行数据输入、SDOUT串行数据输出、FS帧同步信号、CS片选信号。
其中每个取样和转换过程需要16个系统工作时钟。
(3)电源电源:
TPS73HD318为双路输出低压降LDO稳压器,线性稳压器使用在其线性区域内运行的晶体管或FET,从应用的输入电压中减去超额的电压,产生经过调节的输出电压。
所谓压降电压,是指稳压器将输出电压维持在其额定值上下100mV之内所需的输入电压与输出电压差额的最小值。
本次设计中,用于提供稳定的DSP的电源。
(4)JTAG接口设计JointTestActionGroup;联合测试行动小组主要用于芯片内部测试。
标准的JTAG接口是4线:
TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。
JTAG测试允许多个器件通过JTAG接口串联在一起,形成一个JTAG链,能实现对各个器件分别测试。
JTAG编程方式是在线编程,传统生产流程中先对芯片进行预编程然后再装到板上,简化的流程为先固定器件到电路板上,再用JTAG编程,从而大大加快工程进度。
JTAG接口可对DSP芯片内部的所有部件进行编程。
如图3.6。
图3.6JTAG管脚图
(6)复位电路MAX706S:
对于实际的DSP应用系统特别是产品化的DSP系统而言,可靠性是一个不容忽视的问题。
由于DSP系统的时钟频率比较高,因此在运行时极有可能发生干扰和被干扰的现象。
MAX706系列监控器性能价格比极高。
除了看门狗功能外,另外还具有上电自动复位、人工复位以及低电压报警等功能,使用起来非常方便可靠。
MAX706是多功能微处理器监控电路,其中包括MAX706、MAX706p、MAX706R、MAX706S和MAX706T等5个型号,具有上电自动复位、手动复位、看门狗以及电压检测功能。
可以满足3V电源系统和5V电源系统的需要。
MAX706具有8引脚DIP、SO和MAX三种封装形式可供选用。
具体连接方式如图3.7。
图3.7复位电路设计
(7)时钟电路设计:
利用DSP芯片内部的振荡器构成时钟电路,连接方式如图3.8所示。
在芯片的X1X2/CLK引脚之间接入一个晶体,CLKMD引脚必须设置以启动内部振荡器。
C54X的时钟产生包括一个内部的振荡器和一个锁相环(PLL)电路。
图3.8时钟电路设计
(8)存储器设计:
程序存储器选用AT29LV1024,它是一种3V系统供电的闪速可编程可电擦除的16位存储器(PEROM),具有1M位的存储空间,1M位的存储空间分成512个区,每个区有128个字节。
数据存储器选用KSI64LV64。
五、软件设计
5.1FIR数字滤波器的基本网络结构
设单位脉冲响应h(n)长度为N,输入信号为x(n)则FIR数字滤波器就是要实现下列差分方程:
式
(1)就是FIR数字滤波器的差分方程,FIR网络结构特点就是没有反馈支路,即没有环路,因此它是无条件的稳定系统,其单位脉冲响应h(n)是一个有限长序列。
由上面的方程可知,FIR滤波器实际上是一种乘法累加运算,不断地输入样本x(n)经延时,做乘法累加,再输出滤波结果y(n)。
对式
(1)进行Z变换,经整理后可得FIR滤波器的传递函数H(z)为:
(2)
由式
(2)可以看出,FIR数字滤波器一般网络结构,如下图4。
1所示。
图4.1FIR数字滤波器一般网络结构
5.2FIR数字滤波器的设计
5.2.1FIR滤波器的主要特点
1)单位冲击响应只有有限项;
2)FIR滤波器无反馈回路,是一种无条件稳定系统;
3)FIR滤波器可以设计成具有线性相位特性。
5.2.2FIR滤波器设计方法
FIR滤波器的设计任务就是给定要求的频率特性,按一定的最佳逼近准则,选取滤波器转移函数H(z)中的各个参数h(n),即滤波器的单位抽样响应及阶数N,使得频率特性满足设计要求。
通常FIR滤波器的设计方法主要有三种:
窗函数法、频率抽样法和切比雪夫等波纹逼近法。
其中窗函数法可以应用比较现成的窗函数,因而设计简单,在指标要求不高的场合使用方便灵活。
下面我们来简单介绍一下这三种设计方法。
(1)窗函数法
窗函数设计方法的基本步骤是:
1)把展成FS,得;
2)对自然截短到所需的长度,如2M+1;
3)将截短后的右移M个采样间隔,得;
4)将乘以合适的窗口,即得所要滤波器的冲击响应,窗函数以n=M对称。
利用所求得的单位抽样响应,即可用硬件构成滤波器的转移函数H(z),也可利用在计算机上用软件来实现滤波。
(2)频率抽样法
窗函数法是从时域出发,用窗函数截取理想的得到,以此有限长的近似,这样得到的频率响应逼近于理想的频响。
频率抽样法是从频率出发,将给定的理想频响加以等间隔抽样。
(3)Chebyshev逼近法
窗函数法和频率采样法设计出的滤波器的频率特性都是在不同意义上对所给理想频率特性的逼近。
由数值逼近理论可知,对某个函数f(x)的逼近一般有以下三种方法:
插值法(InterpolatingWay)、最小平方逼近法(LeastSquareApproachingWay)、一致逼近法ConsistentApproachingWay。
5.2.3窗函数法设计的基本思想
窗函数的设计思想是选择一种合适的理想频率特性的滤波器,然后截断它的脉冲得到一个线性相位和因果的滤波器。
因此这种方法关键在于选择某种合适的窗函数和一种理想滤波器。
对于给定的滤波器的技术指标,选择滤波器长度具有最窄主瓣宽度和尽可能小的旁瓣衰减的某个窗函数。
现介绍如下:
首先设希望逼近的滤波器频率响应函数为,其单位脉冲响应是
(9)
(10)
如果能够由已知的求出,经过Z变换可得到滤波器的系统函数。
但通常以理想的滤波器作为,其幅度特性逐段恒定,在边界频率处有不连续点,因而是无限时宽的,且是非因果序列。
然而我们实际设计的滤波器的单位脉冲响应为h(n),长度为N,其系数函数H(z)为(11)
这样用一个有限长的序列h(n)去代替,肯定会引起误差,表现在频域就是通常所说的吉布斯效应。
这种吉布斯效应是由于将直接截断引起的,因此,也称为截断效应。
5.2.4用窗函数设计FIR滤波器的步骤
如果所希望的滤波器的理想的频率响应函数为,则其对应的单位脉冲响应为
(4.1)
窗函数设计法的基本原理是用有限长单位脉冲响应序列逼近。
由于往往是无限长序列,而且是非因果的,所以用窗函数将截断,并进行加权处理,得到:
(4.2)
就作为实际设计的FIR数字滤波器的单位脉冲响应序列,其频率响应函数为
(4.3)
式中,N为所选窗函数的长度。
我们知道,用窗函数法设计的滤波器性能取决于窗函数的类型及窗口长度N的取值。
设计过程中,要根据对阻带最小衰减和过渡带宽度的要求选择合适的窗函数类型和窗口长度N。
各种类型的窗函数可达到的阻带最小衰减和过渡带宽度见表4.1。
表1各种窗函数的基本参数
窗函数
旁瓣峰值幅度/dB
过渡带宽
阻带最小衰减/dB
矩形窗
-13
4π/N
-12
三角形窗
-25
8π/N
-25
汉宁窗
-31
8π/N
-44
哈明窗
-41
8π/N
-53
不莱克曼窗
-57
12π/N
-74
凯塞窗(α=7.865)
-57
10π/N
-80
这样选定窗函数类型和长度N之后,求出单位脉冲响应,并按照式(4.3)求出。
是否满足要求,要进行演算。
一般在尾部加零使长度满足2的整数次幂,以便用FFT计算。
如果要观察细节,补零点数增多即可。
如果不满足要求,则要重新选择窗函数类型和长度N,再次验算,直至满足要求。
5.3FIR数字滤波器的MATLAB的实现
5.3.1Matlab软件介绍
MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,代表了当今国际科学计算软件的先进水平。
MATLAB和Mathematica、Maple并称为三大数学软件。
它在数学类科技应用软件中在数值计算方面首屈一指。
MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连 matlab开发工作界面接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
5.3.2用Matlab实现FIR数字滤波器的几种方法
语法格式:
B=firl(n,Wn);B=firl(n,Wn,‘ftype’);B=firl(n,Window)
B=firl(n,Wn,’ftype’window).
(1)低通滤波器的MATLAB实现
使用矩形窗,Hanning窗,hamming窗,布莱克曼窗对带通原形进行截取,低通滤波器
指标特性给出如下:
fs=250KHZ,fp=20KHZ,Fs=30KHZ,通带最大衰减Ap=3dB,阻带最小衰减As=50dB
其设计结果如下:
幅度响应
相位响应
(2)带通滤波器的设计
使用矩形窗、hanning窗、hamming窗、布莱克曼窗四种窗对带通原形进行截取。
带通滤波器的指标性能给出如下:
下阻带边缘:
W1s=0.2
下通带边缘:
W1p=0.35,Rp=1dB;
上通带边缘:
W2p=0.65,Rp=1dB;
上阻带边缘:
W2s=0.8,As=60dB;
其设计结果如下:
矩形窗设计
Hanning窗设计
Hamming窗设计
布莱克曼窗设计
5.4FFT参数的计算
通过使用MATLAB工具箱实现数字滤波器,虽然可以方便的实现数字滤波,但是MATLAB实现的滤波器不能实现对输入信号的实时处理,当输入信号改变时需要再次改变滤波器参数,比较繁琐。
而基于DSP实现的数字滤波器能够克服修改参数,这个繁琐的问题,实现实时滤波实时处理的特性。
用TMS3205420的汇编程序实现FFT算法主要分为四步:
(1)实现输入数据的比特反转
输入数据的比特反转实际上就是将输入数据进行进行位码倒置,以便于在整个运算后的输出序列是一个自然序列。
在用汇编指令进行位码倒置时,使用位码倒置寻址可以大大提高程序执行速度和使用存储器的效率。
在这种寻址方式下,AR0存放的整数N是FFT点的一半,一个辅助存储器指向一个数据存放的单元,当使用位码倒置寻址将AR0加到辅助存储器时,地址将以位码倒置的方式产生。
(2)实现N点复数FFT
N点复数FFT算法的实现可以分为一个功能模块,即第一级蝶形运算,第二级蝶形元算,第三级至级蝶形运算。
(3)功率谱的计算
用FFT计算x(n)的频谱,即计算:
X(k)一般是由实部和虚部组成的复数,即:
因此,计算功率谱时只需将FFT变换好的数据,按照实部和虚部求他们的平方和。
然后对平方和进行开平方运算,但是考虑到编程的难度,对于求FFT变换后的数据的最大值,不开平方也可以找到最大值,并对功率谱的结果没有影响,所以在实际的DSP编程中省去了开平方的运算。
(4)输出FFT结果
5.5DSP程序流程图
图4.4.1DSP流程图
六、实验结果
本次设计的低通滤波器的主要性能指标:
设计一个滤波器阶数为51,采样频率fs为181KHZ,滤波器截止频率fc为10KHZ的滤波器,具体设计如下:
(1)启动CCS2.0,用project/open打开“ExpFIR.pjt”工程文件,双击“ExpFIR.pjt”及“Source”可查看各源程序。
(2)加载“ExpFIR.pjt”到主程序,K++处,设置断点,单机“Run”运行程序,程序将运行至断点处停止。
(3)用View/Graph/Time/Frequency打开一个图形观察窗口:
设置观察图形窗口变量及参数为:
采用双追踪观察在启动地址分别为0x3000H和0x3100H,长度为256的单元中数值的变化,是值类型为16位有符号整型变量,这两段存储单元中分别存放的是经A/D转换后的输入混跌信号和对该信号进行FIR滤波的结果。
(4)单机“Animate”运行程序,调整窗口并观察滤波结果,仿真结果如下:
(5)调节DSP实验箱上输入的正弦波的幅值或频率旋钮,再次观察输入波形,如下图:
由上图可知,上面窗口为从信号源单元产生的两个不同频率的混跌信号,下面的窗口为其经过所设计的低通滤波器,滤波以后输出的波形,有上下两个波形图对比可知,本次设计的FIR数字低通滤波器起到了很好的低通滤波效果。
当对信号源输入信号做出改变时,如上图所示,说明经过所设计的低通滤波器输出此号也随之改变,仿真结果表明,基于DSP实现的滤波器具有稳定性好,精确度高,灵活性强等优点,并能实现对信号的实时滤波。
七、个人总结
这次课程设计花的时间还是挺长的,主要是实验前没有好好认真的分析题目。
直接看了题目后就开始敲程序,由于之前实验已经做过关于IIR和FIR滤波器的设计,所以认为这次课程设计应该很简单。
但是由于之前实验都是已经给了技术指标,只要知道设计滤波器的方法就可以了,而这次的技术指标需要自己确定。
大概确定了技术指标后,完成代码后运行,但是得到的波形并不理想。
直接修改技术指标,然后再看输出波形,感觉好像在试运气一样。
后来把程序搁在一边,又重新翻阅了《信号与系统》下册和《信号与系统实验教程》关于设计滤波器的部分,在理解了原理和过程之后,并没有再去直接看结果,而是编写程序分析滤波器的幅频响应。
通过对模拟滤波器幅频响应的直观观察,慢慢调整参数,得到了比较理想的幅频特性,最终得到比较好的输出波形。
还有一点,这次课程设计用到了很多上一学期学到的知识,对信号采样时需要注意的地方很多,如何确定采样频率,采样长度等等,都需要经过分析计算,而不能随便乱取值。
刚开始也是因为没有搞清楚这些,所以绕了很多弯儿,还以为是滤波器的问题。
所以由此可知,要将所学的知识系统的联系起来,课程设计和平时学习一样,也是一环扣一环,哪个环节出了问题,都会导致最终结果出差错。
通过这一次课程设计,我对设计滤波器的原理和方法有了更系统的认识,而且也顺便复习了以前学的的一些知识,把所学的都串联在一起,自己弄懂