Produit de Convolution

Produit de Convolution

Distribution de Dirac

Comment Représenter mathématiquement une impulsion ?

Considérons le cas suivant :

charge_condo.svg

Le condensateur étant initialement déchargé, si je ferme l’interrupteur à t=0, ce dernier aura in fine une charge Q=CU.
Il y a donc eu circulation ( infiniment brève) d’un courant, soit une impulsion de courant.
Supposons que l’on représente ce courant par une fonction telle que : i(0)=1, i(t>0)=0

alors

+i(t)dt=0 \int_{-\infty}^{+\infty}i(t) dt=0

donc Q=0
Cette représentation mathématique n’est donc pas valable.
Considérons maintenant :

def_dirac.svg

Définition

Une distribution de dirac peut se définir ainsi :

δ(0)=+ \delta(0) = +\infty
δ(t0)=0 \delta(t \neq 0) = 0

+δ(t)dt=1 \boxed{ \int_{-\infty}^{+\infty}\delta(t)dt=1 }

Propriétés
+g(t).δ(t)dt=g(0) \int_{-\infty}^{+\infty}g(t).\delta(t)dt=g(0)
+g(t).δ(tt0)dt=g(t0) \int_{-\infty}^{+\infty}g(t).\delta(t-t_{0})dt=g(t_{0})


Réponse Impulsionnelle

Réponse d’un système à une impulsion de dirac.

Système linéaire du première ordre :

Equation Différentielle
τ.dy(t)dt+y(t)=x(t) \tau.\frac{\mathrm{d}y(t) }{\mathrm{d} t}+y(t)=x(t)

Résolution de l’équation différentielle pour trouver la réponse impulsionnelle

resol_rep_imp.svg

y(t)=1t0(1etτ) y(t)=\frac{1}{t_0}(1-e^{-\frac{t}{\tau}})

y(t0)=1t0(1et0τ) y(t_0)=\frac{1}{t_0}(1-e^{-\frac{t_0}{\tau}})
y(t)=B.e(tt0)τ) y(t)=B.e^{\frac{-(t-t_0)}{\tau}})
y(t0)=1t0(1et0τ).e(tt0)τ y(t_0)=\frac{1}{t_0}(1-e^{-\frac{t_0}{\tau}}).e^{\frac{-(t-t_0)}{\tau}}

Rappel : Développement limité en 0 :
x0ex1+x x\rightarrow 0\Rightarrow e^x \approx 1+x

t00 y(t0)1t0(t0τ).etτ t_0\rightarrow 0 \ \Rightarrow y(t_0) \approx \frac{1}{t_0}(\frac{t_0}{\tau}).e^{-\frac{t}{\tau}}

Réponse impulsionnelle

y(t)=h(t)=1τ.etτ \boxed{ y(t)=h(t)=\frac{1}{\tau}.e^{-\frac{t}{\tau}} }

rep_imp_dec.svg


Convolution

Produit de convolution

h(t) réponse impulsionnelle

y(t)=(hx)(t) y(t)=(h\otimes x)(t)
y(t)=+h(tτ).x(τ)dτ y(t)=\int_{-\infty}^{+\infty}h(t-\tau).x(\tau)d\tau
y(t)=+h(τ).x(tτ)dτ y(t)=\int_{-\infty}^{+\infty}h(\tau).x(t-\tau)d\tau

Connaissant la réponse impulsionnelle d’un système, il est possible d’en déduire tout type de réponse avec le produit de convolution.

Exemple : Réponse à un échelon (réponse indicielle):

y(t)=(hx)(t) y(t)=(\color{red}{h}\otimes x)(t) y(t)=+1τ.e(tθ)τstep(θ)dθ y(t)=\int_{-\infty}^{+\infty} \color{red}{\frac{1}{\tau}.e^{-\frac{(t-\theta)}{\tau}}}step(\theta)d\theta
y(t)=0t1τ.e(tθ)τdθ y(t)=\int_{0}^{t} \color{red}{\frac{1}{\tau}.e^{-\frac{(t-\theta)}{\tau}}}d\theta
y(t)=[e(tθ)τ]0t y(t)=\left [ e^{\frac{-(t-\theta)}{\tau}} \right ]_{0}^{t}

y(t)=1etτ \boxed{ y(t)=1-e^{-\frac{t}{\tau}} }

Explication

explication_conv.svg


Script Scilab pour générer les figures ci dessus

convolution.sce
N=300 ;     // nombre de points

t_min=0
t_max=0.0001
y_min=0
y_max=10
t=[0:t_max/(N-1):t_max];

