Está en la página 1de 10

Fı́sica de las Comunicaciones – 2006/2007 – Práctica 1 1

Práctica 1: Señales y análisis de Fourier

1. Objetivo y contenido
En esta práctica pretendemos revisar parte de la materia del tema 2 de la asignatu-
ra desde la perspectiva de un entorno de cálculo numérico y simulación por ordenador:
matlab. El objetivo fundamental es familiarizarse con la definición, manipulación y repre-
sentación de señales en matlab.
Este documento proporciona un guión que incluye todas las órdenes necesarias para
ir siguiendo los apartados de la práctica. Con objeto de centrarnos en la materia de la
asignatura y de que la clase sea más amena, hemos optado por no dedicar apartados
especı́ficos a explicar el entorno ni el lenguaje de programación matlab, sino por explicar
los conceptos y funciones necesarios sobre la marcha.
En primer lugar, tras una toma de contacto básica con el entorno, mostraremos un
ejemplo que resume los aspectos de la asignatura que se van a tratar en esta práctica. Este
primer ejemplo es una aproximación intuitiva al uso de matlab, con la que pretendemos
dar una idea general de las posibilidades del entorno.
A lo largo de la práctica se irán detallando los puntos que se presentan brevemente en
el ejemplo inicial: definición de y operación con señales, representación gráfica, análisis de
Fourier y manipulación de señales en los dominios del tiempo y la frecuencia.

2. Ejemplo de manipulación de señales en matlab


Empezamos con un ejemplo que presenta de manera resumida el contenido de esta
práctica. En el ejemplo 1, definimos una señal, calculamos su transformada de Fourier, y
la representamos en los dominios del tiempo y de la frecuencia.

3. Señales en matlab
Siendo rigurosos, el procedimiento seguido en el apartado anterior no es adecuado para
el análisis de señales analógicas; es más, en general matlab no permite analizar señales
analógicas1 . Esto se debe a que la forma natural de representar una señal en matlab es
1
Salvo que se usen bloques funcionales o toolboxes especı́ficos.

Dpto. Electrónica y Electromagnetismo Facultad de Fı́sica, Universidad de Sevilla


2 Fı́sica de las Comunicaciones – 2006/2007 – Práctica 1

Ejemplo 1 ficom pr1 0001 ejemplo brusco.m


% Ejemplo brusco
% A) Definición de la se~
nal
t = -0.25:0.001:0.25;
w1 = 2*pi*50;
w2 = 2*pi*200;
g = 3*sin(w1*t) - 2*cos(w2*t);
% B) Representación en tiempo
subplot(311)
plot(t,g)
% C) Transformada y representación en frecuencia
G = fftshift(fft(g));
% base de frecuencias
f = base_tiempo_frec(t);
% amplitud de la transformada
subplot(312);
plot(f,abs(G));
% fase de la transformada
subplot(313);
plot(f,angle(G));
% fase, mejor
plot(f,unwrap(angle(G)));

definir una secuencia finita de valores mediante un vector fila. Ası́, por ejemplo, podemos
definir la secuencia de instantes de tiempo equidistantes (intervalo 1 ms) entre 0 y 0.25,
que en el ejemplo visto es la base de tiempos de la señal. Y, del mismo modo, en el
ejemplo 2, definimos una señal sinusoide como una secuencia de valores.

Ejemplo 2 ficom pr1 0002 senal sinusoide.m


% Ejemplo de definición de se~
nal sinusoide
% base de tiempos
t = -2*pi:0.001:2*pi
w = 2*pi*1
g = sin(w*t)
% Diferentes estilos de representación
plot(t,g)
plot(t,g,’*’)
stem(t,g) % Otra forma de representación gráfica

Se puede acceder a los elementos de los vectores usando la notación del ejemplo 3.
Nótese que t(1) representa un instante de tiempo, mientras que g(1) representa el valor
que toma la señal g en ese instante.
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 suficiente-
mente pequeños y el rango temporal en que se define la señal es suficientemente amplio, la

Dpto. Electrónica y Electromagnetismo Facultad de Fı́sica, Universidad de Sevilla


Fı́sica de las Comunicaciones – 2006/2007 – Práctica 1 3

Ejemplo 3 ficom pr1 0003 elementos vectores.m


% Acceso a elementos de los vectores
g(1)
g(2)
t(length(t))

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.
Representar la señal sinusoide anterior para diferentes intervalos de la base
de tiempos t.
Pensar si es posible y cómo se puede definir en matlab una señal pertene-
ciente a las siguientes categorı́as:

Discreta en el tiempo y amplitud

Discreta en el tiempo y continua en amplitud

Discreta en la amplitud y continua en el tiempo

Continua en tiempo y en amplitud

En matlab se pueden definir señales a partir de otras mediante operaciones sobre


vectores. Ası́, el ejemplo 4 define la potencia instantánea de la señal sinusoide anterior.

Ejemplo 4 ficom pr1 0004 potencia instantanea.m


% Potencia instantánea
p1 = g.^2;
% Definición alternativa
p2 = sin(w*t).^2;
% Comparación
isequal(p1,p2)

3.1. Señales especiales


Veamos una posible forma de representar en matlab algunas señales tı́picas:

Dpto. Electrónica y Electromagnetismo Facultad de Fı́sica, Universidad de Sevilla


4 Fı́sica de las Comunicaciones – 2006/2007 – Práctica 1

Señal escalón, u(t), en el ejemplo 5.

Señal pulso, rect(t), amplitud 1, véase el ejemplo 6.


sin(t) sin(πt)
Señal sampling (Sa (t) = t
y Sinc(t) = πt
), en el ejemplo 7.

Ejemplo 5 ficom pr1 0005 senal escalon.m


% Ejemplo de se~
nal escalón
t=-10:0.01:10;
g_escalon=[zeros(1,1000), ones(1,1001)];
plot(t,g_escalon);

Ejemplo 6 ficom pr1 0006 senal pulso.m


% Ejemplo de se~
nal pulso
t=-10:0.01:10;
g_pulso=[zeros(1,950), ones(1,101), zeros(1,950)];
plot(t,g_pulso);

Ejemplo 7 ficom pr1 0007 senal sampling.m


% Ejemplo de se~
nal sampling
t=-10:0.01:10;
% Se~
nal sampling (nula en t=n*pi; n=1,2,...
g_sampling = sin(t)./t;
plot(t,g_sampling)
% Se~
nal sampling (nula en t=n; n=1,2,...
sinc(t); % equivalente a sin(pi*t)/(pi*t)
plot(t,sinc(t))

Pensar cómo se definirı́an otros tipos de señales, por ejemplo impulso, rec-
tángulo, triangular, exponencial, cuadrada, etc.
¿Es posible definir en matlab señales de los siguientes tipos?

Periódicas / no periódicas

Deterministas / aleatorias

Continuas / discretas

Analógicas / digitales

Energı́a / potencia

Paso de baja, paso de banda, etc.

Dpto. Electrónica y Electromagnetismo Facultad de Fı́sica, Universidad de Sevilla


Fı́sica de las Comunicaciones – 2006/2007 – Práctica 1 5

4. Análisis de Fourier
Utilizando operaciones sobre vectores, se pueden calcular fácilmente los coeficientes de
Fourier correspondientes a una señal. En el ejemplo 8, se definen el vector n, que contiene
los ı́ndices de los coeficientes, y el vector cn, que contiene los coeficientes.

Ejemplo 8 ficom pr1 0008 coeficientes fourier.m


% Coeficientes de Fourier para una se~
nal cuadrada de periodo 1s.
n = -10:10;
cn = (cos(n*pi)-1)./(-2*j*n*pi); % coeficientes
cn(11) = 0.5;
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’);

En matlab, la transformada de Fourier unidimensional se puede calcular mediante


la función predefinida fft, que calcula la transformada de Fourier discreta mediante el
algoritmo FFT (Fast finite Fourier transform [6]).
En el ejemplo 9, retomamos el ejemplo inicial levemente modificado. En este caso,
las representaciones gráficas de la señal y su transformada no parecen correctas. ¿Qué
diferencia respecto al ejemplo inicial puede ser la causa?
La función base_tiempo_frec proporciona un vector base de frecuencias a partir de
un vector base de tiempos, de modo que la representación de la señal en el dominio de la
frecuencia se corresponda con la representación de la señal en el dominio del tiempo. Su
definición, que constituye un ejemplo de definición de una función con un parámetro y un
resultado, es la siguiente:

function f = base_tiempo_frec (t)


% Produce un vector base de frecuencias a partir de un vector base de tiemposxb
delta_t = t(2)-t(1);
f = ((1:length(t)) - ceil(length(t)/2)) / length(t) / delta_t;

Mediante abs y angle obtenemos la magnitud y la fase del espectro de la señal. Nótese
que la amplitud de la transformada obtenida mediante fft queda multiplicada por n
respecto a la definición vista en las clases de teorı́a, siendo n el número de elementos del
vector utilizado para representar la señal original2 .
2
Ojo: si el número de elementos del vector dado como transformada se restringe a un número menor
que la longitud del vector original, la amplitud queda dividida por el mismo valor

Dpto. Electrónica y Electromagnetismo Facultad de Fı́sica, Universidad de Sevilla


6 Fı́sica de las Comunicaciones – 2006/2007 – Práctica 1

Ejemplo 9 ficom pr1 0009 ejemplo brusco2.m


% Ejemplo brusco 2
% A) Definición de la se~
nal
t=-2*pi:0.01:2*pi;
w1=2*pi*60;
w2=2*pi*200;
g = 3*sin(w1*t) - 2*cos(w2*t);
% B) Representación en tiempo
subplot(311)
plot(t,g)
% C) Transformada y representación en frecuencia
G= fftshift(fft(g));
% base de frecuencias
f = base_tiempo_frec(t);
% amplitud de la transformada
subplot(312);
plot(f,abs(G));
% fase de la transformada
subplot(313);
plot(f,angle(G));
% fase, mejor
plot(f,unwrap(angle(G)));

