资源描述
课 程 设 计
设计题目: 快速傅里叶变换程序设计
系别: 自控系
班级: 测控本091班
学号: 2009308120
学生姓名: 刘礼旭
指导教师: 吕勇军
职称: 教授
起止日期:2012 年 7 月 2 日起——2012年7月6日止
沈阳工程学院
课程设计任务书
课程设计题目: 快速傅里叶变换程序设计
系 别 自控系 班级 测控本091班
学生姓名 刘礼旭 学号 2009308120
指导教师 吕勇军 职称 教授
课程设计进行地点: 实训F430
任 务 下 达 时 间: 12年 7月2日
起止日期: 12年7月2日起——至12年7月6日止
教研室主任 吕勇军 2012年 7月 2 日批准
快速傅里叶变换程序设计
1.设计主要内容及要求;
要求:1)掌握DSP A/D转换器使用方法。
2)研究FFT原理以及利用DSP实现的方法。
3)编写A/D采样和FFT程序,调试,观察结果。
2.对设计论文撰写内容、格式、字数的要求;
(1).课程设计论文是体现和总结课程设计成果的载体,一般不应少于3000字。
(2).学生应撰写的内容为:中文摘要和关键词、目录、正文、参考文献等。课程设计论文的结构及各部分内容要求可参照《沈阳工程学院毕业设计(论文)撰写规范》执行。应做到文理通顺,内容正确完整,书写工整,装订整齐。
(3).论文要求打印,打印时按《沈阳工程学院毕业设计(论文)撰写规范》的要求进行打印。
(4). 课程设计论文装订顺序为:封面、任务书、成绩评审意见表、中文摘要和关键词、目录、正文、参考文献。
3.时间进度安排;
顺序
阶段日期
计 划 完 成 内 容
备注
1
7月2日
教师讲解题目,学生查阅相关资料
2
7月3日
确定FFT算法以及程序流程
3
7月4日
编写程序
4
7月5日
调试程序
5
7月6日
撰写论文,程序验收
沈 阳 工 程 学 院
DSP技术 课程设计成绩评定表
系(部): 自控系 班级: 测控本091班 学生姓名:刘礼旭
指 导 教 师 评 审 意 见
评价
内容
具 体 要 求
权重
评 分
加权
分
调研
论证
能独立查阅文献,收集资料;能制定课程设计方案和日程安排。
0.1
5
4
3
2
工作
能力
态度
工作态度认真,遵守纪律,出勤情况是否良好,能够独立完成设计工作。
0.2
5
4
3
2
工作
量
按期圆满完成规定的设计任务,工作量饱满,难度适宜。
0.2
5
4
3
2
说明
书的
质量
说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。
0.5
5
4
3
2
指导教师评审成绩
(加权分合计乘以12)
分
加权分合计
指 导 教 师 签 名:
年 月 日
评 阅 教 师 评 审 意 见
评价
内容
具 体 要 求
权重
评 分
加权
分
查阅
文献
查阅文献有一定广泛性;有综合归纳资料的能力。
0.2
5
4
3
2
工作
量
工作量饱满,难度适中。
0.5
5
4
3
2
说明
书的
质量
说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。
0.3
5
4
3
2
评阅教师评审成绩
(加权分合计乘以8)
分
加权分合计
评 阅 教 师 签 名:
年 月 日
课 程 设 计 总 评 成 绩
分
摘要
数字信号处理 (Digital Signal Processing,DSP)是一门应用十分广泛的学科。数字信号处理是指利用计算机技术,以数字形式对信号进行采集、变换、滤波、估值、增强、压缩、识别等处理,以得到符合人们需要的信号形式。数字信号处理器也称为DSP芯片,是一种用于进行数字信号处理运算的微处理器,其主要功能是实时快速地实现各种数字信号处理算法及各种复杂控制算法。
TMS320C2000系列DSP集微控制器和高性能DSP的特点于一身,具有强大的控制和信号处理能力,能够实现复杂的控制算法。TMS320C2000系列DSP片上整合了Flash存储器、快速的A/D转换器、增强的CAN模块、事件管理器、正交编码电路接口、多通道缓冲串口等外设,此种整合使用户能够以很便宜的价格开发高性能数字控制系统。
傅立叶变换是一种将信号从时域变换到频域的变换方式,是声学、语音、电信和信号处理等领域中一种重要的分析工具。离散傅里叶变换(DFT)是连续傅里叶变换在离散系统中的表现形式,但由于DFT的计算量很大,因此在很长一段时间内其应用受到很大的限制。快速傅里叶变换(FFT)是离散傅里叶变换的一种高效运算方法。FFT使DFT的运算大大化简,运算时间一般可以缩短1至2个数量级,FFT的出现大大提高了DFT的运算速度,从而使DFT得到广泛的应用。
快速傅里叶变换(Fast Fourier Transform)是实现离散傅里叶变换(DFT)的一种快速高效的运算方法,是数字信号处理中最为重要的工具之一。它使DFT的运算效率提高1~2个数量级,为数字信号处理技术应用于各种高速信号的实时处理创造了良好的条件,从而大大推动了数字信号处理技术的发展。
关键词 DSP;微处理器;离散傅里叶变换(DFT);FFT
目录
课程设计任务书 I
DSP技术 课程设计成绩评定表 III
摘要 IV
1 设计任务描述 1
1.1设计题目 1
1.2设计主要内容及要求 1
1.2.1设计目的 1
1.2.2基本要求 1
1.2.3发挥部分 1
2 设计思路 2
2.1 功能实现 3
2.1.1 位置倒码 3
2.1.2 蝶距 3
2.1.3 旋转因子 4
3 设计流程图 5
4 各部分程序设计及参数计算 6
4.1 驱动程序的配置 6
4.2 程序的初始化 8
4.3 主程序 8
4.4 旋转因子的软件实现 10
4.5 FFT初始化 10
4.6 按时间抽取法的FFT程序 11
4.7 功率谱的计算实现 12
4.8 倒序运算函数 12
4.9 定时器2中断子程序及AD转换子程序 13
5 工作过程分析 15
5.1 程序调试 15
5.1.1 在CCS下调试程序步骤 15
5.1.2 输入信号时域波形 15
5.1.3 输出信号功率谱 16
5.2 功率谱的计算 18
6实验系统介绍 19
6.1 SEED-DTK2812 的原理框图 19
6.2 实验箱整体配置 19
6.3 实验箱特点 20
小结 21
致 谢 22
参考文献 23
附录1 源程序清单 24
附录2 程序运行图 28
IV
快速傅里叶变换程序设计
1 设计任务描述
1.1设计题目
快速傅里叶变换程序设计。
1.2设计主要内容及要求
1.2.1设计目的
(1)掌握DSP芯片的使用方法。
(2)根据FFT的原理确定其程序流程。
(3)学习用FFT对连续信号和时域信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便在实际中正确运用。
1.2.2基本要求
(1)研究FFT原理以及利用DSP实现的方法。
(2)编写FFT程序。
(3)调试程序,观察结果。
1.2.3发挥部分
用AD采集信号,可以对多种信号进行FFT变换。
2 设计思路
在进行设计程序之前首先要弄清楚快速傅里叶变换(FFT)的变换原理,然后根据快速傅里叶变换的方法,编写相对应的程序来实现其功能。所以快速傅里叶变换算法的原理和实现成为了整个设计的核心部分。
傅立叶变换是一种将信号从时域到频域的变换形式,是声学、语音、电信和信号处理等领域中的一种重要分析工具。离散傅立叶变换(DFT)是连续傅立叶变换在离散系统中的表现形式,由于DFT 的计算量很大,因此在很长时间内其应用受到很大的限制。快速傅立叶变换(FFT)是离散傅立叶变换的一种高效运算方法。FFT 使DFT 的运算大大简化,运算时间一般可以缩短一至两个数量级,FFT 的出现大大提高了DFT 的运算速度,从而使DFT 在实际应用中得到广泛的应用。在数字信号处理系统中,FFT 作为一个非常重要的工具经常使用,它甚至成为DSP 运算能力的一个考核因素。
对于有限长离散数字信号{x[n]},0≦n≦N-1,其离散谱{x[k]}可以由离散付氏变换(DFT) 求得。DFT 的定义为
可以方便的把它改写为如下形式:
即称为蝶形因子式旋转因子。
对于旋转因子来说,有如下的对称性和周期性:
对称性:
周期性:
FFT 就是利用了旋转因子的对称性和周期性来减少运算量的。
FFT 算法将长序列的DFT 分解为短序列的DFT。N 点的DFT 先分解为两个N/2 点的DFT,每个N/2 点的DFT 又分解为两个N/4 点的DFT 等等,最小变换的点数即基数,基数为2 的FFT 算法的最小变换是2 点DFT。
一般而言,FFT 算法分为时间抽选(DIT)FFT 和频率抽选(DIF)FFT 两大类。时间抽取FFT 算法的特点是每一级处理都是在时域里把输入序列依次按奇/偶一分为二分解成较短的序列;频率抽取FFT 算法的特点是在频域里把序列依次按奇/偶一分为二分解成较短的序列来计算。
DIT 和DIF 两种FFT 算法的区别是旋转因子出现的位置不同,,(DIT)FFT 中旋转因子在输入端,(DIF)FFT 中旋转因子在输出端,除此之外,两种算法是一样的。在本设计中实现的是基2 的时间抽取FFT 算法,具体的实现过程可参见源程序及其注释。
首先定义N=128,当然也可以更改程序,将N值改为256或1024等等,前提是相应的数组大小也得更改。然后用模数转换器采集信号(正弦信号,方波信号等等),最后将采集到的信号进行FFT变换即可。
2.1 功能实现
2.1.1 位置倒码
当进行原位运算时,发现当运算完成后,FFT的输出X(k)按正常顺序排列在存储单元中,即按X(0),X(1),…,X(7)的顺序排列,但是这时输入x(n)却不是按自然顺序存储的,而是按x(0),x(4), …, x(7)的顺序存入存储单元,看起来好像是“混乱无序”的,实际上是有规律的,称之为倒位序。
当用二进制表示顺序时,它正好是“位码倒置”的顺序。例如,原来的自然顺序应是x(1)的地方,现在放着x(4),用二进制码表示这一规律时,则是在x(0 0 1)处放着x(1 0 0),x(0 1 1) 处放着x(1 1 0),即将自然循序的二进制码位倒置过来,第一位码变成最末位码,这样倒置以后的顺序正是输入所需要的顺序,其结果与按时间抽样算法FFT流程图中的输入顺序是一致的。
需要注意当进行原位运算时,输入输出序列为倒位序的关系,若不为原位运算,则这种关系不一定成立。在实际运算中,一般直接将输入数据x(n)按码位倒置的顺序排好输入很不方便,总是先按自然顺序的存储,然后进行FFT的原位计算。
表2-1 码位倒置顺序
自然顺序
二进码表示
码位倒置
倒位序
0
000
000
0
1
001
100
4
2
010
010
2
3
011
110
6
4
100
001
1
5
101
101
5
6
110
011
3
7
111
111
7
2.1.2 蝶距
设N=,则整个运算流图中包含L级蝶形运算,每一级则有N/2个蝶形单元。蝶距等于每个蝶形单元两个输入(出)节点的序列号,即第m级蝶形单元的蝶距为:。
2.1.3 旋转因子
由FFT算法原理过程可知,若=,则共有级蝶形运算,各级蝶形运算中旋转因子分别如下:第级的旋转因子为(=0,1,…,);第-1级的旋转因子为(=0,1,…,);…;第一级的旋转因子为(=0,1,…,)。由此可见, 第级蝶形运算中旋转因子为,=0,1,…,。
开始
3 设计流程图
程序初始化
开中断
初始化ADC
等待中断发生
是否发生中断?
否
AD采样
是
否
采样结束否?
将采集到的数据进行FFT变换
是
计算功率谱
图形输出
结束
29
4 各部分程序设计及参数计算
4.1 驱动程序的配置
1.双击桌面上的Setup CCStudio v3.3。“Clear”原有的设备驱动程序配置。
2.根据DSP的型号选择相应的TI原装驱动程序,根据DSP的型号选择相应的TI驱动程序,本实验箱采用SEED_DEC2812,故选择F2812 XDS510 Emulator。如4.1图所示。
图4.1 目标板选择
3.点中F2812 XDS510 Emulator驱动后,鼠标右键,在弹出的菜单中点击Properties。设置完成后如下图所示。
4. 点击Next,作如下图所示的设置。
5. 保存并启动CCS调试界面。
4.2 程序的初始化
#include "math.h"
#define PI 3.1415926
#define N 128 //采样次数
#include "DSP28_Device.h"
#include "comm.h"
interrupt void ISRTimer2(void); //声明定时器2中断子程序
interrupt void ad(void); //声明ad中断子程序
unsigned int Ad_data[128]={0};
unsigned int convcount = 0;
volatile unsigned int adconvover =0;
unsigned int i;
//void InitForFFT(void); //FFT初始化函数
void finv(int N1,float *xr,float *xi); //倒序运算函数,对输入序列倒序
int INPUT[N],DATA[N];
float fWaveR[N],fWaveI[N],w[N];
float sin_tab[N],cos_tab[N]; //正余弦函数表
int Mum; //Mum为蝶形运算的级数
程序初始化部分的详细信息见上面所列程序。
4.3 主程序
void main(void)
{
for(i=0;i<N;i++)
{
sin_tab[i]=sin(PI*2*i/N);//建立正余弦函数表
cos_tab[i]=cos(PI*2*i/N);
}
/*初始化系统*/
InitSysCtrl();
/*关中断*/
DINT; //禁止可屏蔽中断
IER = 0x0000; //禁止CPU中断
IFR = 0x0000; //清CPU所有中断标志
/*初始化PIE中断*/
InitPieCtrl();
/*初始化PIE中断矢量表*/
InitPieVectTable();
//初始化cputimer
InitCpuTimers();
/*设置中断服务程序入口地址*/
EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.TINT2 = &ISRTimer2; //取ISRTimer2地址赋给中断
//向量TINT2(CPU-Timer2)
PieVectTable.ADCINT = &ad; //取ad地址赋给中断向量ADCINT
EDIS; // This is needed to disable write to EALLOW protected
//registers
/*开中断*/
IER |= M_INT1;//ADC中断 ,使能第一组中断!!
//已经定义"#define M_INT1 0x0001"
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
adconvover=0;
DINT;
/*设置CPU*/
ConfigCpuTimer(&CpuTimer2, 150, 22);
StartCpuTimer2(); //已经定义 "#define StartCpuTimer2()
//CpuTimer2Regs.TCR.bit.TSS = 0"
/*开中断*/
IER |= M_INT14; // 使能第14组中断(CPU定时器2(RTOS))!!
//已经定义"#define M_INT14 0x2000" ; IER是CPU中断使能寄存器
EINT;
InitAdc();
for(;;){ //等待AD采样结束!!!
if (adconvover==1){ //adconvover==1表示AD采样
// 结束!!!见ad中断子程序
for(i=0;i<128;i++){
INPUT[i]=Ad_data[i];}
for(i=0;i<N;i++) //i<128
{
fWaveR[i]=INPUT[i];
fWaveI[i]=0.0;
w[i]=0.0;
}
Mum=(int)(0.5+log(N)/log(2)); //N=2^Mum
FFT(fWaveR,fWaveI);
for(i=0;i<N;i++)DATA[i]=w[i];//功率谱
}
adconvover=0; }
}
一般而言,编写一个能运行在操作系统上的程序,都需要一个主函数。主函数意味着建立一个独立进程,且该进程成为了程序的入口,对其它各函数进行调用,当然其它被调用函数也可以再去调用更多函数,这样整个程序的运行轨迹就像一种栈,有时我们称之为调用栈。
主函数既是程序的入口,又是程序的出口。由于主函数肩负着入口和出口的重任,所以最好不要把太多的细节方面的逻辑直接放在主函数内,这样不利于维护和扩展。主函数应该尽量简洁,具体的实现细节应该封装到被调用的子函数里面去。
在这个主程序中,可以调用后续的FFT初始化函数程序,时间抽取法FFT程序,以及倒序运算函数程序,是整个程序的中转站。
4.4 旋转因子的软件实现
for(m=1;m<=Mum;m++)
{
B=(int)(pow(2,m-1)+0.5); //B=2^(m-1)
for(j=0;j<B;j++) //每级需要进行B种蝶形运算
{S=j*(int)(pow(2,Mum-m)+0.5);
for(k=j;k<=N-1;k+=(int)(pow(2,m)+0.5))
{
X=Xr[k+B]*cos_tab[S]+Xi[k+B]*sin_tab[S];//采用循环寻址方式对正弦
Y=Xi[k+B]*cos_tab[S]-Xr[k+B]*sin_tab[S];//表和余弦表进行寻址
Xr[k+B]=Xr[k]-X;
Xi[k+B]=Xi[k]-Y;
Xr[k]=Xr[k]+X;
Xi[k]=Xi[k]+Y;
}
}
}
旋转因子是复数,可表示为:
(4-1)
由式(4-1)可以看出旋转因子的实部为余弦函数,虚部为正弦函数。为了获得FFT运算中需要的全部旋转因子,需要分别存储正弦表和余弦表,且每个表长度为,对应于0°~180°,同时,采用循环寻址方式对正弦表和余弦表进行寻址。
4.5 FFT初始化
void InitForFFT() //FFT初始化函数,建立正余弦函数表
{
int i;
for(i=0;i<N;i++)
{
sin_tab[i]=sin(PI*2*i/N);//建立正余弦函数表
cos_tab[i]=cos(PI*2*i/N);
}
}
为了获得FFT运算中需要的全部旋转因子,需要分别存储正弦表和余弦表,且每个表长度为,对应于0°~180°。
4.6 按时间抽取法的FFT程序
void FFT(float Xr[N],float Xi[N]) //时间抽取法FFT程序,要求采样
//点数N为2的整数幂次方
{ //Xr[],Xi[]分别为输入序列的实
//部和虚部
int S,B; //S为旋转因子的幂数,B为蝶形运算输入数据的距离,也即各
//旋转因子的个数
int m,j,k;
float X,Y;
finv(N,Xr,Xi); //倒序运算函数,对输入序列倒序
for(m=1;m<=Mum;m++)
{
B=(int)(pow(2,m-1)+0.5); //B=2^(m-1)
for(j=0;j<B;j++) //每级需要进行B种蝶形运算
{S=j*(int)(pow(2,Mum-m)+0.5);
for(k=j;k<=N-1;k+=(int)(pow(2,m)+0.5))
{ //结果的实部和虚部分别存储在原实部和虚部位置
X=Xr[k+B]*cos_tab[S]+Xi[k+B]*sin_tab[S];
Y=Xi[k+B]*cos_tab[S]-Xr[k+B]*sin_tab[S];
Xr[k+B]=Xr[k]-X;
Xi[k+B]=Xi[k]-Y;
Xr[k]=Xr[k]+X;
Xi[k]=Xi[k]+Y;
}
}
}
在这个时间抽取法FFT程序中,要求采样点数N为2的整数幂次方,每级需要进行B种蝶形运算,每种蝶形运算在某一级中需要进行N/pow(2,m)次蝶形运算,结果的实部和虚部分别存储在原实部和虚部位置。
对于任何一个2的整数幂N=2M,总是可以通过M次分解最后完全成为2点的DFT运算。这样的M次分解,就构成从x(n)到X(k)的M级运算过程。从上面的
流图可看到,每一级运算都由N/2个蝶形运算构成。因此每一级运算都需要 次
复乘和N次复加(每个结作加、减各一次),这样,经过时间抽取后M级运算总共需要的运算:
复乘
复加 N
当然,实际情况与这个数字稍有出入,因为 这几个系数实际上都不用乘法运算,因此在上面N=8的例子中,实际上只有两个系数W 及W 是需要乘法运算的。用时间抽取法所需的计算量,不论是复乘还是复加都与Nlog2N成正比,而直接运算时则与N2成正比。
例N=2048,N2=4194304,(N/2)log2N=11264,N2/[(N/2)log2N]=392.4倍。FFT显然要比直接法快得多。
4.7 功率谱的计算实现
for(m=0;m<N/2;m++)
{
w[m]=sqrt(Xr[m]*Xr[m]+Xi[m]*Xi[m]); //计算功率谱
}
为了便于观察FFT的运算结果,需要求出信号的频谱。经过第三级到最后一级蝶形运算之后,已经得到式(4-2)所示:
(4-2)
故功率谱可以通过式(4-3)计算得到:
(4-3)
通过软件仿真,可以观察到输入信号的时间波形和频谱波形以及输出信号的功率谱波形。
4.8 倒序运算函数
void finv(int N1,float *xr,float *xi)
{
int m,n,N2,k; //m为正序数;n为倒序数;k为各个权值;N2为最高位的权值
float T; //临时变量T
N2=N1/2; //最高位加1相当于十进制加上最高位的权N1/2
n=N2; //第一个倒序值
for(m=1;m<=N1-2;m++) //第0个和最后一个不倒序
{
if(m<n) //为了避免再次调换,只需对m<n的部分调换顺序
{
T=xr[m];xr[m]=xr[n];xr[n]=T;
T=xi[m];xi[m]=xi[n];xi[n]=T;
}
k=N2; //最高位权值
while(n>=k)
{
n=n-k; //次高位位1,继续上下进位,满2置0
k=(int)(k/2+0.5); //向下权值依次比上级减半
}
n=n+k; //得到下一倒序值
}
}
倒序运算函数finv(N1,Xr,Xi),对输入序列倒序,N1为序列长度,Xr[],Xi[]分别为输入序列的实部和虚部。
倒序原理:倒序数的加1是在最高位加1,满2向次高位进1,最高位变0,依次往下。
从当前倒序值可求下一倒序值。
4.9 定时器2中断子程序及AD转换子程序
interrupt void ad(void)
{
IFR=0x0000; //CPU级中断标志寄存器IFR=0,即无CPU级中断请求
PieCtrl.PIEACK.all=0xffff;//PIEACK置1,禁止外部中断向CPU发起中断
//请求
if(adconvover==0){
Ad_data[convcount] = AdcRegs.RESULT0; // 将结果寄存器中的AD
//转换结果放到Ad_data数组中
convcount++; //convcount的初始值为0
}
if (convcount==(128)) //即convcount=128,即Ad_data包含采样值的最
//后一位为Ad_data[128]
{
convcount=0;
adconvover=1;//接满标志 ,即AD采样结束
}
}
interrupt void ISRTimer2(void)
{
AdcRegs.ADC_ST_FLAG.bit.INT_SEQ1_CLR=1; //清除INT SEQ1标志
//位,SEQ1转换结束时INT_SEQ1中断标志位置1
AdcRegs.ADCTRL2.bit.SOC_SEQ1=1; //启动SEQ1,触发模数转换!
}
通过“ConfigCpuTimer(&CpuTimer2, 150, 22);”设定定时器2产生中断的时间。当进入定时器2中断子程序后,启动SEQ1,触发模数转换,进入AD中断子程序。
5 工作过程分析
5.1 程序调试
5.1.1 在CCS下调试程序步骤
(1)点击CCS图标启动CCS。
(2) 打开fft.pjt工程。将已编好的汇编源文件FFT.c及其他相关源文件和命令文件2812.cmd等文件添加到工程中编译,链接产生FFT.out文件。
(3)下载FFT.out文件到目标板中。
(4)显示示输入信号的时域波形。首先,通过设置实验箱的函数信号发生器,使AD采集波形为0通道的标准正弦波。
(5)显示输入信号的频域波形。
(6)显示信号功率谱。由配置文件可知,经程序计算得到的信号功率谱放在DATA数组中。显示经程序计算得到的信号功率谱。
(7)改变输入信号,如改为方波,三角波等等。并重复(4)(5)(6)三个步骤。
5.1.2 输入信号时域波形
当输入信号为正弦波时,其时域波形如图5.1所示。
当输入信号为方波时,其时域波形如图5.2所示。
当输入信号为三角波时,其时域波形如图5.3所示。
图5.1 标准正弦波的时域波形
图5.2 标准方波的时域波形
图5.3 标准三角波的时域波形
5.1.3 输出信号功率谱
输出信号功率谱体现了信号的能量。当输入信号为正弦波时,其功率谱如图5.4所示。当输入信号为方波时,其功率谱如图5.5所示。当输入信号为三角波时,其功率谱如图5.6所示。
图5.4 标准正弦波的功率谱
图5.5 标准方波的功率谱
图5.6 标准三角波的功率谱
5.2 功率谱的计算
对信号进行傅里叶变换,取sin部分为实部,cos部分为虚部,直接算实部和虚部的平方和并开根号,得到的就是功率谱分布。功率信号的功率谱反应了信号功率随频率分布的特点,功率谱是信号先自相关再作FFT变换。
6实验系统介绍
为了更好地配合学校的理论教学,达到理论与实践完美的结合,合众达公司总结了 10 多年在 DSP 领域中的开发与应用经验,推出了双 DSP 教学系统 SEED-DTK 教学实验箱系列产品。它设计新颖、独特,为师生提供了一个完整的教学实验平台,为学生加速学习与系统掌握DSP 的开发与应用提供了强有力的手段。SEED-DTK 教学实验箱采用模块化设计理念,涵盖了 TI 所有的主流 DSP 系列:C2000、C3X、C5000 和 C6000 系列。其中 SEED-DTK实验箱中的主控板 SEED-DECxxxx 采用统一的系统结构、模块结构、机械结构和标准的总线接口以及相同的物理尺寸,实验箱上的主控板可以替换为不同系列 SEED-DECxxxx,以
适应不同院系在同一实验箱上开展不同的实验内容,大大节省了校方的设备经费。
SEED-DTK(DSP Teaching Kit)是一套可以满足大学本科、研究生和教师科研工作的综合实验设备。SEED-DTK 是合众达在总结以往产品的基础上,以独特的多 DSP结构、强大的 DSP 主板功能、丰富的外围实验电路、精心设计的实验程序、精湛的产品工艺形成的高性能产品。
6.1 SEED-DTK2812 的原理框图
6.2 实验箱整体配置
SEED-DTK2812 实验箱由以下几部分构成:
1. SEED-DEC2812 实验箱 DSP 基本系统
u 高性能 DSP:TMS320F2812,主频 150MHz
u 外扩 SRAM,最大容量为 512K×16 位,基本配置为 256K×16 位
u 512 字节的 EEPROM+RTC 实时时钟
u 16 路 AD 输入
u 4 路 DA 输出
u 12 路 PWM 输出,6 路捕捉输入
u 双路 URAT 接口,接口标准为 RS232/RS422/RS485,可配置
u 符合 USB2.0 标准的高速 Host 端接口
u 1 路 CAN 总线接口,符合 CAN2.0 协议
2. SEED-Mbo
展开阅读全文