IEE239 - 2024-1 - Clase05b - Mejorando La DFT - Matlab

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 30

INGENIERÍA

MECATRÓNICA

PROCESAMIENTO DE SEÑALES E
IMÁGENES DIGITALES
MEJORANDO LA DFT

MSc Pedro Crisóstomo


IEE239 2024-1
1
• Motivación
• DFT de señales
• Dispersión
• Enventanamiento
• Baja resolución
CONTENIDO • Agregado de ceros
• Resumen

IEE239, 2024-1, Pedro Crisóstomo 2


Motivación

● Conocer el contenido frecuencial de señales discretas.

● Diferenciar las Series de Fourier de la Transformada de Fourier.

● Transformar una señal del dominio del tiempo al dominio de la


frecuencia y en sentido contrario.

● Entender la descomposición de señales.

● Manejar la magnitud y fase de espectros de señales.

IEE239, 2024-1, Pedro Crisóstomo 3


DFT de señales
Recordemos las fórmulas para el cálculo de la DFT e IDFT:

A continuación veremos ejemplos de X(k) para algunas señales


obtenidas con código en Matlab con el comando fft.

IEE239, 2024-1, Pedro Crisóstomo 4


DFT de señales
El código siguiente grafica la magnitud y fase de la Transformada de Fourier señal
aleatoria. Tanto x(n) como X(k) tienen la misma longitud de 40 elementos.

%% DFT Para una señal aleatoria


x = rand(1,40) - 0.5; % Genera vector aleatorio de 40 elementos
X = fft(x); % Aplica la DFT
XM = abs(X); % Obtiene el módulo
XF = angle(X); % su fase
real(X); % la parte real
imag(X); % y la imaginaria

figure;
subplot(2,2,[1 3]), stem(x); grid; title('Señal aleatoria x(n)')
xlabel('n'); ylabel('Amplitud');
subplot(2,2, 2); stem(XM); grid; title('Magnitud de su DFT');
xlabel('k'); ylabel('Magnitud de X(k)');
subplot(2,2,4); stem(XF); grid; title('Fase de su DFT');
xlabel('k'); ylabel('Fase de X(k)'); 5
IEE239, 2024-1, Pedro Crisóstomo
DFT de señales

IEE239, 2024-1, Pedro Crisóstomo 6


DFT de señales (senoidal)
Ahora, el caso de una señal senoidal

%% DFT para una señal senoidal


N = 100; % Nro de elementos del vector
n = 0:N-1; % Indice de los elementos... 0, 1, 2, ... N-1
f = 100; % Frecuencia de la señal senoidal
fs = 1000; % Frecuencia de muestreo fs > 2f
T = 1/fs % Periodo de muestreo
x = sin(2*pi*f*n/fs); % Señal senoidal (t = nT = n/fs)
t = n*T; % Vector de tiempo

% Muestra x(n) vs n y x(n) vs t


figure;
subplot(2,1,1), stem(x, 'r'); grid; title('Señal Senoidal f=100 fs=1000 N=100');
xlabel('Muestras (n)'); ylabel('Amplitud');
subplot(2,1,2),stem(t, x, 'r'); grid; title('Señal Senoidal f=100 fs=1000 N=100');
xlabel('tiempo (s)'); ylabel('amplitud');
IEE239, 2024-1, Pedro Crisóstomo 7
DFT de señales (senoidal)

IEE239, 2024-1, Pedro Crisóstomo 8


DFT de señales (senoidal)
DFT realizado con el comando fft, que produce el mismo resultado

%% Cálculo y visualización de la DFT


X = fft(x); % DFT de la señal senoidal
figure;
% Gráficos incorrectos porque X es complejo
subplot(2,2,1); plot(X); grid; title('Grafico incorrecto para plot(X)');
subplot(2,2,2); stem(X); grid; title('Grafico incorrecto para stem(X)');

% Para graficar bien


