
import StringIO
import numpy

s = open('gainBandePassante.csv').read().replace(',','.')
data = numpy.loadtxt(StringIO.StringIO(s),skiprows=1,unpack=True)
fmax = data[0]
G = data[2]
fc1=data[3]
fc2=data[4]
                   

Df = fc2-fc1
m=Df/fmax
                   

from matplotlib.pyplot import *
import math

figure(figsize=(8,6))
plot(m,G,'ro',label="experimental")
xlabel("m")
ylabel("G")
grid()

def gain(m):
    return (5.0-math.sqrt(2)*m)/(math.sqrt(2)*m)
n = 100
m1 = numpy.arange(1,n+1)*0.5/n
G1 = numpy.zeros(n)
for k in range(n):
    G1[k] = gain(m1[k])
plot(m1,G1,'b',label="theorique")
legend(loc='upper right')
axis([0,0.5,0,200])

                   

import numpy
import math
from matplotlib.pyplot import *
import numpy.fft
import scipy.signal

def traceSignaux(nom):
    [t0,u0,t1,u1] = numpy.loadtxt(nom)
    figure(figsize=(8,4))
    plot(t0,u0*10,'b',label='entreex10')
    plot(t1,u1,'r',label='sortie')
    xlabel('t (s)')
    ylabel('u (V)')
    axis([0.1,0.12,-15,15])
    legend(loc='upper right')
    grid()
                 

def traceSpectres(nom):
    [t0,u0,t1,u1] = numpy.loadtxt(nom)
    N = t0.size
    T = t0[N-1]-t0[0]
    te = t0[1]-t0[0]
    fe = 1.0/te
    a0 =numpy.absolute(numpy.fft.fft(u0*scipy.signal.get_window("hann",N)))/N
    a1 =numpy.absolute(numpy.fft.fft(u1*scipy.signal.get_window("hann",N)))/N
    f=numpy.arange(N)*1.0/T
    subplot(211)
    plot(f,a0,'b')
    ylabel('A')
    axis([0,fe,0,a0.max()])
    grid()
    subplot(212)
    plot(f,a1,'b')
    xlabel('f (Hz)')
    ylabel('A')
    axis([0,fe,0,a1.max()])
    grid()
                   

traceSignaux("signal-2.txt")
                  

traceSpectres("signal-2.txt")
                  

traceSignaux("signal-4.txt")
                  

traceSpectres("signal-4.txt")
                  

traceSignaux("signal-5.txt")
                  

traceSpectres("signal-5.txt")
                  

import math
P=200
h = numpy.zeros(2*P+1)
a=900.0/20000.0
b=1100.0/20000.0
def g(k):
    if k==0:
        return 2*(b-a)
    else:
        return (numpy.sin(2*math.pi*k*b)-numpy.sin(2*math.pi*k*a))/(k*math.pi)
for i in range(2*P+1):
    h[i] = g(i-P)
indices = numpy.arange(2*P+1)
figure(figsize=(8,4))
vlines(indices,[0],h)
grid()
                

def reponseFreq(h):
    N = h.size
    def Hf(f):
        s = 0.0
        for k in range(N):
            s += h[k]*numpy.exp(-1j*2*math.pi*k*f)
        return s
    f = numpy.arange(start=0.0,stop=0.5,step=0.0001)
    hf = Hf(f)
    g = numpy.absolute(hf)
    phi = numpy.unwrap(numpy.angle(hf))
    return [f,g,phi]
                  

(f,g,phi)=reponseFreq(h)
fe = 20000
figure(figsize=(6,4))
plot(f*fe,g)
xlabel('f (Hz)')
ylabel('|H|')
axis([0,2000,0,2])
grid()
                  

import scipy.signal
h = h*scipy.signal.get_window("hamming",2*P+1)
(f,g,phi)=reponseFreq(h)
figure(figsize=(6,4))
plot(f*fe,g)
xlabel('f (Hz)')
ylabel('|H|')
axis([0,2000,0,2])
grid()
                    

[t0,u0,t1,u1] = numpy.loadtxt("signal-2.txt")
N = t0.size
T = t0[N-1]-t0[0]
te = t0[1]-t0[0]
fe = 1.0/te
                 

y = scipy.signal.convolve(u0,h,mode='valid')
                   

ny = y.size
t = numpy.zeros(ny)
for k in range(ny):
    t[k] = (2*P+1)*te+te*k
figure(figsize=(10,4))
plot(t0,u0,'b')
plot(t,y,'r')
xlabel("t (s)")
ylabel("u (V)")
axis([0.1,0.12,-0.1,0.1])
grid()
                    

a = numpy.absolute(numpy.fft.fft(y*scipy.signal.get_window("hann",ny)))
f = numpy.arange(ny)*1.0/T
figure(figsize=(10,4))
plot(f,a)
xlabel("f (Hz)")
ylabel("A")
axis([0,fe,0,a.max()])
grid()

                     

adb = 20*numpy.log10(a)
adb = adb-adb.max()
figure(figsize=(10,4))
plot(f,adb)
xlabel("f (Hz)")
ylabel("AdB")
axis([0,fe,adb.min(),0])
grid()
                       
