Professional Documents
Culture Documents
Sintaxis
Y = fft(x)
Y = fft(X,n)
Y = fft(X,[],dim)
Y = fft(X,n,dim)
Definiciones
Las funciones Y = fft(x) e y = ifft(X) implementan el par de la transformada y la transformada inver-
sa sobre los vectores de longitud N mediante:
( )( ) ( )( )
( )= () ( )= ( )
( )/
Donde = , es la raíz N-esima de la unidad.
Descripción
Y = fft(x) devuelve la Transformada de Fourier Discreta (DFT) del vector x, calculado con el
algoritmo de la Transformada Rápida de Fourier (FFT).
Si la entrada X es una matriz, Y = fft(X) devuelve la transformada de Fourier de cada uno de las
columnas de la matriz.
Si la entrada X es un arreglo multidimensional, fft opera en la primera dimensión no singleton.
Y = fft(X,n) devuelve la DFT de n-puntos. La fft(X) es equivalente a fft(X,n) donde n es el
tamaño de X in the first nonsingleton dimension. Si la longitud de X es menor que n, X es rellenado
con ceros hasta la longitud de n. Si la longitud de X es mayor que n, la secuencia X es truncada.
Cuando X es una matriz, la longitud de las columnas es ajustada en la misma manera.
Y = fft(X,[],dim) e Y = fft(X,n,dim) aplica la operación de FFT a través de la dimensión
dim.
Ejemplo1
Un uso común de la transformada de Fourier es hallar las componentes de frecuencia de una señal
dentro de una señal ruidosa en el dominio del tiempo. Considere la data muestreada a 1000 Hz.
Formemos una señal conteniendo una sinusoide de 50 Hz, de amplitud 0.7 y una sinusoide de 120
Hz de amplitud 1, corrompida con algún ruido aleatorio de media cero:
Fs = 1000; % Frecuencia de muestreo
T = 1/Fs; % Tiempo de muestreos
L = 1000; % Longitud de la señal
t = (0:L-1)*T; % Vector de tiempo
% Suma de una sinusoide de 50 Hz y una sinusoide de 120 Hz
x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
y = x + 2*randn(size(t)); % Sinusoide más ruido
plot(Fs*t(1:50),y(1:50)); title('Signal Corrupted with Zero-Mean Random Noise')
xlabel('time (milliseconds)')
Es difícil identificar los componentes de frecuencia al observar la señal original. Al convertirla al
dominio de la frecuencia, la transformada de Fourier discreta de la señal ruidosa, se encuentra to-
mando la transformada rápida de Fourier (FFT):
NFFT = 2^nextpow2(L); % Potencia cercana de 2 de la longitud de y
Y = fft(y,NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2+1);
% Grafica del espectro e amplitud de un solo lado.
plot(f,2*abs(Y(1:NFFT/2+1)))
title('Single-Sided Amplitude Spectrum of y(t)')
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')
La principal razón del porque las amplitudes no son exactamente 0,7 y 1 es por el ruido. Varias
ejecuciones de este código (incluyendo recálculo de y) producen diferentes aproximaciones a 0,7 y
1. La otra razón es que usted tiene una señal de longitud finita. El aumento de L de 1000 a 10000
en el ejemplo anterior, producen aproximaciones mucho mejor en promedio
Algoritmos
Las funciones de FFT (fft, fft2, fftn, ifft, ifft2, ifftn) estan basados en una libreria deno-
minada FFTW [3], [4]. Para calcular la DFT de N-puntos cuando N es compuesta (esto es, cuando N =
N1N2), la libreria FFTW descompone el problema usando el algoritmo de Cooley-Tukey [1], el cual
primero calcula N1 transformadas de tamaño N2, y luego calcula N2 transformadas de tamaño N1. La
descomposición es aplicada recursivamente tanto para las DFT de N1 y N2-puntos. Las DFT, hasta
que el problema pueda resolverse, utiliza una de las varias máquinas generados de tamaño fijo o "code-
lets". El codelets a su vez utiliza varios algoritmos en combinación, incluyendo una variación de Cooley-
Tukey [5], un algoritmo de factor prima [6], y un algoritmo de radix dividida [2]. La factorización particular
de N es elegida heurísticamente.
Cuando N es un número primo, la librería FFTW primero descompone un problema de N-puntos
en tres problemas de (N-1)-puntos usando el algoritmo de Rader [7]. Este luego usa la descomposi-
ción de Cooley-Tukey, descrito anteriormente, para calcular las DFT de (N – 1)-puntos.
Para la mayoría de N, las DFT de entrada real requieren aproximadamente la mitad del tiempo de
cálculo de la DFT de entrada complejo. Sin embargo, cuando N tiene factores primos grandes, la
diferencia en la velocidad de procesamiento es muy pequeña o nada.
El tiempo de ejecución para la FFT depende de la longitud de la transformación. Es más rápido para
las potencias de dos. Es casi tan rápido para las longitudes que tienen únicamente factores primos
pequeñas. Es normalmente varias veces más lento para las longitudes que son primos o que tienen
factores primos grandes.
Note Es posible que pueda aumentarse la velocidad de la fft usando la función de utilidad fftw, quien con-
trola la optimización del algoritmo usado para calcular una FFT de una dimensión y tamaño particular.
Referencias
[1]. Cooley, J. W. and J. W. Tukey, "An Algorithm for the Machine Computation of the Complex
Fourier Series,"Mathematics of Computation, Vol. 19, April 1965, pp. 297-301.
[2]. Duhamel, P. and M. Vetterli, "Fast Fourier Transforms: A Tutorial Review and a State of the
Art," Signal Processing, Vol. 19, April 1990, pp. 259-299.
[3]. FFTW (http://www.fftw.org)
[4]. Frigo, M. and S. G. Johnson, "FFTW: An Adaptive Software Architecture for the
FFT,"Proceedings of the International Conference on Acoustics, Speech, and Signal Processing,
Vol. 3, 1998, pp. 1381-1384.
[5]. Oppenheim, A. V. and R. W. Schafer, Discrete-Time Signal Processing, Prentice-Hall, 1989, p.
611.
[6]. Oppenheim, A. V. and R. W. Schafer, Discrete-Time Signal Processing, Prentice-Hall, 1989, p.
619.
[7]. Rader, C. M., "Discrete Fourier Transforms when the Number of Data Samples Is Prime," Pro-
ceedings of the IEEE, Vol. 56, June 1968, pp. 1107-1108.
Ver también
dftmtx | fft2 | fftn | fftshift | fftw | filter | freqz | ifft
******************************************************************************
1.1.1 Introducción
DFT con un millón de puntos es común en muchas aplicaciones. El procesamiento de señales e
imágenes en aplicaciones modernas serian imposible sin un eficiente método para calcular la DFT.
La aplicación directa de la definición de la DFT (Ver Discrete Fourier Transform (DFT)) ta un vector de
datos de longitud n requiere de n multiplicaciones y n sumas — un total de 2n2 operaciones de punto
flotante. Esto no incluye la generación de las potencias de la n-esima raíz compleja de la unidad ω. Para
calcular el DFT de un millón de puntos, un computador capaz de hacer una multiplicación y una su-
ma cada microsegundo requerirá de un millón de segundos o alrededor de 11.5 días.
Los algoritmos de Fast Fourier Transform (FFT) tienen una complejidad computacional de
O(nlogn) en lugar de O(n2). Si n es una potencia de 2, una FFT de una dimensión de longitud n
requerirá menos que 3nlog2n operaciones de punto-flotante (un número de veces de una constante
de proporcionalidad). Para n = 220, es un factor de casi 35,000 veces más rápido que 2n2.
Las funciones de MATLAB fft, fft2, y fftn (y sus inversas ifft, ifft2, y ifftn, respectivamente) todos usan
algoritmos rápidos de transformada de Fourier para calcular la DFT.
Nota. Los algoritmos de FFT de MATLAB FFT están basadas en FFTW, "The Fastest Fourier Transform in the
West" (http://www.fftw.org). Ver fft y fftw para mayores detalles.
Cuando se usan algoritmos de FFT, debe de distinguirse entre la longitud de la ventana y la longi-
tud de la transformada. La longitud de la ventana es la longitud del vector de datos de entrada. Este
es determinado, por ejemplo, por el tamaño de un buffer externo. La longitud de la transformada es
la longitud de la salida, el DFT calculado. Un algoritmo de FFT rellena o trocea la entrada para reali-
zar la deseada longitud de la transformada. La siguiente figura ilustra las dos longitudes.
1.1.2.1 Introducción
La función fft de MATLAB devuelve la DFT y de un vector de entrada x usando un algoritmo de
transformada rápida de Fourier:
y = fft(x);
Cantidad Descripción
x Datos muestreados
fs Muestras/unidad de tiempo
EJEMPLO 2
a) Por ejemplo, genere la siguiente data de x con dos componentes de frecuencia de diferentes am-
plitudes y fases contaminados con ruido:
fs = 100; % Frecuencia de muestreo (Hz)
t = 0:1/fs:10-1/fs; % 10 segundos de muestra
x = (1.3)*sin(2*pi*15*t) ... % Componente de 15 Hz
+ (1.7)*sin(2*pi*40*(t-2)) ... % Componente de 40 Hz
+ (2.5)*randn(size(t)); % Ruido Gaussiano;
b) Use la fft para calcular la DFT y la potencia de y:
m = length(x); % Longitud de la ventana
n = pow2(nextpow2(m)); % Longitud de la transformada
y = fft(x,n); % DFT
f = (0:n-1)*(fs/n); % Rango de frecuencia
power = y.*conj(y)/n; % Potencia de la DFT
nextpow2 halla el exponente de la potencia de 2 más cercana mayor o igual a la longitud de la ven-
tana (ceil(log2(m))), y pow2 calcula la potencia. Usando una potencia de dos para la longitud de la
transformada optimiza el algoritmo de la FFT, aunque en la práctica exista usualmente una pequeña
diferencia en el tiempo de ejecución al usar n = m.
c) Visualizar la DFT. Las gráficas de abs(y), abs(y).^2, y log(abs(y))son todas comunes. Una
grafica de la potencia versus frecuencia es denominada un periodograma:
plot(f,power)
xlabel('Frequency (Hz)')
ylabel('Power')
title('{\bf Periodogram}')
La primera mitad del rango e frecuencia (de 0 a la frecuencia de Nyquist fs/2) es suficiente para
identificar las componentes de frecuencia en la data, desde que la segunda mitad es justo un reflejo
de l primera mitad.
El re arreglo hace uso de la periodicidad en la definición de la DFT (Ver Discrete Fourier Transform
(DFT)).
e) Use las funciones de MATLAB angle y unwrap para crear una grafica de la fase de la DFT:
phase = unwrap(angle(y0));
plot(f0,phase*180/pi)
xlabel('Frequency (Hz)')
ylabel('Phase (Degrees)')
grid on
EJEMPLO 3
1.1.2.3 Ejemplo: Análisis espectral de la llamada de una ballena
El archive de ejemplo bluewhale.au contiene data de audio de la vocalización una ballena azul
del Océano Pacifico grabada por micrófonos bajo el agua en la costa de California. El archivo es de la
librería de las vocalizaciones de animales mantenido por el Programa de Investigación Bioacustica de
la Universidad de Cornell.
Nota. La documentación de los archivos de ejemplo para matemáticos de MATLAB está ubicados en la sub-
carpeta \help\techdoc\math\examples de la carpeta raíz de MATLAB (matlabroot). Esta subcarpeta no se
encuentra en la ruta de MATLAB en la instalación. Para usar los archivos de MATLAB de esta subcarpeta, ya
sea que adicione la subcarpeta a la ruta de MATLAB (addpath) o haga la subcarpeta como la carpeta actual
de trabajo (cd).
Debido a que las llamadas de la ballena azul son muy bajas, son raramente audibles a los huma-
nos. La escala de tiempo en la data esta comprimido por un factor de 10 para elevar el pitch y hacer
la llamada más claramente audible.
b) Use la gráfica anterior para determinar aproximadamente los índices para el comienzo y el fin de
la primera llamada B. Corrija la base de tiempo por un factor de 10 para acelerar la data:
bCall = x(2.45e4:3.10e4);
tb = 10*(0:1/fs:(length(bCall)-1)/fs); % Time base
plot(tb,bCall)
xlim([0 tb(end)])
xlabel('Time (seconds)')
ylabel('Amplitude')
title('{\bf Blue Whale B Call}')
c) Use la fft para calcular la DFT de la señal. Corrija el rango de frecuencias por un factor de 10
para acelerar la data:
plot(f(1:floor(n/2)),p(1:floor(n/2)))
xlabel('Frequency (Hz)')
ylabel('Power')
title('{\bf Component Frequencies of a Blue Whale B Call}')
asc = 0:30:330;
dec = [408 89 -66 10 338 807 1238 1511 1583 1462 1183 804];
plot(asc,dec,'ro','Linewidth',2)
xlim([0 360])
xlabel('Ascension (Degrees)')
ylabel('Declination (Minutes)')
title('{\bf Position of the Asteroid Pallas}')
grid on
Referencias
[1]. Briggs, W. and V.E. Henson. The DFT: An Owner's Manual for the Discrete Fourier Transform.
Philadelphia: SIAM, 1995.
[2]. Cooley, J.W. and J.W. Tukey. "An Algorithm for the Machine Calculation of Complex Fourier
Series." Mathematics of Computation. Vol. 19. 1965, pp. 297–301.
[3]. Gauss, C. F. "Theoria interpolationis methodo nova tractata." Carl Friedrich Gauss Werke. Band 3.
Göttingen: Königlichen Gesellschaft der Wissenschaften, 1866.
[4]. Heideman M., D. Johnson, and C. Burrus. "Gauss and the History of the Fast Fourier Trans-
form." Arch. Hist. Exact Sciences. Vol. 34. 1985, pp. 265–277.
[5]. Goldstine, H. H. A History of Numerical Analysis from the 16th through the 19th Century. Berlin:
Springer-Verlag, 1977.
EJEMPLO 5
1.2 Usando la FFT
Esta demostración usa la función FFT para analizar las variaciones en la actividad de las manchas
solares sobre los últimos 300 años.
La actividad de las manchas solar es cíclica, alcanzando un máximo aproximadamente cada 11
años. Vamos a confirmarlo. Aquí hay una grafica de una cantidad llamada el número relativa de
manchas solares de Zurich, que mide tanto en número y tamaño de las manchas solares.
plot(year(1:50),relNums(1:50),'b.-');
c) Una gráfica de la distribución de los coeficientes de Fourier (dada por Y) en el plano complejo es
bonito, pero difícil de interpretar. Necesitamos una forma más útil de examinar los datos en Y.
plot(Y,'ro')
title('Fourier Coefficients in the Complex Plane');
xlabel('Real Axis');
ylabel('Imaginary Axis');
d) La magnitud compleja al cuadrado de Y se llama la potencia, y una grafica de la potencia frente a
la frecuencia es un "periodograma".
n=length(Y);
power = abs(Y(1:floor(n/2))).^2;
nyquist = 1/2;
freq = (1:n/2)/(n/2)*nyquist;
plot(freq,power)
xlabel('cycles/year')
title('Periodogram')
plot(freq(1:40),power(1:40))
xlabel('cycles/year')
f) Ahora graficaremos la potencia frente al periodo por conveniencia (donde periodo= 1/frecuencia).
Como esperábamos, existe un muy prominente ciclo con una longitud de alrededor de 11 años.
period=1./freq;
plot(period,power);
axis([0 40 0 2e+7]);
ylabel('Power');
xlabel('Period (Years/Cycle)');
g) Finalmente, podemos fijar la longitud del ciclo con un poco mas de precisión extrayendo la fre-
cuencia más fuerte. Los puntos en rojo ubica este punto.
hold on;
index=find(power==max(power));
mainPeriodStr=num2str(period(index));
plot(period(index),power(index),'r.', 'MarkerSize',25);
text(period(index)+2,power(index),['Period = ',mainPeriodStr]);
hold off;
2 FFT con MATLAB
1) >> X = fft(x)
Hace la FFT del vector x. “X” es un vector de números complejos ordenados desde k=0...N-1. Se
recomienda que la longitud del vector x sea una potencia de 2. Lo que no se recomienda es que la
longitud de x sea un número primo.
2) >> X = fft(x,N)
Especifica el número de puntos con el que se quiere hacer la FFT. Si la longitud de x es menor que
N, el vector se rellena con ceros. Si es mayor, el vector es truncado.
3) >> x = ifft(X)
Hace la FFT inversa del vector X.
4) >> x = ifft(X,N)
Especifica el número de puntos N con el que quiero hacer la IFFT.
5) >> X = fftshift(X)
Reordena el vector X en orden creciente de frecuencia. Si “X” es el vector resultante de hacer una
FFT, utilizando esta función reordenamos los puntos en función de la frecuencia.
b) Primero, necesita llamar a la función FFT. Para una mayor rapidez posible de la s, tendrá que
rellenar su datos con ceros suficiente para que su longitud sea una potencia de 2. Al interior de la
función FFT lo hace de forma automática, si se le da un segundo argumento que especifica la longi-
tud total de la FFT, como se demuestra a continuación:
% Utilice la próxima potencia de 2 mas alta mayor o
% igual a length(x) para calcular la fft
nfft = 2^(nextpow2(length(x)));
% Tome la fft, rellénelos con ceros hasta
% que length(fftx)sea igual a length(nfft)
fftx = fft(x,nfft);
c) Si nfft es par (que lo será, si utiliza los dos comandos de arriba), entonces la magnitud de la
FFT será simétrica, de manera que los primeros (1 + nfft/2) puntos son únicos, y el resto son
simétricamente redundantes. La componente DC de x es fftx(1), y fftx(1 + nfft/2)es la
componente de la frecuencia de Nyquist de x. Si nfft es impar, sin embargo, la componente de la
frecuencia de Nyquist no es evaluado, y el número de puntos únicos es (nfft + 1)/2. Esto puede
ser generalizado para ambos casos por ceil((nfft + 1)/2).
% Calculando el número de puntos únicos
NumUniquePts = ceil((nfft+1)/2);
% Como FFT es simétrico, deseche la segunda mitad
fftx = fftx(1:NumUniquePts);
e) Considere el hecho que MATLAB no escala la salida de la fft por la longitud de la entrada:
% Escale la fft por lo que no es una función de la longitud de x
mx = mx/length(x);
% Ahora, tomemos el cuadrado de la magnitud de
% la fft de x el cual ha sido escalado apropiadamente.
mx = mx.^2;
% Desde que dejamos la mitad de la FFT, multipliquemos
& mx por 2 para mantener la misma energía. La componente DC
% y la componente de Nyquist, si este existe, son únicos
% y no deberán ser multiplicados por 2.
if rem(nfft, 2) % odd nfft excludes Nyquist point
mx(2:end) = mx(2:end)*2;
else
mx(2:end -1) = mx(2:end -1)*2;
end
y su inversa es,
La DTFT X(w) toma valores complejos y es una función continua y periódica en w. El periodo es 2π,
representándose normalmente en el intervalo [-π, π]. Al evaluar numéricamente la DTFT se presen-
tan dos problemas:
Para evitar problemas de muestreo insuficiente se debe elegir N tal que N>L.
Para implementar la dtft usaremos la función del el archivo dtft.m que se lista (si es necesario
use help para averiguar cómo funcionan las siguientes líneas)
function [H,W]=dtft(x,N)
% uso: [H W]=dtft(x,N)
% x: muestra de longitud L, se supone que de L+1
% a infinito la muestra toma valor 0.
% N: número de frecuencias a evaluar. N debe ser mayor que L.
% H: valores complejos de la DTFT
% W: vector de frecuencias correspondiente a la los valores H calculados
%
% wk=2*pi*k/N con k=0,1,2, ... ,N-1
W=2*pi/N*(0:N-1);
%
medio=ceil(N/2)+1 %aproxima a entero redondeando al entero inferior
%
% evaluamos la DTFT de -pi a pi
%
W(medio:N)=W(medio:N)-2*pi;
W=fftshift(W);
H=fftshift(fft(x,N));
En la función anterior se realizó un desplazamiento (fftshift) en frecuencias con objeto de que los
resultados de w se den en el intervalo [- π , π].
X = fftshift(x)
Reordena el vector X en orden creciente de frecuencias de tal manera que la componente conti-
nua queda centrada.
3.3.3 (*) Suponga que toma N= 8 muestras considerando el intervalo 0 < t < 1 ms. ¿Cuál es la
frecuencia de muestreo Fs?
3.3.4 (*) Suponga que toma N= 8 muestras considerando el intervalo 0 < t < 0.5 ms. ¿Cuál es la
frecuencia de muestreo Fs?
3.3.5 Suponga que toma N= 24 muestras considerando el intervalo 0 < t < 1.5 ms.
3.3.6 Suponga que toma N= 64 muestras considerando el intervalo 0 < t < 4 ms.
3.3.7 (*) Explique qué valores de tamaño de la ventana son los adecuados para reducir el efecto
de "Leakage"
Resolución espectral
El enventanado reduce la resolución espectral (diferencia entre la frecuencia de dos señales para
que pueden ser distinguidas).
Para ello considerar que la señal de entrada viene dada por
[ ]= . . .
+ +
3.3.8 Representar la dtft de esta señal para N=128 y para L=25, 50 y 100. ¿Qué relación hay entre
L y la resolución en frecuencia?
Con el fin de reducir el derrame es posible elegir una ventana w(n) cuya dtft W(w) tenga lóbulos
laterales más pequeños, pero esto provoca un aumento en la anchura del lóbulo principal, lo que
provoca una disminución en la resolución espectral.
3.3.9 Comprobar este efecto para la señal x[n] anterior usando una ventana de Hamming definida
por
w(n) = 1/2(1-cos(2 n/(L-1) ) para 0<= n <L-1
w(n) = 0 en el resto
3.3.10 Comparar la dfft de una ventana rectangular y de una ventana de Hamming usando el mis-
mo valor de L=50
Analizador de Espectros.
Un analizador de espectro es un sistema que permite obtener las frecuencias que están presentes
en una señal discreta.
El sistema más simple que nos permite verificar si una señal
tiene una componente con frecuencia w1 sería el mostrado en
la figura adjunta.
Donde se multiplica la señal de entrada por e-jw1n para des-
plazar la componente con frecuencia w=w1 al origen de fre-
cuencias w=0 y al aplicar el filtro pasa bajas se obtendrá la
contribución de la componente de la señal con w= w1.
Repitiendo este proceso para cada frecuencia w= wk, se obtendría el espectro del sistema.
Un sistema como el descrito adolece de dos grandes inconvenientes:
En MATLAB, estas ecuaciones se representan por dos vectores an y bn, expresándose la ecuación
anterior como
La función filter(b,a,x) implementa un filtro digital caracterizado por los coeficientes a y b que filtra-
rá los datos almacenados en x.
Cuando x[n] = [n], se tiene la respuesta al impulso que denominamos h(n).
En Matlab existen varias funciones que ayudan al diseño de un filtro indicando sus características.
Una de ellas es ellip (ver help) que permite diseñar filtros elípticos. Las salidas b y a de esta función
son los coeficientes de la ecuación de diferencias del sistema, definidos en la primera parte de la
práctica. Por otro lado el orden N del filtro se corresponde con el mayor de los valores Na o Nb em-
pleados en la ecuación de diferencias.
[ − ]= [ − ]
Unos valores razonables para los parámetros de rizado que deben introducirse en la función ellip
son Rp=0.5 y Rs=20.
4.3.1 (*) Usando la función ellip, diseñar un filtro pasabaja de orden N=4 con frecuencia de corte
de 600 Hz, suponiendo que la señal de entrada será muestrada a una frecuencia de 8192 Hz.
4.3.2 (*) Matlab incorpora la función freqz (ver help) que calcula la función de transferencia H(w).
4.3.3 A partir de los vectores b y a obtenidos, construya la función H(w) siguiendo el procedimiento
del ejercicio 4.1.4 y represente H(w) en función de w en el intervalo 0, . Compruebe que se obtie-
ne el mismo resultado que utilizando la función freqz.
4.3.4 (*) Considere que la señal de entrada está formada por la suma de dos señales sinusoidales
de frecuencia 200 y 800 Hz respectivamente. Usando la función filter compruebe que a la salida ha
desaparecido la componente de 800 Hz.
4.3.5 Manteniendo la frecuencia de corte en la función ellip modificar uno a uno los parámetros N,
Rp y Rs. Use la función freqz para representar las características H(w) del filtro y estudie su depen-
dencia con los parámetros anteriores.
4.3.6 4.3.6.- Diseñe un filtro pasa-alta de orden N=6 con frecuencia de corte de 600 Hz, supo-
niendo que la señal de entrada será muestrada a una frecuencia de 8192 Hz. Represente H(w). Con-
sidere que la señal de entrada está formada por la suma de dos señale sinusoidales de frecuencia
200 y 800 Hz respectivamente. Usando la función filter compruebe que a la salida ha desaparecido
la componente de 200Hz,
4.3.7 Diseñe un filtro pasa-banda de orden N=6 con frecuencia de paso de 300 y 500 Hz, supo-
niendo que la señal de entrada será muestrada a una frecuencia de 8192 Hz. Represente H(w). Con-
sidere que la señal de entrada está formada por la suma de tres señales sinusoidales de frecuencia
100,400 y 600 Hz respectivamente. Usando la función filter compruebe que a la salida ha desapare-
cido la componente de 100 y de 600 Hz.
4.3.8 Diseñe un filtro suprime-banda de orden N=6 con frecuencia de paso de 300 y 500 Hz, supo-
niendo que la señal de entrada será muestrada a una frecuencia de 8192 Hz. Represente H(w). Con-
sidere que la señal de entrada está formada por la suma de tres señales sinusoidales de frecuencia
100,400 y 600 Hz respectivamente. Usando la función filter se debe comprobar que a la salida ha
desaparecido la componente de 400 Hz.
REPRESENTACIONES DE FOURIER PARA LAS SEÑALES
Existen cuatro representaciones distintas de Fourier, cada una aplicable a diferentes tipos de seña-
les. Estas cuatro clases están definidas por las propiedades de periodicidad de una señal y si el
tiempo es de tipo continuo o discreto. Las señales periódicas tienen representación en series de Fou-
rier. La Serie de Fourier (FS) aplica a señales periódicas de tiempo continuo mientras que la Serie
Discreta de Fourier (DTFS) aplica a señales periódicas de tiempo discreto. Las señales no periódicas
tienen representación en forma de transformada. Si la señal es continua en el tiempo y no periódica,
la representación es llamada Transformada de Fourier (FT). Si la señal es discreta en el tiempo y no
periódica entonces la representación usada es la transformada de Fourier en tiempo discreto
(DTFT). La siguiente tabla ilustra la relación entre las propiedades de tiempo de una señal y la re-
presentación de Fourier adecuada.
Tiempo Periódicas No periódicas
Continuas Series de Fourier Transformada de Fourier
( FS ) ( FT )
La siguiente tabla muestra las relaciones matemáticas utilizadas para calcular las representaciones
de Fourier.
Tiempo Periódicas No periódicas
Series de Fourier Transformada de Fourier
( )= [ ] ( )= ( )
Continuas
[ ]= ( )
( )
( ) ; = ( )= ( )
[ ]= [ ] [ ]= [ ]
( )
Discretas [ ]= [ ] [ ]= [ ]
( )
[ ] [ ] ; = ( )
La Transformada Discreta de Fourier (DTFS)
La DTFS es la única representación de Fourier que es de valor discreto tanto en el tiempo como
en la frecuencia y de esta manera implícitamente conveniente para una implementación compu-
tacional en MATLAB. Las expresiones utilizadas para esta representación son fácilmente implemen-
tables en MATLAB como archivos. Sin embargo los comandos built-in de MATLAB fft y ifft pueden
también ser utilizados para evaluar la DTFS. Dado un vector llamado x de longitud N representando
un periodo de una señal periódica x[n]. El comando:
>> X=fft(x)/N
Produce un vector llamado X de longitud N que contiene los coeficientes de la DTFS. Matlab asu-
me que el periodo evaluado en la señal es desde 0 hasta N-1, de manera que el primer elemento de
x y X corresponden a x[0] y X[0] respectivamente, mientras que los últimos elementos correspon-
den a x[N-1] y X[N-1]. Nótese que la división por N es completamente necesaria, debido a que el
comando fft evalúa la siguiente expresión sin realizar la división por N.
[ ]= [ ]
( )
[ ]= [ ]
( )
Los comandos fft e ifft son computados usando un algoritmo rápido o numéricamente eficiente,
conocido como “Fast Fourier Transform”.
Considere el siguiente ejemplo.
Determinar los coeficientes DTFS para la siguiente señal:
La señal tiene un periodo de 24, de manera que tan solo se hace necesario definir un periodo y eva-
luar sobre este periodo la DTFS. Los comandos usados para realizar dicho cálculo son:
>> n = 0:23;
>> x = ones(1,24) + sin( (n * pi / 12) + (3 * pi / 8 ) );
>> X = fft(x)/24;
El resultado teórico del ejemplo es el siguiente:
>> f = 1000*(0:511)/512;
>> plot(f,Pyy)
Del espectro de potencia se puede visualizar
que las componentes con mayor frecuencia se
encuentran a los 50 y 120 Hz respectivamente.
Comprobando así que las señales de las cuales
se formo la señal contaminada con ruido tienen
estas frecuencias fundamentales.
% FFT PARA ANÁLISIS ESPECTRAL
% Este ejemplo muestra el uso de la función FFT para el análisis espectral.
% Un uso común de las FFT es encontrar los componentes de la frecuencia de
% una señal enterrada en una señal ruidosa con dominio de tiempo.
t = 0:.001:.25;
x = sin(2*pi*50*t) + sin(2*pi*120*t);
y = x + 2*rand(size(t));
plot(y(1:50))
title ('Tiempo de Dominio de la Señal Ruidosa')
Y = fft(y,256);
Pyy = Y.*conj(Y)/256;
f = 1000/256*(0:127);
plot(f,Pyy(1:128))
title('Densidad espectral de la energía')
xlabel('Frecuencia(Hz)')
% Enfocar adentro y trazar solamente hasta los 200 Hz. Notar los picos en
% 50 Hz y 120 Hz. Esas son las frecuencias de la señal original.
plot(f(1:50),Pyy(1:50))
title('Densidad espectral de la energía')
xlabel('Frecuencia (Hz)')