Я создаю аудиофайл SingleTone.wav
, используя следующую команду sox
.
sox -n SingleTone.wav synth 10 sin 525
Затем я запускаю следующую программу, чтобы выполнить fft на сэмпле этого тона.
import matplotlib.pyplot as plt
from scipy.fftpack import fft, rfft
from scipy.io import wavfile
from sys import argv
# FFT sample count
N = 8192
# Sampling frequency
samples_per_second = 44100
# Frequency resolution
freq_resolution = samples_per_second / N
fs, data = wavfile.read(argv[1])
a = data.T
b=[(ele/2**8.)*2-1 for ele in a]
c = fft(b, N)
d = len(c)/2 - 1
frequencies = [x*freq_resolution for x in xrange(d)]
print '\n'.join(",".join([str(f),str(x)]) for f, x in zip(frequencies, abs(c[:d])))
plt.plot(frequencies, abs(c[:d]),'r')
plt.show()
Выходной сигнал, который я получаю, представляет собой скачок частоты между 440 Гц и 455 Гц, а не 525 Hz
, как я ожидал.
В чем причина несоответствия?
Правильные ответы могут указывать на неправильное понимание FFT, ошибку в коде или что-то неверное в настройке.