#!/usr/bin/env python
# -*- coding: utf-8 -*-
import matplotlib
#matplotlib.rcParams['backend'] = 'Qt4Agg'
matplotlib.rcParams['backend'] = 'Agg'
from scipy.signal import *
from numpy import *
from matplotlib.pyplot import *
import mlpy
#import cwt
from matplotlib.ticker import MultipleLocator, FormatStrFormatter,LogLocator
matplotlib.rcParams['xtick.direction'] = 'out'
matplotlib.rcParams['ytick.direction'] = 'out'
matplotlib.rcParams['xtick.major.size'] = 10
matplotlib.rcParams['xtick.minor.size'] = 7
matplotlib.rcParams['ytick.major.size'] = 10
matplotlib.rcParams['ytick.minor.size'] = 7
def PlotSpectrogram(spec,freq,name,start = None, end = None):
contrast = 10
pole = log(1+contrast*abs(spec))
if (start== None):
start= 0
end = 1
fig = figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.85])
img = ax.imshow(pole, extent=[start*1000,end*1000 ,freq[-1], freq[0]], aspect='auto')
ax.set_yscale('log', nonposy='clip')
minorLocator = MultipleLocator(1)
ax.xaxis.set_minor_locator(minorLocator)
#ax.plot([start, start], [amin(freq), amax(freq)], 'w--')
#ax.plot([end , end], [amin(freq), amax(freq)], 'w--')
ax.axis([start*1000,end*1000,amin(freq), amax(freq)])
ax.set_xlabel('time [ms]')
ax.set_ylabel('Frequency [Hz]')
fig.colorbar(img)
savefig(name+'_spectrogram'+'.png')
clf()
def Plotdata(tvec,signal,name):
plot(tvec[0:100]*1000,signal[0:100]+1e-9,'k',linewidth=0.1)
xlabel('time [ms]')
ylabel('U [V]')
savefig(name+'_signal'+'.png')
clf()
plot(tvec*1000,signal,'k',linewidth=0.1)
xlabel('time [ms]')
ylabel('U [V]')
savefig(name+'_signal_full'+'.png')
clf()
def Spectrogram(omega0,frequenciCutOff,signal,dt):
#spec, scale = cwt.cwt(signal, dt, dj=0.05, wf='morlet', p=omega0, extmethod='periodic', extlength='powerof2',res = 2000)
spec, scale = mlpy.cwt(signal, dt, dj=0.05, wf='morlet', p=omega0, extmethod='periodic', extlength='powerof2')
# approximate scales through frequencies
freq = (omega0 + sqrt(2.0 + omega0**2))/(4*pi * scale[1:])
spec = spec[freq > frequenciCutOff, : ]
freq = freq[freq > frequenciCutOff]
return spec,freq
def FFTanalysis(signal,start, end, name,dt,frequenciCutOff):
Fsignal = fft.rfft(signal)
fvec = 2/dt/len(Fsignal)*arange(size(Fsignal))
Fsignal = Fsignal[fvec > frequenciCutOff]
fvec = fvec[fvec > frequenciCutOff]
plot(fvec,abs(Fsignal),linewidth=0.1)
xlabel('Frequency [Hz]')
ylabel('Intensity [a.u.]')
yscale('log', nonposy='clip')
xscale('log', nonposy='clip')
limits = sort(abs(Fsignal))[[len(Fsignal)*1e-3,len(Fsignal)*(1-1e-3 )]]
axis([fvec[0],fvec[-1],limits[0], amax(abs (Fsignal))])
savefig(name+'_fft'+'.png')
clf()
def main():
dir_list = ('.')
name_list = ('NIbasic_01','NIturbo_08', 'PapouchSt_05', 'PapouchSt_08', 'PapouchSt_09', 'NI6251ext_01')
for directory in dir_list:
for file_name in name_list:
name = file_name
print 'processing ', name
signal = loadtxt(name)
##print signal
#print shape(signal)
if all(signal == 0):
continue
omega0 = 50
frequenciCutOff =1e3
dt = signal[1,0]-signal[0,0]
start = signal[0,0]
end = signal[-1,0]
Plotdata(signal[:,0],signal[:,1],name)
try:
signal[:,1] -=mean(signal[:,1])
( spec,freq) = Spectrogram(omega0,frequenciCutOff,signal[:,1],dt)
PlotSpectrogram(spec,freq,name,start, end)
FFTanalysis(signal[:,1],start, end, name,dt,frequenciCutOff)
except ValueError:
print 'chyba'
def main2():
start = 0
end = 0.04
omega0 = 50 #čím větší tím lepší frekvenční rozlišení a opačně
frequenciCutOff =1e4
signal = loadtxt('textronix25MHz1')
signal -=mean(signal)
print size(signal)
length = size(signal)
end = size(signal)*4e-8
t = linspace(start,end,length)
signal = vstack((t,signal)).T
name = 'textronix'
#length
specLen = 2000.0
step = int(length/specLen)
signalPartLen = 10000.0
nParts = int(length/signalPartLen)+1
lenPart = int(2**14*0.8)
dt = (end-start)/length
overlap = 0.2
spec = empty
for i in range(nParts):
s = int( i*lenPart)
e = int((i+1)*lenPart)
#if i <=0:
#s = 0
#elif i>= nParts-1:
#e = length-1
print s," ",e
signaltmp = signal[s:e,:]
print shape(signaltmp)
( specTmp,freqTmp) = Spectrogram(omega0,frequenciCutOff,signaltmp,dt)
specTmp = specTmp[:,s:e:step]
#PlotSpectrogram(spec,freq,name,start, end)
s= int(size(tvec)/pix)
pole = pole[:,::s]
if __name__ == "__main__":
main()