基于DSP的快速傅立叶变换FFT的实现汇编语言Word格式.docx
- 文档编号:15975419
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:21
- 大小:133.31KB
基于DSP的快速傅立叶变换FFT的实现汇编语言Word格式.docx
《基于DSP的快速傅立叶变换FFT的实现汇编语言Word格式.docx》由会员分享,可在线阅读,更多相关《基于DSP的快速傅立叶变换FFT的实现汇编语言Word格式.docx(21页珍藏版)》请在冰豆网上搜索。
第一步输入数据的组合和位倒序
把输入序列作位倒序是为了在整个运算最后的输出中得到的序列是自然顺序。
第二步实现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=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 DSP 快速 傅立叶 变换 FFT 实现 汇编语言