INTERPOLAZIONE LINEARE Costruiamo
adesso un interpolatore lineare mettendo in evidenza l’effetto del
ricampionamento di un fattore non intero e dell’interpolazione su dati non
sufficientemente sovracampionati Interlin.m %
COSTRUZIONE DI UN INTERPOLATORE LINEARE %
Considereremo un segnale generico da introdurre dall'esterno %
può essere inserito anche un fattore non intero di ricampionamento clear
all tempo=input('inserisci
l''istante finale 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 T=1/(100*f1); k_=(tempo/T)+1; k=(1:1:k_); x=(k-1)*T; y=feval(F,x); x=(k-1)*T*1000; figure plot(x,y,'y'); xlabel('ms'); hold
on T=T1; k_=(tempo/T)+1; k=(1:1:k_); x=(k-1)*T; y=feval(F,x); x=(k-1)*T*1000; if
length(x)<40
plot(x,y,'r*'); end plot(x,y,'g'); disp('OPERAZIONE
DI RICAMPIONAMENTO '); valore=input('introduci
il fattore di ricampionamento : '); n=length(y); valori=valore*(n-1)+1; T1=x(n)-x(1); T2=T1/(valori-1); xi(1)=x(1); for
i=1:valori-1 xi(i+1)=xi(i)+T2; end m=length(xi); for
k=1:m
for i=2:n
if xi(k)>=x(i-1) & xi(k)<=x(i)
yi(k)=y(i-1)+((y(i)-y(i-1))/(T*1000))*(xi(k)-x(i-1));
end
end end yi(m)=y(n-1)+((y(n)-y(n-1))/(T*1000))*(xi(m)-x(n-1));
if
m<55
plot(xi,yi,'b+'); else
plot(xi,yi,'b'); end hold
off zoom ff=fft(yi); freq=[0:(f1*valore)/m:f1*valore*(1-1/m)]; figure plot(freq,abs(ff)) xlabel('Hz'); zoom 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 function i=impulso(x) n=length(x); i(n)=0; i(round(n/2))=1; function r=rect1(x) n=length(x); r(n)=0; for i=round(2*n/5) : round(3*n/5) r(i)=1; end
function r=rect2(x) n=length(x); r(n)=0; for i=round(49*n/100) : round(51*n/100)
r(i)=1; end
|