Está en la página 1de 35

Jan Bacca Rodrguez

jbaccar@unal.edu.co
Matlab trabaja nicamente con seales
discretas.
Las nicas seales que son discretas en
tiempo y frecuencia son las seales
peridicas discretas.
Para los otros casos se requerirn
aproximaciones para poder llevar a cabo
anlisis de Fourier en Matlab.
2 2
1 jk n jk n
ak
N 0 n N0
x[n]e N0
x[ n ] a e
k N0
k
N0
Las ecuaciones de sntesis y anlisis para este
caso se pueden implementar fcilmente como
programas .m
Los comandos de Matlab fft e ifft se
pueden usar para implementar estas
ecuaciones.
Si el vector x contiene un perodo de la seal,
de longitud N:
X = fft(x)/N; Ec. de Anlisis
x = ifft(X)*N; Ec. de Sntesis
Matlab asume que el vector x contiene el
perodo de la seal que va de n = 0 a N-1.

Los coeficientes en X sern tambin los de k


= 0 a N-1.

fft e ifft se calculan por medio de un


algoritmo conocido como la Transformada
Rpida de Fourier (Fast Fourier Transform)
Calcular los coeficientes de Fourier de la seal:
3
x[n ] 1 sen n
12 8
M M 1
2
N 12 N 24
La seal tiene 24 coeficientes.
j

1 12 8
n
3
j

n
3

x[n ] 1 e e 12 8
2 j

3 3
j j
e 8 j n e 8 j n
e 12
1 e 12
2j 2j
3 3
j j
e 8
e 8
a 1 , a0 1, a1
2j 2j

Los otros 21 coeficientes sern 0.

en Matlab:
x = ones(1,24)+sin([0:23]*pi/12+3*pi/8);
X = fft(x)/24
X =

Columns 1 through 5

1.0000 0.4619 - 0.1913i 0.0000 + 0.0000i -


0.0000 + 0.0000i -0.0000 + 0.0000i

Columns 6 through 10

-0.0000 - 0.0000i 0.0000 - 0.0000i 0.0000 - 0.0000i 0.0000 +


0.0000i -0.0000 - 0.0000i

Columns 11 through 15

-0.0000 - 0.0000i -0.0000 - 0.0000i 0 -


0.0000 + 0.0000i -0.0000 + 0.0000i

Columns 16 through 20

-0.0000 + 0.0000i 0.0000 - 0.0000i 0.0000 + 0.0000i 0.0000 +


0.0000i -0.0000 + 0.0000i

Columns 16 through 24

-0.0000 - 0.0000i -0.0000 - 0.0000i 0.0000 - 0.0000i 0.4619 +


0.1913i
Los coeficientes diferentes de cero estn en
las posiciones 1, 2 y 24, que corresponden a
los coeficientes 0, 1 y 23.
Los coeficientes de la serie tienen periodo 24
El coeficiente 23 es igual al coeficiente -1
Si se prefiere tener el coeficiente
correspondiente a la frecuencia 0 al centro
del vector se usa la funcin fftshift
X = fftshift(x)
Para este caso,
despus de
fftshift, los
valores en las
posiciones 1 y 2 se
mueven a las
posiciones 13 y 14 y
el valor en la
posicin 24 a la
posicin 12.
La seal original se
puede recuperar
usando:
x =24*ifft(X)
x = [1 2 0 0 0 2];
X = fft(x)/6;
Sea x[n] una seal de duracin M
Su transformada de Fourier ser:

x[n]e
M 1
X e j jn

n 0

Construya ahora una seal peridica de


perodo N M, xp[n] haciendo copias de x[n]
La serie de Fourier de xp[n] ser
N 1 2
1 jk n
ak
N
x[n]e
n 0
N
Comparando:
ak
1
N

X e j
k
2
N

Los coeficientes de la serie de xp[n] son


muestras de la transformada de x[n] divididas
por N.
La ecuacin de sntesis de los ak nos
permitir recuperar xp[n]
xp[n] = x[n] para 0n<M
N 1 2 N 1 2
X k x[n]e
jk 1
x[n] X [k ]e
n jk n
N N

n 0 N n 0

Aplica para seales discretas de duracin


finita M N.
Es til debido a que se puede calcular
numricamente.
Transformada Rpida de Fourier (FFT):
Algoritmo rpido para el clculo de la DFT. N
es la potencia de un entero (i.e. N = 2k)
La DFT de cualquier longitud se puede
calcular usando fft.
X = fft(x,N) es la DFT de N puntos de x[n],
completando con ceros al final si es
necesario.
Si N<M, se toman la N primeras muestras de
x[n].
Completar con ceros resulta en muestras ms
cercanas en frecuencia.
Los valores de frecuencia correspondientes a
las muestras en X[k] estn uniformemente
distribuidos en el intervalo [0, 2).

omega = [0:N-1]*2*pi/N

Si se usa fftshift, los valores de frecuencia


estarn en el intervalo [-,)

omega = [-N/2:N/2-1]*2*pi/N
3
cos n 0 n 31
x[ n ] 8

0 otros

Calcular |X(ej)| a intervalos de frecuencia


a) 2/32
b) 2/64
c) 2/128

Los intervalos indicados corresponde a


DFTs de 32, 64 y 128 puntos.
n = [0:31];
x = cos(3*pi*n/8);
X32 = abs(fftshift(fft(x)));
X60 = abs(fftshift(fft(x,64)));
X120 = abs(fftshift(fft(x,128)));
w32 = [-16:15]*2*pi/32;
figure
subplot(3,1,1)
stem(w32, X32)
axis([-pi pi 0 20])
20

15

10

0
-3 -2 -1 0 1 2 3

20

15

10

0
-3 -2 -1 0 1 2 3

