java学习笔记13——java版本istft

老子今天将FFT改成ifft,说实话我也是一脸懵逼啊,这特么不就差个系数的问题吗?我特么不知道系数啊。

IFFT和FFT设置成一样可以不?我和python对比下就知道了。人生艰难啊。
看了下python版本的fft和ifft,这特么不只是系数的问题吧。如下,

>>> import numpy as np
>>> x=np.arange(1,17)
>>> np.fft.fft(x,16)
array([136. +0.j        ,  -8.+40.21871594j,  -8.+19.3137085j ,
        -8.+11.9728461j ,  -8. +8.j        ,  -8. +5.3454291j ,
        -8. +3.3137085j ,  -8. +1.59129894j,  -8. +0.j        ,
        -8. -1.59129894j,  -8. -3.3137085j ,  -8. -5.3454291j ,
        -8. -8.j        ,  -8.-11.9728461j ,  -8.-19.3137085j ,
        -8.-40.21871594j])
>>> np.fft.fft(np.fft.fft(x,16),16)
array([ 16.+0.j, 256.+0.j, 240.+0.j, 224.+0.j, 208.+0.j, 192.+0.j,
       176.+0.j, 160.+0.j, 144.+0.j, 128.+0.j, 112.+0.j,  96.+0.j,
        80.+0.j,  64.+0.j,  48.+0.j,  32.+0.j])
>>> np.fft.ifft(np.fft.fft(x,16),16)
array([ 1.+0.j,  2.+0.j,  3.+0.j,  4.+0.j,  5.+0.j,  6.+0.j,  7.+0.j,
        8.+0.j,  9.+0.j, 10.+0.j, 11.+0.j, 12.+0.j, 13.+0.j, 14.+0.j,
       15.+0.j, 16.+0.j])

我看看源码是啥情况。

#FFT
def fft(a, n=None, axis=-1, norm=None):

    a = asarray(a).astype(complex, copy=False)
    if n is None:
        n = a.shape[axis]
    output = _raw_fft(a, n, axis, fftpack.cffti, fftpack.cfftf, _fft_cache)
    if _unitary(norm):
        output *= 1 / sqrt(n)
    return output

#IFFT
def ifft(a, n=None, axis=-1, norm=None):
   
    # The copy may be required for multithreading.
    a = array(a, copy=True, dtype=complex)
    if n is None:
        n = a.shape[axis]
    unitary = _unitary(norm)
    output = _raw_fft(a, n, axis, fftpack.cffti, fftpack.cfftb, _fft_cache)
    return output * (1 / (sqrt(n) if unitary else n))

这特么很明显都是函数里面套函数,但不过都是用的_raw_fft,其他的就是系数问题了。

不过我突然发现_raw_fft中具体的参数有个差别,fftpack.cfftf和fftpack.cfftb,卧槽。看源码,我估计应该是类似于matlab那种fftshift那种,应该是排列或者说是前后移动的问题。老子综合认为直接移动就好,然后除以个系数nfft结果差不多,虚部可以直接忽略,因为得到的必然应该是实数,而实际上虚部也在1e-14级别,可以忽略,寡人试了16/32/64/128结果都是如此。

[ 1.-8.88178420e-16j  2.+4.44089210e-16j  3.-4.44089210e-16j
  4.+1.77635684e-15j  5.-8.88178420e-16j  6.+8.88178420e-16j
  7.-8.88178420e-16j  8.+8.88178420e-16j  9.+0.00000000e+00j
 10.-8.88178420e-16j 11.+8.88178420e-16j 12.-1.77635684e-15j
 13.+8.88178420e-16j 14.-4.44089210e-16j 15.+4.44089210e-16j
 16.-4.44089210e-16j 17.+8.88178420e-16j 18.-4.44089210e-16j
 19.+4.44089210e-16j 20.-1.77635684e-15j 21.+8.88178420e-16j
 22.-8.88178420e-16j 23.+8.88178420e-16j 24.-8.88178420e-16j
 25.+0.00000000e+00j 26.+8.88178420e-16j 27.-8.88178420e-16j
 28.+1.77635684e-15j 29.-8.88178420e-16j 30.+4.44089210e-16j
 31.-4.44089210e-16j 32.+4.44089210e-16j]

