Из вашего вопроса не ясно, что именно представляют значения в файле. Но если предположить, что они указывают последовательные выборки напряжения, вы можете загрузить файл в массив Numpy, используя
import numpy as np
data = np.array([float(f) for f in file(filename).read().split()])
, а затем вычислите преобразование Фурье как
import numpy.fft as fft
spectrum = fft.fft(data)
Затем вы можете построить величины БПФ как
freq = fft.fftfreq(len(spectrum))
plot(freq, abs(spectrum))
и то, что вы видите, должно совпадать с тем, что отображается на осциллографе.
Если вы хотите идентифицировать доминирующие частоты в спектре, вам придется сократить массив на некотором пороге, например, как то так:
threshold = 0.5 * max(abs(spectrum))
mask = abs(spectrum) > threshold
peaks = freq[mask]
Содержимое freq
(и, следовательно, также peaks
) - это частоты в единицах частоты дискретизации. Например, если ваш осциллограф производит выборку формы волны каждую микросекунду, значения в freq
выражены в мегагерцах. Так что если вы подаете идеальный сигнал 1 кГц, что вы можете сделать, например, с
t = arange(4e6) / 1e6 # sampling times in seconds
data = sin(2 * pi * 1000 * t)
вы получите пик на 0,001 МГц, и соответственно вы обнаружите, что peaks = array([-0.001, 0.001])
.