20

15

10

0
-3 -2 -1 0 1 2 3
fft se usa con seales discretas de duracin
finita.
Para usarla con seales continuas, se debe
muestrear y recortar la seal.

Cmo escoger T, M, N para que Y[k] sea una


buena aproximacin de X(j)?
Muestreo: x[n] = x(nT)
2
La frecuencia de muestreo ser s
T

Sea x(t) tal que X(j) = 0 para ||>x

Si se quiere aproximar el espectro de X(j)


para ||<a se debe escoger
2
s 2Max T con Max Max x , a
Max
Los espectros de la seal original y la seal
muestreada estn relacionados as:

1 1 s

X e j
X j X j
T T T

2

Recorte: El tomar solo M muestras de la seal


equivale a multiplicar la seal por un pulso
rectangular w[n] de duracin M
y[n] = x[n]w[n]
En frecuencia esto
equivale a una
convolucin con la
seal:
T
M 1 sen M
j
jT
2
W (e ) e 2
T
sen
2
La convolucin suaviza
el espectro de la seal
original.
La resolucin de la
ventana ser el
ancho del lbulo
principal:
de donde:
s
r
M

s 2
M MT
r r
La DFT de N puntos de x[n] est dada por:
jk 2N 1 s
Y [k ] X e X jk
T N

Si se desea que las muestras en frecuencia
estn separadas una distancia de al menos
D:
s
N
D
t

x(t ) e 10
u(t )cos( 10t ) cos( 12t )

Suponga que la banda de frecuencias de


inters es -20 < < 20 y el intervalo de
muestreo en frecuencia D = /20.
Aproximar X(j) para las resoluciones:
a) 2
b) 2/5
c) 2/25
Para hallar la transformada de Fourier de
x(t) se escribe como x(t) = f(t)g(t) con


g(t) = cos(10t) + cos(12t)
1
F ( j )
1
j
10
G(j) = (d(+10)+d(-10)+d(+12)d(-12))
1 1 1

j 10 1 j 10
1
j 12
1
1 10 10 10
X ( j )
2 1

j 12 1

10
1 1
j j
X ( j ) 10 10
2 2
1 1
j 10 j 12
2 2

10 10
Esta seal no est
limitada en banda
pero su potencia
disminuye
rpidamente cuando
crece.
Se escoge x = 500
porque la magnitud
en ese valor es 10
veces menor que en
a = 20
2
T 0.0063
1000
Se escoge T = 0.005, de donde s = 400.
s 400
M
r r
a) r = 2 M = 200
b) r = 2/5 M = 1000
c) r = 2/25 M = 5000

El nmero de muestras de la DFT debe


satisfacer
s 400
N 8000
D
20
t

x(t ) e 10
u(t )cos( 10t ) cos( 12t )

T = 0.005 T = 0.005;
N = 8000;
N = 8000 M = 5000;
t = 0:T:(M-1)*T;
a) M = 200 x = exp(-t/10).*(cos(10*t)+cos(12*t));
b) M = 1000 Xa = abs(fft(x(1:200),N)*T);
c) M = 5000 n = 2*pi/T*(0:N-1)/N;
figure
subplot(2,2,2)
stem(n(1:128),Xa(1:128))

omega = 0:20/511:20;
X =
(0.1+i*omega)./((.1+i*omega).^2+100)+(0
.1+i*omega)./((.1+i*omega).^2+144);
hold
plot(omega, abs(X),'r')
axis([0 20 0 6])
2 6

5
1
4

0 3

2
-1
1

-2 0
0 5 10 15 20 0 5 10 15 20

6 6

5 5

4 4

3 3

2 2

1 1

0 0
0 5 10 15 20 0 5 10 15 20
Matlab permite calcular numricamente la
respuesta en frecuencia de sistemas
continuos y discretos para valores discretos
de frecuencia.
La respuesta en frecuencia de un sistema es
la transformada de Fourier de su respuesta
impulso.
Los comandos freqs and freqz permiten
evaluar la respuesta en frecuencia de
sistemas descritos por ecuaciones
diferenciales o de diferencia sin tener la
respuesta impulso.
H = freqs (b, a, w) calcula la respuesta
en frecuencia del sistema en tiempo continuo
descrito por la ecuacin:

N
d k y(t ) M d k x(t )

k 0
a N k
dt k
bM k
k 0 dt k

a, b: vectores de coeficientes de la ecuacin


diferencial. El primer elemento de cada vector
corresponde a la derivada ms alta.
w: vector de frecuencias donde H(j) ser
calculada.

freqs (b, a, w) sin argumentos de salida


grafica la magnitud y fase de H(j) .

Si no se especifica w, matlab escoge un vector


de 200 frecuencias donde calcular H(j) .

Si se reemplaza w por un nmero entero N


Matlab calcular H(j) para N frecuencias
[H,w] = freqz (b, a, N) calcula la
respuesta en frecuencia del sistema en
tiempo discreto descrito por la ecuacin:

N M

a yn k b xn k
k 0
k
k 0
k

a, b: vectores de coeficientes de la ecuacin


de diferencias. El primer elemento de cada
vector corresponde a la muestra actual.
N: Nmero de frecuencias uniformemente
distribuidas entre 0 y en las que se
calcular H(ej). Si N no se especifica se usan
512 puntos.
[H, w]=freqz (b, a, N,whole) usa N
puntos entre 0 y 2 .
H = freqz (b, a, w): w es el vector de
frecuencias donde se calcular H(ej).
[H, f] = freqz (b, a, N, fs): fs es la
frecuencia de muestreo de la seal
H = freqz (b, a, F, fs): F es el vector
de frecuencias (Hz) donde se calcular H(ej).

También podría gustarte