DSP的课程设计.docx

上传人:b****5 文档编号:6337011 上传时间:2023-01-05 格式:DOCX 页数:14 大小:576.17KB
下载 相关 举报
DSP的课程设计.docx_第1页
第1页 / 共14页
DSP的课程设计.docx_第2页
第2页 / 共14页
DSP的课程设计.docx_第3页
第3页 / 共14页
DSP的课程设计.docx_第4页
第4页 / 共14页
DSP的课程设计.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

DSP的课程设计.docx

《DSP的课程设计.docx》由会员分享,可在线阅读,更多相关《DSP的课程设计.docx(14页珍藏版)》请在冰豆网上搜索。

DSP的课程设计.docx

DSP的课程设计

DSP的课程设计

1设计目的

1.1了解FFT的原理及算法;

1.2掌握DSP芯片的使用方法。

1.3了解DSP中FFT的设计及编程方法

1.4根据FFT的原理确定其程序流程。

1.5熟悉FFT的调试方法;

1.6学习用FFT对连续信号和时域信号进行谱分析的方法,了解可能出现的分析误

差及其原因,以便在实际中正确运用。

2设计原理

FFT是一种高效实现离散傅里叶变换的算法,把信号从时域变换到频域,在频域分析处理信息。

对于长度为N的有限长序列x(n),它的离散傅里叶变换为:

,称为旋转因子,或蝶形因子。

在x(n)为复数序列的情况下,计算X(k):

对某个k值,需要N次复数乘法、(N-1)次复数加法;

对所有N个k值,需要

次复数乘法和N(N-1)次复数加法。

对于N相当大时(如1024)来说,直接计算它的DFT所作的计算量是很大的,

FFT的基本思想在于:

利用

的周期性即:

对称性:

将原有的N点序列分成两个较短的序列,这些序列的DFT可以很简单的组合起来得到原序列的DFT。

按时间抽取的FFT——DITFFT信号流图如图2.1所示:

图2.1时间抽取的FFT—DITFFT信号流图

FFT算法主要分为以下四步。

第一步输入数据的组合和位倒序

把输入序列作位倒序是为了在整个运算最后的输出中得到的序列是自然顺序。

第二步实现N点复数FFT

第一级蝶形运算;第二级蝶形运算;第三级至log2N级蝶形运算;

FFT运算中的旋转因子

是一个复数,可表示:

为了实现旋转因子

的运算,在存储空间分别建立正弦表和余弦表,每个表对应从0度到180度,采用循环寻址来对正弦表和余弦表进行寻址。

第三步功率谱的计算

X(k)是由实部

和虚部

组成的复数:

;计算功率谱时只需将FFT变换好的数据,按照实部

和虚部

求它们的平方和,然后对平方和进行开平方运算。

第四步输出FFT结果。

3程序流程图

4设计步骤

4.1启动CCS,在CCS中建立一个C源文件和一个命令文件,并将这两个文件添加到工程,再编译并装载程序:

阅读DSP原理及应用中FFT用DSP实现的有关程序。

4.2双击

,启动CCS的仿真平台的配着选项。

选择C5502Simulator。

4.3启动CCS后建立工程文件FFT.pjt

4.4建立源文件FFT.c与链接文件FFT.cmd

4.5将这两个文件加到FFT.pjt这个工程中。

4.6创建out文件

4.7加载out文件

4.8加载数据

4.9观察输入输出波形

输入波形(时域)

输出图形(频域)

5结果分析

用FFT对连续信号和时域信号进行频谱分析,使用CCS的波形观察器观察波形和频谱情况。

 

6设计心得

通过这次课程设计,我获得了很多。

让我对DSP有了更进一步的了解。

对FFT算法有了新的认识,对其原理和基本性质做了回顾,为以后深入的学习奠定了基础。

这次课程设计,我觉得最有意义的就是掌握了一定的DSP系统的软件设计能力。

而且还了解了CCS的组成与基本功能。

掌握了它的安装、配置、基本操作、工程项目的建立和调试等。

希望在以后的应用中能学到更多的知识,并将它们运用到实践中去。

参考文献

[1]邹彦,唐冬,宁志刚.DSP原理及应用.电子工业出版社.

[2]张东亮.DSP控制器原理与应用.机械工业出版社.

 

源程序

.title"rfft_task.asm"

.mmregs

.copy"coeff.inc"

.defrfft_task

sine:

.usect"sine",512

cosine:

.usect"cosine",512

fft_data:

.usect"fft_data",2048

d_input:

.usect"fft_data",2048

fft_out:

.usect"fft_out",1024

;d_input:

.copysindata

STACK:

.usect"STACK",10

K_DATA_IDX_1.set2

K_DATA_IDX_2.set4

K_DATA_IDX_3.set8

K_FLY_COUNT_3.set4

K_TWID_TBL_SIZE.set512

K_TWID_IDX_3.set128

K_FFT_SIZE.set32

K_LOGN.set5

.bssd_twid_idx,1

.bssd_data_idx,1

.bssd_grps_cnt,1

.sect"rfft_prg"

rfft_rask:

SSBXFRCT

STM#STACK+10,SP

STM#sine,AR1

RPT#K_TWID_TBL_SIZE-1

MVPDsine1,*AR1+

STM#cosine,AR1

RPT#K_TWID_TBL_SIZE-1

MVPDcosine1,*AR1+

CALLbit_rev

CALLfft

CALLpower

RET

************************位码倒置程序bit_rev*******************

.asgAR2,REORDERED

.asgAR3,ORIGINAL_INPUT

.asgAR7,DATA_PROC_BUF

