Matlab Fourier

10
Física de las Comunicaciones © Electrónica y Electromagnetismo Señales y Análisis de Fourier En esta práctica se pretende revisar parte de la materia del tema 2 de la asignatura desde la perspectiva de un entorno de cálculo numérico y simulación por ordenador. El objetivo fundamental es familiarizarse con la definición, manipulación y representación de señales en MATLAB. Para ello, en primer lugar, repasaremos y consolidaremos las nociones de MATLAB adquiridas en la práctica anterior; en particular la definición, operación y representación de señales en el dominio del tiempo. Posteriormente, utilizaremos algunas de las funciones que ofrece MATLAB para el Análisis de Fourier así como para la manipulación de señales en los dominios del tiempo y la frecuencia, 1. Introducción Como ya estudiamos en diversos ejemplos de la práctica anterior, MATLAB es muy utilizado en la definición, manipulación y representación de señales analógicas. Siendo rigurosos, el procedimiento seguido en esos ejemplos no es adecuado para el análisis de señales analógicas; es más, en general, MATLAB no permite analizar señales analógicas i . Esto se debe a que la forma natural de representar una señal en MATLAB es definir una secuencia finita de valores mediante un vector fila. Así, como veremos en el siguiente ejercicio, podemos definir la secuencia de instantes de tiempo equidistantes (intervalo 1 ms) entre 0 y 0.25s. Y del mismo modo, definimos una señal sinusoide como una secuencia de valores. Ejercicio 1 Genere una secuencia de instantes de tiempo que parta de t=0s y llegue hasta t=0.25s en intervalos de 1ms. Construya una función seno en esa base de tiempo de amplitud 1 y frecuencia 5Hz. Use plot para dibujar la forma de onda. Además, destaque cada punto de la gráfica con *. >> Tinicial=0; % Definimos el tiempo inicial >> Tfinal=0.25; % Definimos el tiempo final >> step=0.001; % Definimos el paso entre instantes de tiempo >> t=Tinicial:step:Tfinal-step; % Se genera el vector de tiempos >> y=1*sin(5*2*pi*t); % Se genera y >> plot(t,y); hold on; % Dibujamos y >> plot(t,y,’*’); % Dibujamos las muestras de y i. Salvo que se usen bloques funcionales o toolboxes 2

Transcript of Matlab Fourier

Page 1: Matlab Fourier

Física de las Comunicaciones © Electrónica y Electromagnetismo

Señales y Análisis de FourierEn esta práctica se pretende revisar parte de la materia del tema 2 de la asignatura desde la

perspectiva de un entorno de cálculo numérico y simulación por ordenador. El objetivo

fundamental es familiarizarse con la definición, manipulación y representación de señales en

MATLAB. Para ello, en primer lugar, repasaremos y consolidaremos las nociones de MATLAB

adquiridas en la práctica anterior; en particular la definición, operación y representación de

señales en el dominio del tiempo. Posteriormente, utilizaremos algunas de las funciones que

ofrece MATLAB para el Análisis de Fourier así como para la manipulación de señales en los

dominios del tiempo y la frecuencia,

1. Introducción

Como ya estudiamos en diversos ejemplos de la práctica anterior, MATLAB esmuy utilizado en la definición, manipulación y representación de señalesanalógicas. Siendo rigurosos, el procedimiento seguido en esos ejemplos no esadecuado para el análisis de señales analógicas; es más, en general, MATLAB

no permite analizar señales analógicasi. Esto se debe a que la forma natural derepresentar una señal en MATLAB es definir una secuencia finita de valoresmediante un vector fila. Así, como veremos en el siguiente ejercicio, podemosdefinir la secuencia de instantes de tiempo equidistantes (intervalo 1 ms) entre 0y 0.25s. Y del mismo modo, definimos una señal sinusoide como una secuenciade valores.

Ejercicio 1

Genere una secuencia de instantes de tiempo que parta de t=0s y llegue hasta

t=0.25s en intervalos de 1ms. Construya una función seno en esa base de

tiempo de amplitud 1 y frecuencia 5Hz. Use plot para dibujar la forma de onda.

Además, destaque cada punto de la gráfica con *.

>> Tinicial=0; % Definimos el tiempo inicial>> Tfinal=0.25; % Definimos el tiempo final>> step=0.001; % Definimos el paso entre instantes de tiempo>> t=Tinicial:step:Tfinal-step; % Se genera el vector de tiempos>> y=1*sin(5*2*pi*t); % Se genera y>> plot(t,y); hold on; % Dibujamos y>> plot(t,y,’*’); % Dibujamos las muestras de y

