最新DSP原理与应用课程设计信号采集和滤波DSP程序设计.docx
《最新DSP原理与应用课程设计信号采集和滤波DSP程序设计.docx》由会员分享,可在线阅读,更多相关《最新DSP原理与应用课程设计信号采集和滤波DSP程序设计.docx(24页珍藏版)》请在冰豆网上搜索。
最新DSP原理与应用课程设计信号采集和滤波DSP程序设计
22.在SQL命令中,LIKE是字符串匹配运算符,其中通配符___________可表示0个或多个字符。
2.视图是在数据库表的基础上创建的一种虚拟表。
所谓虚拟表是指视图的数据是从已有的数据库表或其他视图中提取的,这些数据在________中并不实际存储,仅在数据词典中存储视图的定义。
A.属性B.域C.码D.联系
第2章VisualFoxPro6.0基础
C.选择标准语句D.数据修改语句
A.数据库B.数据库系统
stud1.dbf的表结构:
stud2.dbf的表结构:
C.属性只是对象所具有的外部特征
2、常见的计算机网络拓扑结构有:
_总线型结构_、___星型结构_______、环型结构____和_、树型结构和混合型结构___。
7.从数据表RSGL和RSGZ两个表中,查询出“编号”字段值相同的记录的全部信息,则实现此功能的SQL命令为____。
课程设计报告
名称DSP原理与应用课程设计
题目信号采集和滤波DSP程序设计
指导教师潘建军/沈冰夏
设计起止日期2015.11.16至2015.12.18
学院信息与通信工程学院
专业电子信息工程
学生姓名李岩
班级/学号电信1301/20130109
成绩
第一章概述
1.1课程设计目的
●掌握TMS320VC5509A片内模数转换器(ADC)的控制方法。
●掌握TIDSP系统的软件开发。
●设计TMS320VC5509ADSP系统的AD采集程序。
●设计FIR滤波器系数
●对采集的信号进行FIR滤波
1.2课程设计所用设备
●计算机:
安装软件开发工具CCStudiov3.3,完成系统的软件开发,进行硬件仿真调试,MATLAB。
●ICETEK–VC5509-AG-EDU实验箱:
包括
☐信号源
☐实现硬件仿真调试时与硬件系统的通信、控制和读取硬件系统状态和数据的开发系统(ICETEK5100-USB仿真器模块)
☐提供软件运行和调试的平台和用户系统开发的参照的评估模块(ICETEKVC5509-A)
●示波器:
观察DSP输入输出信号的波形和频率。
第二章课程设计原理
2.1A/D原理
2.1.1模数转换器结构和时序
在数字信号处理器的具体应用中往往需要采集一些模拟信号量,如电池电压、面板旋钮输入值等,模数转换器就是用来将这些模拟量转化为数字量来供DSP使用。
TMS320VC5507/5509片内模拟-数字转换器(ADC)方框图如图1所示。
TMS320VC5509A有三种封装,本次课程设计所用瑞泰创新公司生产的TMS320VC5509ADSP系统的评估板上焊接了144管脚薄型四方扁平封装的TMS320VC5509A(PGE后缀)。
本课程设计所使用的TMS320VC5509ADSP只能同时支持两路的信号采集。
TMS320VC5509APGE的片内模数转换器支持两路输入,管脚分别为AIN0和AIN0。
片内ADC具有如下特性:
●带内置采样和保持的10位模数转换模块ADC
●最小转换时间为500ns
●最大采样率为21.5kHz(最小采样周期:
103/21.5=46.51163μs)
图1ADC方框图
模数转换器采用连续逼近式结构,在模数转换器内部用了三个可编程分频器来灵活地产生用户需要的采样率。
整个模数转换过程分为两个周期——采样/保持周期及转换周期,如图2所示。
(1)采样/保持周期是采样/保持电路采集模拟信号的时间,这个周期大于或等于40μs;
(2)转换周期是RC比较网络在一次采样中完成逼近处理并输出A/D转换结果的时间,这需要13个转换时钟周期。
ADC转换时钟的最大频率为2MHz。
图2转换时序图
●模数转换模块接到启动转换信号后,按照设置开始进行相应通道的数据采样转换。
●经过一个采样时间的延迟后,将采样结果放入AD数据寄存器中保存。
●转换结束,设置标志。
●等待下一个启动信号。
由于TMS320VC5509ADSP片内的A/D转换精度是10位的,ADC数据寄存器(16位)的最高位(第15位)表示转换值是否有效(0有效),第14-12位表示转换的通道号,第11-10位为保留字段,低10位为转换数值,所以在保留时应注意取出结果的低10位,再根据高4位进行相应保存。
2.1.2模数转换器的寄存器
模数转换器的寄存器包括ADC控制寄存器(ADCCTL)、ADC数据寄存器(ADCDATA)、ADC时钟分频寄存器(ADCCLKDIV)和ADC时钟控制寄存器(ADCCLKCTL)。
表1模数转换器(ADC)的寄存器
WORD
ADDRESS
REGISTERNAME
DESCRIPTIONRESET
VALUE†
0x6800
ADCCTL[15:
12]
ADCControlRegister
0111000000000000
0x6801
ADCDATA[15:
0]
ADCDataRegister
0111000000000000
0x6802
ADCCLKDIV[15:
0]
ADCFunctionClockDividerRegister
0000000000001111
0x6803
ADCCLKCTL[8:
0]
ADCClockControlRegister
0000000000000111
†Hardwarereset;xdenotesa“don’tcare.”
●ADC控制寄存器(ADCCTL):
发送转换通道号和启动命令,然后循环等待转换结果,最后将结果保存。
表2ADC控制寄存器ADCCTL
位
字段
数值
说明
15
ADCSTART
0
1
转换开始位
无效
转换开始。
在转换结束后,如果ADCSTART位不为高,模数转换器自动进入关电模式
14-12
CHSELECT
000
001
010
011
100-111
选择模拟输入通道
选择AIN0通道
选择AIN1通道
选择AIN2通道(BGA封装)
选择AIN3通道(BGA封装)
所有通道关闭
11-0
Reserved
保留,读时总为0
●ADC数据寄存器(ADCDATA):
只读寄存器,显示AD转换是否正在进行中以及通道号,存放采样数据。
表3ADC数据寄存器ADCDATA
位
字段
数值
说明
15
ADCBUSY
0
1
模数转换标志位:
采样数据已存在
正在转换之中,在ADCSTART置为1后,ADCBUSY变为1,直到转换结束
14-12
CHSELECT
000
001
010
011
100-111
标志采集数据的通道
AIN0通道
AIN1通道
AIN2通道(BGA封装)
AIN3通道(BGA封装)
保留
11-10
Reserved
保留,读时总为0
9-0
ADCDATA
模数转换数据字段。
存放模拟信号的10位转换结果
●ADC时钟分频寄存器(ADCCLKDIV):
显示转换时钟的分频值和采样保持时间。
表4ADC时钟分频寄存器ADCCLKDIV
位
字段
数值
说明
15-8
SAMPTIMEDIV
0-255
采样和保持时间分频字段。
该字段同CONRATEDIV字段一起决定采样和保持周期
ADCSampleandHoldPeriod=
(ADCClockPeriod)×(2×(CONRATEDIV+1+SAMPTIMEDIV))
7-4
Reserved
保留
3-0
CONRATEDIV
0000-1111
转换时钟分频字段,该字段同SAMPTIMEDIV字段一起决定采样和保持周期
ADCConversionClock=(ADCClock)/(2×(CONRATEDIV+1))
●ADC时钟控制寄存器(ADCCLKCTL):
存放CPU时钟分频数,并确定是否将ADC置于低功耗状态。
表5ADC时钟控制寄存器ADCCLKCTL
位
字段
数值
说明
15-9
Reserved
保留
8
IDLEEN
0
1
模数转换器时钟使能位
时钟使能
在运行休眠指令时时钟停止
7-0
CPUCLKDIV
0-255
系统时钟分频字段
ADCClock=(CPUClock)/(CPUCLKDIV+1)
本设计中DSP系统CPU时钟为144MHz。
(1)首先对CPU时钟分频,产生模数转换器时钟(ADCClock),该时钟应尽量运行在较低频率下,以降低功率消耗,在本例中模数转换器时钟是通过对系统主时钟36分频产生的,则此时模数转换器时钟=144MHz/36=4MHz,根据公式
ADCClock=(CPUClock)/(CPUCLKDIV+1)
得出CPUCLKDIV=35;
(2)对模数转换器时钟分频产生模数转换器转换时钟(ADCConversionClock),该时钟最大值为2MHz,为了获得2MHz的模数转换器转换时钟,则需要对模数转换器时钟2分频,由
ADCConversionClock=(ADCClock)/(2×(CONVRATEDIV+1))
得出CONVRATEDIV=0
ADC转换时间=13×(1/ADCConversionClock)
ADC转换时间=13×(1/(2MHz))=6.5μs;
(3)对采样和保持周期进行设置,这个值必须大于或等于40μs
ADCSampleandHoldPeriod=
(1/(ADCClock))×(2×(CONRATEDIV+1+SAMPTIMEDIV))
=(1/(4MHz))×(2×(0+1+SAMPTIMEDIV))
=250ns×(2×(0+1+79))=40μs
SAMPTIMEDIV=79;
(4)ADC整个转换时间(ADCTotalConversionTime)为40μs的采样和保持时间加上6.5μs的转换时间等于46.5μs,采样率=1/46.5μs=21.5kHz。
2.2FIR滤波器设计原理
设计FIR低通。
低通滤波器的幅度响应和性能如图3所示。
图3低通滤波器的幅度响应和性能
ωp为通带截止频率,ωs为阻带截止频率,ωc为截止频率。
δp峰值通带波纹。
δs为最小阻带衰减。
2.3FIR滤波的DSP程序设计
FIR滤波器输出y(n)是输入数据和系数的卷积和。
任何时候进行计算,都需要把数据和相对应的系数相乘,再累加到输出结果中。
FIR滤波器中,输入信号在每个采样时间T过后都发生改变。
也就是说,x(n)将在T时候过后,成为x(n-1),然后是x(n-2),……,直到该数据被抛弃。
本程序设计将采用MATLAB设计的FIR滤波器系数导入到DSP程序中。
对信号的FIR滤波函数可以采用设计FIR滤波的浮点实现C函数和两种方法调用德州仪器的TMS320C55xDSPLIB的FIR滤波函数,实现对A/D采集的输入信号进行滤波处理。
详细FIR滤波程序设计实现方法见DSP原理与应用讲义。
(1)设计FIR滤波的浮点实现C函数
(2)调用德州仪器的TMS320C55xDSPLIB的FIR滤波函数
德州仪器的TMS320C55xDSPLIB是专门针对TMS320C55x系列处理器开发的数字信号处理函数库,它包括50个经过汇编级优化的数字信号处理函数,这些函数可由C调用。
数字信号处理库由头文件dsplib.h,目标库55xdsp.lib(小模式)、55xdspx.lib(大模式),源文件55xdsp.src等组成。
数字信号处理库可以从网站下载,下载的文件是一个压缩文件sprc100.zip(最新版本日期:
Apr-10-2007 ),解压之后生成一个dsplib_2.40.00目录,用户可以把这个目录及目录下的全部内容复制到…\c5500\目录下。
例子程序在examples子目录下。
库函数中主要的数据类型是Q.15(Q15,16位字),其他数据类型还包括Q.31(Q31,32位双字)和Q.3.12(Q12,3位整数,12位小数)。
函数中参数的传递大多采用数组的形式,其中数组成员都在内存中连续保存。
当存放的是复数时,则以实部-虚部的格式存放。
为了节省存储器的空间,源操作数和目的操作数可以使用相同的地址。
如果在函数运行时发生了溢出,函数可以返回溢出标志,但是由于C55x的寄存器为40位,其中有8位的保护位,因此在运算中可能发生了32位溢出但结果仍然正确,在这种情况下,溢出标志代表报警而不是一个错误。
调用DSPLIB库需要包含dsplib.h,并在工程中加入55xdsp.lib或55xdspx.lib库或在工程中加入包含调用函数的汇编源代码的汇编文件。
TMS320C55xDSPLIB的FIR滤波的函数说明如下。
fir2FIR2FilterFIRdirectform(OptimizedtouseDUAL−MAC)
Function
ushortoflag=fir2(DATA*x,DATA*h,DATA*r,DATA*dbuffer,ushortnx,ushortnh)
Arguments
x[nx]Pointertoinputvectorofnxrealelements.
h[nh]Pointertocoefficientvectorofsizenhinnormalorder.Forexample,ifnh=6,thenh[nh]={h0,h1,h2,h3,h4,h5}whereh0residesatthelowestmemoryaddressinthearray.
r[nx]Pointertooutputvectorofnxrealelements.In-placecomputation(r=x)isallowed.
dbuffer[nh+2]Pointertodelaybufferoflengthnh+2
nxNumberofinputsamples
nhThenumberofcoefficientsofthefilter.Forexample,ifthefiltercoefficientsare{h0,h1,h2,h3,h4,h5},thennh=6.Mustbeaminimumvalueof3.Forsmallerfilters,zeropadthecoefficientstomeettheminimumvalue.
oflagOverflowerrorflag(returnedvalue)
Ifoflag=1,a32-bitdataoverflowoccurredinanintermediateorfinalresult.
Ifoflag=0,a32-bitoverflowhasnotoccurred.
Benchmarks基准测试
Cycles†Core:
nx*(3+nh/2)
Overhead:
25
Codesize107
(inbytes)
Assumesalldataisinon-chipdual-accessRAM(providedlinkercommandfilereflectsthose
conditions).
第三章FIR数字低通滤波器的MATLAB设计
本设计选用Kaiser窗设计FIR低通滤波器,采样频率Fs=21500Hz,与AD采集部分计算出的采样频率一致,通带截止频率Fpass=1000Hz,阻带截止频率Fstop=2550Hz,阻带最小衰减Astop=40dB,滤波器如下图:
图3.1低通滤波器图
第四章ADC信号采集和滤波DSP程序设计
4.1采集信号频率
fs=21.5KHz
4.2课设结果截图
4.2.1.AD采集两路信号的时频图
图4.2.1AD采集两路信号时频图
4.2.2.两路信号混合后波形图
图4.2.2Q15定点混合时域图
图4.2.3Q15定点混合频域图
图4.2.4浮点混合时域图
图4.2.5浮点混合频域图
4.2.3.滤波后波形图
图4.3.1Q15定点滤波后时域图
图4.3.2Q15定点滤波后频域图
图4.3.3浮点滤波后时域图
图4.3.4浮点滤波后频域图
第5章结束语
感悟:
通过本次课程设计,我学到了很多知识,同时也认识到自己编程技术的薄弱,我会在以后的学习中加强编程知识的学习。
本次试验中我对CSS软件开发环境有了较深的认识和理解。
通过完整的实验我对本专业的知识体系有了系统性的理解,使我受益匪浅。
滤波器设计中我理解了滤波器参数的实际意义,让我对课程中的知识有了更深入的理解。
试验中遇到不少问题都是在老师和同学的帮助下解决的,谢谢老师的帮助。
参考文献
[1]汪春梅,孙洪波.TMS320C55xDSP原理及应用(第3版).北京:
电子工业出版社,2011.
[2]TexasInstrumentsIncorporated.TMS320VC5507/5509DSPAnalog-to-DigitalConverter(ADC)ReferenceGuide[OL].TexasInstrumentsIncorporated,SPRU586B,2004..
[3]TexasInstrumentsIncorporated.TMS320VC5509AFixed-PointDigitalSignalProcessor.TexasInstrumentsIncorporated,SPRS205K,2008..
[4]DSP原理与应用课程讲义.
[5]瑞泰创新公司.ICETEK–VC5509-A评估板硬件使用指导.北京:
瑞泰创新公司,2006.
[6]瑞泰创新公司.ICETEK-VC5509-A-USB-EDU教学实验系统使用指导.北京:
瑞泰创新公司,2006.
[7]瑞泰创新公司.ICETEK–VC5509-A-USB-EDU教学实验系统软件实验指导.北京:
瑞泰创新公司,2006.
[8]谭浩强.C程序设计(第三版)[M].北京:
清华大学出版社,2005.
[9]TexasInstrumentsIncorporated.CodeComposerStudioHelp.
[10]TexasInstrumentsIncorporated.TMS320C55xDSPProgrammer’sGuide[OL].TexasInstrumentsIncorporated,SPRU376A,2001..
[11]TexasInstrumentsIncorporated.TMS320C55xOptimizingC/C++CompilerUser’sGuide[OL].TexasInstrumentsIncorporated,SPRU281F,2003..
[12]TexasInstrumentsIncorporated.TMS320C55xDSPPeripheralsOverviewReferenceGuide.TexasInstrumentsIncorporated.SPRU317H,2006..
[13]SenM.Kuo,BobH.Lee.Real-TimeDigitalSignalProcessingImplementations,
[14]ApplicationsandExperimentsWiththeTMS320C55x[M].北京:
清华大学出版社,2003.
[15]焦瑞莉等编著.数字信号处理[M].北京:
机械工业出版社.2011.
附录:
程序源代码
main.c
#include"myapp.h"
#include"ICETEK-VC5509-EDU.h"
#include"scancode.h"
voidInitADC();
voidwait(unsignedintcycles);
voidEnableAPLL();
intnADC0[256],nADC1[256];
intmixQ15[256];
floatmixfloat[256];
intFIROUTQ15[256];
intDBBufferQ15[34];
floatBufferfloat[32];
floatFIROUTfloat[256];
constintBhQ15[32]={
98,141,138,57,-117,-360,-604,-747,-671,
-284,451,1490,2700,3888,4838,5366,5366,4838,
3888,2700,1490,451,-284,-671,-747,-604,-360,
-117,57,138,141,98
};
constfloatBhfloat[32]={
0.002999524353,0.004298123531,0.004219199065,0.001731093973,-0.003574917093,
-0.01098363195,-0.01843946427,-0.02278480493,-0.02048166841,-0.008664992638,
0.01377640851,0.04545684904,0.08239003271,0.1186456978,0.1476465911,
0.163765952,0.163765952,0.1476465911,0.1186456978,0.08239003271,
0.04545