
A parte gli scherzi (
gotthard ha scritto:quelle sul tuo vero problema.
fs = 1000;
t = -5:1/fs:5;
x = exp(2*t).*heaviside(-1*t);
h = heaviside(t - 3);
y = 1/fs * conv2(x,h, 'same');
plot(t, h);ylim([-1,2])
plot(t, y);ylim([0,0.7])
simo85 ha scritto:Ma io non so se il problema è mio che non voglio capire, o di Matlab.
gotthard ha scritto:Secondo me il problema è di Matlab, e occorre trovare un modo per trattare la convoluzione tra segnali a tempo continuo
Ts = 1/1000;
t = 0:Ts:2;
x = 10 * cos(20*pi*t + pi*(rand(1, 1) - 0.5));
h = 20 * exp(-10.^t).*cos(40 *pi*t);
y = Ts * conv(x, h, 'same');
plot(t, y);simo85 ha scritto:Ora ci provo.
. Per poter calcolare la convoluzione in quell'intervallo di tempo hai bisogno di conoscere le due funzioni
e
in altri due intervalli di tempo, possibilmente infiniti. Poiché in Matlab non puoi memorizzare vettori infiniti, devi decidere dove fermarti: se memorizzi una porzione troppo stretta di
e
, il risultato della convoluzione non sarà corretto nell'intervallo
e osserverai effetti di "bordo"; questo è il senso del mio messaggio [13].
e
tra -40 s e +40 s: in quale intervallo di tempo i risultati della convoluzione saranno validi?
instead of
(Anonimo).
ain't
, right?
in lieu of
.
for
arithm.

DirtyDeeds ha scritto:No, fermati, e torniamo indietro.
fs = 1000;
t = -5:1/fs:5;
hh = [t];
h = [t];
for i = 1:length(t)
if t(i) < 0
hh(i) = 1.0;
else
hh(i) = 0.0;
end
if t(i) > 3
h(i) = 1.0;
else
h(i) = 0.0;
end
end
x = exp(2*t).*hh;
x1 = exp(2*t).*heaviside(-1*t);
y = 1/fs * conv(x,h, 'same');
y1 = 1/fs * conv(x1,heaviside(t-3), 'same');
subplot(6,1,1);
plot(t,hh);ylim([-1,2]);grid on;xlabel('hh');
subplot(6,1,2);
plot(t,x);ylim([-1,2]);grid on;xlabel('exp(2t) * hh');
subplot(6,1,3);
plot(t,h);ylim([-1,2]);grid on;xlabel('h');
subplot(6,1,4);
plot(t,y);ylim([-1,2]);grid on;xlabel('1/fs * conv(x,h, same)');
subplot(6,1,5);
plot(t,x1);ylim([-1,2]);grid on;xlabel('exp(2t) * heaviside(- t)');
subplot(6,1,6);
plot(t,y1);ylim([-1,2]);grid on;xlabel('1/fs * conv(x1, heaviside(t-3), same)');
DirtyDeeds ha scritto:Poiché in Matlab non puoi memorizzare vettori infiniti, devi decidere dove fermarti: se memorizzi una porzione troppo stretta die
, il risultato della convoluzione non sarà corretto nell'intervallo
e osserverai effetti di "bordo"; questo è il senso del mio messaggio [13].
DirtyDeeds ha scritto:Puoi anche ragionare in un altro modo: nel programma in [12] ... in quale intervallo di tempo i risultati della convoluzione saranno validi?
, se non sbaglio. simo85 ha scritto:Usando il codice del messaggio 12 per timestep differenti e con campioni da -3s a 3s, ottengo valori diversi sull'asse y.
instead of
(Anonimo).
ain't
, right?
in lieu of
.
for
arithm.

fs = 500;
t = 0:1/fs:2;
x = square(pi*t);
h = 3*square(4*pi*t);
y = 1/fs * conv(x,h,'same');
plot(t,y);
DirtyDeeds ha scritto:devi decidere dove fermarti: se memorizzi una porzione troppo stretta die
, il risultato della convoluzione non sarà corretto nell'intervallo
e osserverai effetti di "bordo"; questo è il senso del mio messaggio [13].
(di lunghezza infinita) per un lunghezza finita abbastanza lunga da poter rappresentare il risultato della convoluzione
con la lunghezza di
:fs = 100;
t = -3:1/fs:6;
th = -12:1/fs:12;
x = exp(2*t).*heaviside(-1*t);
h = heaviside(th - 3) - heaviside(th - 12);
y = 1/(fs) * conv2(x, h, 'same');
plot(t,x);
plot(th,h);
plot(t,y);grid on; ylim([-0.5,1]);
fs = 100;
t = -3:1/fs:6;
th = -12:1/fs:12;
x = exp(2*t).*heaviside(-1*t);
h = heaviside(th - 3);
y = 1/(fs) * conv2(x, h, 'same');
plot(t,x);
plot(th,h);
plot(t,y);grid on; ylim([-0.5,1]);Torna a Programmi applicativi: simulatori, CAD ed altro
Visitano il forum: Nessuno e 8 ospiti