Sie sind auf Seite 1von 8

Transformada de Fourier

Ildeberto de los Santos Ruiz

1. Introduccin
Una seal analgica es una funcin continua (usualmente del tiempo, t) que representa
informacin, tal como una seal de voz, de presin arterial o ssmica. A fin de procesar esta
informacin con la computadora, la seal analgica puede muestrearse cada T segundos,
generando as una seal digital que es una sucesin de valores tomados de la seal analgica
original.
Representamos una seal digital que ha sido muestreada de una seal continua x(t)
usando la notacin
x[k] = x(kT)
Por lo general, se toma como tiempo cero el instante en que se comienza a obtener la
seal digital. As, la primera muestra de una seal digital usualmente se designa con x[0].
Por tanto, si una seal digital se muestrea a 10 Hz (10 veces por segundo), los primeros tres
valores de la seal digital corresponden a los siguientes valores de la seal analgica:
x[0] = x(0) = x(0.0)
x[1] = x(T) = x(0.1)
x[2] = x(2T) = x(0.2)
x(t)

x(kT)

t
0.1

0.2

0.3

0.4

kT

0.5

0.1

a) seal analgica

0.2

0.3

0.4

0.5

b) seal digital

Figura 1: Seales analgicas y digitales.

En la Figura 1 se compara una seal analgica con su seal digital correspondiente. En


esta figura, mostramos la seal digital como una sucesin de puntos o muestras, con los
1

TRANSFORMADA DE FOURIER

puntos conectados al eje horizontal mediante segmentos de lnea. El eje vertical se rotula
como x(kT) (o simplemente x[k]) para indicar que se trata de una seal digital.
En MATLAB, los ndices de un vector siempre comienzan con 1, como en x(1), x(2), etc.
Los ndices en una seal por lo regular comienzan con 0, como en g[0], g[1], etc. No obstante,
los ndices de una seal podran comenzar con cualquier valor, incluso uno negativo, como
en h[2], h[1], etc. Dado que muchas de las ecuaciones relacionadas con el procesamiento de
seales contienen estos diversos ndices posibles, nos gustara poder usar las ecuaciones sin
reescribirlas para ajustarlas a los ndices. En muchos casos esto puede lograrse asociando dos
vectores a una seal. Un vector contiene los valores de la seal, y el otro, los ndices asociados
a esos valores. As, si las seales g y h mencionadas al principio de este prrafo contienen 10
valores, los vectores g y h correspondientes tambin contienen 10 valores. Despus podemos
usar dos vectores adicionales, digamos kg y kh, para representar los ndices que corresponden
a los 10 valores de g y h. As, el vector kg contendra valores del 0 al 9; el vector kh contendra
valores de 2 a 7. La ventaja principal de usar estos vectores adicionales en MATLAB ser que
podremos usar las ecuaciones de procesamiento de seales sin tener que ajustar los ndices,
lo cual podra introducir errores.

2. El dominio de la frecuencia y la FFT


En el procesamiento de seales, es comn analizar una seal en dos dominios: el dominio del
tiempo y el dominio de la frecuencia. La seal en el dominio del tiempo se representa con
los valores de sus muestras x[k]; la seal en el dominio de la frecuencia se puede representar
con un conjunto de valores complejos X[k], que representan las senoides con las cuales se
puede representar la seal. Una senoide es una funcin coseno (o seno) con una amplitud A,
una frecuencia y un desfasamiento :
x(t) = A cos(t + )
x[k] = A cos(kT + )
Aunque el coseno (o seno) es una funcin de un ngulo (en radianes), la senoide es
una funcin del tiempo. El ndice k del valor complejo X[k] puede servir para determinar la
frecuencia de la senoide, la magnitud de X[k] representa una versin a escala de la amplitud
de la senoide y el ngulo de X[k] especifica el desfasamiento de la senoide. Puesto que la
frecuencia angular tiene unidades de radianes por segundo, tambin podemos escribir la
senoide usando una frecuencia f , que tiene unidades de ciclos por segundo, o hertz (Hz), en
esta forma:
x(t) = A cos(2 f t + )
x[k] = A cos(2 f kT + )
Use MATLAB para generar y graficar senoides. Experimente con diferentes frecuencias,
amplitudes y desfasamientos; asegrese de que las grficas tengan las caractersticas esperadas.

