#!/usr/bin/env python # coding: utf-8 # Význam nízkých a vysokých harmonických složek # ================================================= # # Obdélníkový časový průběh # ---------------------------- # # Amplitudy jednotlivých hramonických složek obdélníkového časového průběhu lze vyjádřit vztahem: # # $$U_n = 2U_{max} \mathrm{DCL}\cdot \mathrm{sinc}(n \pi \mathrm{DCL})$$ # # Kde $\mathrm{DCL}$ je čnitel plnění a $\mathrm{sinc}$ je tzv. # [kardinální sinus](https://en.wikipedia.org/wiki/Sinc_function) # $\mathrm{sinc}(x) = \frac{\sin(x)}{x}$. # # Amplitudové spektrum obdélníkového napětí $U_{max}=1 V$, $\mathrm{DCL}=25%$, $f=1 Hz$, tedy vypadá například takto: # In[42]: Um=1 DCL=0.25 f=linspace(0,1000,1001) U=2.*Um*DCL*sinc(f*DCL) U[0]=U[0]/2. figure(figsize=(10,7)) minorticks_on() xlabel(r'$\rightarrow$ \\f [Hz]',fontsize=16, x=0.9 ) ylabel(r'U [V] $\uparrow$',fontsize=16, y=0.9, rotation=0) title(u"Amplitudové frekvenční spektrum -- obdélník DCL=25\%)") grid(True, 'major', linewidth=1) grid(True, 'minor', linewidth=0.5) # Amplitudové spekturm stem(f[0:40],abs(U[0:40]),'b-','ro') # ještě obálková finkce x=linspace(0,40,1000) plot(x,abs(2*Um*DCL*sinc(x*DCL)),':k') grid(1) # Součet všech harmonických složek # ---------------------------------- # In[55]: ############################################ def soucet(U,titulek,f1=1): T1=1./f1 t = linspace(0,3*T1,1000) u = zeros(1000) for f,A in enumerate(U): u+=A*cos(2*pi*f*f1*t) figure(figsize=(10,7)) subplot(211) title(titulek) xlim(0,60) stem(arange(len(U)),abs(U),'b-','r.') xlabel(r'f [Hz] $\rightarrow$ ',fontsize=16, x=0.9 ) ylabel(r'U [V] $\uparrow$',fontsize=16, y=0.9, rotation=0) grid(True, 'major', linewidth=1) grid(True, 'minor', linewidth=0.5) subplot(212) minorticks_on() xlabel(r'$\rightarrow$ \\t [s]',fontsize=16, x=0.9 ) ylabel(r'u [V] $\uparrow$',fontsize=16, y=0.9, rotation=0) grid(True, 'major', linewidth=1) grid(True, 'minor', linewidth=0.5) plot(t,u,lw=2) ylim( (-1.1*abs(min(u)) if abs(min(u))>0.1 else -0.2 , 1.1*max(u) ) ) ########################################### soucet(U,u"Obdélníkové napětí -- DCL=25\%") # Nižší harmonické složky -- základní tvar # ---------------------------------------- # # Nižší harmonické složky určují **základní tvar**. Pokud zachováme nižší harmonické složky # a odstraníme vyšší harmonické složky # přesto, že tvar nebude přesný bude rozeznatelný. # # Čím méně harmonických složek zahrneme tím bude tvar méně přesný, ale jeho zákldní rysy zůstanou zachovýny. # # Všímněte si teké strmosti hran. **Čím více vyššíh hramonických složek je zachováno, tím jsou hrany strměší.** # # In[56]: import copy Q=copy.deepcopy(U) Q[31:]=0 soucet(Q,u'Obdélníkové napětí -- prvních 30 harmonických složek') # In[57]: Q=copy.deepcopy(U) Q[21:]=0 soucet(Q,u'Obdélníkové napětí -- prvních 20 harmonických složek') # In[58]: Q=copy.deepcopy(U) Q[11:]=0 soucet(Q,u'Obdélníkové napětí -- prvních 10 harmonických složek') # In[59]: Q=copy.deepcopy(U) Q[6:]=0 soucet(Q,u'Obdélníkové napětí -- prvních 5 harmonických složek') # Vyšší harmonické složky -- rychlé změny # ---------------------------------------- # # Vyšší harmonické složky představují **rychlé změny**. # Na předchozích obrázcích je patrné, že čím více vyššíh hramonických složek je zachováno, tím jsou hrany strměší. # Pokud odfiltrujeme nižsí harmonické složky a ponecháme pouze vyšší harmonické složky původní tvar už nebude možné # rozeznat, ale zůstanou nám práve **rychlé změny** -- v místě původní strmé hrany se oběvý zákmit. # # In[60]: Q=copy.deepcopy(U) Q[:11]=0 soucet(Q,u'Obdélníkové napětí -- Jen vyšší harmonicé složky') # In[61]: Q=copy.deepcopy(U) Q[:31]=0 soucet(Q,u'Obdélníkové napětí -- Jen vyšší harmonicé složky') # In[62]: Q=copy.deepcopy(U) Q[:51]=0 soucet(Q,u'Obdélníkové napětí -- Jen vyšší harmonicé složky') # In[64]: Q=copy.deepcopy(U) Q[:30]=0 Q[51:]=0 soucet(Q,u'Obdélníkové napětí -- Jen vyšší harmonicé složky')