dsp实验报告材料实时信号谱分析报告new.docx

上传人:b****2 文档编号:3275316 上传时间:2023-05-05 格式:DOCX 页数:12 大小:437.19KB
下载 相关 举报
dsp实验报告材料实时信号谱分析报告new.docx_第1页
第1页 / 共12页
dsp实验报告材料实时信号谱分析报告new.docx_第2页
第2页 / 共12页
dsp实验报告材料实时信号谱分析报告new.docx_第3页
第3页 / 共12页
dsp实验报告材料实时信号谱分析报告new.docx_第4页
第4页 / 共12页
dsp实验报告材料实时信号谱分析报告new.docx_第5页
第5页 / 共12页
dsp实验报告材料实时信号谱分析报告new.docx_第6页
第6页 / 共12页
dsp实验报告材料实时信号谱分析报告new.docx_第7页
第7页 / 共12页
dsp实验报告材料实时信号谱分析报告new.docx_第8页
第8页 / 共12页
dsp实验报告材料实时信号谱分析报告new.docx_第9页
第9页 / 共12页
dsp实验报告材料实时信号谱分析报告new.docx_第10页
第10页 / 共12页
dsp实验报告材料实时信号谱分析报告new.docx_第11页
第11页 / 共12页
dsp实验报告材料实时信号谱分析报告new.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

dsp实验报告材料实时信号谱分析报告new.docx

《dsp实验报告材料实时信号谱分析报告new.docx》由会员分享,可在线阅读,更多相关《dsp实验报告材料实时信号谱分析报告new.docx(12页珍藏版)》请在冰点文库上搜索。

dsp实验报告材料实时信号谱分析报告new.docx

dsp实验报告材料实时信号谱分析报告new

DSP课程实验报告

——利用DSP实现实时信号谱分析

 

学院:

电子信息工程学院

指导老师:

高海林

学生:

 

 

1、设计任务书

在信息处理中,可以对信号进行时域分析,也可以对信号进行变换域分析,在频域对信号进行频谱分析是最常见的分析之一。

利用DSP可以实时地对信号进行频谱分析—快速傅立叶变换(FFT)。

本设计要求利用DSP的DMA方式进行信号采集和信号输出,同时对外部输入的信号进行频谱分析。

基本部分:

(1)设计谱分析算法,或调用DSPLIB中FFT函数,实现对信号的频谱分析。

(2)在DMA中断服务程序中,实现信号的实时谱分析

(3)利用CCS信号分析工具分析信号的频谱成分,对FFT算法结果进行验证。

发挥部分:

(1)信号频谱数据实时输出到Headphone输出接口,并在示波器上进行显示;

(2)在实验板的Linein输入端接入正弦信号,分左右声道分别采集,并分别进行频谱分析;

(3)利用CCS的Profiler工具计算FFT算法所需要的时间,并根据实时性要求进行必要的算法优化。

2、设计容

(1)掌握CCS的安装、设置,工程的建立、工程设置、编译运行和调试方法

(2)编写C语言程序实现设计要求,并在CCS集成开发环境下调试通过,实现设计所要求的各项功能。

(3)按要求撰写课程设计报告。

3、设计方案

3、1整体思路

首先利用DSP的DMA方式对外部信号进行实时采集,外部模拟信号先进行A/D转换,利用MCBSP的接收寄存器接收数据,并将数据存放到DSP存储区中。

设计FFT算法或调用DSPLIB中的rfft或cfft频谱分析函数,对信号进行快速傅立叶变换。

频谱数据利用DMA方式送到D/A转换器转换为模拟信号在示波器上显示。

3.2 信号的实时采集与传输

DMA控制器可以在不影响CPU的情况下完成数据的传输,因此数据传输速度快,在要求信号实时采集和处理的系统中常采用DMA方式进行信号传输。

