Está en la página 1de 10

UNIVERSIDAD DEL AZUAY ING.

DIEGO CHACON MDHD

Señales y Analisis de Fourier


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ógicasi . 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.

2 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


UNIVERSIDAD DEL AZUAY ING. DIEGO CHACON MDHD

>> 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

Por tanto, siendo estrictos, en MATLAB toda señal es discreta en tiempo, mientras que en
amplitud puede ser discreta (cuantizada) o continua (aunque limitada por la precisión
de los tipos numéricos). No obstante, si los intervalos temporales entre valores son
suficientemente pequeños y el rango temporal en el que se define la señal es
suficientemente amplio, la secuencia de valores empleada para representar la señal y
las operaciones realizadas para su análisis proporcionan una buena aproximación a los
resultados teóricos. En el caso más simple y frecuente, los valores se toman en instantes
equiespaciados, intervalo que no debe confundirse con el periodo de muestreo. De
momento, ignoraremos el efecto de la discretización de señales (utilizaremos intervalos
de tiempo suficientemente 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
precisión de los tipos numéricos empleados en MATLAB, podemos ignorar.

3 SEÑALES ESPECIALES.

Vamos a ver una posible forma de representar en MATLAB algunas señales analó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,...


UNIVERSIDAD DEL AZUAY ING. DIEGO CHACON MDHD

>> 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% 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);
UNIVERSIDAD DEL AZUAY ING. DIEGO CHACON MDHD

4 ANÁLISIS DE FOURIER

Las series de Fourier permiten describir señales periódicas como una combinación de
señales armónicas (sinusoides). Con esta herramienta, podemos analizar 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 forma que operaciones realizadas
en el dominio del tiempo tienen su dual en el dominio frecuencial. Utilizando
operaciones sobre vectores, se pueden calcular fácilmente los coeficientes de Fourier
correspondientes a una señal. En el ejercicio 2, se definen el vector n, que contiene los
índices de los coeficientes, y el vector cn, que contiene los coeficientes. Los coeficientes
cn, son los coeficientes 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. Ambas
funciones son discretas en frecuencia.

5 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 1 V.

% 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 coeficientes
n=1:10;
% Coeficientes de Fourier
cn=2*(cos(n*pi)-1)./(-2*j*n*pi);
co=1;
subplot(2,1,1);
stem(n,abs(cn));
UNIVERSIDAD DEL AZUAY ING. DIEGO CHACON MDHD

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. Cuanto mayor
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 la
velocidad de convergencia, o lo que es lo mismo, la velocidad con la que los
coeficientes de Fourier tienden a 0.

6 EJERCICIO 3

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


periodo 0.2s y amplitud 1.

% Desarrollo en serie de Fourier de 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 coeficientes n=1:10;
% Generamos la serie de Fourier
t=-1:0.01:1; % vector de tiempos
for 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));
end
end
for k=1:size(t,2)
st(k)=sum(s(:,k));
end
st(1)=st(1)+1;
UNIVERSIDAD DEL AZUAY ING. DIEGO CHACON MDHD

plot(t,st,'r');
hold on;
% Señal cuadrada original
f_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 realizar un
análisis de Fourier de funciones definidas por un conjunto de valores discretos. Por
ejemplo, el comando fft() nos permite obtener la transformada rápida de Fourier (fast
Fourier Transform) de una secuencia de números definida por el vector x. Por ejemplo:
>> X=fft(x); donde X es un vector de números complejos ordenados desde k=0...N-1. Si
queremos que sea más eficiente en el cálculo de la ffT, la longitud del vector x deberá
ser una potencia de 2. Podemos rellenar de ceros el vector x para que tenga 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 escala para la ffT. Debido a
un fenómeno de plegamiento del espectro, sólo la primera mitad de los puntos
obtenidos son de utilidad. La función fftshift() reordena el vector X en orden creciente
de frecuencia. Si X es el vector resultante de hacer una ffT, utilizando esta función
reordenamos los puntos en función de la frecuencia. >> X=fftshift(X);

7 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ñal

t=-0.25:0.001:0.25;

x=exp(-2*t).*sin(2*pi*200*t);

% Representacion en el tiempo

subplot(3,1,1);

plot(t,x);

title('x(t)=exp(-2t)·sin(2·pi·200·t)');
UNIVERSIDAD DEL AZUAY ING. DIEGO CHACON MDHD

xlabel('Tiempo (t)');ylabel('x(t)');

% Transformada de Fourier

X=fftshift(fft(x));

% Magnitud y fase de la transformada

Xm=abs(X);

Xf=unwrap(angle(X))*180/pi;

% Base de frecuencias

delta_t = t(2)-t(1);

f = ((1:length(t)) - ceil(length(t)/2)) / length(t) / delta_t;

% Representacion en frecuencia

subplot(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 el dominio del


tiempo. El comando ifft() sirve para obtener la transformada inversa de Fourier de una
serie de números complejos: >> x=ifft(X);

8 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


UNIVERSIDAD DEL AZUAY ING. DIEGO CHACON MDHD

% Obtención de la señal en el tiempo a partir de su transformada

% Definicion de la señal

t=-0.25:0.001:0.25;

x=exp(-2*t).*sin(2*pi*3*t);

% Representacion en el tiempo figure(1);

plot(t,x);

title('x(t)=exp(-2t)·sin(2·pi·200·t)');

xlabel('Tiempo (t)');

ylabel('x(t)');

% Transformada y representacion en frecuencia

Xt=fft(x);

X=fftshift(Xt);

% Magnitud y fase de la transformada

Xm=abs(X);

Xf=unwrap(angle(X))*180/pi;

% Base de frecuencias

delta_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)');

% Obtener la señal en el dominio del tiempo a partir de su transformada

xrec=ifft(Xt);
UNIVERSIDAD DEL AZUAY ING. DIEGO CHACON MDHD

figure(3);

plot(t,xrec);

title('Transformada inversa')

xlabel('Tiempo (t)');

ylabel('xrec(t)');

9 PRODUCTO DE CONVOLUCIÓN

La convolución es una potente herramienta matemática utilizada en el procesado de


señales. Aunque en general se define como un operador que permite determinar la
respuesta de un sistema lineal, invariante en el tiempo ante una determinada entrada,
también se puede aplicar a dos señales arbitrarias. La convolución de f y g se denota
por f*g y se define como la integral del producto de ambas funciones después de que
una sea invertida y desplazada. En MATLAB contamos con la función conv() que realiza
la la convolución de los vectores x y h. El vector resultante tiene un tamaño igual a
length(x)+length(h)-1. >> y=conv(x,h);

10 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 convolució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ñales

t = -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);
UNIVERSIDAD DEL AZUAY ING. DIEGO CHACON MDHD

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)');

% Convolucion g_conv = conv(g,g_escalon);

subplot(3,1,3);

plot(t,g_conv(1:length(g)),'r') title('Convolucion');

xlabel('Tiempo (t)');

También podría gustarte