TRANSFORMADA DE FOURIER

A = 3; phi = 0; f = 10;
T = 1/160; k = 0:63; t = k*T;
x = A*cos(2*pi*f*t + phi);
subplot(2,1,1), plot(t,x,-), title(Seal continua)
subplot(2,1,2), stem(t,x,.), title(Seal discreta)

Algunas caractersticas de la seal se pueden percibir ms claramente de su representacin


en el dominio del tiempo. Por ejemplo, si examinamos una curva en el dominio del tiempo
podemos determinar si la seal es peridica o aleatoria. Adems, a partir de los valores en el
dominio del tiempo podemos calcular fcilmente parmetros importantes como la media, la
desviacin estndar, la varianza y la potencia. Otro tipo de informacin, como el contenido de
frecuencias de la seal, normalmente no es evidente en el dominio del tiempo. Por ejemplo,
podramos necesitar calcular el contenido de frecuencias de la seal para determinar si est
limitada a una banda o si contiene ciertas frecuencias. El contenido de frecuencias de una
seal tambin se denomina espectro de frecuencia.
Se usa el algoritmo de la transformada discreta de Fourier (DFT) para convertir una seal
digital en el dominio del tiempo en un conjunto de puntos en el dominio de la frecuencia. La
entrada del algoritmo DFT es un conjunto de N valores de la seal en el tiempo, x[k]; con ellos,
el algoritmo calcula un conjunto de N valores complejos X[k] que representan la informacin
en el dominio de la frecuencia, o descomposicin senoidal de la seal. El algoritmo DFT es,
en general, intensivo y puede requerir un tiempo de cmputo considerable si N es grande.
No obstante, si el nmero de puntos es una potencia de dos (N = 2M ) se puede utilizar un
algoritmo especial llamado transformada rpida de Fourier (FFT) que reduce significativamente
el nmero de clculos necesarios para convertir la seal de tiempo al dominio de la frecuencia.
Puesto que la seal se muestrea cada T segundos, se obtienen 1/T muestras por segundo;
as, la tasa de muestreo o frecuencia de muestreo es 1/T Hz. Se debe tener mucho cuidado al escoger la tasa de muestreo para generar una seal digital, a fin de evitar un tipo de interferencia
llamado aliasing que se presenta cuando la tasa de muestreo es demasiado pequea. Puede
demostrarse que se evita el aliasing si se muestrea una seal con una frecuencia mayor que
dos veces la frecuencia de cualquier componente senoidal de la seal. As pues, si estamos
muestreando una seal compuesta por la suma de dos senoides, una con una frecuencia de
10 Hz y otra de 35 Hz, la frecuencia de muestreo de la seal debe ser mayor que 70 Hz para
evitar el aliasing. La frecuencia de Nyquist es igual a la mitad de la frecuencia de muestreo
y representa el lmite superior de las frecuencias que pueden estar contenidas en la seal
digital.
La funcin MATLAB para calcular el contenido de frecuencias de una seal es la funcin
fft:
fft(x) calcula el contenido de frecuencias de la seal x y devuelve los valores
en un vector del mismo tamao que x.
fft(x,N) calcula el contenido de frecuencias de la seal x y devuelve los
valores en un vector con N valores.

TRANSFORMADA DE FOURIER

Si el nmero de valores de x es una potencia de 2, o si N es una potencia de 2, esta