[ 1.-1.77635684e-15j  2.-8.88178420e-16j  3.-8.88178420e-16j
  4.+0.00000000e+00j  5.-8.88178420e-16j  6.-8.88178420e-16j
  7.+8.88178420e-16j  8.+8.88178420e-16j  9.+1.77635684e-15j
 10.-1.33226763e-15j 11.+2.22044605e-15j 12.-1.77635684e-15j
 13.+8.88178420e-16j 14.-8.88178420e-16j 15.+4.44089210e-16j
 16.+1.33226763e-15j 17.+8.88178420e-16j 18.-1.77635684e-15j
 19.-8.88178420e-16j 20.-1.77635684e-15j 21.+8.88178420e-16j
 22.-8.88178420e-16j 23.-8.88178420e-16j 24.-8.88178420e-16j
 25.-1.77635684e-15j 26.+1.33226763e-15j 27.-4.44089210e-16j
 28.+4.44089210e-15j 29.-8.88178420e-16j 30.+1.77635684e-15j
 31.+1.33226763e-15j 32.-1.33226763e-15j 33.+0.00000000e+00j
 34.+8.88178420e-16j 35.+8.88178420e-16j 36.+3.55271368e-15j
 37.-8.88178420e-16j 38.+8.88178420e-16j 39.-2.66453526e-15j
 40.+8.88178420e-16j 41.-1.77635684e-15j 42.-1.33226763e-15j
 43.+4.44089210e-16j 44.-1.77635684e-15j 45.+8.88178420e-16j
 46.-8.88178420e-16j 47.+4.44089210e-16j 48.-2.22044605e-15j
 49.+8.88178420e-16j 50.+1.77635684e-15j 51.+8.88178420e-16j
 52.-1.77635684e-15j 53.+8.88178420e-16j 54.+8.88178420e-16j
 55.+2.66453526e-15j 56.-8.88178420e-16j 57.+1.77635684e-15j
 58.+1.33226763e-15j 59.-2.22044605e-15j 60.-8.88178420e-16j
 61.-8.88178420e-16j 62.+0.00000000e+00j 63.-2.22044605e-15j
 64.+2.22044605e-15j]

[  1.+0.00000000e+00j   2.+9.32587341e-15j   3.+1.33226763e-15j
   4.-5.32907052e-15j   5.+2.66453526e-15j   6.-6.21724894e-15j
   7.-9.76996262e-15j   8.+8.88178420e-16j   9.+8.88178420e-15j
  10.+7.99360578e-15j  11.-6.21724894e-15j  12.-8.88178420e-15j
  13.+6.21724894e-15j  14.-7.54951657e-15j  15.-3.10862447e-15j
  16.+4.88498131e-15j  17.+8.88178420e-16j  18.+6.66133815e-15j
  19.+4.44089210e-16j  20.+0.00000000e+00j  21.+8.88178420e-16j
  22.-4.44089210e-15j  23.-4.44089210e-15j  24.+2.66453526e-15j
  25.-5.32907052e-15j  26.+2.66453526e-15j  27.+7.99360578e-15j
  28.-8.88178420e-16j  29.+2.66453526e-15j  30.+4.44089210e-16j
  31.+1.33226763e-15j  32.-1.33226763e-15j  33.+0.00000000e+00j
  34.-3.10862447e-15j  35.+1.33226763e-15j  36.+8.88178420e-15j
  37.-8.88178420e-16j  38.+4.44089210e-15j  39.-2.66453526e-15j
  40.+8.88178420e-16j  41.+1.77635684e-15j  42.-4.44089210e-15j
  43.+6.21724894e-15j  44.-8.88178420e-15j  45.+8.88178420e-16j
  46.-4.44089210e-16j  47.+3.99680289e-15j  48.-5.77315973e-15j
  49.+8.88178420e-16j  50.-2.22044605e-15j  51.-6.66133815e-15j
  52.+1.77635684e-15j  53.-2.66453526e-15j  54.+6.21724894e-15j
  55.+1.33226763e-14j  56.-9.76996262e-15j  57.-5.32907052e-15j
  58.-6.21724894e-15j  59.+9.76996262e-15j  60.+2.66453526e-15j
  61.-6.21724894e-15j  62.+7.54951657e-15j  63.-5.77315973e-15j
  64.+4.44089210e-16j  65.-3.55271368e-15j  66.-8.43769499e-15j
  67.-5.77315973e-15j  68.+1.77635684e-15j  69.-4.44089210e-15j
  70.+7.99360578e-15j  71.+1.15463195e-14j  72.+8.88178420e-16j
  73.-5.32907052e-15j  74.-2.66453526e-15j  75.+1.15463195e-14j
  76.+5.32907052e-15j  77.-4.44089210e-15j  78.+6.66133815e-15j
  79.+3.99680289e-15j  80.-2.22044605e-15j  81.+8.88178420e-16j
  82.-1.11022302e-14j  83.+4.44089210e-16j  84.+0.00000000e+00j
  85.+8.88178420e-16j  86.+2.66453526e-15j  87.+2.66453526e-15j
  88.-4.44089210e-15j  89.+1.77635684e-15j  90.-4.44089210e-15j
  91.-6.21724894e-15j  92.+6.21724894e-15j  93.-4.44089210e-15j
  94.+7.54951657e-15j  95.+1.33226763e-15j  96.-1.33226763e-15j
  97.+0.00000000e+00j  98.+3.99680289e-15j  99.+1.33226763e-15j
 100.+1.77635684e-15j 101.-8.88178420e-16j 102.-2.66453526e-15j
 103.-2.66453526e-15j 104.+8.88178420e-16j 105.-5.32907052e-15j
 106.-4.44089210e-15j 107.-7.99360578e-15j 108.+5.32907052e-15j
 109.+8.88178420e-16j 110.-4.44089210e-16j 111.-3.10862447e-15j
 112.+1.33226763e-15j 113.+8.88178420e-16j 114.+4.88498131e-15j
 115.+7.54951657e-15j 116.-8.88178420e-15j 117.+4.44089210e-15j
 118.-7.99360578e-15j 119.-7.99360578e-15j 120.+7.99360578e-15j
 121.+8.88178420e-15j 122.+1.15463195e-14j 123.-1.50990331e-14j
 124.-8.88178420e-16j 125.+4.44089210e-15j 126.-1.37667655e-14j
 127.+1.33226763e-15j 128.+3.99680289e-15j]