XM = abs(X); % Magnitud
XF = angle(X); % Fase
subplot(2,2,3); stem(XM, 'r'); grid; title('Magnitud: |X(k)|');
xlabel('k'); ylabel('Magnitud');
subplot(2,2,4); stem(XF, 'r'); grid; title('Fase: angle(X(k))');
xlabel('k'); ylabel('Fase');

IEE239, 2024-1, Pedro Crisóstomo 9


DFT de señales (senoidal)

IEE239, 2024-1, Pedro Crisóstomo 10


DFT de señales (senoidal)
%% Colocando las frecuencias al gráfico de X(k)
% Para frecuencias de 0 a fs
k = 0:N-1; % Índices en el dominio de la frecuencia
df = fs/N; % Resolución en frecuencia
f = k*df; % Vector de frecuencia
figure;
subplot(2,2,1); stem(f, XM); grid; title('Magnitud de X(k) vs f');
xlabel('Frecuencia f(Hz)'); ylabel('Magnitud');
subplot(2,2,2); stem(f, XF); grid; title('Fase de X(k) vs f');
xlabel('Frecuencia f(Hz)'); ylabel('Fase');

% Para reordenar las frecuencias desde -fs/2 a fs/2


XM2 = fftshift(abs(X)); % Magnitud
XF2 = fftshift(angle(X)); % Fase
f = -fs/2 : fs/N : fs/2 - fs/N; % Vector de frecuencias
subplot(2,2,3); stem(f, XM2); grid; title('Magnitud de X(k) - Ordenado');
xlabel('Frecuencia f(Hz)'); ylabel('Magnitud');
subplot(2,2,4); stem(f, XF2); grid; title('Fase de X(k) - Ordenado');
xlabel('Frecuencia f(Hz)'); ylabel('Fase');

IEE239, 2024-1, Pedro Crisóstomo 11


DFT de señales (senoidal)

IEE239, 2024-1, Pedro Crisóstomo 12


DFT de señales (senoidal)
Para hallar la inversa de la DFT se debe tomar el vector en el dominio de la frecuencia.

%% Halla la transformada inversa de Fourier


x2 = ifft(X); % Inversa de X(k)
x3 = real(x2); % Se toma la parte real por quedar imaginarios pequeños
diferencia = x3 - x; % Diferencia entre las dos señales

% Gráfica de la señal recuperada


figure,
subplot(3,1,1), stem(t, x, 'k'), grid, title('x(n) original')
subplot(3,1,2), stem(t, x3), grid, title('x3(n) con inversa')
subplot(3,1,3), stem(t, diferencia, 'r'), grid, title('x3(n) - x(n)')
% Notar las pequeñísimas diferencias

IEE239, 2024-1, Pedro Crisóstomo 13


DFT de señales (senoidal)

IEE239, 2024-1, Pedro Crisóstomo 14


DFT de señales (senoidales)
%% Ahora con una señal que es suma de dos senoidales
f1 = 100; % x1 tiene senoidales con frecuencias 100 y 200
x1 = sin(2*pi*f1*n/fs) + 0.5*sin(2*pi*2*f1*n/fs);
f2 = 63; % x2 tiene senoidales con frecuencias 63 y 126
x2 = sin(2*pi*f2*n/fs) + 0.5*sin(2*pi*2*f2*n/fs);
X1 = fftshift(fft(x1)); % Aplica la DFT
X2 = fftshift(fft(x2)); % Aplica la DFT
XM1 = abs(X1); XM2 = abs(X2); % Obtiene el módulo
% La resolución es fs/N = 10 Hz
f = -fs/2 : fs/N : fs/2 - fs/N; % Vector de frecuencias
figure;
subplot(2,2,1); stem(x1); grid; title('x1(n) con frecuencias 100 y 200');
subplot(2,2,3); stem(f, XM1); grid; title('Magnitud de X1(k)');
xlabel('Frecuencia (Hz)'); ylabel('Magnitud');
subplot(2,2,2); stem(x2); grid; title('x2(n) con frecuencias 63 y 126');
subplot(2,2,4); stem(f, XM2); grid; title('Magnitud de X2(k)');
xlabel('Frecuencia (Hz)'); ylabel('Magnitud');
IEE239, 2024-1, Pedro Crisóstomo 15
DFT de señales (senoidales)

IEE239, 2024-1, Pedro Crisóstomo 16


Dispersión
Analicemos las diferencias de los dos casos anteriores, señales
compuestas por dos senoidales donde una tiene el doble de
frecuencia que la otra (100 y 200, 63 y 126):

● Mientras que en el primer caso, la DFT representa de manera


perfecta las frecuencias que componen la señal, en el
segundo caso se aproxima.

● Se debe a que la resolución, en ambos casos, es fs/N = 10 Hz


y solo se puede representar frecuencias múltiplos de ese
valor; como 63 y 126 no son múltiplos de 10, su energía
espectral se dispersa. Se le conoce como “efecto de fuga”
(leakage).
IEE239, 2024-1, Pedro Crisóstomo 17
Dispersión
● Gráficamente, en el dominio del tiempo, la dispersión ocurre
cuando la señal no contiene un número exacto de ondas
(comparar ambos gráficos).

● La DFT asume que la señal finita es periódica, la repite a


ambos lados infinitamente. La señal así resultante, para el
primer caso, mantiene su forma; el empalme es perfecto. Para
el segundo caso se tendría un salto en los empalmes.

● En el ejemplo de dispersión se puede observar que las


componentes más fuertes se acercan a las frecuencias reales.

IEE239, 2024-1, Pedro Crisóstomo 18


Dispersión
● Al realizar el cálculo de la DFT sobre una secuencia (señal) de
N puntos sólo se tendrá una medida precisa sobre frecuencias
que se encuentran a múltiplos enteros de fs/N.

● Es decir las frecuencias medidas serán: fs/N, y sus armónicos:


2*fs/N, 3*fs/N,…k*fs/N, …donde k = 0…N-1. Cualquier
componente espectral que tenga la señal y se encuentre entre
dos armónicos no podrá medirse adecuadamente. La energía
de una componente de la señal como: (k+0.5)fs/N se
dispersará en varios armónicos vecinos.

● Una señal general tiene muchas componentes frecuenciales y


la dispersión ocurriría para casi todas ellas.
IEE239, 2024-1, Pedro Crisóstomo 19
Enventanamiento
● Para mejorar la claridad del espectro en frecuencia de una
señal debido a la dispersión producida por la DFT, la técnica de
enventanamiento (Windowing) consiste en atenuar los
extremos de la señal.

● Las ventanas tienen una forma acampanada para mantener las


frecuencias principales de la señal y reducir el salto en los
extremos para las frecuencias que se dispersan.

● Recordemos que la DFT busca repetir la señal hacia ambos


lados.

IEE239, 2024-1, Pedro Crisóstomo 20


Enventanamiento
● Existen diversos tipos de ventanas propuestas y tienen efectos
similares: Hamming, Hanning, Blackman, entre otros. Sus
ecuaciones permiten obtener un vector de cualquier longitud
(debe ser igual a la longitud de la señal a transformar con DFT)
con esa característica.

IEE239, 2024-1, Pedro Crisóstomo 21


Enventanamiento
● Multiplicando la señal por una ventana se reduce el efecto de la
Dispersión.

IEE239, 2024-1, Pedro Crisóstomo 22


Enventanamiento
Ventanas de Hamming
con diferentes cantidades
de muestras.

En Matlab usar:

w = hamming(N)

donde N es la cantidad de
puntos que se requiere.

IEE239, 2024-1, Pedro Crisóstomo 23


Enventanamiento
%% Enventanamiento
w = hamming(length(x2)); % Ventana de hamming
x2w = x2.*w'; % Aplica la ventana
X2W = fftshift(fft(x2w)); % Aplica la DFT
X2WM = abs(X2W); % Obtiene el módulo

