PDA

View Full Version : [Matlab] Media di un segnale


vaka_85
18-05-2009, 16:38
Ciao a tutti,
probabilmente è una domanda banale per molti, ma ho questo problema:

ho un segnale impulsivo che, periodicamente, è positivo e negativo.

Siccome devo evidenziare che questi impulsi si "azzerano" tra loro, dovrei fare la media di tutta la forma d'onda, in modo da avere un grafico piatto ed evidenziare impulsi "estranei" da quelli generati, cioè casuali rispetto ai positivi e negativi.

Spero di essermi spiegato... come posso fare? va bene semplicemente usare la funzione mean oppure no?

grazie

vaka_85
20-05-2009, 15:14
ho notato che la funzione mean non va bene perchè dà solo un punto...

non è possibile fare la media di un segnale in modo che venga fuori un segnale e non un punto?

serbring
20-05-2009, 16:19
ho notato che la funzione mean non va bene perchè dà solo un punto...

non è possibile fare la media di un segnale in modo che venga fuori un segnale e non un punto?

forse dovrai usare la media mobile, ma non sò come si implementa su matlab

vaka_85
20-05-2009, 16:51
ah ecco! allora adesso ho capito :D
:muro:

vaka_85
20-05-2009, 17:11
ma il segnale è unico! non sono 2...

vaka_85
20-05-2009, 17:14
allora forse è una cosa che non si può fare...
cioè gli impulsi dello stesso segnale si devono annullare tra loro. forse è impossibile :)

ho avuto un'altra idea, per traslare il segnale di un "x" come faccio?

vaka_85
20-05-2009, 17:40
allora...

l'onda è impulsiva ma non quadra. gli impulsi sono derivate dell'impulso gaussiano, quindi roba incasinata. ecco perchè è difficile generare una seconda forma d'onda con le stesse caratteristiche... anzi direi impossibile contando che nel circuito reale che genera questi impulsi a causa dell'adattamento pessimo si formano anche delle riflessioni indesiderate...

se hai una chat magari possiamo parlarne più facilmente :)
ora vado a casa, ritorno dopo cena.

grazie ;)

vaka_85
20-05-2009, 18:57
allora, la forma d'onda è fatta da tanti "impulsi" di questo tipo:

http://img527.imageshack.us/img527/6527/54040170.jpg

che, periodicamente, si alternano positivi (cioè quello dell'immagine) e la sua versione negata.
questi vengono inviati via antenna e ricevuti da un'altra antenna.
a lato ricezione devo rielaborare per isolare eventuali riflessioni.
le riflessioni hanno la stessa forma, solo che a differenza del segnale sono sempre positivi...

quindi pensavo che, se al segnale ricevuto gli sommo la sua versione traslata di esattamente mezzo periodo, gli impulsi iniziali si azzerano, e la riflessione, essendo sempre positiva, rimane com'è...

ecco tutto :)

vaka_85
20-05-2009, 19:13
curiosità... stai lavorando su UWB? :)

si :D


comunque quell'onda nel disegno l'ho generata pura con matlab, nella realtà il generatore di impulsi non la fa così perfetta, anzi... viene fuori piuttosto diversa...

ti prego dimmi come faccio per traslarla :D :D :D
se funziona ti faccio un monumento :D

vaka_85
20-05-2009, 20:19
grazie mille, domani provo poi ti dico ;)

sono ad ingegneria a cesena, penso non sia la stessa perchè lì le chat si usano :D

vaka_85
21-05-2009, 10:12
ormai la sogno anche la notte quell'onda :)
comunque allora visto che sei familiare ti chiederò forse qualcosa sulla parte pratica, magari voi siete più avanti di noi col lavoro :D

oggi faccio con altre ragazzi prove intensive con dispositivi uwb, la parte matlab che mi hai detto la rimando ai prossimi giorni...

comunque grazie ;)

serbring
25-05-2009, 11:32
Antonio, potrebbe usare il comando detrend?

vaka_85
07-07-2009, 16:44
riuppo questo topic perchè avrei bisogno di un altro aiutino :)

allora... ho la mia derivata dell'impulso gaussiano, così generato:


% Set effective support and grid parameters.
lb = -5; ub = 5; n = 1000;

% Compute Gaussian wavelet of order 8.
[uno,x] = gauswavf(lb,ub,n,7);

ora devo fare in modo di generare un segnale dove questi impulsi si ripetono ogni X secondi...

come fare? :rolleyes:

grazie;)

vaka_85
08-07-2009, 09:34
up ;)

vaka_85
08-07-2009, 10:10
allora... il vettore uno contiene la derivata settima dell'impulso gaussiano, il vettore x la scala dei tempi, l'asse x insomma...
comunque oggi provo come hai detto poi faccio sapere.

ti ringrazio ;)

banryu79
08-07-2009, 10:52
Scusate l'OT ma non essendo del settore mi ha incuriosito l'acronimo UWB e ho fatto un giretto sul web per capire di che si tratta.
Su una pagina di wikipedia ho letto questo:

Novità

La società Camero con sede a Herzliya in Israele ha inventato un sistema tramite onde radio UWB che consente di far fotografie tridimensionali ad alta risoluzione attraverso pareti di cemento o pareti con rinforzi metallici o per trovare oggetti sottoterra. Si inizierà ad utilizzare per ora esclusivamente in ambito militare.

