#!/usr/bin/env python # coding: utf-8 # Vzorkování # ==================== # In[1]: import matplotlib.patches as mpp from scipy.fftpack import fft, ifft ##########################################3 # Konstanty fs=8000 Ts=1./fs length=1 fmin=5. Tmin=1./fmin # časová osa t = arange(0,length,1./fs) u = 1*sin(2*pi*5*t)+1.2*sin(2*pi*6*t)+0.9*cos(2*pi*7*t)+\ 0.99*cos(2*pi*8*t)+0.7*cos(2*pi*9*t)+1*cos(2*pi*10*t)+\ 0.6*cos(2*pi*11*t)+0.8*cos(2*pi*12*t)+0.6*cos(2*pi*13*t)+\ 0.55*cos(2*pi*14*t)+0.45*cos(2*pi*15*t)+0.35*cos(2*pi*16*t) # Spektrum Ck= fft(u) absCk = 2./len(u) * numpy.abs(Ck)[:len(Ck)/2] f = arange(0,fs/2,float(fs)/len(Ck)) # analogový signál fig=figure() subplot(211) plot(t,u) title(u'Analogový signál') grid('on') xlabel(r't\,[s] $\rightarrow$', x=0.9) ylabel('$\mathrm u$\,[V] $\uparrow$', y=0.9, rotation=0) ylim([-3, 3]) xlim([0,3*Tmin]) subplot(212) title(ur'Analogový signál -- amplitudové spektrum') plot(f,absCk,'.-') xlabel(r'f\,[Hz] $\rightarrow$', x=0.9) ylabel('$\mathrm U$\,[V] $\uparrow$', y=0.9, rotation=0) ylim([0,1.1*max(absCk)]); xlim([0,100]) grid(1) text(4,-0.15 , '$f_\mathrm{min}$', size=16) text(15,-0.15 ,'$f_\mathrm{max}$', size=16) #figtext(0,1 , '$\mathrm f_m$', size=16) tight_layout() # In[11]: faktor=200 # kolikrát je vzorkovácí frekvence menší než fs # jehlový vzorek uj=u.copy() for i,data in enumerate(uj): if i%faktor!=0: uj[i]=0 Sj= fft(uj) absSj =2.*faktor/len(uj) * numpy.abs(Sj)[:len(Sj)/2] #různě široký vzorek uvz=u.copy() zmena=False for i,data in enumerate(uvz): sirka = 30 # šířka vzorkovacího impulzu if i%faktor==0: continue for s in range(1,sirka): if ((i-s)%faktor)==0: uvz[i] = uvz[i-s] zmena = True if not zmena : uvz[i]=0 zmena = False ## Spektrum Svz= fft(uvz) absSvz =2.*faktor/len(uvz)/sirka * numpy.abs(Svz)[:len(Svz)/2] fig=figure() subplot(211) plot(t,u,':r',label=u'původní signál') #stem(t[::faktor], uvz[::faktor],'b-','ro','x') plot(t,uvz,label=u'navzorkovaný signál') title(u'Vzorkovaný signál') grid('on') xlabel(r't\,[s] $\rightarrow$', x=0.9) ylabel('$\mathrm u$\,[V] $\uparrow$', y=0.9, rotation=0) ylim([-3,3]) xlim([0,2*Tmin]) legend() subplot(212) title(ur'Vzorkovaný signál -- amplitudové spektrum') plot(f,absSj,'r.:', label=u'původní signál') plot(f,absSvz,'b.-',label=u'navzorkovaný signál' ) xlabel(r'f\,[Hz] $\rightarrow$', x=0.9) ylabel('$\mathrm U$\,[V] $\uparrow$', y=0.9, rotation=0) ylim([0,1.3]); xlim([0,100]) grid(1) #legend() axvline(20, linestyle='--', linewidth=2, color='m') axvline(40, linestyle='--', linewidth=2, color='m') axvline(60, linestyle='--', linewidth=2, color='m') axvline(80, linestyle='--', linewidth=2, color='m') text(19,-0.25 , '$\mathbf{f_s \over 2}$', size=16) text(39,-0.25 , '$\mathbf{f_s }$', size=16) #figtext(0,1 , '$\mathrm f_m$', size=16) tight_layout() # In[3]: fig=figure() subplot(211) plot(t,u,'b',label=u'') #stem(t[::faktor], uvz[::faktor],'b-','ro','x') #plot(t,uvz,label=u'navzorkovaný signál') title(u'Analogový signál') grid('on') xlabel(r't\,[s] $\rightarrow$', x=0.9) ylabel('$\mathrm u$\,[V] $\uparrow$', y=0.9, rotation=0) ylim([-3,3]) xlim([0,2*Tmin]) #legend() fig=figure() ax=subplot(211) plot(t,u,':r',label=u'původní signál') #stem(t[::faktor], uvz[::faktor],'b-','ro','x') plot(t,uvz,label=u'navzorkovaný signál') title(u'Vzorkovaný signál') grid('on') xlabel(r't\,[s] $\rightarrow$', x=0.9) ylabel('$\mathrm u$\,[V] $\uparrow$', y=0.9, rotation=0) ylim([-3,3]) xlim([0,2*Tmin]) #legend() ax.add_patch( mpp.FancyArrowPatch((0.14,-2), (0.20,-2), arrowstyle='-', lw=2, linestyle='solid', mutation_scale=15, color='blue', alpha=1, shrinkA=0, shrinkB=0 ), ) ax.add_patch( mpp.FancyArrowPatch((0.14,-2), (0.15,-2), arrowstyle='->', lw=2, linestyle='solid', mutation_scale=15, color='blue', alpha=1, shrinkA=0, shrinkB=0 ), ) ax.add_patch( mpp.FancyArrowPatch((0.175,-2), (0.20,-2), arrowstyle='<-', lw=2, linestyle='solid', mutation_scale=15, color='blue', alpha=1, shrinkA=0, shrinkB=0 ), ) text(0.185,-2.8, ur'$\mathrm{T_s}$',size=16) axvspan(0.15, 0.175, facecolor='g', alpha=0.2, ymin=0.166, ymax=0.5) # In[7]: figure() sx=subplot(212) title(ur'Obnova původního signálu') plot(f,absSj,'b.-', label=u'původní signál') #plot(f,absSvz,'b.-',label=u'navzorkovaný signál' ) xlabel(r'f\,[Hz] $\rightarrow$', x=0.9) ylabel('$\mathrm U$\,[V] $\uparrow$', y=0.9, rotation=0) ylim([0,1.1*max(absCk)]); xlim([0,100]) grid(1) axvspan(0, 20, facecolor='g', alpha=0.2, ymin=0, ymax=.99) text(19,-0.25 , '${1\over 2}f_\mathrm{s}$', size=16) text(39,-0.25 , '$f_\mathrm{s}$', size=16)