Está en la página 1de 5

Laboratorio 2

Análisis espectral usando la DFT/FFT

El uso del análisis de Fourier para determinar el contenido espectral de señales continuas en el tiempo es directo por
medio de integrales o tablas de transformadas y propiedades, y para señales de tiempo discreto o muestreadas se
aplican las transformadas directa e inversa discretas de Fourier. En este último caso, es necesario considerar ciertas
precauciones para que los resultados tengan significado real, de no ser así, los resultados obtenidos pueden parecer
válidos sin el usuario darse cuenta de que la salida no es correcta.

Al modelar señales con algún software se requiere representar las señales con muestras, debido a la naturaleza
discreta de las computadoras que no pueden generar un continuum de tiempo o frecuencia. Por esto, entre las
consideraciones que deben tomarse en cuenta para modelar sistemas muestreados están: la razón o periodo de
muestreo, las resoluciones de tiempo y frecuencia, y qué transformaciones discretas (directa o inversa) de
frecuencia se realizarán.

La Transformada de Fourier para señales muestreadas se realiza en MATLAB por medio del algoritmo FFT
(transformada rápida de Fourier) en el caso en que el número de muestras sea una potencia de 2, de lo contrario se
utiliza DFT.

En este laboratorio se estudiarán los comandos, procedimientos y algunas técnicas para realizar el análisis espectral
de señales. Adicionalmente se estudian las señales y sistemas (filtros) en el dominio de la frecuencia.

Objetivos:
 Utilizar una herramienta de análisis matemático y simulación para confirmar algunos conceptos
importantes sobre el análisis de señales en el dominio de la frecuencia.
 Utilizar la DFT y FFT para calcular el espectro de una señal y estudiar el intercambio entre la resolución de
la frecuencia y la fuga espectral.
 Estudiar el efecto en la resolución espectral que tiene el uso de ventanas para filtrar las señales.
 Analizar el efecto de los filtros en el ancho de banda d las señales

Funciones de interés:
 fft fftshift ifft linspace
 rectwin hamming wvtool butter pulstran

Algunos parámetros y relaciones importantes que es necesario considerar para obtener resultados correctos en el
análisis espectral:
a. Definición de una frecuencia de muestreo Fs (Teorema de Nyquist)
b. Definición de un número de muestras N (preferiblemente una potencia de 2).
c. Relaciones tiempo-frecuencia para la transformación directa e inversa de Fourier. ¡Note las correspondencias
tiempo-frecuencia!

dt = 1/Fs periodo de muestreo


T = N*dt tiempo total de la señal
t = (0:N-1)*dt vector tiempo, max(t) = T – dt
df = 1/T resolución de frecuencia
Fs = N*df frecuencia de muestreo
f = (0:N -1)*df vector de frecuencias (sólo positivas), max(f) = Fs – df

Lab. de Comunicaciones I – Prof. Dr.-Ing. Carlos A. Medina C 1


d. Otros parámetros de consideración
Q = ceil((N+1)/2) número de puntos únicos, Q = 1 + N/2 (N par) Q = (N+1)/2 (N impar)
fQ = (Q-1)*df máxima frecuencia “física”
fc = f-fQ; intervalo del espectro de doble lado

Note que min(fc) = -fQ = -Fs/2 para N par, y


min(fc) = -fQ = -Fs/2 + df/2 para N impar
max(fc) = (N-Q)*df = Fs/2 -df para N par
max(fc) = (N-Q)*df = Fs/2 -df/2 para N impar

La razón de todo esto es enfatizar que para ir del espectro de frecuencia a la señal temporal, vía ifft,
X(f) = fft(x) o Xc(fc) =fftshift(X)
debe definirse sobre el intervalo completo indicado arriba.

Recuerde que el espectro es complejo, es necesario considerar la parte real y la imaginaria, o la magnitud y la fase.

Algunas observaciones sobre el uso de las funciones fft y ifft en MATLAB:


 El programa utiliza el mismo algoritmo para calcular tanto fft como la inversa ifft. Por esta razón el programa