i. Salvo que se usen bloques funcionales o toolboxes

2

Page 2: Matlab Fourier

Señales y Análisis de Fourier 2

Física de las comunicaciones © Electrónica y Electromagnetismo

Por tanto, siendo estrictos, en MATLAB toda señal es discreta en tiempo, mien-tras que en amplitud puede ser discreta (cuantizada) o continua (aunque limi-tada por la precisión de los tipos numéricos). No obstante, si los intervalostemporales entre valores son suficientemente pequeños y el rango temporal enel que se define la señal es suficientemente amplio, la secuencia de valoresempleada para representar la señal y las operaciones realizadas para su análisisproporcionan una buena aproximación a los resultados teóricos. En el caso mássimple y frecuente, los valores se toman en instantes equiespaciados, intervaloque no debe confundirse con el periodo de muestreo. De momento, ignoraremosel efecto de la discretización de señales (utilizaremos intervalos de tiempo sufi-cientemente pequeños, de modo que los efectos sean despreciables). Asimismo,la amplitud de las señales está sometida a una discretización que, dada la pre-cisión de los tipos numéricos empleados en MATLAB, podemos ignorar.

1.1. Señales especiales.

Vamos a ver una posible forma de representar en MATLAB algunas señalesanalógicas típicas.

SEÑAL ESCALÓN

% Ejemplo de señal escalon>> t=-10:0.01:10; >> f_escalon=[zeros(1,1000),ones(1,1001)];>> plot(t,f_escalon);

SEÑAL PULSO

% Ejemplo de señal pulso>> t=-10:0.01:10;>> f_pulso=[zeros(1,950),ones(1,101),zeros(1,950)];>> plot(t,f_pulso);

SEÑAL SAMPLING

% Ejemplo de señal sampling>> t=-10:0.01:10;% Señal sampling nula en t=n*pi, n=1,2,...>> f_sampling=sin(t)./t;>> plot(t,f_sampling);% Señal sinc nula en t=n, n=1,2,...>> f_sinc=sinc(t);>> plot(t,f_sinc);

SEÑAL IMPULSO O DELTA DE DIRAC

% Ejemplo de señal impulso>> t=-10:0.01:10;>> f_impulso=[zeros(1,1000),1,zeros(1,1000)];>> plot(t,f_impulso);

SEÑAL DIENTE DE SIERRA

% Ejemplo de señal diente de sierra de periodo 0.1Hz% sawtooth(x,width) señal en diente de sierra con periodo 2*pi para los% elementos del vector x. El parámetro “width” es un escalar entre

Page 3: Matlab Fourier

2. Análisis de Fourier 3

Física de las Comunicaciones © Electrónica y Electromagnetismo

% 0 y 1, y describe la fracción del periodo 2*pi en el que ocurre el% máximo.>> t=-10:0.01:10;>> width=0.10; >> f_sierra=sawtooth(2*pi*0.1*t,width); >> plot(t,f_sierra);

SEÑAL TRIANGULAR

% Ejemplo de señal triangular de periodo 0.1Hz% Es un caso particular de señal diente de sierra con width=0.5>> t=-10:0.01:10;>> f_triangular=sawtooth(2*pi*0.1*t,0.5);>> plot(t,f_triangular);

SEÑAL EXPONENCIAL

% Ejemplo de señal exponencial decreciente>> t=-10:0.01:10;% tau: constante de tiempo (RC)>> tau=200e-2;>> f_expon=exp(-t/tau);>> plot(t,f_expon);

SEÑAL CUADRADA

% Ejemplo de señal cuadrada de frecuencia 0.5Hz% square(x,duty) genera una onda cuadrada de periodo 2*pi con un duty cycle dado>> t=-10:0.01:10;>> duty=50; % porcentaje del periodo en el que la señal es positiva>> f_cuadrada=square(2*pi*0.5*t,duty); >> plot(t,f_cuadrada);

2. Análisis de Fourier

Las series de Fourier permiten describir señales periódicas como una combi-nación de señales armónicas (sinusoides). Con esta herramienta, podemos anal-izar una señal periódica en términos de su contenido frecuencial o espectro.Además, nos permite establecer la dualidad entre tiempo y frecuencia, de formaque operaciones realizadas en el dominio del tiempo tienen su dual en eldominio frecuencial. Utilizando operaciones sobre vectores, se pueden calcularfácilmente los coeficientes de Fourier correspondientes a una señal. En el ejerci-cio 2, se definen el vector n, que contiene los índices de los coeficientes, y elvector cn, que contiene los coeficientes. Los coeficientes cn, son los coefi-cientes espectrales de la señal. La gráfica de esos coeficientes en función delíndice armónico n o de las frecuencias nωo se denomina espectro. Hay dos tipos

