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 $\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:
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)
############################################
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 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ěší.
import copy
Q=copy.deepcopy(U)
Q[31:]=0
soucet(Q,u'Obdélníkové napětí -- prvních 30 harmonických složek')
Q=copy.deepcopy(U)
Q[21:]=0
soucet(Q,u'Obdélníkové napětí -- prvních 20 harmonických složek')
Q=copy.deepcopy(U)
Q[11:]=0
soucet(Q,u'Obdélníkové napětí -- prvních 10 harmonických složek')
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 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.
Q=copy.deepcopy(U)
Q[:11]=0
soucet(Q,u'Obdélníkové napětí -- Jen vyšší harmonicé složky')
Q=copy.deepcopy(U)
Q[:31]=0
soucet(Q,u'Obdélníkové napětí -- Jen vyšší harmonicé složky')
Q=copy.deepcopy(U)
Q[:51]=0
soucet(Q,u'Obdélníkové napětí -- Jen vyšší harmonicé složky')
Q=copy.deepcopy(U)
Q[:30]=0
Q[51:]=0
soucet(Q,u'Obdélníkové napětí -- Jen vyšší harmonicé složky')