% fftmalli.m - esimerkki fft:n kaytosta (JM 2007)
%
% kyseessa on exponenttifunktion
% kautta maaritelty fourier-muunnos
% joten kertoimet ovat kompleksisia
% huom: skaalataan funktio valille [0,1]

N=128; x=linspace(0,(N-1)/N,N);

% joitakin funktioita kokeiltavaksi
y = 3 +sin(2*pi*x) +cos(2*pi*x) +sin(3*2*pi*x);
% y = cos(2*pi*x) +cos(2*2*pi*x) +cos(3*2*pi*x);
% y = sin(2*pi*x) +sin(2*2*pi*x) +sin(3*2*pi*x);
% y(1:N/4)=-1; y(1+N/4:N/2)=+1; y(1+N/2:3*N/4)=-1; y(1+3*N/4:N)=+1;
% y(1:N/2) = 0; y(1+N/2:N) = 1; 
 y(1:N/2) = x(1:N/2); y(1+N/2:N) = x(1:N/2); 
% y = x;

% katsellaan funktiota
figure(1); clf;
plot(x,y,'b.');
title('Funktio'); xlabel('x'); ylabel('y');

% fourier-muunnos
yf=fft(y,N); 

% katsellaan fft-kertoimia
figure(2); clf;
plot(real(yf),'bx'); hold on;
plot(imag(yf),'mo');
legend('real','imag');
xlabel('index of k'); ylabel('y_k'); title('FFT-kertoimet (exp)')

% katsellaan fft-kertoimia toisin normitettuina
% huom indeksointi: k=0 on taulukossa indeksi 1
figure(3); clf;
sinK=-(2/N)*imag(yf(1:N/2)); sinK(1)=0;
cosK=+(2/N)*real(yf(1:N/2)); cosK(1)=cosK(1)/2;
plot(sinK,'bx'); hold on;
plot(cosK,'mo');
legend('sin','cos');
xlabel('index of k'); ylabel('y_k'); title('FFT-kertoimet (sin+cos)')

% kaanteinen fft-muunnos matlabilla
yy=ifft(yf,N);

figure(4); clf; 
plot(x,y,'b.'); hold on;
plot(x,real(yy),'m-');
legend('y=y(x)','F^{-1}(F(y))',4);
xlabel('x'); ylabel('y'); title('FFT-esim');

% kaanteinen fft-muunnos trig funktioilla
klim=40;
ya=0;
for k=1:klim,
 ya=ya+sinK(k)*sin((k-1)*2*pi*x)+cosK(k)*cos((k-1)*2*pi*x);
end;
figure(5); clf; 
plot(x,y,'b.'); hold on;
plot(x,real(ya),'m-');
legend('y=y(x)','F^{-1}(F(y))',4);
xlabel('x'); ylabel('y'); title(['Fourier-sarja katkaistu kohdasta ' int2str(klim)]);

