PDA

View Full Version : [Matlab] Come ricampionare un segnale


register
09-09-2010, 19:09
Salve ragazzi,
ho un problema che nasce dalla situazione che ora vi descrivo.

Ho un segnale X1 (un array di 2270000 di elementi) campionato a 250 KHz e che devo ricampionare a 58.8 KHz (cioè con passo di 17 us) in modo da avere quindi un segnale X2.
Io avevo pensato di procedere in questo modo, e cioè:

- crearmi un vettore dei tempi a 250 KHz usando linspace,
FREQ = 250000;
BUFFER = 2270000;
LTIME = BUFFER/FREQ; (Lunghezza, in secondi, del vettore Tempo)
Tempo=linspace(0,LTIME ,BUFFER );

- Creare un secondo vettore dei tempi a 58.8 KHz,
PASSO_2 = 0.000017; (Passo di campionamento a 17 us)
FREQ_2 = 1/PASSO_2;
LTIME_2 = BUFFER/FREQ_2;
Tempo_2 = linspace(0,LTIME_2 ,BUFFER);

- Fare il ricampionamento mediante interp1,
SIGNAL_2 = interp1(Tempo, SIGNAL, Tempo_2);

voi cosa ne dite? va bene?
Grazie a tutti

Cait Sith
28-01-2011, 23:29
ti conviene filtrare il segnale prima: la banda del segnale campionato a 250 kHz è 125 kHz mentre quello del segnale campionato a 58.8 kHz è 29.4 kHz
se non vuoi avere aliasing devi filtrare passa-basso con un filtro con frequenza di taglio teorica di 29.4 kHz (fai 28 kHz per sicurezza), poi puoi usare la funzione interp
se possibhile sarebbe meglio usare il comando resample che però ricampiona su una frazione della frequenza di campionamento del segnale originale (e implicitamente applica il filtro antialias)