de gráficos, uno con la magnitud de los coeficientes y otro de la fase. Ambasfunciones son discretas en frecuencia.

Page 4: Matlab Fourier

Señales y Análisis de Fourier 4

Física de las comunicaciones © Electrónica y Electromagnetismo

Ejercicio 2

Escriba un fichero MATLAB que proporcione los coeficientes de Fourier de una

señal cuadrada de periodo 0.2s (frecuencia 5Hz) y amplitud igual a 1V.

% Obtener los coeficientes de Fourier para una señal cuadrada de periodo% 0.2s y amplitud 1.clear;% frecuencia de la señal cuadrada (=1/T)f=5;T=1/f;% Indice de los coeficientesn=1:10;% Coeficientes de Fouriercn=2*(cos(n*pi)-1)./(-2*j*n*pi);co=1;subplot(2,1,1);stem(n,abs(cn));ylabel('Magnitud de cn');subplot(2,1,2);stem(n,angle(cn));ylabel('fase de cn');xlabel('n');

A partir de la serie de Fourier, es posible reconstruir una señal periódica. Cuantomayor sea el número de armónicos utilizado en el desarrollo en serie, mejor serála reconstrucción. Un parámetro importante en la reconstrucción de señales es lavelocidad de convergencia, o lo que es lo mismo, la velocidad con la que loscoeficientes de Fourier tienden a 0.

Ejercicio 3

Escriba un fichero en MATLAB para dibujar n armónicos de una señal cuad-

rada de periodo 0.2s y amplitud 1.

% Desarrollo en serie de Fourier de una señal cuadrada de periodo 0.2s y amplitud 1clear;% frecuencia de la señal cuadrada (=1/T)f=5;T=1/f;% Indice de los coeficientesn=1:10;% Generamos la serie de Fouriert=-1:0.01:1; % vector de tiemposfor i=1:50 for k=1:size(t,2) s(i,k)=(2*(1-cos(pi*i))/(pi*i))*sin(2*pi*i*f*t(k)); endendfor k=1:size(t,2) st(k)=sum(s(:,k));end

Page 5: Matlab Fourier

2. Análisis de Fourier 5

Física de las Comunicaciones © Electrónica y Electromagnetismo

st(1)=st(1)+1;plot(t,st,'r');hold on;% Señal cuadrada originalf_cuadrada=square(2*pi*f*t,50);plot(t,f_cuadrada);xlabel(‘tiempo’);ylabel(‘Amplitud’);

MATLAB está equipado con funciones especiales que nos van a permitir real-izar un análisis de Fourier de funciones definidas por un conjunto de valoresdiscretos. Por ejemplo, el comando fft() nos permite obtener la transformadarápida de Fourier (fast Fourier Transform) de una secuencia de númerosdefinida por el vector x. Por ejemplo:

>> X=fft(x);

donde X es un vector de números complejos ordenados desde k=0...N-1. Siqueremos que sea más eficiente en el cálculo de la ffT, la longitud del vector xdeberá ser una potencia de 2. Podemos rellenar de ceros el vector x para quetenga la longitud apropiada. Esto se consigue automáticamente haciendo:

>> X=fft(x,N);

donde N es exponente de 2. Mientras más largo sea x, más fina será la escalapara la ffT. Debido a un fenómeno de plegamiento del espectro, sólo la primeramitad de los puntos obtenidos son de utilidad. La función fftshift() reordena elvector X en orden creciente de frecuencia. Si X es el vector resultante de haceruna ffT, utilizando esta función reordenamos los puntos en función de la fre-cuencia.

>> X=fftshift(X);

Ejercicio 4

Obtenga la transformada de Fourier de una señal exponencial modulada en

amplitud con una frecuencia de portadora de 200Hz, x(t)=exp(-

2·t)·sin(2·pi·200·t).

% Ejemplo de una ffT de una señal exponencial modulada en amplitud% con una frecuencia portadora de 200Hz.

% Definicion de la señalt=-0.25:0.001:0.25;x=exp(-2*t).*sin(2*pi*200*t);% Representacion en el tiemposubplot(3,1,1);plot(t,x);title('x(t)=exp(-2t)·sin(2·pi·200·t)');xlabel('Tiempo (t)');ylabel('x(t)');% Transformada de FourierX=fftshift(fft(x));% Magnitud y fase de la transformadaXm=abs(X);Xf=unwrap(angle(X))*180/pi;% Base de frecuencias

