0% encontró este documento útil (0 votos)
15 vistas4 páginas

DFT y FFT en MATLAB para señales

El documento describe cuatro funciones para calcular la transformada discreta de Fourier (DFT) de una señal: Fourier calcula la DFT directamente, FourierFFT usa la FFT de MATLAB, FFT_TEST compara el tiempo de ejecución de Fourier y FourierFFT al aumentar el tamaño de la señal, y la cuarta función explora el efecto de aplicar ventanas de muestreo como Lorenziana y coseno antes de calcular la DFT.

Cargado por

DAN
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
15 vistas4 páginas

DFT y FFT en MATLAB para señales

El documento describe cuatro funciones para calcular la transformada discreta de Fourier (DFT) de una señal: Fourier calcula la DFT directamente, FourierFFT usa la FFT de MATLAB, FFT_TEST compara el tiempo de ejecución de Fourier y FourierFFT al aumentar el tamaño de la señal, y la cuarta función explora el efecto de aplicar ventanas de muestreo como Lorenziana y coseno antes de calcular la DFT.

Cargado por

DAN
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

% FOURIER Calcula la transformada discreta de Fourier mediante su

% definición: G(f)=int(g(t).*exp(-i*2*pi*f*t)*dt)
% [f,G]=FOURIER(t,g) transforma los vectores t y g (en el dominio
% del tiempo) en los vectores f y G (en el dominio de la frecuencia)
%
% Tarea 3-Parte 1, Curso de Sistemas y Señales, CICESE.
% Por: Víctor-Manuel Rico-Botero. 2016-Oct-03

function [f,G]=Fourier(t,g)
dt=mean(diff(t)); % Cálculo del paso en el tiempo
G=0; % Primer elemento de la FT
fc=1/(2*dt); % Frecuencia de Nyquist
for f=-fc:2*fc/length(t):fc
G=[G,0.5*sum(g.*exp(-1i*2*pi*f*t)*dt)]; % Integral de Fourier. El vector G
% crece para almacenar resultados
end
f=-fc:2*fc/length(t):fc;

____________________________________________Resultados_________________________________________________
>> x=-1:2/512:1;
>> g=cos(2*pi*50*x); >> g=sin(2*pi*50*x);
>> [f,G]=Fourier(x,g); >> [f,G]=Fourier(x,g);
% FOURIER Calcula la transformada discreta de Fourier mediante la función
% FFT de MatLAB
% [f,G]=FOURIER(t,g) transforma los vectores t y g (en el dominio
% del tiempo) en los vectores f y G (en el dominio de la frecuencia)
%
% Tarea 3-parte 2, Curso de Sistemas y Señales, CICESE.
% Por: Víctor-Manuel Rico-Botero. 2016-Oct-03

function [f,G]=FourierFFT(t,g)
dt=mean(diff(t)); % Cálculo del paso en el tiempo
G=0; % Primer elemento de la FT
fc=1/(2*dt); % Frecuencia de Nyquist
G=fftshift(fft(fftshift(g)));
f=-fc:2*fc/length(t):fc;
____________________________________________Resultados_________________________________________________
>> x=-1:2/512:1;
>> g=cos(2*pi*50*x); >> g=sin(2*pi*50*x);
>> [f,G]=Fourier(x,g); >> [f,G]=Fourier(x,g);

NOTA: Es raro... pero en mi versión de MatLAB (la 7.8.0 R2009) no se computa bien la fft del seno y del
coseno... no se si es que estoy ejecutando mal los comandos!. Sin embargo mi función si se comporta
como debe ser! (notese el orden de magnitud en Fourier.m)
%FFT_TEST Mide la rapidez con la que se ejecutan dos rutinas para el
% cálculo de transformadas de Fourier discretas
%
% FFT_TEST(p,n) crea en cada iteración p, un vector de abscisas
% x de 2^p puntos, y un vector de ordenadas del tipo
% g=cos(2*pi*x). Luego computa el tiempo promedio que tardan las
% funciones Fourier y FourierFFT en ejecutarse durante n ciclos.
%
% Tarea 3-parte 3, Curso de Sistemas y Señales, CICESE.
% Por: Víctor-Manuel Rico-Botero. 2016-Oct-03

function fft_test(p,n)
for N=2:p;
x=-1:2/(2^N):1;
g=cos(2*pi*x);
% -----Prueba del computo con cálculo personal-------------------------------
tic
for k=1:n
[f,G]=Fourier(x,g);
end
timeElapsed=toc/n;
hold on
plot(2^N,timeElapsed,'o')
% -----Prueba del computo con cálculo MatLAB---------------------------------
tic
for k=1:n
[f,G]=FourierFFT(x,g);
end
timeElapsed=toc/n;
plot(2^N,timeElapsed,'*')
end
xlabel('data length')
ylabel('time elapsed (s)')
grid
legend('Fourier.m','FourierFFT.m')
____________________________________________Resultados_________________________________________________
>> fft_test(10,10)
% Tarea 3-parte 4, Curso de Sistemas y Señales, CICESE.
% Por: Víctor-Manuel Rico-Botero. 2016-Oct-03

Exploración del efecto de la forma de la ventana de muestreo: Se explora la ventana Lorenziana y del
coseno

>> x=-1:2/512:1;
>> g=1./(1+(10*x).^2).*sin(2*pi*10*x);
>> plot(x,g)
>> [f,G]=Fourier(x,g);

>> g=(cos(1*pi*x/(x(end)-x(1)))).*sin(2*pi*10*x);
>> plot(x,g,'-ok')
>> [f,G]=Fourier(x,g);

También podría gustarte