Nrep=30;    // nombre d’impulsions élémentaires 
inc=2;      // Durée d'une impulsion
Ne=80 ;     // Nombre d'échantillons sur une réponse élémentaire

R=10e3
C=100e-9
tau=R*C
f0=1/tau ; 
omega0=2*%pi*f0 ; 
n=[0:Ne-1]; 
 
e0=ones(1,inc) ;                    // IMPULSION
h0=omega0*exp(-omega0*n*t(1,Ne));   // REPONSE IMPULSIONNELLE
 
// définition des matrices où seront placées les impulsions et réponses 
h=zeros(Nrep,N);       // Matrice de zéros Nrep*N
e=zeros(Nrep,N); 

//------------------------------------------------------------------------------
//      FENETRE 0 : REPONSE INDICIELLE
//------------------------------------------------------------------------------
xset("window",0) ; xset("font size", 4); fig=get("current_figure")
index=1 
for i=0:inc:inc*Nrep-1, 
   
        h(i+1, : )=[zeros(1,i), h0 ,zeros(1,N-Ne-i)]; 
        e(i+1, : )=[zeros(1,i), e0 ,zeros(1,N-inc-i)]; 
        
        xsetech([0 ,0,1,1/3]) ; plot2d2(t,e(i+1,:)) ;
        
        a=gca(); 
            a.x_location = "origin"; 
            a.y_location = "origin"; 
            a.font_style=10;
            poly1= a.children(1).children(1); 
            poly1.foreground = index; 
            poly1.thickness = 1; 
            poly1.clip_state='off';
        
        xsetech([0 ,1/3,1,1/3]) ; plot2d(t,h(i+1,:)) ; 
       
        a=gca(); 
            a.x_location = "origin"; 
            a.y_location = "origin"; 
            a.font_style=10;
            poly1= a.children(1).children(1); 
            poly1.foreground = index;   
            poly1.thickness = 1;  
            poly1.clip_state='off';
        
        
        index=index+1;          // Modif couleur
        if index==8 then
               index=1
        end

end 

s=sum(h,'r'); // calcul de la sortie 
xsetech([0 ,2/3,1,1/3]) ; plot2d(t,s) ; 
title(["Somme des Réponses Elémentaires"],"color","black","fontsize",2, "fontname",5);

a=gca(); 
    a.x_location = "origin"; 
    a.y_location = "origin"; 
    a.font_style=10;
    poly1= a.children(1).children(1); 
    poly1.foreground = 5; 
    poly1.thickness = 1;  
    poly1.clip_state='off';

xsetech([0 ,0,1,1/3]) ;   title(["Entrée Décomposée en Impulsions"],"color","black","fontsize",2, "fontname",5);
xsetech([0 ,1/3,1,1/3]) ; title(["Réponse pour chaque Impulsion"],"color","black","fontsize",2, "fontname",5); 
 
xs2svg(fig,'./illustrations/explication_conv.svg') 

//------------------------------------------------------------------------------
//      FENETRE 1 : IMPULSION ET REPONSE IMPULSIONNELLE
//------------------------------------------------------------------------------
xset("window",1) ; xset("font size", 4); fig=get("current_figure")
xsetech([0 ,0,0.5,0.5]) ;
plot2d2(t,e(1,: )) 
title(["Impulsion à t=0"],"color","black","fontsize",2, "fontname",5);
a=gca(); 
    a.font_style=10;
    poly= a.children(1).children(1); 
    poly.foreground = 2; 
    poly.thickness = 1; 

xsetech([0 ,0.5,0.5,0.5]) ;
plot2d(t,h(1,: )) ;
title(["Réponse h(t)"],"color","black","fontsize",2, "fontname",5);
a=gca(); 
    a.font_style=10;
    poly= a.children(1).children(1); 
    poly.foreground = 5; 
    poly.thickness = 3; 

xsetech([0.5 , 0,0.5,0.5]) ;
plot2d2(t,e(33,:))  
title(["Impulsion à t=k"],"color","black","fontsize",2, "fontname",5);
a=gca(); 
    a.font_style=10;
    poly= a.children(1).children(1); 
    poly.foreground = 2; 
    poly.thickness = 1; 

xsetech([0.5,0.5,0.5,0.5]) ;
plot2d(t,h(33,:)) ;
title(["Réponse h(t - k)"],"color","black","fontsize",2, "fontname",5);
a=gca(); 
    a.font_style=10;
    poly= a.children(1).children(1); 
    poly.foreground = 5; 
    poly.thickness = 3; 
    
xs2svg(fig,'./illustrations/rep_imp_dec.svg')  
    
//*****************************************************************************