Page 6: Matlab Fourier

Señales y Análisis de Fourier 6

Física de las comunicaciones © Electrónica y Electromagnetismo

delta_t = t(2)-t(1);f = ((1:length(t)) - ceil(length(t)/2)) / length(t) / delta_t;% Representacion en frecuenciasubplot(3,1,2);plot(f,Xm,'r');title('Módulo de transformada de Fourier de x(t)');xlabel('frecuencia (Hz)');ylabel('|X(jw)|');subplot(3,1,3);plot(f,Xf,'r');zoom;title('fase de la transformada de Fourier de x(t)');xlabel('frecuencia (Hz)');ylabel('fase X(jw)');

A partir de la transformada de Fourier, es posible reconstruir la señal en eldominio del tiempo. El comando ifft() sirve para obtener la transformadainversa de Fourier de una serie de números complejos:

>> x=ifft(X);

Ejercicio 5

Obtenga la transformada de Fourier de una señal exponencial modulada en

amplitud , x(t)=exp(-2·t)·sin(2·pi·3·t). Realice la transformada inversa y

obtenga la señal en el tiempo a partir de su transformada.

% Ejemplo de una ffT de una señal exponencial modulada en amplitud% Obtención de la señal en el tiempo a partir de su transformada

% Definicion de la señalt=-0.25:0.001:0.25;x=exp(-2*t).*sin(2*pi*3*t);% Representacion en el tiempofigure(1);plot(t,x);title('x(t)=exp(-2t)·sin(2·pi·200·t)');xlabel('Tiempo (t)');ylabel('x(t)');% Transformada y representacion en frecuenciaXt=fft(x);X=fftshift(Xt);% Magnitud y fase de la transformadaXm=abs(X);Xf=unwrap(angle(X))*180/pi;% Base de frecuenciasdelta_t = t(2)-t(1);f = ((1:length(t)) - ceil(length(t)/2)) / length(t) / delta_t;figure(2);subplot(2,1,1);plot(f,Xm,'r');zoom;title('Módulo de transformada de Fourier de x(t)');xlabel('frecuencia (Hz)');ylabel('|X(jw)|');subplot(2,1,2);plot(f,Xf,'r');zoom;title('fase de la transformada de Fourier de x(t)');xlabel('frecuencia (Hz)');ylabel('fase X(jw)');

Page 7: Matlab Fourier

3. Producto de Convolución 7

Física de las Comunicaciones © Electrónica y Electromagnetismo

% Obtener la señal en el dominio del tiempo a partir de su transformadaxrec=ifft(Xt);figure(3);plot(t,xrec);title('Transformada inversa')xlabel('Tiempo (t)');ylabel('xrec(t)');

3. Producto de Convolución

La convolución es una potente herramienta matemática utilizada en el proce-sado de señales. Aunque en general se define como un operador que permitedeterminar la respuesta de un sistema lineal, invariante en el tiempo ante unadeterminada entrada, también se puede aplicar a dos señales arbitrarias. La con-volución de f y g se denota por f*g y se define como la integral del producto deambas funciones después de que una sea invertida y desplazada. En MATLABcontamos con la función conv() que realiza la la convolución de los vectores x yh. El vector resultante tiene un tamaño igual a length(x)+length(h)-1.

>> y=conv(x,h);

Ejercicio 6

Genere un fichero MATLAB donde realice la convolución de una señal coseno

de frecuencia 100Hz y una señal escalón. Compruebe que se verifican las

propiedades de la transformada de Fourier respecto al producto de convolu-

ción.

% Ejemplo de una ffT de una señal exponencial modulada en amplitud% Obtención de la señal en el tiempo a partir de su transformada

% Definicion de las señalest = -pi:0.001:pi;g_escalon=[zeros(1,1000*pi+1), ones(1,1000*pi+1)];w = 2*pi;g = cos(w*100*t);g_conv = conv(g,g_escalon);figure(1);subplot(3,1,1);plot(t,g_escalon);title('SEÑAL ESCALON');xlabel('Tiempo (t)');ylabel('e(t)');subplot(3,1,2);plot(t,g);title('cos(2·pi·t)');xlabel('Tiempo (t)');ylabel('cos(2*pi*100*t)');

% Convoluciong_conv = conv(g,g_escalon);subplot(3,1,3);plot(t,g_conv(1:length(g)),'r')title('Convolucion');xlabel('Tiempo (t)');