当然也要试试随机的数,这些数都是1~nfft的数。对于随机数的结果如下:nfft分别为16/32/64/128/256

The Error 
 [0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j
 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j]

The Error 
 [ 0.00000000e+00+0.00000000e+00j  0.00000000e+00+5.55111512e-17j
  0.00000000e+00+0.00000000e+00j  1.66533454e-16+0.00000000e+00j
  0.00000000e+00+0.00000000e+00j  0.00000000e+00-3.46944695e-17j
  0.00000000e+00+0.00000000e+00j  1.11022302e-16-5.55111512e-17j
  0.00000000e+00+0.00000000e+00j -5.55111512e-17+0.00000000e+00j
  0.00000000e+00+0.00000000e+00j -3.88578059e-16-1.11022302e-16j
  0.00000000e+00+0.00000000e+00j  0.00000000e+00+6.93889390e-18j
  0.00000000e+00+0.00000000e+00j  0.00000000e+00+0.00000000e+00j
  0.00000000e+00+0.00000000e+00j  0.00000000e+00-5.55111512e-17j
  0.00000000e+00+0.00000000e+00j  1.11022302e-16+0.00000000e+00j
  0.00000000e+00+0.00000000e+00j  0.00000000e+00+3.46944695e-17j
  0.00000000e+00+0.00000000e+00j  0.00000000e+00+5.55111512e-17j
  0.00000000e+00+0.00000000e+00j  5.55111512e-17+0.00000000e+00j
  0.00000000e+00+0.00000000e+00j  1.11022302e-16+1.11022302e-16j
  0.00000000e+00+0.00000000e+00j  0.00000000e+00-6.93889390e-18j
  0.00000000e+00+0.00000000e+00j -2.22044605e-16+0.00000000e+00j]

