import numpy as np
from scipy.fftpack import fft,ifft
import matplotlib.pyplot as plt
time = []
data = []
#tt1.csv為數據檔,請改成要匯入的檔名
with open('testtt.csv','r',encoding='utf-8-sig') as f:
s = f.read()
b = s.split()
for i in b:
c=i.split(',')
time.append(int(c[0])/30-1/30)
data.append(c[1])
print(len(time))
print(len(data))
time = np.array(time, dtype="float")
data = np.array(data, dtype="float")
plt.plot(time,data)
plt.show()
sampling_rate = 30 #sampling_rate為相機的FPS
fft_size = len(time) #fft_size為總共數據數量
t = np.array(time, dtype="float")
x = np.array(data, dtype="float")
xs = x[:fft_size]
xf = np.fft.rfft(xs) / fft_size
xss = len(x)
ts = t[:xss]
x = np.array(x, dtype="float")
ts = np.array(ts, dtype="float")
plt.plot(ts,x)
plt.show()
freqs = np.linspace(0, int(sampling_rate/2), int(fft_size/2+1))
xfp = 20*np.log10(np.clip(np.abs(xf), 1e-2, 1e2))
freqs = np.array(freqs, dtype="float")
xfp = np.array(xfp, dtype="float")
freqs = freqs[1:]
xfp = xfp[1:]
plt.plot(freqs,xfp)
plt.show()
num = xfp.argmax(axis=0)
print(freqs[num]) #頻率
print(1/freqs[num]) #週期
2.57668711656
0.388095238095
m = 0.09190 #鉛球重量
k = 4*np.pi**2*m*freqs[num]**2 #實驗值彈性係數
k_th = 25.8 #實驗一所得之理論值
error = abs(k-k_th)/k_th*100
print(k)
print("Error:{:.0f}%".format(error))
24.0878822813
Error:7%