哪位大神可以指点我一下 如何在该FFT汇编语言程序下 实现IFFT 芯片是MSP430f5529 程序在附件中 由于汇编不太懂 一直没有弄清楚 十分感谢 这个问题应经研究一个月 什么成果都没有 谢谢指点
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
哪位大神可以指点我一下 如何在该FFT汇编语言程序下 实现IFFT 芯片是MSP430f5529 程序在附件中 由于汇编不太懂 一直没有弄清楚 十分感谢 这个问题应经研究一个月 什么成果都没有 谢谢指点
FFT基础结构是一个穷举循环, e.g 10kHz的采样输入,那么我去穷举分析出其5k,4k,3k,2k,1k,0.5k .... 所有频率的周期分量。
这些数据排列出来就是其频域分布了。
分离方法是一个蝶形循环,具体算法可到高数书上看离散数据的DFT公式。
具体在这个算法中,全部是用查表运算来做的,因为这样速度快。 也就是说不会在算法中做 逆序,cos ,sin 这些操作,预先算好结果,我就说一下常量表的作用吧。
BitRT_256 : 这个是逆序表,把0000011 逆序成1100000这样,是因为蝶形运算之后结果是逆序的,所以想看正序结果的话,需要这个表。
Twidd_256: 做Sin cos的运算查表(只包含的1/4 个sin周期,因为实际上cos 和 sin 是同一个运算,而且有周期,所以有个1/4就够了。。)
十分感谢哈 我的问题主要是在不能明白这个程序的实现流程 首先 它是频率抽取还是时间抽取 其次在旋转因子数值表中如何查找数值的 希望能给予解答 研究好久了 一直不明白 谢谢
CFFT430_4: mov.w R7,R10 ;R10:=n3 for bytes!!! | | | | R10=scr
add.w #BitRT,R10
mov.b @R10,R10
add.w #Twidd,R10
mov.w 0(R10),R12
mov.w VecSiz/2(R10),R13
还有就是为什么只有一对旋转因子数值之后 一直用着一对旋转因子进行蝶形运算。 CFFT_3是蝶形运算部分
CFFT430_3: mov.w R14,R15 ; | | | | | | R15=*B's
add.w R6,R15 ;R15 points to B's (n2) | | | | | | | |
mov.w R12,&MPYS ;2Ci=Kr... | | | | | | | |
mov.w 2(R15),&OP2 ;2Ci=Kr*Bi... | | | | | | | |
mov.w R13,&MACS ;2Ci=Kr*Bi+Ki*... | | | | | | | |
mov.w @R15,&OP2 ;2Ci=Kr*Bi+Ki*Cr | | | | | | | |
mov.w &RESHI,R9 ;*** ;R9:=Ci | | | | | | | R9=Ci |
mov.w R12,&MPYS ;2Cr=Kr... | | | + | | | | |
mov.w @R15,&OP2 ;2Cr=Kr*Br... | | | | | | | |
mov.w &RESHI,R8 ;R8=Kr*Br | | | | | | | R8=Cr
mov.w R13,&MPYS ;2Cr=Kr*Br-Ki... | | | + | | | | |
mov.w 2(R15),&OP2 ;2Cr=Kr*Br-Ki*Bi | | | | | | | |
sub.w &RESHI,R8 ;R8:Cr | | | | | | | |
mov.w @R14,R10 ;Br=Ar... | | | | | | | R10=scr
rra R10 ;Br=Ar/2... | | | | | | | | |
sub.w R8,R10 ;Br=Ar/2-Cr | | | | | | | | |
mov.w R10,0(R15) ;save Br .. .. .. .. | | | | | | | + |
mov.w 2(R14),R10 ;Bi=Ai... | | | | | | | R10=scr
rra.w R10 ;Bi=Ai/2... | | | | | | | | |
sub.w R9,R10 ;Bi=Ai/2-Ci | | | | + | | | |
mov.w R10,2(R15) ;save Bi | | | | | | + |
rra.w @R14 ;Ar=Ar/2... | | | | | | |
add.w R8,0(R14) ;Ar=Ar/2+Cr | | | | | + |
rra.w 2(R14) ;Ai=Ai/2... | | | | | |
add.w R9,2(R14) ;Ai=Ai/2+Ci | | | + + |
add.w #4,R14 ;*A's++ corrected word +imag | | | |
add.w #1,R5 ;n1++ in word | | | |
cmp.w R5,R11 ;next n1 | | | |
jne CFFT430_3 ;do next butterfly