The Error 
 [ 0.00000000e+00+0.00000000e+00j -5.55111512e-17+0.00000000e+00j
  0.00000000e+00+1.38777878e-16j -2.22044605e-16+2.77555756e-17j
  0.00000000e+00+0.00000000e+00j  4.44089210e-16+5.55111512e-17j
 -2.22044605e-16-8.32667268e-17j -1.11022302e-16+2.08166817e-17j
  0.00000000e+00+0.00000000e+00j  0.00000000e+00+0.00000000e+00j
 -4.44089210e-16+1.38777878e-17j  0.00000000e+00-2.22044605e-16j
  0.00000000e+00+0.00000000e+00j  0.00000000e+00+0.00000000e+00j
 -2.22044605e-16+0.00000000e+00j  2.77555756e-17+1.24900090e-16j
  0.00000000e+00+0.00000000e+00j -1.11022302e-16-1.38777878e-16j
  2.49800181e-16-8.32667268e-17j  0.00000000e+00+5.55111512e-17j
  0.00000000e+00+0.00000000e+00j  0.00000000e+00-5.55111512e-17j
 -4.44089210e-16+1.38777878e-16j  0.00000000e+00-2.08166817e-17j
  0.00000000e+00+0.00000000e+00j  5.55111512e-17+5.55111512e-17j
 -2.22044605e-16+2.08166817e-16j  0.00000000e+00+0.00000000e+00j
  0.00000000e+00+0.00000000e+00j  0.00000000e+00+1.11022302e-16j
 -1.11022302e-16-5.55111512e-17j  4.44089210e-16-1.38777878e-17j
  0.00000000e+00+0.00000000e+00j -1.11022302e-16+0.00000000e+00j
 -1.66533454e-16-8.32667268e-17j  0.00000000e+00-2.77555756e-17j
  0.00000000e+00+0.00000000e+00j  0.00000000e+00+5.55111512e-17j
  2.22044605e-16-8.32667268e-17j  2.22044605e-16+2.08166817e-17j
  0.00000000e+00+0.00000000e+00j -1.66533454e-16-5.55111512e-17j
  4.44089210e-16+1.38777878e-17j  0.00000000e+00+0.00000000e+00j
  0.00000000e+00+0.00000000e+00j  0.00000000e+00+0.00000000e+00j
  3.33066907e-16+0.00000000e+00j  8.32667268e-17-9.71445147e-17j
  0.00000000e+00+0.00000000e+00j  2.77555756e-16+1.38777878e-16j
 -1.66533454e-16+2.77555756e-17j  0.00000000e+00-5.55111512e-17j
  0.00000000e+00+0.00000000e+00j  0.00000000e+00-5.55111512e-17j
  4.44089210e-16+2.77555756e-17j  0.00000000e+00-2.08166817e-17j
  0.00000000e+00+0.00000000e+00j  1.11022302e-16+0.00000000e+00j
 -1.11022302e-16-2.35922393e-16j  0.00000000e+00+2.22044605e-16j
  0.00000000e+00+0.00000000e+00j  0.00000000e+00-1.11022302e-16j
 -2.22044605e-16+5.55111512e-17j -4.44089210e-16-1.38777878e-17j]