La società Multispectral, costituita dal prof. Robert Fontana (collaboratore di Ross, di origine fiorentina da parte del padre) ha sviluppato diversi progetti per i militari americani dai quali ha derivato il primo sistema UWB RTL commerciale, con precisione fisica pari a 30 cm portati a c.a. 5 cm mediante algoritmi da un progetto dell'Università di Milano.

La società Ubisense ha studiato un sistema commerciale che permette di localizzare oggetti e persone nelle tre dimensioni con un margine di errore di 10-15 cm. Il lato negativo di questo sistema di localizzazione è l'elevato costo.


Incuriosito, ho cercato ulteriormente per verificare se esiste qualche documento, ho trovato questo:
Adapting the Ranging Algorithm to the Positioning Technique in UWB Sensor Networks (http://portal.acm.org/citation.cfm?id=1404314)

Per me è arabo, magari per voi è roba interessante :)

vaka_85
08-07-2009, 10:55
io lavoro esattamente su un sistema di ranging, legato anche agli rfid... il punto di forza del sistema che dovrebbe venir fuori è il basso costo e l'elevata precisione...

ma ancora c'è tanto lavoro da fare...

vaka_85
08-07-2009, 15:54
non conosco quella funzione, cosa contengono i vettori uno e x? comunque se hai un segnale che occupa N campioni, per ripeterlo ogni X secondi devi fare:

1) trovi a quanti campioni corrisponde l'intervallo di distanza in X secondi moltiplicando per la frequenza di campionamento

2) ti crei il tuo bel vettore v=zeros(lunghezza,1) dove lunghezza = (len(segnale da replicare) + intervallo in campioni)*N dove N è il numero di repliche

3) for i=1:N v=((i-1)*(len_totale_segnale+intervallo) +1 : (i-1)*(len_totale_segnale+intervallo) + len_totale_segnale) = segnale da replicare

più o meno...:)


ce l'ho fatta! un metodo un pò meno elegante, forse, ma va bene lo stesso :)

alcuni dubbi, probabilmente banali, ma per me importanti:
1- tu parli di frequenza di campionamento... come faccio a conoscerla visto che è un segnale che creo da 0 senza mettere in gioco la frequenza?

2- visto che devo dare in pasto questo segnale ad un generatore di funzioni, lasciando perdere la parte di interfacciamento della quale mi sono già occupato, secondo te è possibile mettere nel file informazioni relative all'ampiezza del segnale? perchè così com'è ci sono dei numeri, per esempio al tempo x ho 1,25... ma 1,25 cosa?! volt, millivolt, pere, mele? :)

spero di essermi spiegato...
Grazie mille per l'aiuto

vaka_85
09-07-2009, 10:05
spero di esserti stato d'aiuto

si sei stato molto di aiuto, ti ringrazio molto!

ultima cosa :)

per variare la frequenza dovrò stringere o allargare l'impulso per variarne la durata... come faccio a stringere o allargare un qualsiasi segnale? (in questo caso ho l'impulso ma mi piacerebbe sapere in generale come si fa)...

vaka_85
09-07-2009, 16:28
non ho ben capito...
io vorrei stringere il segnale, quindi diminuire la durata dell'impulso, già in matlab, prima di mandarlo al generatore...
comunque, pescando quà e là in rete ho trovato un pò di cose e mettendole insieme ecco cos'ho ricavato:

fs=20E9;%sample rate-10 times the highest frequency
ts=1/fs;%sample period
t=[(-4E-9-ts):ts:(4E-9-ts)];%vector with sample instants
t1=.5E-9;%pulse width(0.5 nanoseconds)
x=(t/t1).*(t/t1);%x=(t^2/t1^2)(square of (t/t1)
A=1;%positive value gives negative going monopulse;neg value gives
%positive going monopulse
y=(1/(sqrt(6.28)*t1))*exp(.5*(-x));%Gaussian pulse function

plot (y);

prima = diff (y);
seconda = diff (prima);
terza = diff (seconda);
quarta = diff (terza);
quinta = diff (quarta);
sesta = diff(quinta);
settima = diff (sesta);

figure; plot (settima,'LineWidth',2);

così mi sono calcolato la derivata settima con un metodo diverso da quello che avevo scritto qualche post fa...
ho provato con un ciclo for ma non sono riuscito :D comunque funziona ugualmente...

in questo modo, variando t1 cioè il pulse width, vario la durata dell'impulso, che è proprio quello che volevo.. poi quando la prossima settimana avrò il generatore sotto mano proverò se effettivamente la stessa unità di misura viene mantenuta anche in esso...

ah, poi per creare la serie di impulsi:
%lunghezza del vettore che contiene la derivata settima:
lung_der = length(settima);

% N è il numero di repliche che voglio fare dell'impulso
N=4;
lung = int32((lung_der + ts)*N);

%creo un vettore dove mettere il segnale, lungo quanto "lung"
v=zeros(lung,1);

for i=1:(lung_der)
v(i) = settima(i);
v(i+(lung/N)) = settima (i);
v(i+(2*(lung/N))) = settima (i);
v(i+(3*(lung/N))) = settima (i);
end;

figure;plot(v);

ecco tutto ;) che ne dici?

vaka_85
09-07-2009, 16:41
è per avere un minimo di riferimento...
comunque vedrò sullo strumento se è completamente sballato oppure si avvicina...

ti ringrazio e se ti interessa ti farò sapere com'è andata ;)