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, (nsamples–1)/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