БПФ в питоне дает разные результаты - PullRequest
0 голосов
/ 15 марта 2019

Я работаю над проектом с 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)

Первый код должен давать преобразование Фурье.в то время как второй он должен делать фильтр нижних частот и обратно преобразовывать его.
В моем аудиофайле я делаю дополнительный шум на листе бумаги, пока говорю.Моя цель - убрать шум.

Но из того, что я получаю в виде графиков, кажется, что что-то не так. Изображение 1 - это то, что я получаю из второго кода, а Изображение 2 - из первого кода.Для фуирера должны быть одинаковые результаты, но я получаю два разных.Кажется, что первый код ничего не производит.И даже на секунду я не совсем уверен, что перевернутая версия теперь «чиста».
Вы знаете, что не так с кодом?

...