You are on page 1of 2

% FFT: Algoritmo Simplificado % Autor: Arturo E. Cern L. % Basado en algoritmo presentado por Relisoft en: % http://www.relisoft.com/Science/Physics/fft.

html % % Points must be a power of 2 function [uW,uX,uA,uF,uS]=FftPrueba2(sampleRate,uaTape) Points=length(uaTape); uPoints = Points; % calculate binary log ulogPoints = 0; Points=Points-1; while Points ~= 0 Points = bitshift(Points,-1); ulogPoints=ulogPoints+1; end % prepare bit-reversed mapping rev = 0; halfPoints = uPoints/2; for i = 0:(uPoints - 2) uaBitRev(i+1) = rev; mask = halfPoints; % add 1 backwards while rev >= mask rev = rev-mask; % turn off this bit mask = bitshift(mask,-1); end rev = rev + mask; end uaBitRev (uPoints) = uPoints-1; for i = 0:uPoints-1 uX(uaBitRev(i+1)+1) = complex(uaTape(i+1),0); end step = 1; u2ul = 2; for level = 1:ulogPoints increm = step * 2; for j = 0:step-1 for i = j:increm:uPoints-1 % Precompute complex exponentials for each stage re = cos(2.0 * pi * j / u2ul); im = -sin(2.0 * pi * j / u2ul); U = complex (re, im);%%% % in-place butterfly T = U * uX(i+step+1); uX(i+step+1) = uX(i+1)-T; uX(i+1) = uX(i+1)+T; uS(i+1)=j; end end step = step*2; u2ul = 2*u2ul; end increm; u2ul; step; uX2=uX*sqrt(2)/length(uaTape); for i=1:length(uaTape)/2;

uA(i)=abs(uX(i)/(length(uaTape)/2)); uF(i)=(i-1)/(length(uaTape)*sampleRate); end for i=1:length(uaTape) Time(i)=(i-1)*sampleRate; end figure(1) plot(Time,uaTape) figure(2) bar(uF,uA) axis([0,max(uF),0,max(uA)]) set(gca,'XTick',0:.1:max(uF)) grid on xlabel('Frecuencia [Hz]') ylabel('Amplitud |Y(f)|') uW=uaBitRev; end

You might also like