%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import math
import re
raw=open("second2_moonlight.dat","r").readlines()
data = [re.split(' *', line.strip()) for line in raw]
time = []
samples = []
for i in range(len(data)):
(t, chan1, chan2) = data[i]
time.append(t)
samples.append(chan1)
plt.plot(time, samples)
[<matplotlib.lines.Line2D at 0x10e4db2d0>]
def get_component_frequencies(samples):
num_samples = len(samples)
# Due to Nyquist theorem, we can only get frequencies up to num_samples/2
# E.g: if we got 1000 samples, we can get frequencies from 1 to 500Hz.
num_frequencies = num_samples/2
get_freq_amplitude = lambda z: math.sqrt(np.real(z)**2 + np.imag(z)**2) / num_frequencies
F = np.fft.rfft(samples)
frequencies = range(num_frequencies)
freq_amplitudes = [get_freq_amplitude(z) for z in F][0:-1] # Remove last
return (frequencies, freq_amplitudes)
(x,y) = get_component_frequencies(samples)
x2 = x[0:500]
y2 = y[0:500]
plt.plot(x2,y2, 'r')
[<matplotlib.lines.Line2D at 0x10e3e7e90>]