注册 登录
编程论坛 VB6论坛

call 函数未定义,是否格式不对

谈一刻 发布于 2018-04-27 11:27, 1873 次点击
我想用音频波形转换频谱,已经做了模 kkfft.bas
在调用时出错,不明白,请指导,谢谢。
Private Sub Timer2_Timer()
  Dim value As Integer, i As Integer
  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 - i)) = 0
    Next
    'FFT变换
  ' Call kkfft0(pr(), pi(), 128, 1) '出错处---函数未定义
    '绘图
    Picture1.Scale (0, 100)-(127, -100)
    Picture1.DrawWidth = 1
    For i = 0 To 127
      Picture1.Line (i, Abs(xr(i)))-(i + 1, Abs(xr(i + 1))), vbBlue
    Next i
  End If
End Sub
---------------------
以下为call 的fftt.bas 的前面部分。
Public Sub kkfft(ByRef pr() As Double, _
    ByRef pi() As Double, _
    ByRef fr() As Double, _
    ByRef fi() As Double, _
    ByVal n As Integer, _
    ByVal k As Integer, ByVal L As Integer)
 
    Dim it As Integer
    Dim m As Integer
    Dim iis As Integer
    Dim i As Integer
    Dim j As Integer
    Dim nv As Integer
    Dim l0 As Integer
   
    Dim p, q, s, vr, vi, poddr, poddi As Double
    For it = 0 To n - 1
        m = it
        iis = 0
        For i = 0 To k - 1
            j = Int(m / 2)
            iis = 2 * iis + (m - 2 * j)
            m = j
        Next
        fr(it) = pr(iis)
        fi(it) = pi(iis)
    Next。。。。。。。。

4 回复
#2
wds12018-04-27 11:42
自己看看名称,多一个0,另外还缺3参数。

Call kkfft0(pr(), pi(), 128, 1) '出错处---函数未定义

Public Sub kkfft(ByRef pr() As Double, _
    ByRef pi() As Double, _
    ByRef fr() As Double, _
    ByRef fi() As Double, _
    ByVal n As Integer, _
    ByVal k As Integer, ByVal L As Integer)
#3
谈一刻2018-05-02 15:17
还是不懂它的格式写法。希望列出。
看这段描述“kkfft.bas,VB版快速傅里叶变换模块,翻译自徐世良的“C
语言常用算法程序集”,供vb用户免费使用
‘yangwqcumt,2012.04
‘----------------------------------------------------------------------------------
‘模块说明:
‘Pr(),pr(),分别是输入序列的实部与虚部;
‘Fr(),fi()分别是输出序列的实部与虚部;
‘以上数组的长度都是n,而且n等于2的k次方,n=2k
‘L为0时做正变换,为1时做反变换
‘--------------------------请参考徐教授的著作---------------------------”
按照这里,要call它,我的语法是否:kkfft pr 0 f(r) 0 128 0  ?不懂,试不对。
#4
wds12018-05-02 16:28
'Pr(),fr(),分别是输入序列的实部与虚部;
'Pi(),fi()分别是输出序列的实部与虚部;
'以上数组的长度都是n,而且n等于2的k次方,n=2 ‘L为0时做正变换,为1时做反变换

以上数据都赋值后就可以调用

call kkfft( pr(),pi(),fr(),fi(), n,k , L ),
#5
谈一刻2018-05-03 16:08
好的,谢谢。
准备做个50周的正弦波来验证一下
1