Sine fitting a tre parametri in Python | DAQ code laboratory

Sine fitting a tre parametri in Python


   1    #!/usr/bin/env python3 
   2     
   3    import numpy as np 
   4    import pylab as plt 
   5    import time 
   6     
   7     
   8    t = time.time()  # Necessario per la valutazione del tempo di esecuzione 
   9     
  10    fs=3000.0       #frequenza di campionamento 
  11    J=7             #numero di periodi da analizzare 
  12    f= 17.0         #frequenza del segnale 
  13    nsamples=np.round(J*fs/f);      #numero di campioni 
  14    print(“nsamples : %f”%(nsamples)) 
  15     
  16    timeX=np.array(np.linspace(0, (nsamples1)/fs,nsamples, endpoint=True)) #asse dei tempi 
  17     
  18    signal=4.2*np.sin(2*np.pi*timeX*f+2*np.pi*0.2)+0.1                      #simulazione del segnale 
  19     
  20     
  21    C , S =np.cos(2*np.pi*timeX*f) , np.sin(2*np.pi*timeX*f)                 
  22     
  23    D= np.matrix( [C , S , np.ones(nsamples)])                              #calcolo della matrice D 
  24    D=D.T 
  25     
  26    P=np.linalg.inv(D.T*D)*D.T*np.matrix(signal).T                          #soluzine del sistema 
  27    A=np.sqrt(P[0,0]**2+P[1,0]**2)                                          #spacchettamento dei parametri valutati
  28    phase=np.arctan(P[0,0]/P[1,0])/2/np.pi 
  29    Bias=P[2,0] 
  30    print(“Amplitude: %f”%( A))                                             #stampa dei parametri valutati sul prompt 
  31    print(“phase: %f”%( phase)) 
  32    print(“Bias: %f”%(Bias)) 
  33     
  34    elapsed = time.time()  t                                               #tempo di esecuzione 
  35    print(“execution time : “+str(elapsed)) 
  36     
  37     
  38     
  39     
  40    fig2=plt.figure()                           #stampa del segnale e dei parametri valutati direttamente sulla figura
  41    ax2=fig2.add_subplot(211) 
  42    ax2.plot(timeX,signal) 
  43    ax2.set_xlabel(‘time [s]’) 
  44    ax2.set_ylabel(‘Signal [V]’) 
  45    #ax3b=fig2.add_subplot(212) 
  46    ax3=fig2.add_subplot(212) #ax3b.subplot(122) 
  47    results=[‘Results:’,
  48             ‘   Amplitude: %.1f’ %A,
  49             ‘   Phase: %.1f’%phase,
  50             ‘   Bias %.1f’%Bias] 
  51    for index, res_line in enumerate(reversed(results)): 
  52        ax3.text(0,index,res_line,va=‘bottom’) 
  53     
  54    ax3.plot([index.2, index.2]) 
  55    ax3.axis([0, 1, 1, len(results)]) 
  56    ax3.axis(‘off’) 
  57    plt.show() 
  58    

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.