dragoon0114 发表于 2008-1-19 09:22

关于FFT的编程问题

小弟最近在搞一篇关于FFT的论文
老师给了几个子程序,谁能告诉我这些子程序有什么用?
一共五段子程序
第一个我知道是FFT的代码,第三个是直接傅立叶变换好像不需要,第五个是设置界面的
麻烦帮我解释一下其他2个。最好能帮我串起来。谢谢
FFT
For k = 0 To 7               '变换次数:8次*256
Ai = 2 ^ k
For i = 0 To 2 ^ (7 - k) - 1 '分组的组个数:128、64、32、16、8、 4、 2、0
Bi = 2 * i * Ai
For j = 0 To 2 ^ (k + 1) - 1 '每组数据个数:2、4、8、16、32、64、128、256
Ci = Bi + j
If j < Ai Then
   H(Ci) = PINZHIr(Ci) + fr(k, j) * PINZHIr(Ci + Ai) - fi(k, j) * PINZHIi(Ci + Ai)
   G(Ci) = PINZHIi(Ci) + fi(k, j) * PINZHIr(Ci + Ai) + fr(k, j) * PINZHIi(Ci + Ai)
Else
   H(Ci) = PINZHIr(Ci - Ai) + fr(k, j) * PINZHIr(Ci) - fi(k, j) * PINZHIi(Ci)
   G(Ci) = PINZHIi(Ci - Ai) + fr(k, j) * PINZHIi(Ci) + fi(k, j) * PINZHIr(Ci)
End If
Next j
Next i
For w = 0 To 255
PINZHIr(w) = H(w)
PINZHIi(w) = G(w)
Next w
Next k

DFT
For i = 0 To 255
PINZHIr(i) = 0
PINZHIi(i) = 0
For j = 0 To 255
ff = (i * j) Mod 256
PINZHIr(i) = PINZHIr(i) + fr(7, ff) * FUZHI((j + P_POINT + 1) Mod 256)
PINZHIi(i) = PINZHIi(i) + fi(7, ff) * FUZHI((j + P_POINT + 1) Mod 256)
Next j
Next i

Private Sub Timer1_Timer()
Call shuju
P_POINT = I_TIME Mod 256
FUZHI(P_POINT) = TU_DATA(I_TIME) / 100
If I_TIME > 255 Then Call FFT 'begin FFT
If P_START = 0 Then Picture1(0).PSet (0, 1200 - TU_DATA(I_TIME))
If P_START <= 256 Then Picture1(0).Line -(P_START * 25, 1200 - TU_DATA(I_TIME)), RGB(128, 255, 2550)
If P_START > 256 Then P_START = 256: Call pic_draw
I_TIME = (I_TIME + 1) Mod 2048
P_START = P_START + 1
End Sub

倒序
For i = 0 To 255
Shuxu(i) = 0
For j = 0 To 7
a = i And (2 ^ (7 - j))
If a > 0 Then a = 1
Shuxu(i) = Shuxu(i) + a * (2 ^ j)
Next j
Next i

Private Sub pic_draw()
Picture1(0).Cls
Picture1(0).Line (0, 1200)-(6400, 1200), RGB(255, 0, 0)
Picture1(0).PSet (6400, 1200 - TU_DATA(I_TIME))
For i = 1 To 256
kk = (I_TIME - i + 2048) Mod 2048
Picture1(0).Line -(6400 - i * 25, 1200 - TU_DATA(kk)), RGB(128, 255, 2550)
Next i
End Sub

风花雪月 发表于 2008-1-29 15:31

DFT和倒序两段?
页: [1]
查看完整版本: 关于FFT的编程问题