本设计中输入信号经过A/D转换成数字信号后,将DMA通道4的源地址设为串口的接收寄存器,利用DMA通道4进行传输;而将DMA通道5的目的地址设置为串口的发送寄存器,将信号频谱利用DMA5通道进行传输,此步骤需要对AIC23、McBSP、DMA通道4和DMA通道5进行初始化配置。

处理流图如图3.2.1所示。

图3.2.1信号实时采集和频谱分析流程图

3.3FFT算法 

FFT(Fast Fourier Transformation),即为快速傅氏变换,是离散傅氏变换(DFT)的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。

 

(1)离散傅里叶变换DFT 

N点DFT的正变换公式为:

 

式中,WN=e-j*2π/N,称为旋转因子或蝶形因子。

从DFT的定义可以看出,在x(n)为复数序列的情况下,对某个k值,直接按

(1)式计算X(k)只需要N次复数乘法和(N-1)次复数加法。

因此,对所有N个k值,共需要N2次复数乘法和N(N-1)次复数加法。

对于一些相当大有N值(如1024点)来说,直接计算它的DFT所需要的计算量是很大的,因此DFT运算的应用受到了很大的限制。

 

(2) 快速傅里叶变换FFT 

旋转因子WN 有如下的特性:

对称性:

 WNk+N/2=-WNk  

周期性:

WNn(N-k)=WNk(N-n)=WN-nk 

利用这些特性,既可以使DFT中有些项合并,减少了乘法积项,又可以将长序列的DFT分解成几个短序列的DFT。

FFT就是利用了旋转因子的对称性和周期性来减少运算量的。

 

一般而言,FFT算法分为按时间抽取的FFT(DIT FFT)和按频率抽取的FFT(DIF FFT)两大类。

DIF FFT算法是在时域将每一级输入序列依次按奇/偶分成2个短序列进行计算。

而DIF FFT算法是在频域将每一级输入序列依次奇/偶分成2个短序列进行计算。

两者的区别是旋转因子出现的位置不同,得算法是一样的。

在DIF FFT算法中,旋转因子出现在输入端,而在DIFFFT算法中它出现在输入端。

假定序列x(n)的点数N是2的幂,按照DIFFFT算法可将其分为偶序列和奇序列。

偶序列:

x(2r)=x1(r) 

奇序列:

x(2r+1)=x2(r)  其中:

r=0,1,2,„,N/2-1   则x(n)的DFT表示为:

式中,x1(k)和x2(k)分别为x1(r)和x2(r)的N/2的DFT。

由于对称性,WNk+N/2=-WNk。

因此,N点DFT可分为两部分:

 

前半部分:

x(k)=x1(k)+WkNx2(k)            

(1) 

后半部分:

x(N/2+k)=x1(k)-WkNx2(k)  k=0,„,N/2-1  

(2) 

从式

(1)和式

(2)可以看出,只要求出0~N/2-1区间x1(k)和x2(k)的值,就可求出0~N-1区间x(k)的N点值。

以同样的方式进行抽取,可以求得N/4点的DFT,重复抽取过程,就可以使N点的DFT用上组2点的 DFT来计算,这样就可以大减少运算量。

基2DIFFFT的蝶形运算如图3.3.1所示。