The Error 
 [ 0.00000000e+00+0.00000000e+00j -4.16333634e-17-5.55111512e-17j
 -2.22044605e-16-1.66533454e-16j -1.11022302e-16+0.00000000e+00j
  2.22044605e-16-5.55111512e-17j -4.44089210e-16+2.77555756e-17j
  2.22044605e-16+1.11022302e-16j -5.55111512e-17-1.11022302e-16j
  0.00000000e+00+0.00000000e+00j -2.22044605e-16-2.08166817e-17j
  0.00000000e+00-2.30718222e-16j  2.77555756e-16+1.52655666e-16j
 -4.44089210e-16+5.55111512e-17j  1.11022302e-16-4.16333634e-17j
  0.00000000e+00+0.00000000e+00j  1.11022302e-16+1.04083409e-17j
  0.00000000e+00+0.00000000e+00j  5.55111512e-17-8.32667268e-17j
 -1.66533454e-16+9.71445147e-17j -1.11022302e-16+1.38777878e-17j
  0.00000000e+00+4.16333634e-17j  1.11022302e-16+5.55111512e-17j
 -4.44089210e-16-2.49800181e-16j -1.11022302e-16+1.38777878e-16j
  0.00000000e+00+0.00000000e+00j -4.44089210e-16+6.93889390e-17j
  0.00000000e+00-2.77555756e-17j  0.00000000e+00-6.93889390e-18j
  2.22044605e-16+0.00000000e+00j  1.66533454e-16+1.11022302e-16j
  2.22044605e-16-1.38777878e-17j  0.00000000e+00+1.73472348e-17j
  0.00000000e+00+0.00000000e+00j  0.00000000e+00-4.51028104e-17j
  0.00000000e+00+1.11022302e-16j  2.22044605e-16+0.00000000e+00j
  0.00000000e+00+1.38777878e-17j -1.11022302e-16+1.11022302e-16j
  4.44089210e-16-5.55111512e-17j  0.00000000e+00-1.94289029e-16j
  0.00000000e+00+0.00000000e+00j  1.11022302e-16-1.31838984e-16j
  4.44089210e-16-2.13370988e-16j  1.11022302e-16-1.38777878e-17j
  2.22044605e-16+2.77555756e-17j  0.00000000e+00+5.55111512e-17j
  2.22044605e-16-1.66533454e-16j -1.11022302e-16-1.73472348e-17j
  0.00000000e+00+0.00000000e+00j -2.22044605e-16+2.77555756e-17j
 -1.66533454e-16+1.38777878e-17j  1.11022302e-16+2.77555756e-17j
  1.66533454e-16-2.77555756e-17j  2.22044605e-16-5.55111512e-17j
  0.00000000e+00-8.32667268e-17j  1.11022302e-16-2.22044605e-16j
  0.00000000e+00+0.00000000e+00j -1.11022302e-16-8.32667268e-17j
  2.22044605e-16+1.52655666e-16j -1.11022302e-16+6.24500451e-17j
 -1.11022302e-16+1.11022302e-16j  0.00000000e+00+1.11022302e-16j
  1.11022302e-16+6.93889390e-17j  5.55111512e-17+7.28583860e-17j
  0.00000000e+00+0.00000000e+00j  2.22044605e-16-5.55111512e-17j
  2.22044605e-16+5.55111512e-17j  3.05311332e-16+5.55111512e-17j
  0.00000000e+00+5.55111512e-17j  0.00000000e+00-2.77555756e-17j
  2.22044605e-16-1.11022302e-16j -1.11022302e-16+2.22044605e-16j
  0.00000000e+00+0.00000000e+00j  5.55111512e-17+6.24500451e-17j
  0.00000000e+00+2.13370988e-16j -1.11022302e-16-1.38777878e-17j
  0.00000000e+00-5.55111512e-17j  5.55111512e-17-4.16333634e-17j
  0.00000000e+00-1.11022302e-16j -1.11022302e-16-1.00613962e-16j
  0.00000000e+00+0.00000000e+00j  2.22044605e-16+1.38777878e-16j
  2.77555756e-16-1.38777878e-17j  1.11022302e-16-9.71445147e-17j
  0.00000000e+00-4.16333634e-17j  2.22044605e-16-1.66533454e-16j
  4.44089210e-16+1.94289029e-16j -2.22044605e-16-2.77555756e-17j
  0.00000000e+00+0.00000000e+00j -1.11022302e-16+1.52655666e-16j
 -1.11022302e-16-5.55111512e-17j  0.00000000e+00-6.93889390e-18j
 -2.22044605e-16+0.00000000e+00j  2.77555756e-16+0.00000000e+00j
 -1.66533454e-16-1.38777878e-17j  0.00000000e+00-9.36750677e-17j
  0.00000000e+00+0.00000000e+00j  1.11022302e-16+1.56125113e-16j
  0.00000000e+00+0.00000000e+00j -9.71445147e-17+0.00000000e+00j
 -2.22044605e-16-1.38777878e-17j  0.00000000e+00-1.11022302e-16j
 -4.44089210e-16+5.55111512e-17j  2.22044605e-16-2.77555756e-17j
  0.00000000e+00+0.00000000e+00j  0.00000000e+00+9.02056208e-17j
  0.00000000e+00+2.30718222e-16j -3.33066907e-16-1.38777878e-17j
  0.00000000e+00-2.77555756e-17j  0.00000000e+00+2.77555756e-17j
 -2.22044605e-16+2.77555756e-16j  2.22044605e-16+3.81639165e-17j
  0.00000000e+00+0.00000000e+00j -1.11022302e-16-8.32667268e-17j
  1.11022302e-16-9.71445147e-17j -1.66533454e-16+0.00000000e+00j
  5.55111512e-17+2.77555756e-17j  3.33066907e-16+1.66533454e-16j
  0.00000000e+00+1.38777878e-16j  1.11022302e-16+2.22044605e-16j
  0.00000000e+00+0.00000000e+00j  2.22044605e-16-1.38777878e-16j
  2.22044605e-16-6.93889390e-17j -1.11022302e-16-1.59594560e-16j
  2.22044605e-16-1.11022302e-16j -2.22044605e-16-2.22044605e-16j
  1.11022302e-16-4.16333634e-17j -5.55111512e-17+7.28583860e-17j]

