1. F´
ısica de las Comunicaciones – 2006/2007 – Pr´ctica 1
a
1
Pr´ctica 1: Senales y an´lisis de Fourier
a
˜
a
1.
Objetivo y contenido
En esta pr´ctica pretendemos revisar parte de la materia del tema 2 de la asignatua
ra desde la perspectiva de un entorno de c´lculo num´rico y simulaci´n por ordenador:
a
e
o
matlab. El objetivo fundamental es familiarizarse con la definici´n, manipulaci´n y repreo
o
sentaci´n de se˜ales en matlab.
o
n
Este documento proporciona un gui´n que incluye todas las ´rdenes necesarias para
o
o
ir siguiendo los apartados de la pr´ctica. Con objeto de centrarnos en la materia de la
a
asignatura y de que la clase sea m´s amena, hemos optado por no dedicar apartados
a
espec´
ıficos a explicar el entorno ni el lenguaje de programaci´n matlab, sino por explicar
o
los conceptos y funciones necesarios sobre la marcha.
En primer lugar, tras una toma de contacto b´sica con el entorno, mostraremos un
a
ejemplo que resume los aspectos de la asignatura que se van a tratar en esta pr´ctica. Este
a
primer ejemplo es una aproximaci´n intuitiva al uso de matlab, con la que pretendemos
o
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
a
a
el ejemplo inicial: definici´n de y operaci´n con se˜ales, representaci´n gr´fica, an´lisis de
o
o
n
o
a
a
Fourier y manipulaci´n de se˜ales en los dominios del tiempo y la frecuencia.
o
n
2.
Ejemplo de manipulaci´n de se˜ ales en matlab
o
n
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
a
n
la representamos en los dominios del tiempo y de la frecuencia.
3.
Se˜ ales en matlab
n
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
a
n
o
a
n
1
anal´gicas . Esto se debe a que la forma natural de representar una se˜al en matlab es
o
n
1
Salvo que se usen bloques funcionales o toolboxes espec´
ıficos.
Dpto. Electr´nica y Electromagnetismo
o
Facultad de F´
ısica, Universidad de Sevilla
2. 2
F´
ısica de las Comunicaciones – 2006/2007 – Pr´ctica 1
a
Ejemplo 1 ficom pr1 0001 ejemplo brusco.m
% Ejemplo brusco
% A) Definici´n de la se~al
o
n
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
o
subplot(311)
plot(t,g)
% C) Transformada y representaci´n en frecuencia
o
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
n
ejemplo 2, definimos una se˜al sinusoide como una secuencia de valores.
n
Ejemplo 2 ficom pr1 0002 senal sinusoide.m
% Ejemplo de definici´n de se~al sinusoide
o
n
% base de tiempos
t = -2*pi:0.001:2*pi
w = 2*pi*1
g = sin(w*t)
% Diferentes estilos de representaci´n
o
plot(t,g)
plot(t,g,’*’)
stem(t,g)
% Otra forma de representaci´n gr´fica
o
a
Se puede acceder a los elementos de los vectores usando la notaci´n del ejemplo 3.
o
N´tese que t(1) representa un instante de tiempo, mientras que g(1) representa el valor
o
que toma la se˜al g en ese instante.
n
Por tanto, siendo estrictos, en matlab toda se˜al es discreta en tiempo, mientras que en
n
amplitud puede ser discreta (cuantizada) o continua (aunque limitada por la precisi´n de
o
los tipos num´ricos). No obstante, si los intervalos temporales entre valores son suficientee
mente peque˜os y el rango temporal en que se define la se˜al es suficientemente amplio, la
n
n
Dpto. Electr´nica y Electromagnetismo
o
Facultad de F´
ısica, Universidad de Sevilla
3. F´
ısica de las Comunicaciones – 2006/2007 – Pr´ctica 1
a
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
n
su an´lisis proporcionan una buena aproximaci´n a los resultados te´ricos.
a
o
o
En el caso m´s simple y frecuente, los valores se toman en instantes equiespaciados,
a
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
o
n
peque˜os, de modo que los efectos sean despreciables). Asimismo, la amplitud de las
n
se˜ales est´ sometida a una discretizaci´n que, dada la precisi´n de los tipos num´ricos
n
a
o
o
e
empleados en matlab, podemos ignorar.
Representar la se˜ al sinusoide anterior para diferentes intervalos de la base
n
de tiempos t.
Pensar si es posible y c´mo se puede definir en matlab una se˜ al perteneo
n
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
n
vectores. As´ el ejemplo 4 define la potencia instant´nea de la se˜al sinusoide anterior.
ı,
a
n
Ejemplo 4 ficom pr1 0004 potencia instantanea.m
% Potencia instant´nea
a
p1 = g.^2;
% Definici´n alternativa
o
p2 = sin(w*t).^2;
% Comparaci´n
o
isequal(p1,p2)
3.1.
Se˜ ales especiales
n
Veamos una posible forma de representar en matlab algunas se˜ales t´
n
ıpicas:
Dpto. Electr´nica y Electromagnetismo
o
Facultad de F´
ısica, Universidad de Sevilla
4. 4
F´
ısica de las Comunicaciones – 2006/2007 – Pr´ctica 1
a
Se˜al escal´n, u(t), en el ejemplo 5.
n
o
Se˜al pulso, rect(t), amplitud 1, v´ase el ejemplo 6.
n
e
Se˜al sampling (Sa (t) =
n
sin(t)
t
y Sinc(t) =
sin(πt)
),
πt
en el ejemplo 7.
Ejemplo 5 ficom pr1 0005 senal escalon.m
% Ejemplo de se~al escal´n
n
o
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~al pulso
n
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~al sampling
n
t=-10:0.01:10;
% Se~al sampling (nula en t=n*pi; n=1,2,...
n
g_sampling = sin(t)./t;
plot(t,g_sampling)
% Se~al sampling (nula en t=n; n=1,2,...
n
sinc(t); % equivalente a sin(pi*t)/(pi*t)
plot(t,sinc(t))
Pensar c´mo se definir´ otros tipos de se˜ ales, por ejemplo impulso, reco
ıan
n
t´ngulo, triangular, exponencial, cuadrada, etc.
a
¿Es posible definir en matlab se˜ ales de los siguientes tipos?
n
Peri´dicas / no peri´dicas
o
o
Deterministas / aleatorias
Continuas / discretas
Anal´gicas / digitales
o
Energ´ / potencia
ıa
Paso de baja, paso de banda, etc.
Dpto. Electr´nica y Electromagnetismo
o
Facultad de F´
ısica, Universidad de Sevilla
5. F´
ısica de las Comunicaciones – 2006/2007 – Pr´ctica 1
a
4.
5
An´lisis de Fourier
a
Utilizando operaciones sobre vectores, se pueden calcular f´cilmente los coeficientes de
a
Fourier correspondientes a una se˜al. En el ejemplo 8, se definen el vector n, que contiene
n
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~al cuadrada de periodo 1s.
n
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
o
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´
a
n
e
diferencia respecto al ejemplo inicial puede ser la causa?
La funci´n base_tiempo_frec proporciona un vector base de frecuencias a partir de
o
un vector base de tiempos, de modo que la representaci´n de la se˜al en el dominio de la
o
n
frecuencia se corresponda con la representaci´n de la se˜al en el dominio del tiempo. Su
o
n
definici´n, que constituye un ejemplo de definici´n de una funci´n con un par´metro y un
o
o
o
a
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
n
o
que la amplitud de la transformada obtenida mediante fft queda multiplicada por n
respecto a la definici´n vista en las clases de teor´ siendo n el n´mero de elementos del
o
ıa,
u
2
vector utilizado para representar la se˜al original .
n
2
Ojo: si el n´mero de elementos del vector dado como transformada se restringe a un n´mero menor
u
u
que la longitud del vector original, la amplitud queda dividida por el mismo valor
Dpto. Electr´nica y Electromagnetismo
o
Facultad de F´
ısica, Universidad de Sevilla
6. 6
F´
ısica de las Comunicaciones – 2006/2007 – Pr´ctica 1
a
Ejemplo 9 ficom pr1 0009 ejemplo brusco2.m
% Ejemplo brusco 2
% A) Definici´n de la se~al
o
n
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
o
subplot(311)
plot(t,g)
% C) Transformada y representaci´n en frecuencia
o
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
a
se˜ales y transformadas (ver el ejemplo 10).
n
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...
e
subplot(211)
plot(f,G)
Comprobar qu´ pasa si usamos G=fft(g) en lugar de G=fftshift((fft(g));
e
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
n
otra parte, la funci´n de matlab ifft calcula la transformada de Fourier inversa (ver el
o
ejemplo 12).
Comprobar isequal(g,g_trans) y calcular la se˜ al g - g_trans.
n
Dpto. Electr´nica y Electromagnetismo
o
Facultad de F´
ısica, Universidad de Sevilla
7. F´
ısica de las Comunicaciones – 2006/2007 – Pr´ctica 1
a
7
Ejemplo 11 ficom pr1 0011 multiplicar coseno fourier.m
%
t
x
g
Multiplicar por coseno equivale a desplazamiento en frecuencia
= 0:0.001:1;
= cos(2*pi*50*t);
= 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
o
Facultad de F´
ısica, Universidad de Sevilla
8. 8
4.1.
F´
ısica de las Comunicaciones – 2006/2007 – Pr´ctica 1
a
Producto de convoluci´n
o
En matlab contamos con las funciones predefinidas conv para calcular la convoluci´n
o
de dos se˜ales. El ejemplo 13 calcula y representa la convoluci´n de una se˜al coseno con
n
o
n
una se˜al escal´n.
n
o
Ejemplo 13 ficom pr1 0013 convolucion.m
% Convoluci´n de se~ales
o
n
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.
o
4.2.
Espectros de densidad de energ´ y potencia
ıa
Para el c´lculo de estos espectros disponemos (adem´s de las funciones para an´lisis
a
a
a
de Fourier anteriores) de la funci´n psd, que proporciona la representaci´n de la densidad
o
o
espectral de potencia de una se˜al (en dB). El ejemplo 14 representa gr´ficamente el
n
a
resultado de la funci´n psd para una sinusoide.
o
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...
a
o
Durante la pr´ctica hemos representado se˜ales mediante vectores y hemos manipulado
a
n
las se˜ales esencialmente mediante operaciones con vectores. Esta es la forma habitual de
n
Dpto. Electr´nica y Electromagnetismo
o
Facultad de F´
ısica, Universidad de Sevilla
9. F´
ısica de las Comunicaciones – 2006/2007 – Pr´ctica 1
a
9
trabajar con matlab. No obstante, aunque en principio matlab no se dise˜´ para realizar
no
operaciones simb´licas, s´ es posible definir y manipular se˜ales (y funciones en general)
o
ı
n
de manera simb´lica, si disponemos del “Toolbox” para c´lculo simb´lico. As´ como en el
o
a
o
ı,
ejemplo 15, podemos definir una funci´n seno o una δ de Dirac, y calcular la transformada
o
de Fourier de manera simb´lica.
o
Ejemplo 15 ficom pr1 0015 fourier simbolico.m
% An´lisis de Fourier con c´lculo simb´lico
a
a
o
syms t
% crear variable simb´lica
o
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~al Heaviside/escalon
n
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
o
ejemplo, se puede probar una demo sobre la transformada de Fourier discreta mediante la orden sigdemo1.
Dentro de la ventana de ´rdenes, se puede obtener ayuda sobre cualquier elemento
o
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
o a
o
puede usar la orden doc para consultar la documentaci´n sobre cualquier tema.
o
Para poner t´
ıtulos y manipular las gr´ficas, adem´s de la interfaz gr´fica, se dispone
a
a
a
de las siguientes ´rdenes, entre otras muchas:
o
title(’T´tulo de la gr´fica’)
ı
a
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
a
grid
% trazar rejilla interna
help plot % ayuda espec´fica sobre plot y funciones similares
ı
doc plot
% documentaci´n sobre plot
o
Las opciones disponibles se detallan en la documentaci´n sobre la orden plot.
o
Dpto. Electr´nica y Electromagnetismo
o
Facultad de F´
ısica, Universidad de Sevilla
10. 10
F´
ısica de las Comunicaciones – 2006/2007 – Pr´ctica 1
a
Se pueden obtener diferentes formas de representaci´n gr´fica de se˜ales con las
o
a
n
o
´rdenes plot, stem y otras que veremos en pr´ximas pr´cticas. Los apartados “Basic
o
a
Plotting Functions” y “Specialized Plotting” de la documentaci´n de matlab explican
o
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 caraco
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 autores del libro Fundamentals of Signals and Systems Using Matlab. Muy buena introducci´n
o
al uso de matlab para an´lisis de se˜ales y sistemas en comunicaciones.
a
n
[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
a
n
Discretos, impartida por el Departamento de Teor´ de la Se˜al y Comunicaciones de la
ıa
n
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 estandarizaci´n de algoritmos y lenguajes num´ricos.
o
e
[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
o
Facultad de F´
ısica, Universidad de Sevilla