% ANATOMIA DE UNA FFT (frecuencias)
%
% Este ejemplo permite visualizar la familia de exponenciales complejas 
% con las cuales se realiza la comparacion cuando se ejecuta una FFT
%
% Esto permite entender e interpretar las frecuencias del vector de armonicos que
% devuelve el algoritmo DFT/FFT.
%
% La DFT (la FFT es simplemente un algoritmo rapido para su computo) toma
% un vector de N datos y devuelve otro vector de N complejos, que contienen
% el resultado de la comparacion con otras tantas exponenciales complejas
% de frecuencias:
%
% a) expresadas por el orden del armonico
% 
%       n  = 0, 1, 2, 3, ..., n/2, ..., n-1
%
%
% b) expresadas en angulo th (paso que gira la exponencial entre muestra y muestra)
%
%       th = 0, 2*pi/N, 2*(2*pi/N), 3*(2*pi/N), ..., N/2*(2*pi/N), ..., (n-1)*(2*pi/N)
%
%
% c) expresadas en frecuencia real
%
%       f  = 0, fm/N, 2*fm/N, 3*fm/N, ..., fm/2, ..., (n-1)*fm/N
%
%
% Puede comprobarse que la segunda mitad pueden verse como frecuencias
% negativas (ejecutar por ejemplo para n > N/2), en las que la exponencial
% compleja gira en sentido contrario.


% AUTOR
%       Ignacio Diaz Blanco. 
%       Prof. Titular de Universidad
%       Area de Ingenieria de Sistemas y Automatica.
%       Universidad de Oviedo. 
%       Mayo 2004


N  = 16;                % Tamaño del vector analizado por la FFT
n  = 1;                 % Orden del armonico FFT a visualizar
fm = 1000;              % Frecuencia de muestreo
tm = inv(fm);           % Periodo de muestreo
t = 0:tm:tm*(N-1);      % Vector de tiempos
k = 0:N-1;              % Vector de muestras
th = n/N*2*pi;          % Angulo recorrido por la exponencial entre muestra y muestra
f  = th*fm/(2*pi);      % Frecuencia en hercios de la exponencial 
e = exp(j*th*k);        % Vector de elementos de la exponencial


% VISUALIZACION DE LA EVOLUCION DE LA EXPONENCIAL
figure(1); 
for k = 1:N, 
    flecha(0,e(k),.2); 
    hold on; 
    plot(e(1:k),'.'); 
    text(real(e(k)), imag(e(k)),sprintf(' k=%g, t=%g',k,t(k)));
    hold off; 
    axis([-2 2 -2 2]); 
    title(sprintf('N=%d muestras, fm=%g Hz,  tm=%g s,  f=%g Hz',N,fm,tm,f));
    grid; 
    pause(0.4); 
end;