喜欢vb ,可惜人已经老,眼也化,精力差了,只能搞个小件玩玩而已。
想用vb ,采集电脑的喇叭波形,经ttf 转换成频谱,取出指定频段的强度。'论坛的FFT变换4 *** 成功案例。20180522,tjw
'Dim xr(128) As Double
'Dim xi(128) As Double
Private Sub Command1_Click()
Timer1.Enabled = True
End Sub
Private Sub Command2_Click()
Timer1.Enabled = False
End Sub
Private Sub Command3_Click()
End
End Sub
Private Sub Form_Load()
' Timer1.Enabled = True '原来的
'Timer1.Interval = 10
' Picture1.AutoRedraw = True
Timer2.Enabled = True '作为练习,画sin 函数的,共3行
Timer2.Interval = 10
Picture1.AutoRedraw = True
End Sub
Private Sub Timer1_Timer() ' 原来抄,用随机数。没用,供参考
Dim value As Integer, i As Integer
Dim pr() As Double
Dim pi() As Double
Dim fr() As Double
Dim fi() As Double
Randomize
value = Int(200 * Rnd + (-100))
List1.AddItem value
If List1.ListCount > 0 And (List1.ListCount Mod 128 = 0) Then
Picture1.Cls
For i = List1.ListCount - 128 To List1.ListCount - 1
xr(128 - (List1.ListCount - i)) = Val(List1.List(i))
xi(128 - (List1.ListCount
想用vb ,采集电脑的喇叭波形,经ttf 转换成频谱,取出指定频段的强度。'论坛的FFT变换4 *** 成功案例。20180522,tjw
'Dim xr(128) As Double
'Dim xi(128) As Double
Private Sub Command1_Click()
Timer1.Enabled = True
End Sub
Private Sub Command2_Click()
Timer1.Enabled = False
End Sub
Private Sub Command3_Click()
End
End Sub
Private Sub Form_Load()
' Timer1.Enabled = True '原来的
'Timer1.Interval = 10
' Picture1.AutoRedraw = True
Timer2.Enabled = True '作为练习,画sin 函数的,共3行
Timer2.Interval = 10
Picture1.AutoRedraw = True
End Sub
Private Sub Timer1_Timer() ' 原来抄,用随机数。没用,供参考
Dim value As Integer, i As Integer
Dim pr() As Double
Dim pi() As Double
Dim fr() As Double
Dim fi() As Double
Randomize
value = Int(200 * Rnd + (-100))
List1.AddItem value
If List1.ListCount > 0 And (List1.ListCount Mod 128 = 0) Then
Picture1.Cls
For i = List1.ListCount - 128 To List1.ListCount - 1
xr(128 - (List1.ListCount - i)) = Val(List1.List(i))
xi(128 - (List1.ListCount
'*模块********************************************************
'FFT0 数组下标以0开始 FFT1 数组下标以1开始
'AR() 数据实部 AI() 数据虚部
'N 数据点数,为2的整数次幂
'NI 变换方向 1为正变换,-1为反变换
'*************************************************************
Public Const Pi = 3.1415926Public Function FFT0(AR() As Double, AI() As Double, N As Integer, ni As Integer)
Dim i As Integer, j As Integer, k As Integer, L As Integer, M As Integer
Dim IP As Integer, LE As Integer
Dim L1 As Integer, N1 As Integer, N2 As Integer
Dim SN As Double, TR As Double, TI As Double, WR As Double, WI As Double
Dim UR As Double, UI As Double, US As Double
M = NTOM(N)
N2 = N / 2
N1 = N - 1
SN = ni
j = 1
For i = 1 To N1
If i < j Then
TR = AR(j - 1)
AR(j - 1) = AR(i - 1)
AR(i - 1) = TR
TI = AI(j - 1)
AI(j - 1) = AI(i - 1)
AI(i - 1) = TI
End If
k = N2
While (k < j)
下面是测试数据的生成代码。
For i = 0 To 128
xr(i) = 50 * (Sin(i) + 2 * Sin(2 * i) + 1.2 * Sin(0.2 * i)) '生成几个不同频率的叠加数据
xi(i) = 0
Next
另,到站务区吐了个槽
https://bbs.csdn.net/topics/392404374
楼上的效果满意。
有空在电脑继续
谢谢