Page 8: Matlab Fourier

Señales y Análisis de Fourier 8

Física de las comunicaciones © Electrónica y Electromagnetismo

% Transformada y representacion en frecuencia de la convolucionG_conv=fftshift(fft(g_conv));% Magnitud de la transformadaGm_conv=abs(G_conv);% Base de frecuenciasdelta_t = t(2)-t(1);f = ((1:length(g_conv)) - ceil(length(g_conv)/2)) / length(g_conv) / delta_t;figure(2);subplot(2,1,1);plot(f,Gm_conv,'r');zoom;title('Transformada de Fourier del producto de convolucion)');xlabel('frecuencia (Hz)');ylabel('|X(jw)|');

% Obtener G_conv como el producto de los espectros G_escalon=fftshift(fft(g_escalon));G=fftshift(fft(g));G_conv2=G.*G_escalon;% Base de frecuenciasdelta_t = t(2)-t(1);f2 = ((1:length(t)) - ceil(length(t)/2)) / length(t) / delta_t;subplot(2,1,2);plot(f2,abs(G_conv2),'r');zoom;title('Producto de las transformadas de Fourier)');xlabel('frecuencia (Hz)');ylabel('|X(jw)|');

4. Espectros de densidad de potencia y energía

Las señales se pueden clasificarse según sean de energía o de potencia.

• Energía de una señal:

• Potencia de una señal:

Una señal se dice que es de energía si su E es finita, lo que implica que su poten-cia es cero. Por ejemplo, los pulsos limitados en el tiempo.Una señal se dice quees de potencia si su potencia es finita, lo que implica que su energía es infinita.Un ejemplo de este tipo de señales lo encontramos en las señales periódicas.Para el cálculo de estos espectros disponemos, además de las funciones para elanálisis de Fourier anteriores, de la función psd(), que proporciona la densidadespectral de potencia de una señal en dB.

>>Sg=psd(x,);

Ejercicio 7

Genere un fichero MATLAB donde realice la densidad espectral de potencia de

una señal coseno de frecuencia 100Hz.

E X f( )2fd

∞–

∫=

P Sg fd

∞–

∫=

Page 9: Matlab Fourier

5. Cálculo simbólico 9

Física de las Comunicaciones © Electrónica y Electromagnetismo

% Densidad espectral de potenciat=-pi:0.001:pi;w=2*pi*100;g=cos(w*t);PSD=psd(g,2^10,lenght(g));plot(PSD);

5. Cálculo simbólico

Durante la práctica hemos representado las señales mediante vectores y hemosmanipulado las señales esencialmente mediante operaciones con vectores. Estaes la forma habitual de trabajar con MATLAB. No obstante, aunque en prin-cipio MATLAB no se diseño para realizar operaciones simbólicas, sí es posibledefinir y manipular señales (y funciones en general) de manera simbólica, sidisponemos del Toolbox para el cálculo simbólico. Así, como en el ejercicio 8,podemos definir una función seno o delta de dirac y calcular su transformada deFourier de forma simbólica.

Ejercicio 8

Definir una función seno de forma simbólica y calcular su transformada de Fou-rier.

% Análsis de Fourier con cálculo simbólicosyms t % crear variable simbólicag=sin(2*pi*t);G=Fourier(g); % Transformada de Fourierezplot(g);ginv=iFourier(G); % Transformada inversa

6. Cuestionario de Evaluación

6.1. Serie de Fourier

• Escriba un fichero en MATLAB (coeficientes_Fourier.m) que proporcione

los coeficientes de Fourier de la señal de la fig 1. Genere un fichero en

MATLAB (dibuja_armonicos.m) que permita dibujar n armónicos de dicha

señal.

6.2. Transformada de Fourier

• Genere un fichero en MATLAB (transformada_Fourier.m) para obtener la

transformada de Fourier de la señal, x(t)=sen(2·pi·200·t+sin(2·pi·2·t)).

Realice la transformada inversa y obtenga la señal en el tiempo a partir de

su transformada.

Page 10: Matlab Fourier

Señales y Análisis de Fourier 10

Física de las comunicaciones © Electrónica y Electromagnetismo

6.3. Producto de Convolución

• Genere un fichero MATLAB (convolucion.m) donde se realice la convolu-

ción de una señal coseno de frecuencia 50Hz y una señal pulso. Represente

gráficamente las señales obtenidas.

NOTA: no será necesaria la entrega de una memoria. La evaluación de esta

práctica se basará en los archivos requeridos en cada ejercicio.

Fig. 1

t

T

−τ/2 τ/2

1