The Error 
 [ 0.00000000e+00+0.00000000e+00j  1.11022302e-16+4.16333634e-17j
  1.11022302e-16-6.93889390e-18j  5.55111512e-17-5.72458747e-17j
  2.22044605e-16-1.94289029e-16j -3.33066907e-16-1.38777878e-16j
 -4.44089210e-16+1.04083409e-16j  2.22044605e-16-1.35308431e-16j
  0.00000000e+00+0.00000000e+00j  0.00000000e+00-3.29597460e-17j
  4.44089210e-16-1.24900090e-16j -2.22044605e-16+6.93889390e-17j
  0.00000000e+00+1.04083409e-17j  0.00000000e+00+4.44089210e-16j
  4.44089210e-16-1.38777878e-16j -1.66533454e-16-3.33934269e-17j
  0.00000000e+00+0.00000000e+00j -3.33066907e-16-3.46944695e-17j
  0.00000000e+00+1.87350135e-16j  1.11022302e-16+0.00000000e+00j
 -1.11022302e-16+0.00000000e+00j  2.22044605e-16+1.24900090e-16j
 -5.55111512e-17-3.46944695e-17j  2.22044605e-16-2.77555756e-17j
 -3.33066907e-16+4.16333634e-17j -2.22044605e-16-5.55111512e-17j
  1.11022302e-16+1.38777878e-17j  0.00000000e+00-1.87350135e-16j
  0.00000000e+00-6.93889390e-17j  0.00000000e+00-6.93889390e-17j
  5.55111512e-17-6.59194921e-17j -2.22044605e-16+1.70002901e-16j
  0.00000000e+00+0.00000000e+00j  0.00000000e+00+6.24500451e-17j
  0.00000000e+00+1.45716772e-16j -3.33066907e-16+2.49800181e-16j
  0.00000000e+00-2.77555756e-17j -1.11022302e-16-5.55111512e-17j
 -2.22044605e-16-3.46944695e-17j  2.22044605e-16+1.73472348e-17j
  0.00000000e+00-4.51028104e-17j -1.11022302e-16-6.24500451e-17j
 -1.11022302e-16+0.00000000e+00j  2.22044605e-16-1.24900090e-16j
  0.00000000e+00+1.73472348e-17j  4.44089210e-16-1.38777878e-16j
 -1.11022302e-16+1.04083409e-16j  5.55111512e-16+1.21430643e-16j
  0.00000000e+00+0.00000000e+00j -1.11022302e-16+2.08166817e-17j
  2.22044605e-16+1.59594560e-16j -2.22044605e-16-2.49800181e-16j
 -2.22044605e-16+1.45716772e-16j  0.00000000e+00+4.16333634e-17j
 -1.11022302e-16-2.08166817e-17j  1.11022302e-16+9.02056208e-17j
  0.00000000e+00-1.38777878e-17j  6.66133815e-16+4.85722573e-17j
  2.22044605e-16+0.00000000e+00j -1.11022302e-16+1.17961196e-16j
  0.00000000e+00-1.38777878e-17j -1.11022302e-16+0.00000000e+00j
  1.11022302e-16+1.66533454e-16j  2.22044605e-16-1.90819582e-16j
  0.00000000e+00+0.00000000e+00j  2.22044605e-16-1.04083409e-16j
  5.55111512e-17-1.04083409e-16j -2.22044605e-16-2.60208521e-17j
  2.22044605e-16+8.32667268e-17j  4.44089210e-16+8.32667268e-17j
 -2.22044605e-16-2.56739074e-16j -2.22044605e-16+3.46944695e-18j
  1.11022302e-16+0.00000000e+00j  0.00000000e+00+1.61329283e-16j
 -2.77555756e-16+1.66533454e-16j  2.22044605e-16+1.38777878e-17j
  0.00000000e+00+4.51028104e-17j -5.55111512e-17-1.24900090e-16j
  0.00000000e+00-1.38777878e-17j -5.55111512e-17+1.09721260e-16j
  0.00000000e+00+0.00000000e+00j -1.11022302e-16+4.85722573e-17j
  2.22044605e-16-1.45716772e-16j -2.22044605e-16-6.93889390e-17j
  6.66133815e-16+1.11022302e-16j -2.22044605e-16+9.71445147e-17j
  2.22044605e-16+2.08166817e-17j  2.22044605e-16+1.94289029e-16j
  4.44089210e-16-6.93889390e-18j  0.00000000e+00+1.04083409e-16j
 -3.88578059e-16-4.16333634e-17j  0.00000000e+00-1.59594560e-16j
  0.00000000e+00+2.77555756e-17j -2.22044605e-16-8.32667268e-17j
 -5.55111512e-17-1.70002901e-16j  0.00000000e+00-9.36750677e-17j
  0.00000000e+00+0.00000000e+00j -1.11022302e-16-1.59594560e-16j
  2.22044605e-16+1.17961196e-16j  0.00000000e+00+0.00000000e+00j
  1.11022302e-16-1.11022302e-16j  2.77555756e-16-2.49800181e-16j
  5.55111512e-17+2.08166817e-17j -2.22044605e-16+7.28583860e-17j
  0.00000000e+00-2.77555756e-17j  1.11022302e-16-9.02056208e-17j
 -2.22044605e-16+1.38777878e-17j  0.00000000e+00-1.24900090e-16j
  1.11022302e-16-4.51028104e-17j  2.77555756e-16+1.94289029e-16j
  0.00000000e+00-3.67761377e-16j -4.44089210e-16-4.51028104e-17j
  0.00000000e+00+0.00000000e+00j  2.22044605e-16+1.17961196e-16j
 -1.11022302e-16+7.63278329e-17j  1.11022302e-16-2.77555756e-17j
  0.00000000e+00-3.46944695e-17j -2.22044605e-16-1.24900090e-16j
 -5.55111512e-17-2.08166817e-17j  0.00000000e+00-2.98372438e-16j
 -5.55111512e-17+4.16333634e-17j  2.22044605e-16+1.31838984e-16j
  2.22044605e-16+8.32667268e-17j  2.22044605e-16-4.85722573e-17j
  0.00000000e+00+2.77555756e-17j  2.22044605e-16-5.55111512e-17j
  1.11022302e-16+1.38777878e-17j -4.44089210e-16+3.46944695e-18j
  0.00000000e+00+0.00000000e+00j  1.11022302e-16+8.32667268e-17j
  1.11022302e-16+7.63278329e-17j -3.33066907e-16+1.64798730e-16j
  0.00000000e+00+1.38777878e-16j -5.55111512e-16-1.38777878e-16j
  4.44089210e-16+1.04083409e-16j  4.44089210e-16+3.12250226e-17j
  0.00000000e+00+0.00000000e+00j -2.22044605e-16-1.57859836e-16j
  0.00000000e+00-2.08166817e-16j  0.00000000e+00+6.93889390e-17j
  0.00000000e+00+1.04083409e-17j -2.22044605e-16-3.33066907e-16j
 -2.22044605e-16+3.05311332e-16j  0.00000000e+00-1.44415729e-16j
  0.00000000e+00+0.00000000e+00j  1.11022302e-16-9.02056208e-17j
  0.00000000e+00-3.46944695e-17j  5.55111512e-17+5.55111512e-17j
 -3.33066907e-16-1.11022302e-16j  2.77555756e-16+1.38777878e-17j
  5.55111512e-16+1.59594560e-16j -6.66133815e-16+8.32667268e-17j
 -1.11022302e-16-6.93889390e-17j  1.11022302e-16-1.24900090e-16j
  2.22044605e-16+1.38777878e-17j  0.00000000e+00+2.56739074e-16j
  0.00000000e+00+1.38777878e-17j -2.22044605e-16-6.93889390e-17j
  0.00000000e+00-1.04083409e-17j -2.22044605e-16+5.89805982e-17j
  0.00000000e+00+0.00000000e+00j -5.55111512e-17-4.85722573e-17j
  3.33066907e-16-1.87350135e-16j -2.22044605e-16-8.32667268e-17j
 -3.33066907e-16+2.77555756e-17j -4.44089210e-16+5.55111512e-17j
  4.44089210e-16-1.45716772e-16j  2.22044605e-16-9.36750677e-17j
  0.00000000e+00+4.51028104e-17j  1.11022302e-16+4.85722573e-17j
  1.11022302e-16+5.55111512e-17j  1.11022302e-16+9.71445147e-17j
  4.16333634e-17-3.81639165e-17j -4.44089210e-16+8.32667268e-17j
  2.22044605e-16-6.93889390e-18j  0.00000000e+00+1.21430643e-16j
  0.00000000e+00+0.00000000e+00j -9.71445147e-17+2.08166817e-17j
  2.22044605e-16-6.93889390e-18j  0.00000000e+00+1.94289029e-16j
 -1.11022302e-16-7.63278329e-17j  2.22044605e-16+4.16333634e-17j
  0.00000000e+00-2.08166817e-17j -1.11022302e-16+2.01227923e-16j
  0.00000000e+00-6.93889390e-17j  0.00000000e+00+4.85722573e-17j
 -2.22044605e-16-1.11022302e-16j -4.44089210e-16+6.93889390e-18j
  0.00000000e+00-1.38777878e-17j  0.00000000e+00-2.22044605e-16j
 -1.11022302e-16-5.55111512e-17j  0.00000000e+00+1.42247325e-16j
  0.00000000e+00+0.00000000e+00j  5.55111512e-17+1.17961196e-16j
  1.66533454e-16-1.04083409e-16j  3.33066907e-16-2.60208521e-17j
 -2.22044605e-16-2.77555756e-17j  4.44089210e-16+8.32667268e-17j
  4.44089210e-16+2.42861287e-16j -2.22044605e-16+1.14491749e-16j
  0.00000000e+00+0.00000000e+00j  1.11022302e-16+1.73472348e-18j
 -1.11022302e-16+1.66533454e-16j  1.11022302e-16-9.71445147e-17j
  0.00000000e+00-6.59194921e-17j  1.66533454e-16+2.35922393e-16j
  0.00000000e+00-1.38777878e-17j  2.22044605e-16-1.30104261e-18j
  0.00000000e+00+0.00000000e+00j -2.22044605e-16-1.73472348e-16j
  0.00000000e+00+7.63278329e-17j -5.55111512e-17+1.38777878e-17j
  2.22044605e-16+0.00000000e+00j  0.00000000e+00+1.52655666e-16j
  2.22044605e-16-6.93889390e-18j  2.22044605e-16-2.49800181e-16j
  0.00000000e+00+3.46944695e-17j  0.00000000e+00-6.24500451e-17j
  4.44089210e-16-4.16333634e-17j  0.00000000e+00+6.24500451e-17j
  0.00000000e+00+2.77555756e-17j  1.11022302e-16+2.22044605e-16j
  0.00000000e+00+5.20417043e-17j  5.55111512e-17+1.00613962e-16j
  0.00000000e+00+0.00000000e+00j  0.00000000e+00+6.24500451e-17j
  0.00000000e+00-1.04083409e-16j  2.22044605e-16+0.00000000e+00j
  0.00000000e+00+1.11022302e-16j  2.22044605e-16+2.77555756e-17j
  2.77555756e-16-9.02056208e-17j  3.88578059e-16+7.28583860e-17j
  0.00000000e+00+2.77555756e-17j -1.11022302e-16-3.46944695e-17j
  2.22044605e-16-6.93889390e-17j  2.22044605e-16+9.71445147e-17j
 -1.11022302e-16+6.59194921e-17j -2.22044605e-16-2.49800181e-16j
  0.00000000e+00+1.87350135e-16j -4.44089210e-16-1.56125113e-16j
  0.00000000e+00+0.00000000e+00j  2.22044605e-16+3.46944695e-17j
 -4.44089210e-16-1.45716772e-16j  0.00000000e+00-1.38777878e-16j
  1.66533454e-16-3.46944695e-17j  0.00000000e+00-1.38777878e-17j
 -1.66533454e-16-2.08166817e-17j  0.00000000e+00-7.63278329e-17j
  5.55111512e-17+4.16333634e-17j -2.22044605e-16+7.63278329e-17j
 -4.44089210e-16+8.32667268e-17j  2.22044605e-16-4.85722573e-17j
  0.00000000e+00+0.00000000e+00j -2.22044605e-16+1.66533454e-16j
 -4.44089210e-16+1.38777878e-17j  0.00000000e+00-1.63064007e-16j]

不管是实部还是虚部,误差都比较小,可以忽略,即使是16bit的音频,3万多,误差也在10亿分之一级别,可以忽略。

确定了方案,我试试java版本的如何。等会哈

寡人解决了ifft问题,将fft中的参数修改即可得到,另外由半个谱恢复整个谱,参数mag和phase要用到欧拉公式。

注意:另一半虚部是反相的。

测试结果误差在10万分之一级别,别问我为啥这么大,因为我用的float,不是double。这个误差就是float的误差。

将ifft整合到istft中,得到结果,测试结果如下:

1024点求STFT及ISTFT一共用时44ms,一般般吧,先不考虑时间问题了。下一步实现C版本的。

从1~1024【波形数据1~1024】的STFT及ISTFT得到的波形误差大于0.01的个数为12个,基本上可以忽略,完全能用。

 

另外有相关问题可以加入QQ群讨论,不设微信群

QQ群:868373192 

语音深度学习群

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小李飞刀李寻欢

您的欣赏将是我奋斗路上的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值