no escala apropiadamente la salida. Recuerde que la sumatoria para fft debe dividirse entre N (el número de
muestras) y que la sumatoria para ifft debe multiplicarse por N. MATLAB no realiza estas operaciones, por lo
que deberá incluirlas.
 Al calcular la fft, el rango de frecuencias de los resultados se extiende hasta f max (la frecuencia de muestreo).
Sin embargo, ya que la máxima entrada para la señal es f max/2, solamente la mitad de la gráfica o de los puntos
son relevantes (referidos arriba como puntos únicos Q); la segunda mitad es solamente una imagen espejo de la
mitad izquierda.
 Hay dos soluciones para prevenir que las frecuencias imagen confundan al usuario: graficar solamente la
primera mitad de los puntos o utilizar el comando fftshift de MATLAB para correr todo el especto a la izquierda
fs/2, invertirlo y desplazarlo a la izquierda de DC.
 Esto último también resulta de gran importancia para obtener la transformada inversa a partir de muestras del
espectro de una señal.

1. FFT y FFTSHIFT
Y = fft(X) computes the discrete Fourier transform (DFT) of X using a fast Fourier transform (FFT) algorithm.
If X is a vector, then fft(X, NFFT) returns the Fourier transform of the vector using NFFT points.
If X is a matrix, then fft(X, NFFT) treats the columns of X as vectors and returns the Fourier transform of each column using NFFT points.

Y = fft(X,n) returns the n-point DFT. If no value is specified, Y is the same size as X.
If X is a vector and the length of X is less than n, then X is padded with trailing zeros to length n.
If X is a vector and the length of X is greater than n, then X is truncated to length n.
If X is a matrix, then each column is treated as in the vector case.

Shift zero-frequency component to center of spectrum


Y = fftshift(X) rearranges the outputs of fft by moving the zero-frequency component to the center of the array. It is useful for visualizing a
Fourier transform with the zero-frequency component in the middle of the spectrum.
For vectors, fftshift(X) swaps the left and right halves of X.

Note: ifftshift will undo the results of fftshift. If the matrix X contains an odd number of elements, ifftshift(fftshift(X)) must be done to
obtain the original X. Simply performing fftshift(X) twice will not produce X.
Lab. de Comunicaciones I – Prof. Dr.-Ing. Carlos A. Medina C 2
a. Forme una señal x(t) de 1000-puntos (N) de longitud (en el tiempo) que contenga una onda coseno de 100 Hz
con amplitud 0.8 y una onda seno de 200 Hz con amplitud 1.2. Use una frecuencia de muestreo de 1 kHz. ¿Cuál
es la resolución de frecuencia df?
b. Calcule la transformada discreta de Fourier de la señal.
c. Calcule el espectro de amplitud de doble lado X2. Luego calcule el espectro de un solo lado X1 basado en P2 y
el número de puntos de la señal.
d. Defina el dominio de la frecuencia de doble lado f2 (soporte). Sugerencia: considere usar linspace.
e. Defina el dominio de la frecuencia de un solo lado f1 (soporte). Sugerencia: considere usar linspace.
f. En una sola figura usando tres gráficas (una debajo de la otra), grafique la señal en el dominio del tiempo, y los
espectros de amplitud de doble lado P2 (use fftshift) y de un solo lado P1 de la señal.

2. Adición de ceros y ventanas (rectangular, Hamming)


Zero padding
La adición de ceros (zero padding) se usa para mejorar la estimación de las componentes de frecuencia de una
señal. Las frecuencias en la transformada discreta de Fourier están espaciadas en intervalos de Fs/N (df, resolución
de frecuencia). Cuando se intenta estimar la amplitud de una componente de una sinusoide con una frecuencia que
no corresponde a un DFT bin puede resultar una estimación no precisa. La adición de ceros a los datos antes de
calcular la DFT ayuda a mejorar la precisión de las amplitudes estimadas.
a. Forme una señal x(t) de 1000-puntos (N) de longitud (en el tiempo) que contenga una onda seno de 100 Hz con
amplitud 1 y una onda seno de 202.5 Hz con amplitud 1. Use una frecuencia de muestreo de 1 kHz. ¿Cuál es la
resolución de frecuencia df? ¿se tendrá una buena estimación de las amplitudes de las sinusoides que
conforman la señal?
b. Calcule la transformada discreta de Fourier de la señal y grafique el espectro de un solo lado. ¿Qué observa?
¿son correctas las amplitudes de las componentes sinusoidales de la señal?
Se puede interpolar la DFT por medio de la adición de ceros, lo que permite mejorar la estimación de las
amplitudes de las componentes espectral de una señal. Por otro lado, la adición de ceros no mejora la resolución
espectral de la DFT. La resolución espectral está determinada por el número de muestras (N) y la razón de muestreo
(Fs).
c. Calcule la DFT de la señal usando una longitud de 2000 puntos (para la FFT). ¿Con esta longitud, cuál es la
separación entre los DFT bins? Grafique el espectro de un solo lado. ¿Qué observa? ¿son correctas las
amplitudes de las componentes sinusoidales de la señal?
Rectangular window
w = rectwin(L) returns a rectangular window of length L in the column vector w. This function is provided for completeness;
a rectangular window is equivalent to no window at all.

