?? d12r2.frm
字號:
VERSION 5.00
Begin VB.Form Form1
Caption = "Form1"
ClientHeight = 8490
ClientLeft = 1665
ClientTop = 345
ClientWidth = 6090
LinkTopic = "Form1"
ScaleHeight = 8490
ScaleWidth = 6090
Begin VB.CommandButton Command1
Caption = "Command1"
Height = 375
Left = 4680
TabIndex = 0
Top = 120
Width = 1335
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Sub Command1_Click()
'PROGRAM D12R2
'Driver for routine TWOFFT
N = 32
N2 = 2 * N
PER = 8#
PI = 3.1415926
Dim DATA1(32), DATA2(32), FFT1(64), FFT2(64)
For I = 1 To N
X = 2# * PI * I / PER
DATA1(I) = CInt(Cos(X))
DATA2(I) = CInt(Sin(X))
Next I
Call TWOFFT(DATA1(), DATA2(), FFT1(), FFT2(), N)
Print Tab(5); "Fourier transform of first function:"
Call PRNTFT(FFT1(), N2)
Print Tab(5); "Fourier transform of second function:"
Call PRNTFT(FFT2(), N2)
'Invert transform
ISIGN = -1
Call FOUR1(FFT1(), N, ISIGN)
Print Tab(5); "Inverted transform = first function:"
Call PRNTFT(FFT1(), N2)
Call FOUR1(FFT2(), N, ISIGN)
Print Tab(5); "Inverted transform = second function:"
Call PRNTFT(FFT2(), N2)
End Sub
Sub PRNTFT(DATA(), N2)
Print Tab(5); "n Real(n) Imag.(n) Real(N-n) Imag.(N-n)"
Print Tab(5); Format$(0, "0");
Print Tab(12); Format$(DATA(1), "##.#####0");
Print Tab(25); Format$(DATA(2), "##.#####0");
Print Tab(38); Format$(DATA(1), "##.#####0");
Print Tab(51); Format$(DATA(2), "##.#####0")
For I = 3 To (N2 / 2) + 1 Step 2
M = (I - 1) / 2
NN2 = N2 + 2 - I
Print Tab(5); Format$(M, "0");
Print Tab(12); Format$(DATA(I), "##.#####0");
Print Tab(25); Format$(DATA(I + 1), "##.#####0");
Print Tab(38); Format$(DATA(NN2), "##.#####0");
Print Tab(51); Format$(DATA(NN2 + 1), "##.#####0")
Next I
End Sub
Sub TWOFFT(DATA1(), DATA2(), FFT1(), FFT2(), N)
C1R = 0.5
C1I = 0#
C2R = 0#
C2I = -0.5
For J = 1 To N
FFT1(2 * J - 1) = DATA1(J)
FFT1(2 * J) = DATA2(J)
Next J
Call FOUR1(FFT1(), N, 1)
FFT2(1) = FFT1(2)
FFT2(2) = 0#
FFT1(2) = 0#
N2 = 2 * (N + 2)
For J = 2 To N / 2 + 1
J2 = 2 * J
CONJR = FFT1(N2 - J2 - 1)
CONJI = -FFT1(N2 - J2)
H1R = C1R * (FFT1(J2 - 1) + CONJR) - C1I * (FFT1(J2) + CONJI)
H1I = C1I * (FFT1(J2 - 1) + CONJR) + C1R * (FFT1(J2) + CONJI)
H2R = C2R * (FFT1(J2 - 1) - CONJR) - C2I * (FFT1(J2) - CONJI)
H2I = C2I * (FFT1(J2 - 1) - CONJR) + C2R * (FFT1(J2) - CONJI)
FFT1(J2 - 1) = H1R
FFT1(J2) = H1I
FFT1(N2 - J2 - 1) = H1R
FFT1(N2 - J2) = -H1I
FFT2(J2 - 1) = H2R
FFT2(J2) = H2I
FFT2(N2 - J2 - 1) = H2R
FFT2(N2 - J2) = -H2I
Next J
End Sub
Sub FOUR1(DATA(), NN, ISIGN)
N = 2 * NN
J = 1
For I = 1 To N Step 2
If J > I Then
TEMPR = DATA(J)
TEMPI = DATA(J + 1)
DATA(J) = DATA(I)
DATA(J + 1) = DATA(I + 1)
DATA(I) = TEMPR
DATA(I + 1) = TEMPI
End If
M = N / 2
While M >= 2 And J > M
J = J - M
M = M / 2
Wend
J = J + M
Next I
MMAX = 2
While N > MMAX
ISTEP = 2 * MMAX
THETA = 6.28318530717959 / (ISIGN * MMAX)
WPR = -2# * Sin(0.5 * THETA) ^ 2
WPI = Sin(THETA)
WR = 1#
WI = 0#
For M = 1 To MMAX Step 2
For I = M To N Step ISTEP
J = I + MMAX
TEMPR = CSng(WR) * DATA(J) - CSng(WI) * DATA(J + 1)
TEMPI = CSng(WR) * DATA(J + 1) + CSng(WI) * DATA(J)
DATA(J) = DATA(I) - TEMPR
DATA(J + 1) = DATA(I + 1) - TEMPI
DATA(I) = DATA(I) + TEMPR
DATA(I + 1) = DATA(I + 1) + TEMPI
Next I
WTEMP = WR
WR = WR * WPR - WI * WPI + WR
WI = WI * WPR + WTEMP * WPI + WI
Next M
MMAX = ISTEP
Wend
End Sub
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -