江苏大学dsp课程设计.docx
《江苏大学dsp课程设计.docx》由会员分享,可在线阅读,更多相关《江苏大学dsp课程设计.docx(17页珍藏版)》请在冰豆网上搜索。
江苏大学dsp课程设计
JIANGSUUNIVERSITY
本科生课程设计
DSP课程设计实验报告
基于ICETEK5509实验箱和基2FFT算法的频谱分析
学院名称:
计算机科学与通信工程学院
专业班级:
通信工程
学生姓名:
指导教师姓名:
指导教师职称:
年月
1、设计目的与意义
1、本课程设计与理论课、实验课一起构成《DSP芯片原理与应用》完整课程
体系;
2、针对理论课、实验课中无时间和不方便提及内容和需强调重点进行补充与
完善;
3、以原理算法的实现与验证体会DSP技术的系统性,并加深基本原理的体会。
2、设计要求
1、系统设计要求:
⑴.设计一个以ICETEK5509为硬件主体,FFT为核心算法的频谱分析系统
方案;
⑵.用C语言编写系统软件的核心部分,熟悉CCS调试环境的使用方法,
在CCSIDE中仿真实现方案功能;
⑶.在实验箱上由硬件实现频谱分析。
2、具体要求:
⑴.FFT算法C语言实现与验证
1)参考教材节FFT核心算法在CCS软件仿真环境中建立FFT工
程:
添加main()函数,更改教材中个别语法错误,添加相应的库文
件,建立正确的FFT工程;
2)设计检测信号,验证FFT算法的正确性及FFT的部分性质;
3)运用FFT完成IFFT的计算。
⑵.单路、多路数模转换(A/D)
1)回顾CCS的基本操作流程,尤其是开发环境的使用;
2)参考实验指导和示例工程掌握5509芯片A/D的C语言基本控制流
程;
3)仔细阅读工程的源程序,做好注释,为后期开发做好系统采集前端
设计的准备。
⑶.系统集成,实现硬件频谱分析
1)整合前两个工程,实现连续信号的频谱分析工程的构建;
2)参考A/D转换示例和DSP系统功能自检示例完成硬件连接,并测试
开发系统运行效果;
3)基于现有系统,对于实时频谱分析给出进一步开发设计和系统改良
方案。
三、课程设计原理
1、DSP应用系统构成:
注:
一般的输入信号首先进行带限滤波和抽样,然后进行模数(A/D)转换,将信号变成数字比特流。
根据奈奎斯特抽样定理,对低通信号模拟,为保持信号的不丢失,抽样频率必须至少是输入带限信号的最高频率的2倍,工程上为带限信号最高频率的3-5倍。
2、快速离散傅里叶变换(FFT)的基本原理:
频谱分析系统
FFT是一种快速有效地计算离散傅里叶变换(DFT)的方法。
它是根据离散傅里叶变换的奇、偶、虚、实等特性,对离散傅里叶变换的算法进行改进获得的。
因为需要N次复数乘法和N-1次复数加法,所以计算全部X(k)
,共需要
次复数乘法和N(N-1)次复数加法。
实现一次复数乘法需要四次实数乘法和两次实数加法,一次复数加法需要两次实数加法,因此直接计算全部X(k)共需要4
次实数乘法和2N(2N-1)次实数加法。
为减少运算量,提高运算速度,就必须改进算法。
FFT算法就是不断地把长序列的DFT分解成几个短序列的DFT,并利用
的周期性和对称性来减少DFT的运算次数。
具有以下固有特性:
(1)
的周期性:
(2)
的对称性:
(3)
的可约性:
另外,
。
利用
的上述特性,将x(n)或X(k)序列按一定规律分解成短序列进行运算,这样可以避免大量的重复运算,提高计算DFT的运算速度。
算法形式有很多种,但基本上可以分为两大类,即按时间抽取(DecimationInTime,DIT)FFT算法和按频率抽取(DecimationInFrequency,DIF)FFT算法。
N=8的按时间抽取FFT
N=8的按频率抽取FFT
实数序列的FFT:
反FFT运算可以表示为:
式中,
是时域信号
的傅里叶变换。
比较
和
可以看出,通过下列修改,我们可以用FFT算法来实现反FFT:
⑴增加一个归一化因子
;
⑵将
用其复共轭
代替。
由于第二点需要修改符号,因此FFT程序还不能不加修改的来计算反FFT。
因为
可见,求
的反FFT可以分为以下三个步骤:
⑴取
的共轭,得
;
⑵求
的FFT,得
;
⑶取
的共轭,并除以
,即得
。
采用这种方法可以完全不用修改FFT程序就可以计算反FFT。
3、单路、多路模数转换实验原理(AD)
⑴TMS320VC5509A模数转换模块特性:
—带内置采样和保持的10位模数转换模块ADC,最小转换时间为500ns,
最大采样率为。
—2个模拟输入通道(AIN0-AIN1)。
—采样和保持获取时间窗口有单独的预定标控制。
⑵模数转换工作过程:
—模数转换模块接到启动转换模块后,开始转换第一通道的数据。
—经过一个采样时间的延迟后,将采样结果放入转换结果寄存器保存。
—转换结束,设置标志。
—等待下一个启动信号。
⑶模数转换的程序控制:
模数转换相对于计算机来说是一个较为缓慢的过程。
一般采用中断方式启动转换或保存结果,这样在CPU忙于其它工作时可以少占用处理时间。
设计转换程序应首先考虑处理过程如何与模数转换的时间相匹配,根据实际需要选择适当的触发转换手段,也要能及时地保存结果。
由于TMS320VC5509ADSP芯片内的A/D转换精度是10位,转换结果的低10位为所需数值,所以在保留时应注意将结果的高6位去除,取出低10位有效数字。
⑷实验程序流程图:
开始
初始化CPU时钟、EMIF、AD采样时钟
启动AD0通道采集(连续
256次)存入缓冲区nADC0
启动AD1通道采集(连续256次)存入缓冲区nADC1
实验程序流程图
四.实验程序和流程图:
1、FFT
⑴FFT程序:
#include<>
structcompx{floatreal,imag;};
structcompxEE(structcompxb1,structcompxb2)eal=xin[i].;
xin[ip].imag=xin[i].;
xin[i].real=xin[i].real+;
xin[i].imag=xin[i].imag+;}
v=EE(v,w);
}}}
return;
}
/*****************mainprograme********************/
#include<>
#include<>
#include<>
#include<>
floatresult[257];
floatinput[257];
structcompxs[257];
intNum=256;
constfloatpp=;
main()
{
inti=1;
for(;i<257;i++)
{
eal=sin(pi*i/128);
s[i].real=cos(2*pp*i/256);
s[i].imag=0;
input[i]=sin(2*pp*i/256);
}
FFT(s,Num);
for(i=1;i<257;i++)
{
result[i]=sqrt(pow(s[i].real,2)+pow(s[i].imag,2));
}
开始
输入xin,N
m=log2N
变址运算
l=1
结束
输出频谱图
l++
第l次蝶形运算
l<=m
}
⑵FFT流程图
3、AD
⑴AD程序
#include""
#include""
#include""
#include""
#include""
structcompxs0[257],s1[257];
floatinput0[256],input1[256],output0[256],output1[256];
#definepi3.
voidInitADC();
voidwait(unsignedintcycles);
voidEnableAPLL();
unsignedintnADC0[256],nADC1[256];
main()
{inti;
unsignedintuWork;
EnableAPLL();
SDRAM_init();
InitADC();
PLL_Init(132);
while
(1)
{for(i=0;i<256;i++)
{ADCCTL=0x8000;eal=nADC0[i];eal;
s0[i+1].imag=0;eal=nADC1[i];eal;
s1[i+1].imag=0;eal,2)+pow(s0[i+1].imag,2));eal,2)+pow(s1[i+1].imag,2));}
asm("nop");4f1f1f1f1f4F1f1f
6-3-1
个工程整合后:
六、课程设计心得
本次DSP课程设计针对理论课、实验课中无时间和不方便提及内容和需强调重点进行补充与完善,以原理算法的实现与验证体会DSP技术的系统性,并加深了我对基本原理的体会。
在这几天中,我学到了如下几点:
⑴通过对FFT算法进行分析研究,从基础深入研究和学习,掌握FFT
算法的关键;
⑵通过对DSP芯片工作原理以及开发环境的回顾,在DSP芯片上实现对信
号的实时频谱分析;
⑶这次课程设计,虽然不能做到完全理解掌握,但依然让我加深了对各门专
业课之间的联系;
⑷通过与同组成员的互相沟通,不仅使各自的知识得到了扩充,而且从中得
到了很多的启示,增强了团队合作能力;