d. Crear una ventana rectangular de 64-puntos. Mostrar el resultado usando wvtool.

Hamming window
w = hamming(L) returns an L-point symmetric Hamming window in the column vector w. L should be a positive integer. The coefficients of
a Hamming window are computed from the following equation.

w(n)=0.54−0.46cos(2πn/(L – 1)), 0 ≤ n ≤ L – 1

w = hamming(L,'sflag') returns an L-point Hamming window using the window sampling specified by 'sflag', which can be
either 'periodic' or 'symmetric' (the default). The 'periodic' flag is useful for DFT/FFT purposes, such as in spectral analysis. The DFT/FFT
contains an implicit periodic extension and the periodic flag enables a signal windowed with a periodic window to have perfect periodic

Lab. de Comunicaciones I – Prof. Dr.-Ing. Carlos A. Medina C 3


extension. When 'periodic' is specified, hamming computes a length L+1 window and returns the first L points. When using windows for
filter design, the 'symmetric' flag should be used.

e. Crear una ventana Hamming de 64-puntos. Mostrar el resultado usando wvtool.

3. Análisis espectral – relación entre la resolución de frecuencia y la fuga espectral


Una señal x(t) consiste de tres sinusoides con frecuencias de f1 = 4 kHz, f2 = 5 kHz y f3 = 6 kHz.

a. Forme la señal x(t) con N =100 muestras a una razón de muestreo de 20 kHz y una duración de 5 ms. ¿Cuál es
la resolución de frecuencia df?
b. Grafique la señal xn versus el índice de muestra n.
c. Calcule la DFT de 256 puntos (para la FFT) de la señal xn de longitud N. Grafique la magnitud del espectro de
un solo lado de la señal con respecto a una frecuencia normalizada f/Fs, esto es, sobre el rango 0 ≤ f/Fs ≤ 1.
d. Use la ifft y calcule la transformada inversa FFT de 256 puntos del resultado en la parte (c) y verifique que
recupera la señal original en el tiempo incluyendo los ceros que han sido añadidos a la cola. En una misma
figura, grafique (una debajo de la otra) las señales de la parte (b) y (d) usando un mismo rango horizontal [0,
256].
e. Construya una ventana wn Hamming de longitud N y aplíquela a la señal xn. En una misma figura, grafique (una
debajo de la otra) las señales de la parte (b) y la señal xn wn usando la misma escala vertical para ambas.
f. Repita la parte (c) para la señal con ventana Hamming xn wn. Discuta el intercambio entre reducir los niveles de
los lóbulos laterales (lóbulos más pequeños) y la pérdida de la resolución de frecuencia.
g. Repita las partes (c) y (f) cuando N se reduce a N = 50, N = 25 y N = 10. Para ambas señales, con ventana
rectangular y Hammig, discuta la pérdida de la resolución de frecuencia a medida que los datos registrados son
menores.
h. Muestre en una misma figura, las gráficas (en arreglo de dos columnas) correspondientes a los casos de ventana
rectangular (columna 1) y ventana Hamming (columna 2).