funcin usa un algoritmo FFT para calcular los valores de salida; en caso contrario, se usa
un algoritmo DFT. Si se utilizan dos argumentos de entrada y el nmero de valores en x es
menor que N, se anexarn ceros al final de la seal de tiempo antes de calcular los valores en
el dominio de la frecuencia. Si el nmero de valores es mayor que N, se usarn los primeros
N valores de la seal de tiempo para calcular los valores correspondientes en el dominio de
la frecuencia.
Los valores del dominio de la frecuencia calculados por la funcin ftt corresponden a
frecuencias separadas por 1/(NT) Hz. As, la k-sima salida de la FFT corresponde a una
frecuencia de k/(NT) Hz. Para ilustrar esto con un caso especfico, si tenemos 32 muestras
de una seal de tiempo que se muestre a 1000 Hz, los valores de frecuencia calculados por
el algoritmo FFT corresponden a 0 Hz, 1/0.032 Hz, 2/0.032 Hz, etc. Estos valores tambin
son iguales a 0 Hz, 31.25 Hz, 62.5 Hz, etc. La frecuencia de Nyquist es igual a 1/(2T), y
correspondera a X[16]. Generalmente no exhibimos la informacin que corresponde a valores
en la frecuencia de Nyquist y ms all porque estos valores se deben a la periodicidad de la
DFT y no a componentes de ms alta frecuencia de la seal.
Considere el siguiente grupo de instrucciones MATLAB que generan una seal de tiempo
que contiene 64 muestras:

%
N
T
k
x

Generar una senoide de 20 Hz muestreada a 128 Hz


= 64;
= 1/128;
= 0:N-1;
= sin(2*pi*20*k*T);

La seal x representa valores de una senoide de 20 Hz muestreado cada 1/128 segundos,


lo que equivale a una frecuencia de muestreo de 128 Hz (la senoide tiene una frecuencia
de 20 Hz, as que debe muestrearse con una frecuencia mayor que 40 Hz. La frecuencia de
muestreo especificada es 128 Hz, as que tenemos la seguridad de que no ocurrir aliasing).
El vector k da los ndices que corresponden a las muestras de la seal. La Figura 2 muestra
una grfica de la seal muestreada x(kT).
Puesto que la seal x es una senoide nica, esperamos que el contenido de frecuencias
sea 0 en todos los puntos excepto en el punto del dominio de la frecuencia que corresponde
a 20 Hz. Para determinar el ndice k en X[k] que corresponde a 20 Hz, necesitamos calcular
el incremento en Hz entre puntos del dominio de la frecuencia, que es 1/(NT) = 2 Hz. Por
tanto, una componente de 20 Hz deber aparecer en X[10] como puede verse en la Figura 3,
que se gener con estas instrucciones adicionales:

TRANSFORMADA DE FOURIER

Senoide de 20 Hz
1

x(kT)

0.5
0
0.5
1

0.05

0.1

0.15

0.2
0.25
0.3
kT (segundos)

0.35

0.4

0.45

0.5

Figura 2: Seal senoidal de 20 Hz muestreada a 128 Hz.

% Calcular y graficar el contenido de frecuencias


X = fft(x);
magX = abs(X);
stem(k(1:N/2),magX(1:N/2)), grid
title(Magnitud de X[k]), xlabel(k), ylabel(|X[k]|)

Magnitud de X[k]
40

|X[k]|

30
20
10
0

10

15

20

25

30

35

k
Figura 3: Magnitud de X[k].

Observe el empleo de la funcin de graficacin llamada stem que genera una grfica de
puntos con lneas, o tallos, que conectan los puntos con el eje horizontal. En esta grfica,
puede verse que la componente de 20 Hz aparece en X[10] tal como se esperaba. En muchos
casos es deseable graficar la magnitud de X[k] usando una escala en Hz en lugar del ndice
k. En tal caso, la grfica de la magnitud de X[k], que se muestra en la Figura 4, se calcula con
las siguientes instrucciones:

TRANSFORMADA DE FOURIER

% Graficar el contenido de frecuencias en escala de Hz


hertz = k/(N*T);
stem(hertz(1:N/2),magX(1:N/2)), grid
title(Magnitud de X[k]), xlabel(Hz), ylabel(|X[k]|)

Magnitud de X[k]
40

|X[k]|

30
20
10
0

10

20

30

40

50

60

70

