next up previous   
Next: Interpolazione usando la DFT: esecuzione del programma Up:Introduzione  Previous: Spline bicubica: esecuzione del programma
Intro Gen: Introduzione Generale  Home: Home page

 

INTERPOLAZIONE USANDO LA DFT

A questo punto possiamo costruire un interpolatore utilizzando però la DFT, mettendo sempre in evidenza l’effetto del ricampionamento di un fattore non intero e dell’interpolazione su dati non sufficientemente sovracampionati come fatto per gli altri interpolatori.

 

interdft.m

 

% COSTRUZIONE DI UN CAMPIONATORE CON L'USO DELLA DFT

% Considereremo un segnale generico da introdurre dall'esterno

 

% può essere inserito anche un fattore non intero di ricampionamento comunque sempre

% maggiore di 1 e il periodo di campionamento può essere generico

 

clear all

tempo=input('inserisci l''istante finale MINIMO di rappresentazione del segnale (in sec) : ');

f1=input('inserisci la frequenza di campionamento (in Hz) : ');

T1=1/f1;

err=0;

while err==0

   F=input('inserisci il nome della function contenente il segnale : ','s');

   if exist(F)==0

      disp('LA FUNZIONE INTRODOTTA NON ESISTE');

   else

      err=1;

   end

end

valore=input('introduci il fattore di ricampionamento : ');

[N,D] = rat(valore);

n=(tempo/T1)+1;

l=fix(n/D);

if n~=l*D

   n=l*D;

   disp('l''effettiva finestra temporale in secondi è : ');

   tempo=(n-1)*T1

end

Nz=(N-D)*l;

T=1/(100*f1);

n=(tempo/T)+1;

k=(1:1:n);

x=(k-1)*T;

y=feval(F,x);

x=(k-1)*T*1000;

figure

plot(x,y,'y');

xlabel('ms');

hold on

 

T=T1;

n=(tempo/T)+1;

k=(1:1:n);

x=(k-1)*T;

y=feval(F,x);

x=x*1000;

if length(x)<40

   plot(x,y,'r*');

else

   plot(x,y,'r');

end

hold off

figura=gcf;

 

ff=fft(y);

figure

freq=[0:f1/n:f1*(1-1/n)];

plot(freq,abs(ff))

xlabel('f [ Hz ]')

title('FFT del segnale di partenza')

if n<55

   hold on

   plot(freq,abs(ff),'r+');

   hold off

end

zoom

if (fix(n/2))*2~=n

   ffi=[ff(1:1:(n+1)/2),zeros(1,Nz),ff((n+3)/2:1:n)];

else

   ffi=[ff(1:1:n/2),zeros(1,Nz),ff((n/2)+1:1:n)];

end

freq=[0:(f1*valore)/(n+Nz):f1*valore*(1-1/(n+Nz))];

figure

plot(freq,abs(ffi));

if n*valore<55

   hold on

   plot(freq,abs(ffi),'r+');

   hold off

end

xlabel('f [ Hz ]')

title('FFT del segnale in cui sono stati aggiunti gli zeri')

zoom

yi=ifft(ffi);

yi=valore*yi;

m=length(yi);

xi=[x(1):(x(n)-x(1))/(n+Nz-valore):x(n)*(1+(valore-1)/(n+Nz-valore))];

figure(figura)

hold on

if m<65

   plot(xi,real(yi),'b+');

else

   plot(xi,real(yi),'b');

end

hold off

zoom

 

 segnale.m

 

function f=segnale(x);

f=sin(2*pi*200*x)+sin(2*pi*350*x+pi/7)+sin(2*pi*420*x-pi/4);     % la frequenza è in Hz

 

impulso.m

function i=impulso(x)

n=length(x);

i(n)=0;

i(round(n/2))=1;

 

rect1.m

function r=rect1(x)

n=length(x);

r(n)=0;

for i=round(2*n/5) : round(3*n/5)

   r(i)=1;

end

 

rect2.m

function r=rect2(x)

n=length(x);

r(n)=0;

for i=round(49*n/100) : round(51*n/100)

   r(i)=1;

end  


next up previous   
Next: Interpolazione usando la DFT: esecuzione del programma Up:Introduzione  Previous: Spline bicubica: esecuzione del programma
Intro Gen: Introduzione Generale  Home: Home page
Vito Marinelli
11-6-2000

HyperCounter
BPath Contatore