In [180]:
%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import sys
from scipy import interpolate
import math
from ipywidgets import *
# use engauge to extract plot data from datasheet
fn = "25L6GT EC2=110V.csv"
df = pd.read_csv(fn)
In [181]:
df.head(1)
Out[181]:
In [327]:
colnames = df.columns.values
rowcount = len(df[colnames[0]])
Va = 130
x = []
for c in range(1,len(colnames)):
x.append(float(colnames[c][:-1]))
fig = plt.figure(figsize=(15, 10))
for r in range(0,rowcount):
if abs(df['AnodeVoltage'][r] - Va) < 5:
y = []
for c in range(1,len(colnames)):
y.append(df[colnames[c]][r])
plt.plot(x,y,label=df[colnames[0]][r])
break
plt.tick_params(axis='y', which='both', labelleft='off', labelright='on')
plt.grid(True)
plt.legend(loc='upper left')
for i in range(len(x)):
print "%.6f,%0.6f"%(x[i],y[i])
coeff = np.polyfit(x, y, 2)
print coeff
In [326]:
from scipy.fftpack import fft
Rl = 4
n = 33
Vg = -8.0
vg = 4
ra = Rl*n*n
N = 2000
T = 1.0 / 5000.0
f = 100.0
t = np.linspace(0.0, N*T, N)
vi = Vg + vg*np.sin(f*2.0*np.pi*t)
ia = coeff[0]*vi*vi + coeff[1]*vi + coeff[2]
vo = ia*ra
yf = fft(vo)
xf = np.linspace(0.0, 1.0/(2.0*T), N/2)
plt.figure(figsize=(15, 20))
ax = plt.subplot(311)
null = plt.xlim([0,0.05])
ax.plot(t,vo)
ax = plt.subplot(312)
ax.plot(xf[1:], 20*np.log10(2.0/N * np.abs(yf[:N/2][1:]))) # take the dc component off
null = plt.xlim([0,500])
plt.show()
mags = []
for i in range(len(xf)):
if xf[i]%100 < 1:
mags.append(2.0/N*np.abs(yf[i]))
# print xf[i],2.0/N*np.abs(yf[i])
sum = 0
for i in range(2,8):
sum += mags[i]*mags[i]
# print mags
print "%.1f%%"%(100*math.sqrt(sum)/mags[1])
print "%.1fW"%(math.pow((mags[1]/n)/math.sqrt(2),2)/Rl)
In [324]:
# Number of samplepoints
N = 10000
# sample spacing
T = 1.0 / 8000.0
x = np.linspace(0.0, N*T, N)
y = np.sin(50.0 * 2.0*np.pi*x) - 0.1*np.sin(100 * 2.0*np.pi*x)
yf = fft(y)
xf = np.linspace(0.0, 1.0/(2.0*T), N/2)
plt.figure(figsize=(15, 20))
ax = plt.subplot(311)
ax.plot(xf, 2.0/N * np.abs(yf[:N/2]))
null = plt.xlim([0,500])
ax = plt.subplot(312)
ax.plot(x,y)
null = plt.xlim([0,0.1])
plt.show()
In [ ]: