Onda triangolare con Matlab
devo genereare una funzione triangolare in Matlab. La replica di un triangolo.
Ho pensato:
t=linspace(0, .01, 500); % creo il vettore dei tempi
c=0; %contatore
A=2; %ampiezza del triangolo
d=0;
for i=1:500,
if c<50
c=c+1;
else
if c>=50,
c=c+1;
d=-c;
end %end if
end %end else
end %end if
x(i) = A*(1-d);
if c==100,
c=0;
%qui ci vuole un altro end? cioè l'end dell' if c==100?
end %end for
length(x)
length(t)
plot(t,x)
1) mi faccio restitutire le lunghezze di x e t e vedo che x ha 501 elementi, ma se i va da 1 a 500 come è possibile?
2) dove sbaglio in questo codice? La fuznione che ottengo è abbastanza lontana dall'essere un triangolo
Ho pensato:
t=linspace(0, .01, 500); % creo il vettore dei tempi
c=0; %contatore
A=2; %ampiezza del triangolo
d=0;
for i=1:500,
if c<50
c=c+1;
else
if c>=50,
c=c+1;
d=-c;
end %end if
end %end else
end %end if
x(i) = A*(1-d);
if c==100,
c=0;
%qui ci vuole un altro end? cioè l'end dell' if c==100?
end %end for
length(x)
length(t)
plot(t,x)
1) mi faccio restitutire le lunghezze di x e t e vedo che x ha 501 elementi, ma se i va da 1 a 500 come è possibile?
2) dove sbaglio in questo codice? La fuznione che ottengo è abbastanza lontana dall'essere un triangolo
Risposte
t=linspace(0, .01, 500); % creo il vettore dei tempi c=0; %contatore A=2; %ampiezza del triangolo d=0; for i=1:500, if c<50 c=c+1; else if c>=50, c=c+1; d=-c; end %end if end %end if x(i) = A*(1-d); if c==100, c=0; end end %end for length(x) length(t) plot(t,x)
te l'ho corretto in modo che t e x abbiano la stessa lunghezza, ma non so se il risultato che volevi ottenere sia quello
grazie.
Cmq, il risultato che voglio ottenere è diverso. Vorrei un'onda triangolare di ampiezza A, insomma una successione di triangoli ciascuno dei quali ha durata 100 campioni; pertanto per i primi 50 campioni (da 0 a 49) salgo e gli altri 50 (da 50 a 99) scendo.. per 500 campioni
Cmq, il risultato che voglio ottenere è diverso. Vorrei un'onda triangolare di ampiezza A, insomma una successione di triangoli ciascuno dei quali ha durata 100 campioni; pertanto per i primi 50 campioni (da 0 a 49) salgo e gli altri 50 (da 50 a 99) scendo.. per 500 campioni
ecco il codice:
x=[0:49 50:-1:1];
tri = repmat(x,1,5);
plot(tri)
devi solo mettere a posto l'asse dei tempi e l'ampiezza del segnale.
x=[0:49 50:-1:1];
tri = repmat(x,1,5);
plot(tri)
devi solo mettere a posto l'asse dei tempi e l'ampiezza del segnale.
"luca.barletta":
ecco il codice:
x=[0:49 50:-1:1];
tri = repmat(x,1,5);
plot(tri)
devi solo mettere a posto l'asse dei tempi e l'ampiezza del segnale.
so che ci sono funzioni predefinite, il problema è che la traccia richiede esplicitamente di risolvere l'esercizio con il ciclo for
a parte che usare i cicli for in matlab è quasi un'eresia se non sono strettamente necessari
, cmq potresti usare un primo ciclo for per scrivere i campioni da 1 a 50, poi un altro per scrivere quelli da 51 a 100, infine un terzo ciclo per replicare 5 volte il vettore di 100 elementi appena creato.
