Pagina 1 di 4

Rappresentare la convoluzione continua con Matlab

MessaggioInviato: 20 ago 2015, 21:50
da simo85
Ciao a tutti O_/

Mi piacerebbe rappresentare, con matlab, la convoluzione continua di due segnali, ma sto avendo qualche problemino..

Giusto per fare un esempio tratto dal libro Signals & Systems 2nd Edition by Oppenheim, Willsky e Nawab, avendo due segnali:

\begin{aligned}
& x(\tau) = e^{2\tau}u(-\tau)\\
& h(\tau) = u(t - 3)
\end{aligned}

Si ha:

y(t) = x(t) * h(t) = \begin{cases}
{\text e^{2(t-3)}\over 2} & t < 3\\
{1 \over 2} & t \geq 3
\end{cases}

Rappresentazione ottenuta con Geogebra a mano:

xhconv.png
xhconv.png (7.01 KiB) Osservato 5459 volte


Ecco, vorrei ottenere la stessa rappresentazione con matlab.
Ho provato con questo codice:

Codice: Seleziona tutto
>> y = conv(x,h,'full');
>> plot(y)
>> t = -10:0.001:10;
>> x = exp(2*t).*heaviside(-t);
>> h = heaviside(t - 3);
>> y = conv(x,h,'full');
>> ty =  -20:0.001:20;
>> plot(ty,y);


Però la rappresentazione che ottenogo è questa:

sshot.png
sshot.png (8.04 KiB) Osservato 5459 volte


Che non mi sembra corretto..

Con il caso discreto trattato qui: viewtopic.php?f=7&t=59863#p596740

Codice: Seleziona tutto
>> h1 = [1.0, 1.0, 1.0];
>> x1 = [0.5, 2.0];
>> n = 0:3;
>> y = conv(x1,h1);
>> stem(n,y1);


Non ho gli stessi problemi.
Dove sbaglio per il caso continuo ?

Ringrazio in anticipo.

O_/

Simo

Re: Rappresentare la convoluzione continua con Matlab

MessaggioInviato: 20 ago 2015, 23:08
da DirtyDeeds
simo85 ha scritto:Mi piacerebbe rappresentare, con matlab, la convoluzione continua di due segnali, ma sto avendo qualche problemino..


Beh, la funzione conv Matlab fa sempre solo una convoluzione discreta. Quindi occhio ai tempi e alle normalizzazioni ;-)

Re: Rappresentare la convoluzione continua con Matlab

MessaggioInviato: 20 ago 2015, 23:14
da simo85
DirtyDeeds ha scritto:Beh, Matlab fa sempre solo una convoluzione discreta.

Si, in effetti è quello su cui stavo ragionando. :-)

Re: Rappresentare la convoluzione continua con Matlab

MessaggioInviato: 21 ago 2015, 1:43
da simo85
Dunque, forse mi sono un po' ... incasinato..

Ho ricominciato partendo da questo codice:

Codice: Seleziona tutto
>> fs = 1000;
>> t = -10:1/fs:10;
>> x = exp(2*t).*heaviside(-1*t);
>> h = heaviside(t - 3);
>> plot(t,x);hold on;plot(t,h);ylim([-1, 2]);grid on;


Con il quale riesco tranquillamente a rappresentare i due segnali:

xxx.png
xxx.png (6.11 KiB) Osservato 5428 volte


Qui la funzione h(t) è rappresentata secondo la definizione, nel messaggio 1 ho rappresentato direttamente quella 'specchiata'.

Ora, si tratta di normalizzare il vettore \hat y.

Ho proceduto cosi:

Codice: Seleziona tutto
>> y = 1/fs * conv(x,h,'full');


Ora si, il vettore di uscita y è normalizzato, ma la figura presenta sempre quella curvatuta verso la fine:



Ho provato anche ad estendere l'asse delle ascisse da -30 \leq t \leq 30 per x(t) e y(t), rappresentando da 0 a 120t con gli stessi risultati..

y.png
y.png (6.03 KiB) Osservato 5428 volte


:-k

Dove sbaglio ?

Re: Rappresentare la convoluzione continua con Matlab

MessaggioInviato: 25 ago 2015, 12:31
da dimaios
simo85 ha scritto:Dove sbaglio ?


Prova a controllare il dominio delle funzioni di partenza. Occhio agli effetti di bordo! ;-)

Re: Rappresentare la convoluzione continua con Matlab

MessaggioInviato: 25 ago 2015, 12:44
da simo85
Ciao Foto Utentedimaios

dimaios ha scritto:Prova a controllare il dominio delle funzioni di partenza.

Credo di non sapere come fare con matlab.

Adesso che ci penso, forse i problemi derivano dall'usare la funzione heaviside :?:

:-k

Immaginavo ci fosse qualche problema relazionato.. Perché se estendo il dominio di t, si estende l'intervallo per cui y(t) = 0.5. Ma poi si taglia, come si può osservare.

Re: Rappresentare la convoluzione continua con Matlab

MessaggioInviato: 25 ago 2015, 12:45
da dimaios
I vettori che utilizzi per la convoluzione sono sempre finiti in Matlab.

Re: Rappresentare la convoluzione continua con Matlab

MessaggioInviato: 25 ago 2015, 12:48
da simo85
dimaios ha scritto:I vettori che utilizzi per la convoluzione sono sempre finiti in Matlab.

OK, e forse io sto abusando di tutto questo..

Se ho capito (forse) bene, sono proprio io che sto andando oltre l'intervallo restituito da matlab.

Dico bene ?

Re: Rappresentare la convoluzione continua con Matlab

MessaggioInviato: 25 ago 2015, 12:50
da dimaios
Stai tentando di rappresentare un gradino con supporto infinito tramite un vettore di lunghezza finita.

Re: Rappresentare la convoluzione continua con Matlab

MessaggioInviato: 25 ago 2015, 12:59
da simo85
OK. Esiste allora una funzione per conoscere il limite dell'intervallo, in questo caso su t ?

Altrimenti penso di poterlo calcolare facilmente.
Grazie ancora del tuo aiuto!