老子今天将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
语音深度学习群