[Matlab] generare segnale periodico

kate-sweet
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?

Risposte
Blackorgasm
x = sum_k xg(n - k*N)?? che diavoleria è? :D

kate-sweet
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!

Blackorgasm
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:

segnaleperiodico=zeros(k*N);
segnaleperiodico(1:N)=x_g;
segnaleperiodico(N+1:2N+1)=x_g;
ecc...

stem(1:k*N,segnaleperiodico);

kate-sweet
concettualmente ho capito,ma non capisco il codice

Blackorgasm
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.

kate-sweet
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...

Blackorgasm
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?

kate-sweet
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!

Blackorgasm
allora in ingresso alla funzione devi specificare pure $k$, Matlab mica può inventarsi il suo valore :D Comunque, volendo esiste una funzione predefinita che replica vettore: "repmat"

kate-sweet
se invece di scrivere la funzione volessi replicare, x es,una finestra rettangolare?o triangolare?come si fa?

Blackorgasm
con repmat è facilissimo:

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 ;)

kate-sweet
bene grazie mille

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.