De manera análoga, podemos obtener las partes real e imaginaria de cualquiera de las
señales y transformadas (ver el ejemplo 10).

Ejemplo 10 ficom pr1 0010 partes real imaginaria.m


% Partes real e imaginaria
subplot(211)
plot(f,real(G));
subplot(212)
plot(f,imag(G));
% probar qué pasa...
subplot(211)
plot(f,G)

Comprobar qué pasa si usamos G=fft(g) en lugar de G=fftshift((fft(g));


El ejemplo 11 ilustra una de las propiedades de la transformada de Fourier: multiplicar
por una señal coseno equivale a un desplazamiento en el dominio de la frecuencia. Por
otra parte, la función de matlab ifft calcula la transformada de Fourier inversa (ver el
ejemplo 12).
Comprobar isequal(g,g_trans) y calcular la señal g - g_trans.

Dpto. Electrónica y Electromagnetismo Facultad de Fı́sica, Universidad de Sevilla


Fı́sica de las Comunicaciones – 2006/2007 – Práctica 1 7

Ejemplo 11 ficom pr1 0011 multiplicar coseno fourier.m


% Multiplicar por coseno equivale a desplazamiento en frecuencia
t = 0:0.001:1;
x = cos(2*pi*50*t);
g = x .* cos(2*pi*10*t);

X=fftshift(fft(x));
G=fftshift(fft(g));
f = base_tiempo_frec(t);

subplot(211)
grid;
plot(f,abs(X));
subplot(212)
plot(f,abs(G));

Ejemplo 12 ficom pr1 0012 transformada fourier inversa.m


% Transformada de Fourier inversa
% vale cualquier g de las anteriores
t = -pi:0.001:pi;
w = 2*pi;
g = cos(w*t);
g_trans = ifft(fft(g));

Dpto. Electrónica y Electromagnetismo Facultad de Fı́sica, Universidad de Sevilla


8 Fı́sica de las Comunicaciones – 2006/2007 – Práctica 1

4.1. Producto de convolución


En matlab contamos con las funciones predefinidas conv para calcular la convolución
de dos señales. El ejemplo 13 calcula y representa la convolución de una señal coseno con
una señal escalón.

Ejemplo 13 ficom pr1 0013 convolucion.m


% Convolución de se~
nales
t = -pi:0.001:pi;
g_escalon=[zeros(1,1000*pi+1), ones(1,1000*pi+1)];
w = 2*pi;
g = cos(w*t);
g_conv = conv(g,g_escalon);

subplot(311)
plot(t,g)
subplot(312)
plot(t,g_escalon)
subplot(313)
plot(t,g_conv(1:length(g)))

Comprobar visualmente que se verifican las propiedades de la transformada


de Fourier respecto al producto de convolución.

4.2. Espectros de densidad de energı́a y potencia


Para el cálculo de estos espectros disponemos (además de las funciones para análisis
de Fourier anteriores) de la función psd, que proporciona la representación de la densidad
espectral de potencia de una señal (en dB). El ejemplo 14 representa gráficamente el
resultado de la función psd para una sinusoide.

Ejemplo 14 ficom pr1 0014 densidad espectral potencia.m


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

5. Cálculo simbólico. Donde dije digo...


Durante la práctica hemos representado señales mediante vectores y hemos manipulado
las señales esencialmente mediante operaciones con vectores. Esta es la forma habitual de

Dpto. Electrónica y Electromagnetismo Facultad de Fı́sica, Universidad de Sevilla


Fı́sica de las Comunicaciones – 2006/2007 – Práctica 1 9

trabajar con matlab. No obstante, aunque en principio matlab no se diseñó para realizar
operaciones simbólicas, sı́ es posible definir y manipular señales (y funciones en general)
de manera simbólica, si disponemos del “Toolbox” para cálculo simbólico. Ası́, como en el
ejemplo 15, podemos definir una función seno o una δ de Dirac, y calcular la transformada
de Fourier de manera simbólica.
Ejemplo 15 ficom pr1 0015 fourier simbolico.m
% Análisis de Fourier con cálculo simbólico
syms t % crear variable simbólica
g = sin(2*pi*t)
G = fourier(g) % Transformada de Fourier
plot(g) % ¡error!
ezplot(g)
ginv = ifourier(G) % Transformada inversa
g2 = dirac(t)
G2 = fourier(g2)
% Se~
nal Heaviside/escalon
g3 = heaviside(t)
% Suma de series
syms k
symsum(1/k^2,1,10)
symsum(1/k^2,1,Inf)

6. Notas
Matlab suele incluir programas de demostración de los “Toolboxes” disponibles. Por
ejemplo, se puede probar una demo sobre la transformada de Fourier discreta me-
diante la orden sigdemo1.
Dentro de la ventana de órdenes, se puede obtener ayuda sobre cualquier elemento
de matlab mediante la orden help. Entre otras, se dispone de la orden help help,
que proporciona una explicación básica de cómo utilizar help. Del mismo modo, se
puede usar la orden doc para consultar la documentación sobre cualquier tema.
Para poner tı́tulos y manipular las gráficas, además de la interfaz gráfica, se dispone
de las siguientes órdenes, entre otras muchas:
title(’Tı́tulo de la gráfica’)
xlabel(’Tı́tulo eje horizontal’)
ylabel(’Tı́tulo eje vertical’)
set(gca,’XTick’,-pi:pi/2:pi) % colocar marcas en el eje x
hold % acumular gráficas sobre la misma ventana
grid % trazar rejilla interna
help plot % ayuda especı́fica sobre plot y funciones similares
doc plot % documentación sobre plot

Las opciones disponibles se detallan en la documentación sobre la orden plot.

Dpto. Electrónica y Electromagnetismo Facultad de Fı́sica, Universidad de Sevilla


10 Fı́sica de las Comunicaciones – 2006/2007 – Práctica 1

Se pueden obtener diferentes formas de representación gráfica de señales con las


órdenes plot, stem y otras que veremos en próximas prácticas. Los apartados “Basic
Plotting Functions” y “Specialized Plotting” de la documentación de matlab explican
los detalles.

7. Referencias
[1] Introduction to Matlab and Octave.
http://ccrma.stanford.edu/˜jos/matlab/matlab.pdf. Descripción de la historia y las carac-
terı́sticas generales del lenguaje matlab y en particular de los entornos Matlab y Octave.
[2] MATLAB Tutorial.
http://www.ece.gatech.edu/users/bonnie/book/TUTORIAL/tutorial.html. De los auto-
res del libro Fundamentals of Signals and Systems Using Matlab. Muy buena introducción
al uso de matlab para análisis de señales y sistemas en comunicaciones.
[3] Documentation for MathWorks Products, Release 14.
http://www.mathworks.com/access/helpdesk/help/helpdesk.shtml
[4] GNU Octave Repository Categorical Index.
http://octave.sourceforge.net/index/index.html
[5] http://www.gts.tsc.uvigo.es/ssd/. Prácticas de la asignatura Señales y Sistemas
Discretos, impartida por el Departamento de Teorı́a de la Señal y Comunicaciones de la
Universidad de Vigo.
[6] FFTW: A library for computing the discrete Fourier Transform. http://www.fftw.org.
[7] Fundamentals of Signals and Systems Using the Web and MATLAB: Online Demos.
http://users.ece.gatech.edu/˜bonnie/book/applets.html
[8] Numerical Mathematics Consortium (www.nmconsortium.org). Iniciativa de estan-
darización de algoritmos y lenguajes numéricos.
[9] V.K. Ingle y J.G. Proakis. Digital Signal Processing Using MATLAB V.4. PWS
Publishing Company. 1997. ISBN: 0-534–93805-1.

Dpto. Electrónica y Electromagnetismo Facultad de Fı́sica, Universidad de Sevilla

También podría gustarte