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

 

SPLINE BICUBICA

Costruiamo adesso una spline bicubica mettendo in evidenza l’effetto del ricampionamento di un fattore non intero e dell’interpolazione su dati non sufficientemente sovracampionati come fatto per l’interpolatore lineare e la spline.

 

bicubica.m

 

% COSTRUZIONE DI UNA SPLINE BICUBICA

 

% Considereremo un segnale generico da introdurre dall'esterno

 

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

% e il periodo di campionamento può essere generico

 

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

else

   plot(x,y,'r');

end

 

disp('OPERAZIONE DI RICAMPIONAMENTO ');

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

a=input('inserire il valore di a : ');

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 j=1:m

   yi(j)=0;

   for i=1:n-2

      if xi(j)>=x(i) & xi(j)<=x(i+1)

         xin=(xi(j)-x(i))*f1/1000;

         yi(j)=yi(j)+(1-(1+a)*xin^2+a*xin^3)*y(i);

      end

      if xi(j)>=x(i+1) & xi(j)<=x(i+2)

         xin=(xi(j)-x(i))*f1/1000;


         yi(j)=yi(j)+(a-2)*(xin^3-5*xin^2+8*xin-4)*y(i);

      end

   end

   for i=3:n

      if xi(j)>x(i-1) & xi(j)<x(i)

         xin=-(xi(j)-x(i))*f1/1000;

         yi(j)=yi(j)+(1-(1+a)*xin^2+a*xin^3)*y(i);

      end

      if xi(j)>x(i-2) & xi(j)<x(i-1)

         xin=-(xi(j)-x(i))*f1/1000;

         yi(j)=yi(j)+(a-2)*(xin^3-5*xin^2+8*xin-4)*y(i);

      end

   end

   if xi(j)>x(1) & xi(j)<x(2)

      xin=-(xi(j)-x(2))*f1/1000;

      yi(j)=yi(j)+(1-(1+a)*xin^2+a*xin^3)*y(2);

   end

   if xi(j)>x(n-1) & xi(j)<x(n)

      xin=(xi(j)-x(n-1))*f1/1000;

      yi(j)=yi(j)+(1-(1+a)*xin^2+a*xin^3)*y(n-1);

   end

end

yi(m)=y(n);

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

 

 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: Spline bicubica: esecuzione del programma Up:Introduzione  Previous: Spline: esecuzione del programma
Intro Gen: Introduzione Generale  Home: Home page
Vito Marinelli
11-6-2000

HyperCounter
BPath Contatore