fft - ejemplo de aplicación en matlab para una onda senoidal

6
Físico-Matemática Aplicada 2 De Almeida, Gonzalo / Kelm, Marcelo / Sosa, Gabriel 1 Transformada Discreta de Fourier (DFT) Ejercicio 1 Sea la señal de longitud finita definida como: [] = { . cos( 0 .) 0≤≤−1 0 Podemos definir la señal de duración finita multiplicando una señal de duración infinita por la ventana de tiempo, de la siguiente manera: 1 [] = . cos( 0 . ) 2 [] = [] − [ − ] [] = 1 [] . 2 [] Para hallar la transformada de Fourier de la señal recurrimos a la propiedad que indica que el producto en el tiempo corresponde a la convolución en la frecuencia: ( )= 1 ( )∗ 2 ( ) Por tabla, tenemos que las transformadas de las señales 1 y 2 son: 1 ( ) = ∑[( − 0 + 2) + ( + 0 + 2)] =0 2 ( ) = . ( 2 ) . 2 El resultado de la convolución, teniendo en cuenta la propiedad de selección del impulso, es: ( )= 1 2 ∑ [. ( 2 ( − 0 + 2)). 2 (− 0 ) =0 + . ( 2 ( + 0 + 2)). 2 (+ 0 ) ] ( )=∑[ 2 ( 2 ( − 0 + 2)). 2 (− 0 ) =0 + 2 ( 2 ( + 0 + 2)). 2 (+ 0 ) ]

Upload: gonzalo-de-almeida

Post on 02-Jan-2016

387 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: FFT - Ejemplo de aplicación en MATLAB para una onda senoidal

Físico-Matemática Aplicada 2

De Almeida, Gonzalo / Kelm, Marcelo / Sosa, Gabriel 1

Transformada Discreta de Fourier (DFT)

Ejercicio 1

Sea la señal de longitud finita definida como:

𝑥[𝑛] = {𝐴. cos(𝜔0. 𝑛) 0 ≤ 𝑛 ≤ 𝑁 − 1

0 𝑜𝑡𝑟𝑜

Podemos definir la señal de duración finita multiplicando una señal de duración

infinita por la ventana de tiempo, de la siguiente manera:

𝑥1[𝑛] = 𝐴. cos(𝜔0. 𝑛)

𝑥2[𝑛] = 𝑢[𝑛] − 𝑢[𝑛 − 𝑁]

𝑥[𝑛] = 𝑥1[𝑛] . 𝑥2[𝑛]

Para hallar la transformada de Fourier de la señal recurrimos a la propiedad que

indica que el producto en el tiempo corresponde a la convolución en la frecuencia:

𝑋(𝑒𝑗𝜔) = 𝑋1(𝑒𝑗𝜔) ∗ 𝑋2(𝑒𝑗𝜔)

Por tabla, tenemos que las transformadas de las señales 1 y 2 son:

𝑋1(𝑒𝑗𝜔) = 𝜋 ∑[𝛿(𝜔 − 𝜔0 + 2𝜋𝑙) + 𝛿(𝜔 + 𝜔0 + 2𝜋𝑙)]

𝑙=0

𝑋2(𝑒𝑗𝜔) = 𝑁. 𝑠𝑖𝑛𝑐 (𝑁

2𝜔) . 𝑒−𝑗

𝑁2

𝜔

El resultado de la convolución, teniendo en cuenta la propiedad de selección del

impulso, es:

𝑋(𝑒𝑗𝜔) =1

2𝜋∑ [𝜋𝑁. 𝑠𝑖𝑛𝑐 (

𝑁

2(𝜔 − 𝜔0 + 2𝜋𝑙)) . 𝑒−𝑗

𝑁2

(𝜔−𝜔0)

𝑙=0

+ 𝜋𝑁. 𝑠𝑖𝑛𝑐 (𝑁

2(𝜔 + 𝜔0 + 2𝜋𝑙)) . 𝑒−𝑗

𝑁2

(𝜔+𝜔0)]

𝑋(𝑒𝑗𝜔) = ∑ [𝑁

2𝑠𝑖𝑛𝑐 (

𝑁

2(𝜔 − 𝜔0 + 2𝜋𝑙)) . 𝑒−𝑗

𝑁2

(𝜔−𝜔0)

𝑙=0

+𝑁

2𝑠𝑖𝑛𝑐 (

𝑁

2(𝜔 + 𝜔0 + 2𝜋𝑙)) . 𝑒−𝑗

𝑁2

(𝜔+𝜔0)]

Page 2: FFT - Ejemplo de aplicación en MATLAB para una onda senoidal

Físico-Matemática Aplicada 2

De Almeida, Gonzalo / Kelm, Marcelo / Sosa, Gabriel 2

Teniendo en cuenta los siguientes valores:

𝜔0 =𝜋

4 𝑁 = 32

Planteando la DFT de 32 puntos para la señal, tenemos el siguiente código en

MATLAB para los cálculos y sus gráficos correspondientes:

close all; clear all; clc;

% Parametros: N = 32; T = 1; % Periodo de muestreo. A = 1; % Amplitud del coseno. f = (pi/4)/(2*pi); % Frecuencia. n= [0:N-1]; % Eje de tiempo discreto. x = A*cos(2*pi*f*n*T); % Señal muestreada. X = fft(x); % Espectro.

% Grafico de la magnitud del espectro según la DTFT: fm=[0:1/100:1] % Eje normalizado de Frecuencia. d=f; % 1er desplazamiento en Frecuencia. d2=-f+1; % 2ndo desplazamiento en Frecuencia.

d3=f+1; % 3er desplazamiento en Frecuencia. s1=16*sinc(16*(fm-d)).*(exp(-i*16*(fm-d))); % 1era sinc desplazada (+). s2=16*sinc(16*(fm+d)).*(exp(-i*16*(fm+d))); % 1era sinc desplazada (-). s3=16*sinc(16*(fm-d2)).*(exp(-i*16*(fm-d2))); % 2nda sinc desplazada. s4=16*sinc(16*(fm-d3)).*(exp(-i*16*(fm-d3))); % 3era sinc desplazada. s=s1+s2+s3+s4; % Total (simulando la periodicidad). subplot(2,1,1); stem(fm,abs(s),'ok'); grid on; title 'DTFT'; xlabel('Frecuencia (Hz)'); ylabel('Magnitud');

% Grafico de la magnitud del espectro según la DFT: magX = abs(X)/N; % Magnitud. fn = [0:1/N:1-1/N]; % Eje normalizado de Frecuencia. subplot(2,1,2); stem(fn,magX,'ok'); grid on; title 'DFT'; xlabel('Frecuencia (Hz)'); ylabel('Magnitud');

Page 3: FFT - Ejemplo de aplicación en MATLAB para una onda senoidal

Físico-Matemática Aplicada 2

De Almeida, Gonzalo / Kelm, Marcelo / Sosa, Gabriel 3

Gráficos del espectro:

Comparando ambos gráficos se puede apreciar que los picos coinciden y se ubican

en múltiplos de la frecuencia fundamental de la señal. La DFT no presenta tanta resolución

como la DTFT debido a la cantidad de puntos considerados.

Ahora si variamos la frecuencia fundamental de la señal:

𝜔0 = 1,1𝜋

4 𝑁 = 32

Se modifica la siguiente línea en el código presentado anteriormente:

f = (1.1*(pi/4))/(2*pi); % Frecuencia.

Page 4: FFT - Ejemplo de aplicación en MATLAB para una onda senoidal

Físico-Matemática Aplicada 2

De Almeida, Gonzalo / Kelm, Marcelo / Sosa, Gabriel 4

Gráficos del espectro:

La diferencia con el gráfico anterior se debe a que el aumento de la frecuencia

fundamental desplaza el espectro hacia la derecha, lo cual hace que la DFT muestree otros

puntos y esto se traduce en un cambio de forma.

Page 5: FFT - Ejemplo de aplicación en MATLAB para una onda senoidal

Físico-Matemática Aplicada 2

De Almeida, Gonzalo / Kelm, Marcelo / Sosa, Gabriel 5

Ejercicio 2:

Sea la señal definida como:

𝑥[𝑛] = cos(𝜔0𝑛)

Teniendo en cuenta los siguientes valores:

𝜔0 =𝜋

4 𝑁 = 16

El siguiente código en MATLAB calcula primero la DFT de 16 puntos de la señal

utilizando las 16 muestras y luego la DFT de 32 y 64 puntos utilizando la técnica de zero

padding para complementar a las muestras que se tienen:

close all; clear all; clc;

% Parametros: N = 16; T = 1; % Periodo de muestreo. A = 1; % Amplitud del coseno. f = (pi/4)/(2*pi); % Frecuencia. n= [0:N-1]; % Eje de tiempo discreto. x = A*cos(2*pi*f*n*T); % Señal muestreada (16 muestras). X = fft(x); % Espectro (16 muestras). z1=16; % Numero de ceros (1). x1=[A*cos(2*pi*f*n*T),zeros(1,z1)] % Señal muestreada (zero padding 1). X1 = fft(x1); % Espectro (zero padding 1). z2=48; % Numero de ceros (2). x2=[A*cos(2*pi*f*n*T),zeros(1,z2)] % Señal muestreada (zero padding 2). X2 = fft(x2); % Espectro (zero padding 2).

% Grafico de la magnitud del espectro según la DFT (16 muestras): magX = abs(X)/N; % Magnitud. fn = [0:1/N:1-1/N]; % Eje normalizado de Frecuencia. subplot(3,1,1); stem(fn,magX,'ok'); grid on; title 'DFT (16)'; xlabel('Frecuencia (Hz)'); ylabel('Magnitud');

% Grafico de la magnitud del espectro según la DFT (zero padding 1): magX1 = abs(X1)/N; % Magnitud. fn1 = [0:1/(N+z1):1-1/(N+z1)]; % Eje normalizado de Frecuencia. subplot(3,1,2); stem(fn1,magX1,'ok'); grid on; title 'DFT Zero Padding (32)'; xlabel('Frecuencia (Hz)'); ylabel('Magnitud');

Page 6: FFT - Ejemplo de aplicación en MATLAB para una onda senoidal

Físico-Matemática Aplicada 2

De Almeida, Gonzalo / Kelm, Marcelo / Sosa, Gabriel 6

% Grafico de la magnitud del espectro según la DFT (zero padding 2):

magX2 = abs(X2)/N; % Magnitud. fn2 = [0:1/(N+z2):1-1/(N+z2)]; % Eje normalizado de Frecuencia. subplot(3,1,3); stem(fn2,magX2,'ok'); grid on; title 'DFT Zero Padding (64)'; xlabel('Frecuencia (Hz)'); ylabel('Magnitud');

Gráficos del espectro:

En los gráficos se puede apreciar claramente la utilidad de la técnica de zero

padding. El efecto que produce es el de dar mayor resolución al espectro de la señal, pues

se observa que a medida que se agregan más ceros, se tiene el espectro más definido. Si

continuamos agregando ceros, mejor será la definición del espectro.