python中的FFT给出不同的结果

时间:2019-03-15 15:13:05

标签: python fft

我正在使用RaspberryPi进行项目,我已经连接了USB麦克风,并录制了 .wave 文件。
一旦有了这些,就想实现傅立叶变换,低通滤波器并对它进行逆变换。
我的代码主要基于StackOverflow的示例,因此我也将其发布在这里:

#Code 1
fs, data = wavfile.read('test1.wav') # load the data
b=[(element/2**8.)*2-1 for element in data] # this is 16-bit track, b is now normalized on [-1,1)
c = fft(b) # calculate fourier transform (complex numbers list)
d = len(c)/2  # you only need half of the fft list (real signal symmetry)
plt.subplot(2,1,2)
plt.plot(data)
plt.plot(abs(c[:(d-1)]),'r') 

plt.show()

#Code 2
sampling_length = 5.0 # measured 3sec
fs, data = wavfile.read("test1.wav")
Fs = 1.0/sampling_length
ls = range(len(data)) # data contains the function
freq = np.fft.fftfreq(len(data), d = sampling_length)
fft = np.fft.fft(data)
x = freq[:len(data)/2] 
for i in range(len(x)):
        if x[i] > 0.005: # cut off all frequencies higher than 0.005
                fft[i] = 0.0
                fft[len(data)/2 + i] = 0.0
inverse = np.fft.ifft(fft)

假定第一个代码只是进行傅立叶变换,而第二个代码应该进一步做一个低通滤波器并对它进行逆变换。
在我的音频文件中,我说话时用纸做一些额外的噪音。我的目标是消除噪音。

但是从我得到的情节来看,似乎有些错误。 Picture 1是我从第二个代码中得到的,而Picture 2是我从第一个代码中得到的。搅拌器应该有相同的结果,但我得到两个不同的结果。似乎第一个代码没有产生任何东西。即使是第二次,我也不是很确定反转版本现在是“干净的”。
 您知道代码有什么问题吗?

0 个答案:

没有答案