##// END OF EJS Templates
Started USB-TMC devices....
Started USB-TMC devices. PEP0008 considerations...

File last commit:

r1:8ccb7546abb5 default
r1:8ccb7546abb5 default
Show More
transfertFunction.py
71 lines | 1.9 KiB | text/x-python | PythonLexer
#!/usr/bin/env python
#-*- coding: utf-8 -*-
"""Simple python library to compute transfert functions
"""
import time
import sys
import os
import matplotlib.pyplot as plt
import numpy as np
from scipy import fftpack
__author__ = "Alexis Jeandet"
__copyright__ = "Copyright 2015, Laboratory of Plasma Physics"
__credits__ = []
__license__ = "GPLv2"
__version__ = "1.0.0"
__maintainer__ = "Alexis Jeandet"
__email__ = "alexis.jeandet@member.fsf.org"
__status__ = "Development"
def __parseFFT(FFTi,FFTo,signalFreq,samplingFreq):
index=signalFreq*len(FFTi)/samplingFreq
powI=np.abs(FFTi[index-4:index+4])
i=np.argmax(powI)+index-4
mod=np.abs(FFTo[i])/np.abs(FFTi[i])
arg=np.angle(FFTo[i])-np.angle(FFTi[i])
if arg<-np.pi:
arg = (np.pi*2)+arg
if arg>np.pi:
arg = (-np.pi*2)+arg
return [signalFreq,mod,arg]
def __step(device,freq,offset=0.0,maxAmp=5.0,lastAmp=1.0):
device.analog_out_gen(freq, shape='Sine', channel=0, amplitude=lastAmp, offset=offset)
samplesCount=8192
if freq > 500000:
FS=freq*samplesCount/500.0
elif freq > 100000:
FS=freq*samplesCount/50.0
else:
FS=freq*samplesCount/10.0
res=device.analog_in_read(ch1=True,ch2=True,frequency=FS,samplesCount=samplesCount,ch1range=5.0,ch2range=5.0)
FFTi=fftpack.fft(res[0][0])
FFTo=fftpack.fft(res[0][1])
return __parseFFT(FFTi,FFTo,freq,res[1])
def computeTF(device,startFreq=1.0,stopFreq=100.0,offset=0.0,maxAmp=5.0,nstep=100):
freq=np.zeros(nstep)
f=[]
mod=[]
arg=[]
for i in range(int(nstep)) :
freq[i]=startFreq*np.power(10,((np.log10(stopFreq/startFreq))*i/(nstep-1)))
lastAmp=0.1
for i in range(len(freq)):
step=__step(device,freq[i],offset=offset,maxAmp=maxAmp,lastAmp=lastAmp)
f.append(step[0])
mod.append(step[1])
arg.append(step[2])
return [f,mod,arg]
if __name__ == '__main__':
print("")