Hz
Figura 4: Magnitud de X[k] en Hz.

Suponga que la frecuencia de la senoide empleada en este ejemplo hubiera sido de 19 Hz


en lugar de 20 Hz. Dado que el incremento en Hz entre valores de X[k] para este ejemplo es de
2 Hz, esta senoide debera aparecer en X[k] donde k = 9.5. Sin embargo, los valores de k son
enteros, as que no existe el valor X[9.5]. En esta situacin, la senoide aparece en los valores
de X ms cercanos al ndice calculado. Para este ejemplo, la senoide aparece principalmente
en los valores X[9] y X[10] que corresponden a 18 y 20 Hz, como se muestra en la Figura 5,
que se gener con las siguientes instrucciones:

TRANSFORMADA DE FOURIER

% Generar seal de tiempo


N = 64;
T = 1/128;
k = 0:N-1;
x = sin(2*pi*19*k*T);
% Graficar espectro
magX = abs(fft(x));
hertz = k/(N*T);
stem(hertz(1:N/2),magX(1:N/2)), grid
title(Magnitud de X[k]), xlabel(Hz), ylabel(|X[k]|)

Magnitud de X[k]
25

|X[k]|

20
15
10
5
0

10

20

30

40

50

60

70

Hz
Figura 5: Magnitud de X[k] en una seal con fugas.

Ambas figuras 4 y 5 contienen el espectro de frecuencia de una sola senoide, pero una
senoide cae exactamente en una posicin que corresponde a un punto de salida del algoritmo
FFT, y el otro no. Este es un ejemplo de fugas, que ocurren cuando una componente sinusoidal
no cae exactamente en uno de los puntos de salida de la FFT.
La funcin ifft calcula la transformada discreta de Fourier inversa para generar la seal x[k]
en el dominio del tiempo a partir de los valores complejos X[k] del dominio de la frecuencia:
ifft(X) calcula la seal de tiempo x a partir de sus valores de frecuencia X y
devuelve los valores en un vector del mismo tamao que X.
ifft(x,N) calcula la seal de tiempo x a partir de sus valores de frecuencia X
y devuelve los valores en un vector con N valores.
Se usa un algoritmo rpido (una adaptacin de la FFT) si el nmero de puntos de los
clculos es una potencia de 2. Si se usan dos argumentos de entrada y el nmero de valores
en X es menor que N, se anexarn ceros al final de la seal de frecuencia antes de calcularse

TRANSFORMADA DE FOURIER

los valores en el dominio del tiempo. Si el nmero de valores es mayor que N, se usarn los
primeros N valores de la seal de frecuencia para calcular los valores correspondientes del
dominio del tiempo.
En el siguiente ejemplo se calculan los valores de X[k] y luego se usa ifft para calcular
los valores de x[k] a partir de X[k]. El clculo final determina la suma de las diferencias entre
la seal original y la calculada por la funcin ifft:

% Calcular la diferencia entre x e ifft(fft(x))


N = 64;
T = 1/128;
k = 0:N-1;
x = sin(2*pi*19*k*T);
sum(x - ifft(fft(x)))

El valor que se exhibe es 3.3307 1016 , que prcticamente es 0.


El algoritmo FFT es una herramienta de anlisis muy potente para trabajar con seales
digitales. Nuestra explicacin se ha concentrado en la magnitud del valor X[k], pero tambin
se obtiene informacin muy importante del ngulo (fase) de X[k].
............................................................................................
Ejercicio: Genere y grafique 128 puntos de las siguientes seales usando una tasa
de muestreo de 1 kHz. Luego, usando el algoritmo FFT, genere y grafique los
primeros 64 puntos de la salida de la funcin fft. Use una escala en Hz para el
eje horizontal. Verifique que los picos ocurran en el lugar esperado.
1.
2.
3.
4.

f (t) = 2 sen(250t)
g(t) = cos(250t) sen(200t)
h(t) = 5 cos(1000t)
m(t) = 4 sen(250t /4)

Das könnte Ihnen auch gefallen