Professional Documents
Culture Documents
y Sinc(t)=
()
>> t=-10:0.01:10;
>> a_sampling = sin(t)./t;
Warning: Divide by zero.
>> plot(t,a_sampling);
>> a_sinc=sinc(t);
>> plot(t,a_sinc);
COMANDOS DE FOURIER EN MATLAB
Transformada de Fourier
Sintaxis
Fourier(f,trans_var,eval_point)
Transformada Rpida de Fourier
Sintaxis
Y=fft(x)
Y=fft(X,n)
Ejemplo 1:
fs= 1000;
t= 0 : 1/fs : 1.5 - 1/fs;
f1= 20;
f2= 30;
f3=40;
x=3*cos(2*pi*f1*t + 0.2) + 1*cos(2*pi*f2*t - 0.3) + 2*cos(2*pi*f3*t+2.4);
plot(x)
Clculo de la Transformada Rpida de Fourier
X = fft(x);
>> length(x)
ans =
1500
>> length(X)
ans =
1500
>> x(2:6)
ans =
2.0717 1.7535 1.4794 1.2572 1.0884
>> X(30:34)
ans =
1.0e+003 *
Columns 1 through 4
-0.0000 - 0.0000i 2.2051 + 0.4470i 0.0000 - 0.0000i 0.0000 + 0.0000i
Column 5
-0.0000 - 0.0000i
>> X_mag = abs(X);
>> X_mag(30:34)
ans =
1.0e+003 *
0.0000 2.2500 0.0000 0.0000 0.0000
>> plot(X_mag)
Inversa de la transformada de Fourier
Sintaxis
y=ifft()
y=ifft(X,n)
Ejemplo 1:
>> x=3*cos(2*pi*f1*t + 0.2) + 1*cos(2*pi*f2*t - 0.3) + 2*cos(2*pi*f3*t+2.4);
plot(x)
>> X = ifft(x);
>> length(x)
ans =
1500
>>
>> length(X)
ans =
1500
>> x(2:6)
ans =
2.0717 1.7535 1.4794 1.2572 1.0884
>> X(30:34)
ans =
-0.0000 + 0.0000i 1.4701 - 0.2980i 0.0000 + 0.0000i 0.0000 - 0.0000i -0.0000
+ 0.0000i
>> X_mag = abs(X);
>> X_mag(30:34)
ans =
0.0000 1.5000 0.0000 0.0000 0.0000
>> plot(X_mag)
TRANSFORMADA DE FOURIER DISCRETA - DFT
En DSP se utiliza la DFT (Transformada de Fourier Discreta) porque es la que se
puede procesar en un microcontrolador por ser discreta y finita.
Para resolver muchos problemas de ingeniera es conveniente descomponer una
seal dada en suma de funciones bsicas. Una forma razonable es tomar la seal
de entrada y representarla con la funciones bsicas con exponenciales complejas
o seales senoidales. Para seales discretas se usan la Transformada de Fourier
Discreta DFT y un clculo eficiente de ella es la transformada Rpida de Fourier
FFT.
Transformada de Fourier Discreta
Sintaxis
X(k) = DFT[x(n)], y x(n) = IDFT[X(k)]
PROPIEDADES DE LA DTF
LINEALIDAD
La Transformada de Fourier en lineal, esto es, tiene las propiedades de
homogeneidad y aditibilidad.
Homogeneidad
Aditibilidad
PERIODICIDAD
Dominio del tiempo
Dominio de la frecuencia
COMPRESIN Y EXPANSIN
Una compresin de la seal en un dominio resulta en una expansin en el otro y
viceversa. Para seales continuas, si X(f) es la Transformada de Fourier de x(t),
entonces, 1/k. X(f/k) es la Transformada de Fourier de x(kt) donde k es el
parmetro que controla la expansin o compresin.
Ejemplo:
Obtener la parte real y parte imaginaria. A continuacin se tiene la parte real e
imaginaria de la seal de su DFT
() e
jn/3
>> %DFT Parte Real e Imaginaria
>> n=0:15;
>> xn=exp(j*n/3);
>> Xk=fft(xn);
>> k=n;
>> subplot(221)
>> stem(k,real(Xk));
>> title('Parte Real de X(k)')
>> subplot(223)
>> stem(k,imag(Xk));
>> title('Parte Imaginaria de X(k)')
>> %Recuperar la seal x(n)
>> xn=ifft(Xk);
>> subplot(222)
>> stem(n,real(xn));
>> title('Parte Real de x(n)')
>> subplot(224)
>> stem(n,imag(xn));
>> title('Parte Imaginaria de x(n)')
Ejemplo:
Obtener la magnitud y la fase de la DFT de la seal
x(n) sen(2ft) sen(2f2t) f 5Hz y f2 40Hz
>> %Magnitud Y Fase
>> t=0:0.01:9.99; % 1000 puntos
>> f1=15;f2=40;
>> xn=sin(2*pi*f1*t)+ sin(2*pi*f2*t);
>> Xk=fft(xn);
>> mag=abs(Xk);
>> f=0:0.1:99.9;
>> subplot(121)
>> plot(f,mag)
>> title('Magnitud de X(k)')
>> set(gca,'Xtick',[15 40 60 85])
>> subplot(122)
>> fase=unwrap(angle(Xk));
>> plot(f,fase*180/pi)
>> title('Fase de X(k)')
>> set(gca,'Xtick',[15 40 60 85])
TRANSFORMADA COSENO DISCRETO DCT
Tiene mejor compactacin de energa que la DFT con pocos coeficientes
transformados til en aplicaciones de comunicacin de datos. La DCT es una
transformada completamente real a diferencia de la DFT que requiere nmeros
complejos. Matemticamente para una secuencia de entrada x(n), la DCT es:
() w(k) x(n)cos (
()()
) k 2 N
Donde,
La transformada Inversa coseno discreto IDCT es;
x(n) w(n)y(k)cos (
()()
) k 2 N
Donde,
Ejemplo:
Generar una secuencia senoidal de 25 Hz con frecuencia de muestreo de 1000
Hz, calcular la DCT y reconstruir la seal usando solamente los componentes con
valor mayor a 0.9 (17 coeficientes de los 1000 originales)
>> t= (0:1/999:1); % 1000 puntos
>> x= sin(2*pi*25*t);
>> y= dct(x); % calcula la DCT
>> y2= find(abs(y) < 0.9);
>> y(y2)= zeros(size(y2));
>> %size(y2)=983, solo se usarn 17 componentes
>> z= idct(y); % Seal Reconstruida
>> subplot(2,1,1); plot(t,x);
>> title('Seal Original')
>> subplot(2,1,2);
>> plot(t,z), axis([0 1 -1 1])
>> title('Seal reconstruida')
Respuesta en Frecuencia
Ejemplo:
Obtener la FFT de una seal senoidal de 20Hz sumada a una seal tipo chirp con
un desplazamiento desde 5 hasta 40Hz en un tiempo D.
>> D=1; N=128;
>> ts=D/N;
>> d=ts/2;
>> t=0:ts:D-d;
>> x=sin(2*pi*20*t)+chirp(t,5,D,40);
>> X=fft(x);
>> % Reordenar X
>> M=N/2;
>> Xaux=X;
>> X(M+1:N)=Xaux(1:M);
>> X(1:M)=Xaux(M+1:N);
>> Xm=abs(X)/N;
>> Xf=unwrap(angle(X))*180/pi;
>> %Reordenar los ndices k
>> faux(M+1:N)=0:M-1;
>> faux(1:M)=-M:-1;
>> f=faux/D;
>> % Grfica de la seal
>> figure;
>> plot(t,x,'-g');zoom;
>> xlabel('Tiempo (s)');ylabel('x(t)');
>> title('x(t)=sin(2Pi20t)+chirp(5-40)');
>> % Graficar fft de xn Xk
>> figure;
>> stem(f,Xm,'r')
>> zoom;
>> xlabel('Frecuencia (Hz)');ylabel('|X[k]|');
>> title('Mdulo de Coeficientes Espectrales |X[k]|');
>> %Grfica de la fase
>> figure;
>> stem (f,Xf,'g');zoom;
>> xlabel('Frecuencia (Hz)');ylabel('Fase ()');
>> title('Fase de Coeficientes Espectrales X[k]');
>> %Reconstruccin de la seal a partir de los X[k]
>> %Utilizamos un mayor nmero de puntos fs=500Hz
>> fs=500;
>> ts=1/fs;
>> d=ts/2;
>> t=0:ts:D-d;
>> Ns=length(t);
>> %x=sin(2*pi*20*t)+chirp([5 40]*ts,Ns);
>> x=sin(2*pi*20*t)+chirp(t,5,D,40);
>> xr=zeros(1,Ns);
>> for i=1:Ns
for k=1:N
xr(i)=xr(i)+X(k)*exp(j*2*pi*f(k)*ts*(i-1))/N;
end
end
>> figure;plot(t,x,'g-');hold on;plot(t,xr,'r--');zoom;
Warning: Imaginary parts of complex X and/or Y arguments ignored.
>> title('Comparacin entre x(t) y su reconstruccin a partir de X[k]');
>> xlabel('Tiempo (t)');ylabel('x(t)');
CONCLUSIONES
Matlab es una herramienta muy til y de gran ayuda que nos facilita el
entendimiento de todo tipo de seales, adems de que nos muestra ms
detalladamente el proceso y los cambios que realizamos en ellas.
Para realizar un proceso ntido de las seales en matlab hay que tener
conocimiento de los comandos que tiene este software, en este caso de
Fourier pudimos realizar un proceso de una manera mucho ms sencilla.
En la manipulacin de seales ya sean discretas o continuas se puede
realizar los cambios necesarios para poder estudiar y entender cada uno de
sus componentes, tanto en el dominio del tiempo como en el dominio de la
frecuencia.
BIBLIOGRAFA
http://es.wikipedia.org/wiki/MATLAB
http://mit.ocw.universia.net/13.00/NR/rdonlyres/27BBA896-7C03-4CCB-
8810-B02382E5B5D0/0/matlab_handout.pdf
http://www.monografias.com/trabajos5/matlab/matlab.shtml#ixzz2ldae7sby
http://www.ingelec.uns.edu.ar/icd2763/TECD_aux/Curso%20B%C3%A1sico
%20de%20MATLAB.pdf
http://matlabgeeks.com/tips-tutorials/how-to-do-a-fourier-transform-in-
matlab/
http://pds-fiuner.wdfiles.com/local--files/descargas/clase02_fourier-
laplace.pdf
https://www.youtube.com/watch?v=iKOrK1lHfmE
http://personal.us.es/contreras/practica4.pdf
http://www.ceduvirt.com/resources/Dsp1%20Fourier.pdf
https://www.youtube.com/watch?v=5I3Jt3Mg_3c
http://www2.imse-cnm.csic.es/~belen/Ficherospdf/practica2.pdf
http://www2.imse-cnm.csic.es/~belen/Ficherospdf/ficom-pr1.pdf
http://seriefouriererrorcuadraticomedio.wikispaces.com/Pulso+Triangular+y+
su+transformada+de+Fourier+Ejemplo+Desarrollado
http://www.slideshare.net/psyrcd/sa-fourier-con-matlab