学士学位论文基于dsp的简易频谱分析仪设计.docx
《学士学位论文基于dsp的简易频谱分析仪设计.docx》由会员分享,可在线阅读,更多相关《学士学位论文基于dsp的简易频谱分析仪设计.docx(30页珍藏版)》请在冰豆网上搜索。
![学士学位论文基于dsp的简易频谱分析仪设计.docx](https://file1.bdocx.com/fileroot1/2023-1/31/78c9f215-31e0-4b0d-97b9-dd4682c37d52/78c9f215-31e0-4b0d-97b9-dd4682c37d521.gif)
学士学位论文基于dsp的简易频谱分析仪设计
基于DSP的简易频谱分析仪设计
摘要
我们对一个信号的认识只在时间域是远远不够的,所以还要在频域去认识和分析它。
在电子测量中,测量网络阻抗特性以及传输特性是经常遇到的问题问题,其中,幅频特性、增益和衰减特性、相频特性等是属于传输特性内的。
它很大程度方便了调整,校准被测网络及排除故障。
本此设计制作了一个简易频谱分析仪从而可以更直观的看到信号的特性。
为了实现这一目标,我们需要利用快速傅里叶变换(FFT)来实现对信号的频谱分析。
由于DSP可以处理比较复杂的算法本次设计采用FFT算法通过DSP分析显示输入波形的频率值。
关键词:
频谱分析DSPFFT显示频率
TheSimpleSpectrumAnalyzerDesignBasedonDSP
Abstract
Wecan’tknowasignal only inthetimedomain .Itisfarfrom enough,sowe alsorecognizeand analyzeit inthefrequencydomain. Inthe electronic measurement,impedance andtransmissioncharacteristics ofthenetwork areoftenencounteredinthemeasurementproblems;Transmissioncharacteristicsincludethegaincharacteristics,attenuationcharacteristics,amplitude-frequencycharacteristicandphasefrequencycharacteristics.Itprovidesagreatconveniencefortheadjustmentofthenetworkundertest,calibrationandtroubleshooting.
Wedesignasimplespectrumanalyzertoseethecharacteristicsofthesignalmoreintuitively.Inordertoachievethisgoal,weneedtousethefastFouriertransform,thatisFFTwhichmakespectrumanalysisofthesignal.SincetheDSPcansolvethemorecomplexalgorithmsthanothers.Hence,wedesignedasimplespectrumanalyzerusingtheFFTalgorithmbyDSPtoshowthefrequencyoftheinputwaveform.
Keywords:
SpectrumAnalyzer;DSP;FFT;FrequencyDisplay
第1章概述
1.1引言
DSP的2种理解:
广义理解:
digitalsignalprocessing——数字信号处理
狭义理解:
digitalsignalprocessor——数字信号处理器
数字信号处理的概念是利用计算机或者专用的处理设备,对连续的数字信号进行各种数学运算,最终得到我们想要的分析结果。
而快速傅立叶变换是其运算基础。
如今是崭新的数字化时代,DSP已然成为数字化的不可或缺的元素,广泛的应用于社会各领域。
数字信号处理器(DSP芯片)应运而生,使数字信号处理理论与实际很好的连接,并促进了深入发展数字信号处理技术,拓宽应用领域。
数字信号处理以广泛的学科作为理论基础,包含极广泛的内容。
当中包含,语音处理、通信等方方面面,涵盖面很大。
具体实现数字信号处理的方法:
(1)在通用PC上利用软件或在系统中加专用加速处理机来实现。
来实现。
(2)用DSP实现。
DSP的软件和硬件各项资源对于数字信号处理非常适用,因此可用于各种复杂算法;
(3)用CPLD/FPGA实现。
1.2定点DSP的数据格式
在定点处理器(例如TMS320F2812)之中,数据采用的是定点表示法,整数小数均可表示。
在定点处理器中,决定数据精度和其动态范围的是格式和字长,当然,它也是决定DSP处理器的成本、功耗以及编程难度的因素之一。
定点DSP的两种基本表示方法:
整数表示和小数表示。
整数表示方法应用:
非信号处理,例如地址计算、控制操作等
小数表示方法应用:
数字和各种信号处理算法计算。
定点数常使用Q表示法。
处理小数时须由程序员确定小数点所处位置,称为数的定标。
由于是人为决定,因此大小和精度可以表示多种范围。
例如:
0010000000000000b=0.25,用Q15表示
0010000000000000b=8192,用Q0表示
总结来说,Q值越大,精度越高,但数值范围越小;Q值越小,数值范围越大,但精度就越低。
1.3TMS320F2812DSP介绍
1.3.1TMS320F2812概述
F28x系列是TI公司生产的32位定点数字信号处理器,其具有丰富的外设资源。
相对于单片机来说,它能实现更为复杂的控制算法。
适合于控制应用,不同于其他芯片,该系列芯片含FLASH,异步串口。
同时,它有数字信号处理能力和事件管理能力以及嵌入式控制能力,且由于可以用较低的成本实现开发、控制最优化,因此被广泛使用。
1.3.2TMS320F2812芯片结构及性能描述
1、最大可达150MHz的系统时钟频率;
2、F2812具有8级流水操作,指令时间为6.67ns;
3、F2812内有4M的程序空间和4M的数据空间;
4、片上外设资源多,包含串口外围设备接口、事件管理器、16通道12位ADC、控制器局域网络CAN总线、串行通讯接口SCA,SCB、多通道缓冲串行接口以及JTAG;
第2章总体设计思路
2.1系统指标
本系统设计基本要求完成简易频谱分析仪,组成框图如图2.1
图2.1简易频谱分析仪组成框图
1、扫频信号发生:
采用DSP2812产生正弦波信号,扫频信号频率范围为100-10kHz。
2、陷波网络设计:
陷波网络中心频率约为3kHz。
3、FFT设计,显示幅频特性曲线。
2.2系统方案
本设计目标为采用TMS320F2812DSP芯片设计简易频谱分析仪。
该分析仪由四部分模块组成,分别为:
信号发生器模块、DAC转换模块、陷波网络模块、信号调理模块、AD采集模块、FFT计算处理模块。
2.2.1信号发生器模块
信号发生模块由DSP芯片来完成,产生100Hz—10kHz的扫频信号。
DSP产生正弦波的方法有如下几种:
(1)利用DSP内置的PWM模块产生SPWM波形,之后连接低通滤波器发出正弦波;
(2)利用泰勒级数展开法经过DSP计算得出正弦波;
(3)利用查表法直接将正弦波形的表存入数组中;
以上三种产生波形的方法都可以实现正弦波的发生,但是相比之下第一种较为复杂;第二种方法虽然占用存储空间较少,但是运算量比较大,占用CPU资源较多;查表法一种很直接的方法,它的原理是根据需要提前算好所有可能出现的正弦函数值,按照顺序编制为数据表,当用时只需要根据输入查出对应值。
虽然查表法占用存储空间较多,但是占用CPU资源少,而且根据正弦表的数组长度和数据位数可以改变其分辨率及精确度。
因此本次设计采用查表法产生正弦波,之后正弦波将以数字量的形式发送至IO口,通过数模转换产生模拟量的正弦波。
而正弦表可以通过例如正线波信号发生器来这类的软件生成,本设计产生的是输出点数为100点,输出精度为8位的正弦波。
2.2.2DAC转换模块
首先,先确定正弦波的分辨率、精度等各项参数以方便确定DAC型号及设计电路。
本次设计利用8位分辨率,一个周期内取100点的正弦表实现正弦波发生。
因为本次设计要求最高可采集到10kHz的正弦波,因而有:
100点*10kHz=1MHz(2-1)
(2-1)表明了对DA的要求是它的采样率必须达到1MHz以上才可以实现10kHz的正弦波发生;因为是8位分辨率且通过IO口的8位来输出,因而需要一个8位并口的DA实现。
总结来说,就是选取DA满足以下两个条件:
1、8位并行输入;
2、采样率在1MHz以上;
经过查阅各种资料后确定采用DAC0832来完成将数字正弦波转化为模拟正弦波的部分。
2.2.3陷波网络模块
利用Sallen_Key电路结构设计二阶有源带阻网络,简单而且比较容易实现。
2.2.4信号调理模块
利用分压的办法改变输入信号的幅度,后接一个电压跟随器,目的是使其输出信号电压控制在0—3v以内,以避免直接输入DSP中的AD输入引脚而烧坏芯片,同时避免后边的电路对信号产生影响。
2.2.5AD采集模块
AD采集模块可有以下两种设计方案:
(1)利用外接的AD通过硬件连接的方式对模拟量的波形进行转化,将转化后的数字量通过IO输入DSP中。
例如使用16位并行输出ADS8364连接F2812。
(2)利用F2812包含的12位,16通道的ADC通过软件设置的方式将模拟量波形转化为数字量。
上述两种方案中,由于第二种可直接通过软件方式利用DSP包含的模数转换
模块采集模拟量的波形而不用外接芯片节省成本并且充分利用了DSP的资源,因而在精度不要求很高的情况下更加适用,因而采用第二种方案。
2.2.6FFT计算处理模块
因为F2812芯片上专门有指令用于FFT操作,使得在F2812芯片上实现FFT算法速度更快且更为方便用户使用,所以直接采用即可。
第3章具体设计
3.1工程建立
本设计的集成开发环境为CCS3.1,CCS提供了配置、建立、调试、跟踪和分析程序的工具,便于编制和测试实时、嵌入式信号处理程序,可提高开发进程速度,提高工作效率。
支持如下所示的开发周期的所有阶段。
图3.1CCS的开发周期各阶段
开发工具包括:
C编译器、汇编器、连接器等。
库文件(.lib),头文件(.h),源文件(.c)和CMD文件(.CMD)组成一个完整的工程,缺一不可。
1、头文件:
用于其他文件的引用、程序中的函数、参数、变量和一些宏单元的定义,和库函数配合使用。
所以在使用库时须用相应头文件说明。
文件格式为“.h”,编译过程中自动添加进入工程,无需手动添加。
一般情况下头文件不需修改便可直接使用。
2、库文件:
C语言系统库rts2xx.lib。
系统库包含了编译器的所有功能:
初始化C语言环境,标准C的函数库,设置堆栈等,还可以添加其他的库文件。
将函数封装,编译供自己或其他用户调用。
其优点是库文件编译后看不到源代码,保密性好;同时便于维护。
文件格式为“.lib”。
3、源文件:
有且须有一个含main()函数的C语言源程序文件。
main()函数在系统库初始化后掌握控制权。
文件格式为“.c”。
一个工程必不可少的几个源文件有:
(1)DSP28_GlobalVariableDefs.c:
定义全局变量,例如寄存器,中断向量表等内容。
(2)主函数
(3)DSP28_PieCtrl.c:
PIE初始化函数(与中断相关)。
(4)DSP28_PieVect.c:
PIE中断向量表定义及其初始化。
(5)DSP28_SysCtrl.c:
系统初始化,以保证F2812正常工作。
4、cmd文件:
DSP系统中有大量的各种存储器,cmd文件所描述的是开发工程师对物理存储器的管理、分配及使用情况。
cmd文件的作用是定位DSP代码。
由于DSP的编译器的编译结果是未定位的,DSP无法定位执行代码,同时用户设计的DSP系统的配置也不尽相同,因此要自己定义代码的安装位置。
cmd文件就是在编译源程序、生成机器代码的过程中发挥作用。
cmd文件包含:
(1)存储器的资源清单
(2)存储器的资源分配
3.2正弦波发生模块
想要实现发出扫频正弦波,必须要有三个步骤:
(1)通用定时器定时;
(2)定时时间到后进入中断程序,输出数字正弦波;
(3)输出正弦波通过通用IO口输出给后续电路;
其软件流程图如下:
图3.2扫频信号发生流程图
3.2.1定时器模块
F2812共有3个32位的CPU定时器,CPU定时器Timer1和Timer2用于实时操作系统(如DSPBIOS),Timer0可以被用户所用。
CPU定时器结构较简单,工作模式较单一,同时一旦启动就会循环往复工作,因此使用非常方便,所以很适合为用户程序提供一个基准时钟实现软件各模块的同步。
图3.3CPU定时器内部结构
从上图可以看出,CPU定时器可以分为16位的分频器及32位的计数器。
可将计数周期先存到PRDH:
PRD(周期寄存器)中,当计数器启动时,PRDH:
PRD的值载入TIMH:
TIM(计数器)中进行减计数,当值减为0时,发出中断请求信号,同时计数值重新装载到周期寄存器中。
定时器初始化主要程序如下:
voidInitCpuTimers(void)
{CpuTimer0Regs.PRD.all=150;//初始化定时器0周期寄存器CpuTimer0Regs.TIM.all=0;//清零定时器0的计数器
CpuTimer0Regs.TPR.all=0;//初始化定时器0预定标计数器使其分频系数为sysclkout/1,即150MHz;
CpuTimer0Regs.TPRH.all=0;
CpuTimer0Regs.TCR.bit.TSS=1;//停止定时器0的运行
CpuTimer0Regs.TCR.bit.TRB=1;//将周期寄存器PRD中的值装入计数器寄存器TIM中,
//重装载控制位写1,控制分频系数和计数初值的装载
CpuTimer0Regs.TCR.bit.SOFT=1;//将soft和free设为1,在遇到调试断点
CpuTimer0Regs.TCR.bit.FREE=1;//定时器0将继续运行
CpuTimer0Regs.TCR.bit.TIE=1;//使能定时器0中断,若计数器递减到0同时tie位为1,定时器发出中断请求
}
3.2.2中断模块
F2812的中断管理共分为外设级、PIE级和CPU级。
由于多种外设集成于芯片内部,会产生许多外设中断,因为CPU无法处理所有的CPU级中断请求,因而F2812有一个专门用于处理判定外设中断的中断扩展控制器(PIE)。
中断仲裁机制确定中断服务程序的位置的原理是根据PIE向量表存放的每个中断服务程序的地址来确定。
1、外设级
一当外设有中断事件,对应外设的中断标识位就会置1,若对应中断使能位设1,那么外设中断的请求信号INTx.y就可送至PIE控制器。
若外设的中断被禁止输入进来,那么外设中断标志将一直保持为1,直到软件清0。
2、PIE级
PIE的中断都有一个PIEIFRx.y(中断标志位)和一个PIEIERx.y(中断使能位),
另外,每个CPU中断组都有一应答位PIEACKx。
若PIE来了中断请求,相应中断标志位PIEIFRx.y就会置1,若PIEIERx.y也为1,那么PIEACKx就可决定CPU可否响应此中断。
3、CPU级
CPU级中断标志寄存器一旦在中断请求送入后标志位就会置1。
在IER(CPU中断使能寄存器)中相应位置1,且INTM(全局中断屏蔽位)为0的情况下时,CPU会进入中断。
实现中断主要语句如下:
DINT;//禁止中断
EINT;//使能INTM(全局中断)
ERTM;//使能DBGM(全局实时中断)
EALLOW;//有些寄存器受到写保护,要写它就先用此语句禁止写保护,写自由
PieVectTable.TINT0=&cpu_timer0_isr;
EDIS;//使能写保护
PieCtrl.PIEIER1.bit.INTx7=1;//PIE级中断使能
IER|=M_INT1;//使能CPU中断
进入中断子程序如下:
interruptvoidcpu_timer0_isr(void)
{CpuTimer0Regs.TCR.bit.TIF=1;
ReloadCpuTimer0();
time++;
if(time==fre)
{
time=0;
GpioDataRegs.GPADAT.all=sin_da[ncount++];
if(ncount>=100)
{
ncount=0;
round++;
if(round==1000/fre)
{
round=0;
fre++;
}
if(fre>=100)fre=1;
}
}
PieCtrl.PIEACK.all=PIEACK_GROUP1;
}
这段程序中ncount用来一个周期内计送出的点数,当到达一个周期的100点时,ncount变为0;fre为从100Hz到10KHz的100个不同频率档,time是用于定时器进入中断次数的计数,当time计数值=fre的值时会向IO送出正弦表的值,同时time清零;round为不同频率档下波形的不同显示次数,其设置为1000/fre,即当round当前值为1000除以当前的fre时,说明1000/fre个当前频率下的正弦波已经全部送出,fre自动加1,round变为0。
3.2.3GPIO模块
GPIO就是通用IO口。
嵌入式系统中常有很多的简单外部设备/电路,对它们的控制,使用GPIO(通用可编程IO接口)即可。
F2812包含有56个多功能引脚,其第一功能是作为通用意义数字I/O口(GPIO),为了使用通用I/O,我们需要对GPIO进行相应的设置。
为了将数字量的正弦波输出,设计需要通过设置GPIO实现,具体语句如下:
voidInitGpio(void)
{EALLOW;
GpioMuxRegs.GPAMUX.all=0x0000;//将gpio设置为通用i/o口
GpioMuxRegs.GPADIR.all=0x00ff;//设置gpio为输出
GpioMuxRegs.GPAQUAL.all=0x0000;//窗宽为0,无抗噪声能力
EDIS;
}
3.3DAC转换模块
DAC0832是采用CMOS工艺实现。
它是8位分辨率的数模转换集成芯片。
与微处理器完全兼容。
这个DA转换器应用很广泛因为它相比其他芯片来说价格低、接口电路简单、转换控制容易。
DAC0832包含有8位DAC寄存器、8位输入寄存器、8位D/A转换器,它的采样频率高达5MHz,因而可以实现对需要采样率高于1MHz的正弦波的采集。
图3.4DA模块电路图
如图所示,DA模块采用的是0832器件手册上的应用例程。
图中Q1的作用是将电流输出型信号改为电压输出型信号;Q2的作用是由于输出是反向的电压,因此此处是起到反相器的作用。
3.4陷波网络模块
本次设计采用的是有源带阻滤波器。
本有源带阻滤波器主要通过双T网络实现。
电阻电容组成外围网络和LM358芯片一起实现功能。
通过电容电阻的谐振作用实现帯阻作用,通过358芯片实现放大信号的作用。
图3.5陷波网络模块电路图
图3.5所示,RF和Rf(即R4和R5)选择了稍大一些的电阻值是为了使
电路更稳定,这里使用的分别是160K和200K。
选择较小电容也是为了使电路运行更稳定,这里取C=1pF.带入fo=1/2πRC可得R的值约为27K,考虑到实际连接电路的问题,减少元件的个数,取R1=R2=56K。
其各项参数如下:
R1=R2=R=56k;R3=27k
C1=C2=1Nf;C3=2.2nF
R5=Rf;R4=RF;
中心频率fo=1/2πRC=2.78k
带宽 f2-f1=2(2-Kf)=0.4kHz
增益 Kf=1+RF/Rf=1.8
Q点 Q=1/2(2-Kf)=0.1
图3.6陷波网络模块电路图
使用multsim中的波特图实现了仿真,如图3.6所示。
3.5信号调理电路模块
其电路图如下图所示:
图3.7信号调理电路
图中R6以及R7用于分压,使信号电压降低在DSP所要求的0—3v内,后面利用LM358制成的电压跟随器,以“隔离”前后级之间的影响。
3.6AD采集模块
AD采集模块实现信号采集需要如下两个步骤:
(1)利用事件管理器中的定时器定时决定采样频率;
(2)设置ADC模块;
其软件流程图如下所示,
图3.8信号调理电路
3.6.1事件管理器定时设置
在AD采集过程中,利用事件管理器EV的通用定时器实现采样频率的确定。
事件管理器包括EVA和EVB,有通用定时器1、2、3、4,每个定时器有如下特点:
:
16位TxCNT(定时器增/减计数器)。
16位TxCMPR(定时器比较寄存器)。
16位TxPR(定时器周期控制寄存器)。
16位TxCON(定时器控制寄存器)。
一个TxCMP用于通用定时器比较输出。
定时器按照寄存器TxCON中的TMODE1,TMODE0位确定的工作模式工作分别是停止/保持模式、连续增计数模式、定向增/减计数模式还是连续增/减计数模式,较为常用的是第二种和第三种。
本设计采用的是连续增计数模式,下图为其工作模式图:
图3.9通用定时器连续增计数模式
当计数器和周期寄存器在一个时钟周期匹配时,中断标志位会置为1。
在外设中断未被屏蔽的情况下将产生外设中断请求。
此周期中断通过GPTCONA开启ADC,中断标志置1,同时AD启动信号送至AD。
具体实现语句如下:
EvaRegs.T1CMPR=0xfd11;//给比较寄存器赋值
EvaRegs.T1PR=0xFFFF;//给周期寄存器赋值
EvaRegs.GPTCONA.bit.T1TOADC=1;//EVA中的通用定时器1中断产生AD启动
EvaRegs.T1CON.all=0x1042;//递增模式,x/1分频,内部时钟,使能比较,使用自己的周期,立即启动定时器计数
3.6.2ADC设置模块
ADC(模数转换器)有16个12位通道,可通过软件设置成两个8通道,或一个16通道,本次设计因为只需要输入一个通道,所以两种方式都没有什么影响。
ADC包含一个转换器,两个排序器。
排序器在级联模式下变为单16通道。
转换完成后结果存放在ADCRESULT里。
它比普通单采样转换分辨率高是因为自动排序器允许相同通道多次转换,因而可以实现过采样算法。
图3.10ADC模块原理框图
其原理如图3.9所示。
排序器分别有SEQ1和SEQ2,也可级联为SEQ。
其作用是自动排序多个转换。
若只需要一个通道输入信号,16个通道任意一个都可选择。
转换之后结果就存于相应的ADCRESULTn(结果寄存器)中。
AD有顺序采样以及同时采样两种工作模式。
利用对C