##### Meritev smernega diagrama v logaritemski skali - S53MV 14.09.2016 ##### #izvajanje potrebuje najmanj Anaconda2-4.1.1-Windows-x86 in pyserial-2.7.win32_py3k import time,serial,math #uporabljene funkcije rxime='COM14' #ime zaporednega vmesnika sprejemnika vrtime='COM10' #ime zaporednega vmesnika vrtiljaka print '*** Meritev smernega diagrama, log sprejemnik - S53MV 14.09.2016 ***' x=[0.0] #pripravi obe polji za rezultat y=[99.99] i=1 while i<=3600: x=x+[i/10.0] y=y+[99.99] i=i+1 #odpri comporta rx in vrt, 115200bps, 8bit, brez paritete print 'Pocakaj na lenobni USB...' rx=serial.Serial(rxime,115200,timeout=3.0) rx.setRTS(False) #sprosti /BOOTLOADER rx.setDTR(False) #sprosti /RESET vrt=serial.Serial(vrtime,115200,timeout=3.0) vrt.setRTS(False) #sprosti /BOOTLOADER vrt.setDTR(False) #sprosti /RESET time.sleep(3) vrt.flushInput() #pocisti sprejemni vmesnik vrtiljaka vrt.write('6D') #pozeni vrtiljak v desno i=0 #zanka merjenja antene m=-1.0 while i<3600: s=vrt.readline() k=float(s[0:5]) rx.flushInput() rx.readline() s=rx.readline() r=float(s[0:6]) print 'Kot:',k,' Jakost:',r,'dB ',chr(13), i=int(k*10.0+0.5) y[i]=r if r>m: #isci maksimum m=r km1=k if r==m: km2=k vrt.write('7L') #vrtiljak v levo z navisjo hitrostjo t=time.ctime() #zabelezi cas meritve print '\r\nMeritev smernega diagrama '+t rx.close() #zapri oba comporta vrt.close() i=0 #normaliziraj smerni diagram na max while i<=3600: y[i]=y[i]-m i=i+1 km=(km1+km2)*0.5 #povprecni polozaj maksimuma om='Odmik maksimuma: '+str(km-180.0)+' stopinj' print om i=1 #integriraj smerni diagram s=0.0 im=int(km*10+0.5) while i<1800: i1=im-i if i1<0: i1=i1+3600 i2=im+i if i2>3600: i2=i2-3600 ff=math.pow(10.0,(y[i1]*0.1))+math.pow(10.0,(y[i2]*0.1)) s=s+ff*math.sin(math.radians(i*0.1)) i=i+1 D=(7200/math.pi)/s #izracunaj smernost dd='Smernost: %5.1f'%(D)+' = %5.2f'%(10*math.log(D,10))+' dBi' print dd i=int(km*10+0.5) #poisci -3dB meji glavnega lista while i>=0: km1=i*0.1 if y[i]<-3.0: i=0 i=i-1 i=int(km*10+0.5) while i<=3600: km2=i*0.1 if y[i]<-3.0: i=3600 i=i+1 ss='Sirina snopa -3dB: '+str(km2-km1)+' stopinj' print ss print 'Pocakaj na nalaganje grafike...' import matplotlib.pyplot as plt #narisi polozaj maksimuma in sirino lista plt.plot([km,km],[-40.0,2.0],'y-') plt.plot([km1,km1],[-40.0,2.0],'r-') plt.plot([km2,km2],[-40.0,2.0],'r-') plt.plot(x,y,'b-') #narisi smerni diagram plt.axis([0.0,360.0,-40.0,2.0]) plt.xticks([0.0,45.0,90.0,135.0,180.0,225.0,270.0,315.0,360.0]) plt.yticks([-40.0,-35.0,-30.0,-25.0,-20.0,-15.0,-10.0,-5.0,0.0]) plt.grid(True) plt.title(t+' '+om+'\n'+dd+' '+ss) plt.xlabel('Kot v stopinjah') plt.ylabel('Relativna jakost sprejema v dB') plt.show() print 'Risanje polarnega diagrama...' x1=[] #priprava krogov in pretvorba podatkov y1=[] x2=[] y2=[] x3=[] y3=[] x4=[] y4=[] xx=[] yy=[] i=0 while i<=3600: s=math.sin(math.radians(i*0.1)) c=math.cos(math.radians(i*0.1)) x1=x1+[s/4] y1=y1+[c/4] x2=x2+[s/2] y2=y2+[c/2] x3=x3+[3*s/4] y3=y3+[3*c/4] x4=x4+[s] y4=y4+[c] a=(y[i]+40.0)/40.0 if a<0.0: a=0.0 xx=xx+[a*s] yy=yy+[-a*c] i=i+1 plt.plot(x1,y1,'g-') #krog polmera 0.25 plt.plot(x2,y2,'g-') #krog polmera 0.5 plt.plot(x3,y3,'g-') #krog polmera 0.75 plt.plot(x4,y4,'g-') #krog polmera 1 k=0 #razdelki po 30 stopinj while k<360: xk=math.sin(math.radians(k))*0.25 yk=math.cos(math.radians(k))*0.25 plt.plot([0.0,xk],[0.0,yk],'g-') k=k+30 k=0 #razdelki po 15 stopinj while k<360: xz=math.sin(math.radians(k))*0.25 yz=math.cos(math.radians(k))*0.25 xk=math.sin(math.radians(k))*0.5 yk=math.cos(math.radians(k))*0.5 plt.plot([xz,xk],[yz,yk],'g-') k=k+15 k=0 #razdelki po 5 stopinj while k<360: xz=math.sin(math.radians(k))*0.5 yz=math.cos(math.radians(k))*0.5 xk=math.sin(math.radians(k)) yk=math.cos(math.radians(k)) plt.plot([xz,xk],[yz,yk],'g-') k=k+5 #narisi polozaj maksimuma in sirino lista plt.plot([0.0,math.sin(math.radians(km))],[0.0,-math.cos(math.radians(km))],'y-') plt.plot([0.0,math.sin(math.radians(km1))],[0.0,-math.cos(math.radians(km1))],'r-') plt.plot([0.0,math.sin(math.radians(km2))],[0.0,-math.cos(math.radians(km2))],'r-') plt.plot(xx,yy,'b-') #narisi smerni diagram plt.axis([-1.05,1.05,-1.05,1.05]) plt.xticks([]) plt.yticks([]) plt.title(t+' '+om+'\n'+dd+' '+ss) plt.ylabel('Radialno logaritemsko merilo z razponom 40dB') plt.axes().set_aspect('equal') plt.show() #konec programa