设蝶形输入为X1(k)和X2((K),输出为x(k)和x(N/2+K),则有 

   x(k)=x1(k)+WkNx2(k)              (6)         x(N/2+k)=x1(k)-WkNx2(k)            (7) 

在基数为2的FFT中,设N=2M,共有M级运算,每级有N/2个2点FFT蝶形运算,因此,N点FFT总共有MN/2个蝶形运算。

  

      图3.3.1 基2 DIF FFT的蝶形运算 

例如:

基数为2的FFT,当N=8时,共需要3级,12个基2 DIT FFT的蝶形运算。

其信号流程如图3.3.2所示。

图3.3.2

从图可以看出,输入是经过比特反转的倒位序列,称为位码倒置,其排列顺序为x(0),x(4),x

(2),x(6),x

(1),x(5),x(3),x(7),输出是按自然顺序排列,其顺序为x(0),x

(1),x

(2),x(3),x(4),x(5),x(6),x(7). 

在本设计中,信号的频谱通过FFT算法得出,FFT算法可以自己编写,也可以调用55xdsp.lib库rfft或cfft函数。

调用库函数的需要在工程中添加库文件55xdsp.lib,并且在程序中包含头文件dsplib.h。

调用的时候入口参数是时域信号地址,返回处理后的FFT信号,注意返回值不包含求模过程,而是交替返回实部和虚部。

本实验采用自己编写的基2频率抽取法计算FFT。

3.4“ping-pong”存储方式 

Ping-pong存储方式在存开辟四块存储区,分别是gBufferRcvPing、gBufferRcvPong、gBufferXmtPing、gBufferXmtPong,其中前两块用于DMA接收,后两块用于DMA发送。

目的是将正在接收或发送的区域与正在处理的区域分离开。

这个过程通过变量“pingpong”控制,以进入中断时pingpong=0为例,进入终端后将其值改为1,将DMA接收目的区改为gBufferRcvPong,处理gBufferRcvPing的数据,并将处理的数据发往gBufferXmtPing,而同时DMA发送源是gBufferXmtPong,这样发送和接收都不冲突。

本实验中gBufferRcvPing/gBufferRcvPong接收到的数据是左右声道交替的,因此要将接收回来的数据根据左右两声道分成两个数组存放,再将每一个声道的实部和虚部存到DDataBuffer[i].real/DDataBuffer[i].imag当中,做256点FFT变换后求模值得到幅度谱,再将经过防溢出处理的数据存入gBufferRcvPing/gBufferRcvPong中。

重复循环上述过程即可实现实时信号谱的分析。

4、实验步骤 

(1)新建工程,正确设置工程选项(build option),设置工程的存储器模式、头文件路径及库文件路径等,注意工程存放路径不能有中文名;  

(2)编写工程所需的所有实验源程序,实验程序包括c文件、h文件、cmd文件、GEL文件、中断向量s55文件等,并添加进工程; 

(3)将仿真器等硬件正确连接上,注意音频输入输出方向是否正确。

将音频立体声输入J5接电脑耳机输出口,将J7接电脑语音录入口; 

(4)按F7键编译连接生成obj文件(无错误时),若程序有错误则查看错误信息,双击错误处光标自动跳转到错误处,直到排除所有错误; 

(5)点击file菜单下load program载入程序,将程序下载在DSP芯片中,点击“run”或按键F5全速运行; 

(6)使用变量观察图形观察窗等工具观察分析输入输出信号是否与预期效果相同; 

(7)系统调试、代码优化等; 

(8)确定最终方案,撰写设计报告。

5、实验结果及分析

图1为左右声道分别输入频率为2kHz和5kHz的正弦信号,示波器输出图像:

图1

图2为信号源输入情况显示:

图2

图3和图4分别是ccs工具得出的结果,左声道输入为2kHz,右声道输入为5kHz,采样频率为32kHz,左右声道分别采256个点:

32k/2k=1632k/5k=6.4

图3

图4

图5显示的是ccs同时对捕获到的左右两声道信号进行FFT处理,图中显示的两个峰值分别代表左右声道的频率,坐标轴0-255表示左声道,256-512表示右声道,由图可知左声道的频率大概为2kHz,右声道的频率大概为5kHz,基本和输入频率相吻合。

图5

图7和图8分别为左右声道输入对应频域波形图:

图7

图8

从实验结果来看还有一些失真,但总体实现了预期效果。

6、实验中遇到的问题及解决方法 

(1)实验运行程序的过程中,改变输入信号的频率,示波器时而有图像时而无显示,只显示杂波。

只有重新加载程序才可以输出波形。

此实验的进行与硬件密切相关,要保证硬件状态完好。

 

(2)在创建工程时遇到困难,总是在步骤完成后不能运行程序。

最后只能先在老师原有的工程文件下进行代码粘贴并改错,才可以运行成功。

(3)对于DMA的理解不够透彻,对中断的设置不够熟练,导致实验初始阶段出现了一系列的理解问题,经查阅相关资料即组讨论后解决了问题。

(4)开始运行代码时发现示波器和GRAPH中的显示总有一个是倒过来的,后来修改代码,发现溢出部分的写法有问题,修改后一切正常。

7、实验感想 

祖健文:

首先,我觉得DSP是一门比较难的课程,可是这门课程的理论学时却只有短短的8学时,而且老师上课讲课速度比较快,我也没有认真做什么笔记,所以,理论课上基本只学到了CCS一些非常基本的使用方法,DSP的原理掌握的又是皮毛中的皮毛,这都导致后来的课程设计中理论知识的储备严重不足。

这次的课程设计,基本就是实践中去验证一些老师课上或课件中的一些知识,比如我们所选的题目是“利用DSP实现信号的实时谱分析”,其实这算是一个比较简单的题目,理论上就是将例程中的DMA实时信号采集程序和FFT谱分析程序结合在一起就可以。

虽然说起来简单,但实际操作中确实问题重重,比如在新建工程时由于头文件和BuildOption中的配置不符而出现的编译错误;还有实验箱和线材的问题,有时会导致实验始终没有结果。

再后来调试程序,发现DMA程序运行的并不是很稳定,有时可能会不输出任何数据,而ViewGraph中却显示一切正常,有时甚至只能重新启动CCS才能解决问题。

关于程序的设计,我们本打算按照实验的要求,在DMA中断服务程序中调用dsplib中的rfft函数进行信号的谱分析,但经过多次修改后,仍没有实现rfft的正确调用。

后来我们利用老师所给的BJTU_FFT例程中的fft256函数,通过修改入口参数,成功实现了对输入信号的FFT计算。

本次实验对我来说,难度是挺大的,但是通过和小组成员的交流和沟通,确实弄清楚了很多问题。

所以我觉得本次实验收获最大的就是和小组成员间通力合作,发现问题,分析问题,解决问题;并且在每一次的交流、探讨、实践中,加深了对DSP以及程序的理解,并且最终实现了任务要求。

吴楚婷:

这次的DSP实验做的题目是信号实时谱分析,其实最开始没有打算选择这个题目,因为自己对于信号与系统还有DSP课程的掌握程度不够好,不过也正是因为这样才在这次实验中收获了更多的东西,通过实践验证了理论的正确性,也同时重新温习了一下理论知识,算是一举两得。

还有关于DMA的部分是我在学习微机原理的时候就非常好奇的一部分,通过这次实验熟悉了DMA的实际工作方式和流程,很是收益。

CCS对于我们来说都是一款完全没有接触过的开发软件,以前也没有任何关于DSP处理的经验,所以之前的很多时间都花在看老师的课件和参考相关资料上面,只有先把基础的部分搞懂才能做后面的发挥。

虽然每次看都会多懂很多知识,不过要等到所有的都弄清楚再开始显然是不可能的,因为知识太多又太陌生,所以后来就索性摸索着来了,边做边熟悉功能和流程。

其实我们组去实验室的次数并不算多,不过每次的效率都比较高,彼此之间相互讨论也都能发现新问题或者解决问题,因此进度还算是比较快的。

但是我们实验中仍然遇到了很多问题,关于代码的问题暂且不论,因为后来基本上都解决或者避开了,但是实验箱的问题却是困扰我们很久的一个大问题,我们发现当程序运行的时间过久实验箱就无常工作。

虽然这可能和我们操作不当还有程序的不稳定性相关,不过无形之中耽误了很多时间,当然也不一定完全是硬件的问题,很可能模拟示波器的程序也不是很稳定造成了这样的局面,希望老师能给以后的组提一些能够避免或者减少出现这些问题的概率,让我们多花点时间在优化程序上而不是不停地重启。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2