4. Una señal de un solo tono s = sin(400t) se transmite a un amplificador de audio y bocina para producir una
señal de advertencia. Un filtro con respuesta al impulso h = 400 e–200tcos(400t)u(t) se ha diseñado para reducir
la interferencia aditiva en la señal recibida.
a. Determine la señal de salida del filtro, y, cuando se recibe la señal de entrada x = [cos(100t) + sin(400t)
– cos(800t)] u(t).
b. Determine el espectro de magnitud de las señales de entrada y salida, y la magnitud de la respuesta en
frecuencia del filtro.
c. En una misma figura (en un arreglo de dos filas y tres columnas) gráfique las señales del tiempo x, h, y (en
la primera columna) y sus espectros de magnitud correspondientes en la segunda columna.

y = pulstran(t,d,’func’,w) genera un tren de pulsos basado en muestras de una fución continua ‘func’ donde ‘func’ puede ser
 'gauspuls', para generar un pulso sinusoidal con modulación Gaussiana
 'rectpuls', para generar un rectángulo aperiódico muestreado
 'tripuls', para generar un triángulo aperiódico muestreado
t es el vector soporte de tiempo,
d es un vector [di To df] donde di es el primer instante donde aparece centrado el primer pulso del tren, To es el periodo del tren de pulsos y
df es el último instante donde aparece centrado el último pulso del tren,
w especifica el ancho del pulso en seg

Lab. de Comunicaciones I – Prof. Dr.-Ing. Carlos A. Medina C 4


5. Considere la señal periódica rectangular x(t), con periodo T0, definida por
 A, t  t0
xt   A  
t
2t0
A
 2 , t  t 0
A
 0 de lo contrario
 -T0/2 T0/2
Sea A = 1, T0 = 10 y t0 = 1.
-T0 T0 t
-t0 t0

a. Genere la señal x para al menos 6 periodos usando la función pulstran.


b. Determine los espectros de magnitud y fase de la señal.
c. En una misma figura, muestre las graficas de la señal x(t) y los espectros de un solo lado de magnitud y
fase de la señal.

% Filtro pasa-bajas "ideal"


ht = (10e3/35)*sinc((t-0.03)/0.0035);
Hf = fft(ht/N);

% Filtros
[DL,NL]=butter(6,200/(Fs/2),'low'); % fo = 200 Hz
[DP,NP]=butter(6,[300/(Fs/2) 500/(Fs/2)],'bandpass'); % f1 = 300 Hz - f2 = 500 Hz
[DH,NH]=butter(6,700/(Fs/2),'high'); % fo = 700 Hz

% Respuestas en el t y la f de los filtros


[hL,tL] = impz(DL,NL);
[hP,tP] = impz(DP,NP);
[hH,tH] = impz(DH,NH);

[HL,w]=freqz(hL);
[HP,w]=freqz(hP);
[HH,w]=freqz(hH);
w=w*(Fs/2)/pi; % frecuencia en Hz

6. Considere la siguiente señal


cos2 47t   cos2 219t , 0  t  45 ms
xt   
 0, 0  t  45 ms
a. Grafique la señal en el intervalo  5  t  50 ms.
b. Asuma que esta señal se muestrea a una razón de 1000 muestras por segundo. Grafique la señal muestreada
resultante (stem). Muestre esta gráfica con la del punto a en una sola figura (utilice subplot 2x1).
c. Grafique los espectros de amplitud y fase de la señal x(t). Anote algunas observaciones de interés
(frecuencias, propiedades, etc.).
d. Utilice la función butter de MATLAB para diseñar un filtro pasa bajas Butterworth de orden 4 y frecuencia
de corte de 100 Hz. Grafique la respuesta en frecuencia del filtro. Para esto último puede utilizar la función
freqz.
e. Obtenga y grafique la respuesta al impulso del filtro del punto d. y grafíquela. Puede utilizar la función
impz.
f. Pase la señal x(t) a través de este filtro. Determine y grafique la señal de salida y(t). Adicionalmente
determine y grafique el espectro de potencia de la salida. Para esto puede utilizar la función filter o conv.
g. Ahora diseñe un filtro Butterworth de orden 8 con igual frecuencia de corte y repita los pasos d. e. y f.
h. Compare los resultados de los espectros de los puntos c., f. y g.

Lab. de Comunicaciones I – Prof. Dr.-Ing. Carlos A. Medina C 5

También podría gustarte