我正在使用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是我从第一个代码中得到的。搅拌器应该有相同的结果,但我得到两个不同的结果。似乎第一个代码没有产生任何东西。即使是第二次,我也不是很确定反转版本现在是“干净的”。
您知道代码有什么问题吗?