figure,
subplot(3,2,1), stem(x2), grid, title('x2(n) con frecuencias 63 y 126');
xlabel('n'); ylabel('Amplitud');
subplot(3,2,3), stem(w), grid, title('w(n): Ventana de hamming del tamaño de x2');
xlabel('n'); ylabel('Amplitud');
subplot(3,2,5), stem(x2w), grid, title('x2w(n) = x2(n).w(n)');
xlabel('n'); ylabel('Amplitud');
subplot(2,2,2); stem(f, XM2); grid; title('Magnitud de X2(k)');
xlabel('Frecuencia (Hz)'); ylabel('Magnitud');
subplot(2,2,4); stem(f, X2WM); grid; title('Magnitud de X2W(k)');
xlabel('Frecuencia (Hz)'); ylabel('Magnitud');
IEE239, 2024-1, Pedro Crisóstomo 24
Enventanamiento
Observe el efecto en la señal enventanada

IEE239, 2024-1, Pedro Crisóstomo 25


Baja resolución
● Para mejorar la claridad (resolución) del espectro en frecuencia
de una señal por la baja resolución, probablemente por las
pocas muestras de la señal en el tiempo, se le puede agregar
ceros a los extremos. Aunque bastaría a un solo lado.

● Recordar que una señal x(n) con N muestras genera una


transformada X(k) con N muestras..

● El agregado de ceros (zero padding) no ingresa energías de


ninguna frecuencia; por ello, no modifica su espectro.

● La resolución cambia de fs/N a fs/(N+Z) donde Z es el número


de ceros agregados.
IEE239, 2024-1, Pedro Crisóstomo 26
Agregado de ceros
Ejemplo del efecto del agregado de ceros (512 - 64) a la primera señal.

IEE239, 2024-1, Pedro Crisóstomo 27


Agregado de ceros
%% Agregado de ceros
% fs = 1000Hz, N = 100, fs/N = 10Hz, aumentaremos la resolución para reducir el paso
% en frecuencia de 10Hz a 2Hz, entonces fs/(N+Z) = 2Hz, logrando Z = 4000
Z = 4000;
x2z = [x2 zeros(1,Z)]; % Agregamos Z ceros al final
X2Z = fftshift(fft(x2z)); % Aplica la DFT
X2ZM = abs(X2Z); % Obtiene el módulo
f2 = -fs/2 : fs/(N+Z) : fs/2 - fs/(N+Z); % Vector de frecuencias

figure
subplot(2,2,1), plot(x2, 'k.-'), grid, title('x2(n) con frecuencias 63 y 126');
xlabel('n'); ylabel('Amplitud');
subplot(2,2,2), plot(x2z, 'k.-'), grid, title('x2z(n) = [x2(n) zeros(1,Z)]');
xlabel('n'); ylabel('Amplitud');
subplot(2,2,3); plot(f, XM2, 'k.-'); grid; title('Magnitud de X2(k)');
xlabel('Frecuencia (Hz)'); ylabel('Magnitud');
subplot(2,2,4); plot(f2, X2ZM, 'k.-'); grid; title('Magnitud de X2Z(k)');
xlabel('Frecuencia (Hz)'); ylabel('Magnitud'); 28
IEE239, 2024-1, Pedro Crisóstomo
Agregado de ceros
Observe el efecto en la señal con agregado de ceros

IEE239, 2024-1, Pedro Crisóstomo 29


Resumen
● Revisar Tratamiento Digital de Señales, Proakis-Manolakis, 4ta edición.
Secciones 7.4. Resolver ejercicios.

● El espectro en frecuencia obtenida con la DFT suele presentar dispersión de


varias de sus componentes frecuenciales en armónicos vecinos de esas
frecuencias.

● Dos técnicas muy usadas para mejorar este problema son “enventanamiento” y
“agregado de ceros”, que pueden usarse solos o combinadas.

● El uso de “ventanas” reduce el efecto de dispersión porque atenúa los extremos


de la señal que producen saltos al repetir la señal.

● Zero Padding (agregado de ceros) mejora la resolución en frecuencia de fs/N a


fs/(N+Z).
IEE239, 2024-1, Pedro Crisóstomo 30

También podría gustarte