.sect"rfft_prg"

;bit_rev:

STM#d_input,ORIGINAL_INPUT

STM#fft_data,DATA_PROC_BUF

MVMMDATA_PROC_BUF,REORDERED

STM#K_FFT_SIZE-1,BRC

RPTBDbit_rev_end-1

STM#K_FFT_SIZE,AR0

MVDD*ORIGINAL_INPUT+,*REORDERED+

MVDD*ORIGINAL_INPUT-,*REORDERED+

MAR*ORIGINAL_INPUT+0B

;bit_rev_end:

RET

;***********************FFT算法子程序fft**********************;

.asgAR1,GROUP_COUNTER

.asgAR2,PX

.asgAR3,QX

.asgAR4,WR

.asgAR5,WI

.asgAR6,BUTTERFLY_COUNTER

.asgAR7,STAGE_COUNTER

.sect"rfft_prg"

fft:

;***********第1级蝶形运算stage1**************:

STM#0,BK

LD#-1,ASM

STM#fft_data,PX

LD*PX,16,A

STM#fft_data+K_DATA_IDX_1,QX

STM#K_FFT_SIZE/2-1,BRC

RPTBDstage_end-1

STM#K_DATA_IDX_1+1,AR0

SUB*QX,16,A,B

ADD*QX,16,A

STHA,ASM,*PX+

STB,*QX+

||LD*PX,A

SUB*QX,16,A,B

ADD*QX,16,A

STHA,ASM,*PX+0

STB,*QX+0%

||LD*PX,A

;stage1_end:

;***********第2级蝶形运算stage2**************;

STM#fft_data,PX

STM#fft_data+K_DATA_IDX_2,QX

STM#K_FFT_SIZE/4-1,BRC

LD*PX,16,A

RPTBDstage2_end-1

STM#K_DATA_IDX_2+1,AR0

SUB*QX,16,A,B

ADD*QX,16,A

STHA,ASM,*PX+

STB,*QX+

||LD*PX,A

SUB*QX,16,A,B

ADD*QX,16,A

STHA,ASM,*PX+

STHB,ASM,*QX+

MAR*QX+

ADD*PX,*QX,A

SUB*PX,*QX-,B

STHA,ASM,*PX+

SUB*PX,*QX,A

STB,*QX

||LD*QX+,B

STA,*PX

||ADD*PX+0%,A

STA,*QX+0%

||LD*PX,A

;stage2_end:

;***********第3级蝶形运算stage3**************;

STM#K_TWID_TBL_SIZE,BK

ST#K_TWID_IDX_3,d_twid_idx

STM#K_TWID_IDX_3,AR0

STM#cosine,WR

STM#sine,WI

STM#K_LOGN-2-1,STAGE_COUNTER

ST#K_FFT_SIZE/8-1,d_grps_cnt

STM#K_FLY_COUNT_3-1,BUTTERFLY_COUNTER

ST#K_DATA_IDX_3,d_data_idx

;stage:

STM#fft_data,PX

LDd_data_idx,A

ADD*(PX),A

STLMA,QX

MVDKd_grps_cnt,GROUP_COUNTER

;group:

MVMDBUTTERFLY_COUNTER,BRC

RPTBDbutterfly_end-1

LD*WR,T

MPY*QX+,A

MACR*WI+0%,*QX-,A

ADD*PX,16,A,B

STB,*PX

||SUB*PX+,B

STB,*QX

||MPY*QX+,A

MASR*QX,*WR+0%,A

ADD*PX,16,A,B

STB,*QX+

||SUB*PX+,B

LD*WR,T

STB,*PX+

||MPY*QX,A

;butterfly_end:

PSHMAR0

MVDKd_data_idx,AR0

MAR*PX+0

MAR*QX+0

BANZDgroup,*GROUP_COUNTER-

POPMAR0

MAR*QX-

LDd_data_idx,A

SUB#1,A,B

STLMB,BUTTERFLY_COUNTER

STLA,1,d_data_idx

LDd_group_cnt,A

STLA,ASM,d_group_cnt

LDd_twid_idx,A

STLA,ASM,d_twid_idx

BANZDstage,*STAGE_COUNTER-

MVDKd_twid_idx,AR0

;fft_end:

RET

;***********************//功率谱计算子程序power//***********************;

.sect"rfft_prg"

;power:

STM#fft_data,AR2

STM#fft_out,AR4

STM#K_FFT_SIZE*2-1,BRC

RPTBpower_end-1

SQUR*AR2+,A

SQURA*AR2+,A

STHA,*AR4+

;power_end:

RET

.end

链接命令文件rfft_task.cmd清单:

vector.obj

rfft_task.obj

-orfft_task.obj

-mrfft_task.map

-erfft_task

MEMORY{

PAGE0:

EPROM:

org=0E000Hlen=1000H

VECS:

org=0FF80Hlen=0080H

PAGE1:

SPRAM:

org=0060Hlen=0020H

DARAM:

org=0400Hlen=0600H

RAM:

org=8000Hlen=1400H

}

SECTIONS{

sine1:

>EPROMPAGE0

cosine1:

>EPROMPAGE0

fft_prg:

>EPROMPAGE0

.bss:

>SPRAMPAGE1

sine:

align(512){}>DARAMPAGE1

cosine:

align(512){}>DARAMPAGE1

d_input:

>RAMPAGE1

fft_data:

>RAMPAGE1

fft_out:

>RAMPAGE1

STACK:

>SPRAMPAGE1

.vectors:

>VECSPAGE0

}

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

当前位置:首页 > 小学教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1