?? d12r4.frm
字號(hào):
VERSION 5.00
Begin VB.Form Form1
Caption = "Form1"
ClientHeight = 7125
ClientLeft = 1860
ClientTop = 750
ClientWidth = 5100
LinkTopic = "Form1"
ScaleHeight = 7125
ScaleWidth = 5100
Begin VB.CommandButton Command1
Caption = "Command1"
Height = 375
Left = 3720
TabIndex = 0
Top = 6480
Width = 1215
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 D12R4
'Driver for routine SINFT
EPS = 0.001
NP = 16
NPP2 = NP + 2
Width1 = 30#
PI = 3.14159
Dim DATA(16), SIZE1(16)
N = NP / 2
Print
Print Tab(5); "Period of sinusoid in channels (2-";
Print Format$(NP, "##"); "; or 0 to stop)"
PER = 16
If PER <= 0# Then Exit Sub
For I = 1 To NP
DATA(I) = Sin(2# * PI * (I - 1) / PER)
Next I
Call SINFT(DATA(), NP)
BIG = -10000000000#
SMALL = 10000000000#
For I = 1 To NP
If DATA(I) < SMALL Then SMALL = DATA(I)
If DATA(I) > BIG Then BIG = DATA(I)
Next I
SCAL1 = Width1 / (BIG - SMALL)
For I = 1 To NP
NLIM = Int(SCAL1 * (DATA(I) - SMALL) + EPS)
Print Tab(5); Format$(I, "##");
For J = 1 To NLIM + 1
Print "*";
Next J
Next I
Call SINFT(DATA(), NP)
BIG = -10000000000#
SMALL = 10000000000#
For I = 1 To NP
If DATA(I) < SMALL Then SMALL = DATA(I)
If DATA(I) > BIG Then BIG = DATA(I)
Next I
SCAL1 = Width1 / (BIG - SMALL)
For I = 1 To NP
NLIM = Int(SCAL1 * (DATA(I) - SMALL) + EPS)
Print Tab(5); Format$(I, "##");
For J = 1 To NLIM + 1
Print "*";
Next J
Next I
End Sub
Sub SINFT(Y(), N)
THETA = 3.14159265358979 / N
WR = 1#
WI = 0#
WPR = -2# * Sin(0.5 * THETA) ^ 2
WPI = Sin(THETA)
Y(1) = 0#
M = N / 2
For J = 1 To M
WTEMP = WR
WR = WR * WPR - WI * WPI + WR
WI = WI * WPR + WTEMP * WPI + WI
Y1 = WI * (Y(J + 1) + Y(N - J + 1))
Y2 = 0.5 * (Y(J + 1) - Y(N - J + 1))
Y(J + 1) = Y1 + Y2
Y(N - J + 1) = Y1 - Y2
Next J
Call REALFT(Y(), M, 1)
Sum = 0#
Y(1) = 0.5 * Y(1)
Y(2) = 0#
For J = 1 To N - 1 Step 2
Sum = Sum + Y(J)
Y(J) = Y(J + 1)
Y(J + 1) = Sum
Next J
End Sub
Sub REALFT(DATA(), N, ISIGN)
THETA = 6.28318530717959 / 2# / N
C1 = 0.5
If ISIGN = 1 Then
C2 = -0.5
Call FOUR1(DATA(), N, 1)
Else
C2 = 0.5
THETA = -THETA
End If
WPR = -2# * Sin(0.5 * THETA) ^ 2
WPI = Sin(THETA)
WR = 1# + WPR
WI = WPI
N2P3 = 2 * N + 3
For I = 2 To N / 2 + 1
I1 = 2 * I - 1
I2 = I1 + 1
I3 = N2P3 - I2
I4 = I3 + 1
WRS = CSng(WR)
WIS = CSng(WI)
H1R = C1 * (DATA(I1) + DATA(I3))
H1I = C1 * (DATA(I2) - DATA(I4))
H2R = -C2 * (DATA(I2) + DATA(I4))
H2I = C2 * (DATA(I1) - DATA(I3))
DATA(I1) = H1R + WRS * H2R - WIS * H2I
DATA(I2) = H1I + WRS * H2I + WIS * H2R
DATA(I3) = H1R - WRS * H2R + WIS * H2I
DATA(I4) = -H1I + WRS * H2I + WIS * H2R
WTEMP = WR
WR = WR * WPR - WI * WRI + WR
WI = WI * WPR + WTEMP * WPI + WI
Next I
If ISIGN = 1 Then
H1R = DATA(1)
DATA(1) = H1R + DATA(2)
DATA(2) = H1R - DATA(2)
Else
H1R = DATA(1)
DATA(1) = C1 * (H1R + DATA(2))
DATA(2) = C1 * (H1R - DATA(2))
Call FOUR1(DATA(), N, -1)
End If
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
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -