📄 mtd_16.asm
字号:
//////////////////////////////////////////////
//调用程序时注意原始数据和输出数据,旋转因子和buff的section分配,不同的分配可能造成执行
//的相关而产生延时降低了效率.
//一次加海明权的16点FFT,时钟为69个.
//程序中buff可以和input共用
#include "TS101_def.h"
.section M1DATA;
.align 4;
.var fft16Result[32];
.var win[32]="win32.dat";
.var twid[16]="twid16.dat";
.section M2DATA;
.align 4;
.var fft16input[32]="fft16input.dat";
.var buff[32];
.section M0CODE;
.global _main;
_main:
k0=fft16input;;
j0=win;;//win存放的section不能和输入数据同一
j1=fft16Result;;
j2=j1+16;;
j3=buff;;//j3,j4,j5,k2,k3,k4的值在程序中被修改,但最后都返回了初始值,为下一次的循环做好了准备
j4=j3+16;;
j5=j3;;
k2=twid;;//不和buff放在同一section
k3=k2+4;;//读W2
k4=k2+12;;//读W6
yr1:0=l[k0+=2]; yr17:16=l[j0+=2];; //yr0=real[x(0)],yr1=imag[x(0)];//这里的k0+=2的2表示了读数据的步进量
xr1:0=l[k0+=2]; xr17:16=l[j0+=2];; //xr0=real[x(1)],xr1=imag[x(1)];
yr9:8=l[k0+=2]; yr19:18=l[j0+=2];; //yr8=real[x(2)],yr9=imag[x(2)]
xr9:8=l[k0+=2]; xr19:18=l[j0+=2]; fr0=r0*r16;;//xr8=real[x(3)],yr9=imag[x(3)]
yr5:4=l[k0+=2]; yr21:20=l[j0+=2]; fr1=r1*r17;;//yr4=real[x(4)],yr5=imag[x(4)];
xr5:4=l[k0+=2]; xr21:20=l[j0+=2]; fr8=r8*r18;;//xr4=real[x(5)],xr5=imag[x(5)]
yr13:12=l[k0+=2];yr23:22=l[j0+=2]; fr9=r9*r19;;//yr12=real[x(6)],yr13=imag[x(6)]
xr13:12=l[k0+=2];xr23:22=l[j0+=2]; fr4=r4*r20;;//xr12=real[x(7)],xr13=imag[x(7)]
yr3:2=l[k0+=2]; yr25:24=l[j0+=2]; fr5=r5*r21;;//yr2=real[x(8)],yr3=imag[x(8)];
xr3:2=l[k0+=2]; xr25:24=l[j0+=2]; fr12=r12*r22;;//xr2=real[x(9)],xr3=imag[x(9)];
yr11:10=l[k0+=2];yr17:16=l[j0+=2]; fr13=r13*r23;;//yr10=real[x(10)],yr11=imag[x(10)]
xr11:10=l[k0+=2];xr17:16=l[j0+=2]; fr2=r2*r24;;//xr10=real[x(11)],xr11=imag[x(11)]
yr7:6=l[k0+=2]; yr19:18=l[j0+=2]; fr3=r3*r25;;//yr6=real[x(12)],yr7=imag[x(12)]
xr7:6=l[k0+=2]; xr19:18=l[j0+=2]; fr10=r10*r16;;//xr6=real[x(13)],xr6=imag[x(13)]
yr15:14=l[k0+=2];yr27:26=l[j0+=2]; fr11=r11*r17;;//yr14=real[x(14)],yr15=imag[x(14)]
xr15:14=l[k0+=2];xr27:26=l[j0+=-30]; fr6=r6*r18;;//xr14=real[x(15)],xr15=imag[x(15)]//j0指回win的开始处
//一二级开始
fr0=r0+r2, fr20=r0-r2;fr7=r7*r19;;
fr2=r1+r3, fr29=r1-r3;fr14=r14*r26;;
fr4=r4+r6, fr21=r4-r6;fr15=r15*r27;;
fr5=r5+r7, fr28=r5-r7;;
fr18=r8+r10, fr22=r8-r10;;
fr19=r9+r11, fr31=r9-r11;;
fr26=r12+r14, fr23=r12-r14;;
fr27=r13+r15, fr30=r13-r15;;
fr20=r20+r28, fr28=r20-r28;;
fr29=r29+r21, fr21=r29-r21;;
fr22=r22+r30, fr30=r22-r30;;
fr31=r31+r23, fr23=r31-r23;;
fr16=r0+r4, fr24=r0-r4;;
fr17=r2+r5, fr25=r2-r5;;
fr18=r18+r26, fr26=r18-r26;r11:10=l[k31+k3];;//读旋转因子W2到R11:10中
fr19=r19+r27, fr27=r19-r27;;//1,2级完成
/////第3级开始有一个W0,和W4,不用乘法,W2,W6要用乘法.
fr0=r16+r18,fr8=r16-r18;fr2=r22*r10;;
fr1=r17+r19,fr9=r17-r19;fr3=r23*r11;;
fr4=r24+r27,fr12=r24-r27;fr14=r22*r11;r19:18=l[k31+k4];;//读W6
fr13=r25+r26,fr5=r25-r26;fr15=r23*r10;;
fr16=r2-r3;fr24=r30*r18;q[j3+=8]=r1:0;;
fr17=r14+r15;fr27=r31*r19;q[j4+=8]=r9:8;;
fr2=r20+r16,fr10=r20-r16;fr25=r30*r19;q[j3+=-4]=r5:4;;
fr3=r21+r17,fr11=r21-r17;fr26=r31*r18;q[j4+=-4]=r13:12;;///W2旋转因子的蝶形运算完毕.
///对W4进行计算
fr19=r24-r27;q[j3+=8]=r3:2;yr5:4 = l[k2+=2];;//读W0
fr18=r25+r26;q[j4+=8]=r11:10;xr5:4=l[k2+=2];;//读W1
fr6=r28+r19,fr14=r28-r19;yr3:0=q[j5+=4];;//按yr0,yr1,yr2,yr3读数为最后一级服务
fr7=r29+r18,fr15=r29-r18;xr3:0=q[j5+=4];;///W6旋转因子的蝶形运算完毕.
q[j3+=-12]=r7:6;;
q[j4+=-12]=r15:14;;
////最后一级...第三级计算完成后数据按yr0(real),yr1(imag),xr0(real),yr1(imag)
//yr2,yr3,xr2,xr3.....yr14,yr15,xr15,xr15
//由于标准的FFT程序(AD公司提供,在3到log2(n)-1级时数据按yr0,yr1,xr0,xr1存放在
//内存中,在最后一级时将这四个值从内存中按yr0,yr1,yr2,yr3读出
yr11:8=q[j5+=4]; yr13:12=l[k2+=2]; fr6=r2*r4;;
xr11:8=q[j5+=4]; xr13:12=l[k2+=2]; fr7=r3*r5;;
fr14=r2*r5;;
fr6=r10*r12; fr16=r6-r7;;
yr23:20=q[j5+=4]; yr5:4=l[k2+=2]; fr15=r3*r4;;
xr23:20=q[j5+=4]; xr5:4=l[k2+=2]; fr7=r11*r13;;
fr14=r10*r13; fr17=r14+r15;;
fr6=r22*r4; fr18=r6-r7;;
yr31:28=q[j5+=4]; yr13:12=l[k2+=2]; fr15=r11*r12; fr24=r0+r16, fr26=r0-r16;;
xr31:28=q[j5+=-28]; xr13:12=l[k2+=-14]; fr7=r23*r5; fr25=r1+r17, fr27=r1-r17;;//K2指回twid的开始处为下处的循环调用准备
q[j1+=4]=r25:24; fr14=r22*r5; fr19=r14+r15;;//最后结果放入
q[j2+=4]=r27:26; fr6=r30*r12; fr16=r6-r7;;
fr15=r23*r4; fr24=r8+r18, fr26=r8-r18;;
fr7=r31*r13; fr25=r9+r19, fr27=r9-r19;;
q[j1+=4]=r25:24; fr14=r30*r13; fr17=r14+r15;;
q[j2+=4]=r27:26; fr6=r2*r4; fr18=r6-r7;;
fr15=r31*r12; fr24=r20+r16, fr26=r20-r16;;
fr7=r3*r5; fr25=r21+r17, fr27=r21-r17;;
q[j1+=4]=r25:24; fr14=r2*r5; fr19=r14+r15;;
q[j2+=4]=r27:26; fr6=r10*r12; fr16=r6-r7;;
fr15=r3*r4; fr24=r28+r18, fr26=r28-r18;;
fr7=r11*r13; fr25=r29+r19, fr27=r29-r19;;
q[j1+=4]=r25:24;;
q[j2+=4]=r27:26;;
_main.end:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -