[Matlab] generare segnale periodico
salve ragazzi...devo generare lo script x un segnale periodico...ho scritto questo=
function [x,n] = replica_td(xg,N,n1,n2)
n=[n1:n2];
x = sum_k xg(n - k*N)
figure;stem(n,x);
ma quando vado nella command window,inserendo i valori di xg,N,n1 e n2 e richiamando la mia funzione mi da errore!
in particolare questo:
??? Error: File: replica_td.m Line: 3 Column: 10
Unexpected MATLAB expression.
qualcuno sa aiutarmi?
function [x,n] = replica_td(xg,N,n1,n2)
n=[n1:n2];
x = sum_k xg(n - k*N)
figure;stem(n,x);
ma quando vado nella command window,inserendo i valori di xg,N,n1 e n2 e richiamando la mia funzione mi da errore!
in particolare questo:
??? Error: File: replica_td.m Line: 3 Column: 10
Unexpected MATLAB expression.
qualcuno sa aiutarmi?
Risposte
x = sum_k xg(n - k*N)?? che diavoleria è?

so che l'errore è in quella riga!comunque sarebbe la formula
$x(n)=\sum_{k=oo}^oox_g$ $ (n-KN_0)$
dove $x_g$ è il segnale generatore e $N_0$ il periodo fondamentale
non so come scriverla!
$x(n)=\sum_{k=oo}^oox_g$ $ (n-KN_0)$
dove $x_g$ è il segnale generatore e $N_0$ il periodo fondamentale
non so come scriverla!
non so il tuo livello di Matlab, ma non puoi scrivere la formula pari pari, Matlab ha un suo linguaggio. Se $x_g$ è il vettore che rappresenta il tuo segnale, di $N$ elementi supponiamo, ti basta costruire un altro vettore di $k*N$ elementi ($k$ è il numero di repliche che vuoi) e "ripeterci" dentro il tuo segnale $x_g$.
esempio:
esempio:
segnaleperiodico=zeros(k*N); segnaleperiodico(1:N)=x_g; segnaleperiodico(N+1:2N+1)=x_g; ecc... stem(1:k*N,segnaleperiodico);
concettualmente ho capito,ma non capisco il codice
premetto che non ti ho scritto tutto il codice, ma solo la parte importante. Ho inizializzato un vettore chiamato "segnaleperiodico" (va inizializzato per scongiurare vari errori che Matlab può commettere) e l'ho riempito di $k*N$ zeri ($k$ ed $N$ sono dati del problema). Poi vado a sostituire nei primi $N$ elementi il segnale $x_g$, poi nei successivi $N$ elementi e così via fino a riempire il vettore. A quel punto il vettore "segnaleperiodico" contiene $k$ repliche del tuo segnale di partenza.
Ps: con la scrittura "segnaleperiodico(1:N)" accedi ai primi $N$ elementi del vettore stesso, idem per il resto.
Ps: con la scrittura "segnaleperiodico(1:N)" accedi ai primi $N$ elementi del vettore stesso, idem per il resto.
mi risulta un po difficile continuarlo,non ho mai visto niente in questa forma...
dovevo metterlo nella forma function [x,n] = replica_td(xg,N,n1,n2)
quindi le mie variabili di ingresso devono essere xg,N,n1 e n2 e quelle d'uscita x e n...
dovevo metterlo nella forma function [x,n] = replica_td(xg,N,n1,n2)
quindi le mie variabili di ingresso devono essere xg,N,n1 e n2 e quelle d'uscita x e n...
basta adattare il mio codice al tuo caso, io ti ho scritto il concetto che devi seguire. Per altro $k$ non è specificato quanto vale, non si capisce se vuoi plottare tutto il segnale periodico o solo una parte di esso...devi esporti meglio. Volevo farti una domanda: sono i tuoi primi approcci con Matlab?
si i primi...cmq non voglio specificare k,voglio una funzione generale...di modo che quando voglio generare un segnale periodico scrivo xg e poi richiamando questa funzione lo replico e ottengo ciò che voglio!
allora in ingresso alla funzione devi specificare pure $k$, Matlab mica può inventarsi il suo valore
Comunque, volendo esiste una funzione predefinita che replica vettore: "repmat"

se invece di scrivere la funzione volessi replicare, x es,una finestra rettangolare?o triangolare?come si fa?
con repmat è facilissimo:
per creare degli spazi tra le varie repliche puoi aggiungere degli zeri dove ti pare. Questo è l'esempio più facile, puoi creare funzioni complicatissime quando sarai più esperta, ma intanto ti consiglio di partire da questi casi
x=ones(5,1); %finestra rettangolare di altezza 1 e ampiezza 5 campioni z=[1 2 3 4 5 4 3 2 1]; %finestra triangolare fatta a caso y=repmat(x,3,1); %finestra rettangolare di altezza 1 e ampiezza 15 campioni s=repmat(z,3,1); %il risultato puoi vederlo da sola
per creare degli spazi tra le varie repliche puoi aggiungere degli zeri dove ti pare. Questo è l'esempio più facile, puoi creare funzioni complicatissime quando sarai più esperta, ma intanto ti consiglio di partire da questi casi

bene grazie mille