Convoluzione: segnali a supporto compatto, secondo esempio

Clear["Global`"]

Consideriamo una funzione a supporto compatto, ad esempio una "rampa" di durata T :

f[T_, x_] :=  
      Which[x < 0,  0,  0 ≤ x < T,  x/T,  T ≤ x, 
        0]

Ad esempio, per T = 2.5

Plot[f[2.5, x],  {x, -1, 3}, 
        PlotStyle -> {Thickness[0.008], 
            RGBColor[1, 0, 0]}];

Introduciamo un impulso di ampiezza unitaria e durata T:

g[T_, x_] := 
      Which[x < 0,  0,  0 ≤ x ≤ T,  1,  T < x, 
        0]

Plot[g[2.5, x],  {x, -1, 3}, 
        PlotStyle -> {Thickness[0.008], 
            RGBColor[1, 0, 0]}];

Vogliamo calcolare la convoluzione tra f e g. Disegniamo le tre funzioni f[T, ξ], g[T, x - ξ] e il loro prodotto, per un assegnato valore di x ; ad esempio

Plot[{f[2.5, ξ],  g[2.5, 1 - ξ],  
          f[2.5, ξ]* g[2.5, 1 - ξ]},  {ξ, -3, 
          3}, 
PlotStyle -> {
{RGBColor[1, 0.5, 0]}, {RGBColor[1, 0, 1]}, {Thickness[
                0.008], RGBColor[1, 0, 0]}}];

Facciamo un'animazione:

Do[gr  =  
        Plot[{f[2.5, ξ],  g[2.5, x - ξ],  
            f[2.5, ξ]* g[2.5, x - ξ]},  {ξ, -3.5, 
            5.5}, 
PlotPoints -> 50, 
          PlotStyle -> {
{RGBColor[1, 0.5, 
                  0]}, {RGBColor[1, 0, 1]}, {Thickness[0.008], 
                RGBColor[1, 0, 
                  0]}}, 
DisplayFunction -> 
            Identity]; 
pt  =  
        Graphics[{PointSize[0.02],  RGBColor[0, 0, 1], 
            Point[{x, 0}]}]; 
Show[{gr, pt}, 
        DisplayFunction -> $DisplayFunction, 
AspectRatio -> 
          0.4, 
PlotRange -> {0, 
            1}, 
ImageSize -> {450, 
            250}], {x, -0.4, 5.4,  .1}]

Commento: evidenziata in rosso è la funzione prodotto f[ 2, ξ ] g[ 2, x - ξ ] , in blu il punto (x, 0). Calcoliamo esplicitamente la convoluzione. Pe x appartenente all'intervallo [0, T] la convoluzione vale

Integrate[t/T, {t, 0, x}]

Sull'intervallo [T, 2T] la convoluzione vale

Integrate[t/T, {t, x - T, T}] // Simplify

In sintesi:

conv[T_, x_] := 
      Which[x < 0, 0, 0 ≤ x < T, ((x^2)/(2 T)), 
        T ≤  x  ≤ 2  T, x - ((x^2)/(2 T)),  
        2  T  <  x,  0]

Tracciamo i grafici di f e di conv:

grConv  =  
        Plot[{f[2.5, x], conv[2.5, x]}, {x, -1, 
            5.5}, 
PlotStyle -> {RGBColor[1, 0.5, 
                0], {Thickness[0.008], RGBColor[0, 0, 1]}}];

Completiamo l'animazione, mostrando anche il grafico dell convoluzione:

Do[gr  =  
        Plot[{ g[2.5, x - ξ],  
            f[2.5, ξ]* g[2.5, x - ξ]},  {ξ, -3.5, 
            5.5}, 
PlotPoints -> 50, 
          PlotStyle -> {
{RGBColor[1, 0, 
                  1]}, {Thickness[0.008], 
                RGBColor[1, 0, 
                  0]}}, 
DisplayFunction -> 
            Identity]; 
pt  =  
        Graphics[{PointSize[0.02],  
            RGBColor[0, 0, 1], {Point[{x, 0}], 
              Point[{x, conv[2.5, x]}]}}]; 
segmento  =  
        Graphics[{Thickness[0.005],  RGBColor[0, 0, 1], 
            Line[{{x, 0}, {x, 
                  conv[2.5, x]}}]}]; 
Show[{grConv, gr, 
          pt,  segmento}, 
        DisplayFunction -> $DisplayFunction, 
AspectRatio -> 
          0.4, 
PlotRange -> {0, 
            1.5}, 
ImageSize -> {450, 
            250}], {x, -0.4, 5.4,  .05}]

Commento: il segmento verticale congiungente i due pallini blu rappresenta la convoluzione, cioè l'area della regione sottesa dalla curva rossa.