基于DSP的快速傅立叶变换FFT的实现汇编语言Word格式.docx

上传人:b****3 文档编号:15975419 上传时间:2022-11-17 格式:DOCX 页数:21 大小:133.31KB
下载 相关 举报
基于DSP的快速傅立叶变换FFT的实现汇编语言Word格式.docx_第1页
第1页 / 共21页
基于DSP的快速傅立叶变换FFT的实现汇编语言Word格式.docx_第2页
第2页 / 共21页
基于DSP的快速傅立叶变换FFT的实现汇编语言Word格式.docx_第3页
第3页 / 共21页
基于DSP的快速傅立叶变换FFT的实现汇编语言Word格式.docx_第4页
第4页 / 共21页
基于DSP的快速傅立叶变换FFT的实现汇编语言Word格式.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

基于DSP的快速傅立叶变换FFT的实现汇编语言Word格式.docx

《基于DSP的快速傅立叶变换FFT的实现汇编语言Word格式.docx》由会员分享,可在线阅读,更多相关《基于DSP的快速傅立叶变换FFT的实现汇编语言Word格式.docx(21页珍藏版)》请在冰豆网上搜索。

基于DSP的快速傅立叶变换FFT的实现汇编语言Word格式.docx

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

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

第二步实现N点复数FFT

第一级蝶形运算;

第二级蝶形运算;

第三级至log2N级蝶形运算;

FFT运算中的旋转因子

是一个复数,可表示:

为了实现旋转因子

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

第三步功率谱的计算

X(k)是由实部

和虚部

组成的复数:

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

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

第四步输出FFT结果。

三、实验容与步骤

1.本实验要求使用FFT变换求一个时域信号的频域特性,并从这个频域特性求出该信号的频率值,然后使用DSP汇编语言对FFT的DSP编程。

2.将计算机与DES-320PP—A教学实验系统连接好,打开实验箱电源,然后运行CCS软件。

2.新建fft.pjt工程文件,并输入FFT的DSP程序及命令文件。

如下:

**************************************

*Radix-2,DIT,Real-inputFFTProgram*

*fft.asm*

*************************************

.mmregs

.globalreset,start,sav_sin,sav_idx,sav_grp

.defstart,_c_int00

.data

DATA.space1024

.copy"

fft.inc"

N.set128

LOGN.set7

sav_grp.usect"

tempv"

3

sav_sin.setsav_grp+1

sav_idx.setsav_grp+2

OUTPUT.usect"

OUTPUT"

256

BOS.usect"

stack"

0Fh

TOS.usect"

1

.copy"

twiddle1.inc"

twiddle2.inc"

.text

_c_int00

bstart

nop

start:

STM#TOS,SP

LD#0,DP

SSBXFRCT

STM#2*N,BK

STM#INPUT,AR3

STM#DATA,AR7

MVMMAR7,AR2

STM#N-1,BRC

RPTBDplend-1

STM#N,AR0

LDMAR3,A

READA*AR2+

ADD#1,A

READA*AR2+

MAR*AR3+0B

plend:

STM#0,BK

LD#-1,ASM

STM#DATA+2,AR3

STM#N/2-1,BRC

LD*AR2,16,A

RPTBDs1end-1

STM#3,AR0

SUB*AR3,16,A,B

ADD*AR3,16,A

STHA,ASM,*AR2+

STB,*AR3+

||LD*AR2,A

STHA,ASM,*AR2+0

STB,*AR3+0%

s1end:

STM#DATA+4,AR3

STM#N/4-1,BRC

RPTBDs2end-1

STM#5,AR0

STHB,ASM,*AR3+

MAR*AR3+

ADD*AR2,*AR3,A

SUB*AR2,*AR3-,B

SUB*AR2,*AR3,A

STB,*AR3

||LD*AR3+,B

STA,*AR2

||ADD*AR2+0%,A

STA,*AR3+0%

s2end:

STM#512,BK

ST#128,sav_sin

STM#128,AR0

STM#TWI2,AR4

STM#TWI1,AR5

STM#-3+LOGN,AR7

ST#-1+N/8,sav_grp

STM#3,AR6

ST#8,sav_idx

stage:

STM#DATA,AR2

LDsav_idx,A

ADD*(AR2),A

STLMA,AR3

MVDKsav_grp,AR1

group:

MVMDAR6,BRC

RPTBDbend-1

LD*AR4,T

MPY*AR3+,A

MACR*AR5+0%,*AR3-,A

ADD*AR2,16,A,B

STB,*AR2

||SUB*AR2+,B

||MPY*AR3+,A

MASR*AR3,*AR4+0%,A

||SUB*AR2,B

STB,*AR2+

bend:

PSHMAR0

MVDKsav_idx,AR0

MAR*AR2+0

MAR*AR3+0

BANZDgroup,*AR1-

POPMAR0

MAR*AR3-

SUB#1,A,B

STLMB,AR6

STLA,1,sav_idx

LDsav_grp,A

STLA,ASM,sav_grp

LDsav_sin,A

STLA,ASM,sav_sin

BANZDstage,*AR7-

MVDKsav_sin,AR0

STM#DATA+2,AR2

STM#DATA+2*N-2,AR3

STM#DATA+2*N+3,AR7

STM#DATA+4*N-1,AR6

STM#-2+N/2,BRC

RPTBDp3end-1

SUB*AR2,*AR3,B

STHA,ASM,*AR3+

STHB,ASM,*AR6-

NEGB

STHB,ASM,*AR7-

SUB*AR2,*AR3,B

STHA,ASM,*AR3-0

STHB,ASM,*AR7+0

p3end:

ST#0,*AR6-

ST#0,*AR6

p3test:

STM#DATA+1,AR4

STM#DATA+2*N+1,AR5

ADD*AR2,*AR4,A

SUB*AR2,*AR4,B

ST#0,*AR2

MVDD*AR2+,*AR5-

STHB,ASM,*AR5

STM#DATA+4*N-1,AR3

STM#TWI2+512/N,AR4

STM#TWI1+512/N,AR5

STM#N-2,BRC

RPTBDp4end-1

STM#512/N,AR0

LD*AR2+,16,A

MACR*AR4,*AR2,A

MASR*AR5,*AR3-,A

LD*AR3+,16,B

MASR*AR5+0%,*AR2-,B

MASR*AR4+0%,*AR3,B

STHB,ASM,*AR2+

STHB,ASM,*AR3-

STHA,ASM,*AR3-

p4end:

power:

STM#OUTPUT,AR3;

AR3指向输出缓冲地址

STM#255,BRC;

块循环计数器设置为255

RPTBDpower_end-1;

带延迟方式的重复执行指令

STM#DATA,AR2;

AR2指向AR[0]

SQUR*AR2+,A;

A:

=AR2

SQURA*AR2+,A;

=AR2+AI2

STHA,7,*AR3;

将A中的数据存入输出缓冲中,

ANDM#7FFFH,*AR3+;

避免输出数据过大在虚拟示波器中显示错误

power_end:

Bpower_end

.end

命令文件:

/*fft.cmd*/

fft.obj

-mfft.map

-offt.out

MEMORY

{

PAGE0:

ROM(RIX):

origin=8000h,length=1000h

ROM1:

origin=

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

当前位置:首页 > 法律文书 > 调解书

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

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