Professional Documents
Culture Documents
23 de septiembre de 2014
1.
Objetivos
Realizar un primer acercamiento a la herramienta de programacion de Matlab con
relacion al Procesamiento Digitales de Se
nales.
Analizar se
nales en tiempo discreto com
unmente empleadas en Procesamiento Digitales
de Se
nales.
Implementar en el dominio del tiempo la convolucion.
2.
Manipulaci
on de se
nales discretas b
asicas
clc
clear all
close all
n= 10:19;
se n=s i n ( n/2+10) ;
stem ( sen )
x l a b e l ( muestras n )
y l a b e l ( f u n c i o n seno ( n ) )
b. Usando el comando help, se pueden ver las opciones disponibles que hay con la funcion
stem. A continuacion se muestran las posibles configuraciones que se pueden realizar.
1
2
3
4
h e l p stem
stem
D i s c r e t e s e q u e n c e o r stem p l o t .
stem (Y) p l o t s th e data s e q u e n c e Y as stems from t he x a x i s
t e r m i n a t e d with c i r c l e s f o r t he data v a l u e . I f Y i s a
matrix then
each column i s p l o t t e d as a s e p a r a t e s e r i e s .
9
10
11
12
13
stem ( . . . , LINESPEC ) u s e s t he l i n e t y p e s p e c i f i e d f o r th e
stems and
markers . See PLOT f o r p o s s i b i l i t i e s .
14
15
16
17
18
19
H = stem ( . . . ) r e t u r n s a v e c t o r o f s t e m s e r i e s h a n d l e s i n H,
one handle
p er column o f data i n Y.
De estas opciones se puede ver que para obtener una grafica con el eje horizontal ajustado se debe usar stem(X,Y), donde X es el vector correspondiente al eje horizontal
y Y el vector de valores de la funcion que se desea graficar.
c. El comando clc se encarga de limpiar las digitaciones que se han hecho en el command
window pero no elimina la informacion obtenida en las ejecuciones realizadas, para
realizar esto, de usa el comando clear all. Para cerrar las ventanas que se hayan
generado en la ejecucion de codigos anteriores, se usa el comando close all.
La grafica obtenida luego de ejecutar el codigo anterior se presenta en la Figura 1. En
esta se puede observar que el eje de muestras n no coincide con lo establecido en el
codigo, en el cual se determino que las muestras deban ir de -10 a 19, pero en la grafica
van de 1 a 29.
clc
clear all
close all
n= 10:19;
se n=s i n ( n/2+10) ;
stem ( n , sen )
x l a b e l ( muestras n )
y l a b e l ( f u n c i o n seno ( n ) )
Ejecutando este nuevo codigo, se obtiene la grafica presentada en la Figura 2. En esta
grafica se puede observar que el eje horizontal esta ajustado a lo que se determino en
el codigo.
3.
Ejecutando un Script
a. Ahora se hara uso del editor de textos de Matlab para facilitar la digitacion de los
codigos que se deseen ejecutar. A continuacion se presenta un script que permite generar
y visualizar una secuencia de datos discretos a partir de una se
nal senoidal.
En el siguiente codigo se usaran comentarios para especificar el rol de las variables,
as como las unidades asociadas.
1
2
3
clc
clear all
close all
4
5
6
7
8
9
10
11
12
13
14
clc
clear all
close all
4
5
6
7
8
9
10
11
12
13
14
d. Se
nal Sinc
La se
nal sinc es una funcion que en el dominio del tiempo representa un filtro pasa
bajo ideal. La se
nal sinc se define de la siguiente forma:
sinc(n)
sin(c n)
c
c n
n=0
(1)
n 6= 0
5
6
% C a l c u l a 2m+1 muestras de l a f u n c i o n s i n (2 p i f l t ) / ( p i t )
% para n=m : m ( e s d e c i r , c e n t r a d o a l r e d e d o r d e l o r i g e n ) .
% f c : F r e c u e n c i a de c o r t e [ Hz ] a s o c i a d a a un f i l t r o paso b a j o
% : n o r m a l i z a d a e n t r e 0 y 1 r e s p e c t o a l a f r e c u e n c i a de
muestreo , por l o t a n t o l a
% : f r e c u e n c i a maxima p e r m i t i d a e s f c = 0 . 5 .
% x : s a l i d a , muestras de l a f u n c i o n s i n c
7
8
clear all
9
10
11
12
13
14
15
16
17
18
m=50;
f c =0.25;
wc=f c 2 p i ;
n=(m:m) ; %2m+1 i n s t a n t e s de muestreo c e n t r a d o a l r e d e d o r de
cero
xn=s i n ( wc n ) ;
xd=p i n ;
x ( 1 :m)= xn ( 1 :m) . / xd ( 1 :m) ;
x (m+1)=2 f c ;
x (m+2:2m+1)= xn (m+2:2m+1) . / xd (m+2:2m+1) ;
19
20
21
22
23
24
25
% graficar sen
al
figure
stem ( n , x )
t i t l e ( s t r c a t ( Generacion de l a S e n
a l S i n c f c= , num2str (
fc ) ) )
xlabel ( Instantes n )
y l a b e l ( Sen
al Sinc )
Ejecutando este codigo se obtiene la grafica de la Figua 7
e. Ejecutando nuevamente el codigo pero esta vez con m=5 y m=150 se obtienen las
graficas presentadas en las Figuras 8 y 9 respectivamente.
10
f. Se
nal Escal
on
La se
nal escalon es comunmente usada en el procesamiento de se
nales. Cuando se
trabaja con se
nales en tiempo discreto, la se
nal escalon se define de la siguiente forma:
(
u(n n0 )
n n0
para otros valores de n
1
0
(2)
3
4
5
6
% C a l c u l a 2m+1 muestras de l a f u n c i o n u [ n ]
% para n= m+no :m+no ( e s d e c i r , c e n t r a d o a l r e d e d o r d e l o r i g e n )
.
% A : Amplitud de l a s e n
al
%m : Duracio n de l a s e n
al
% no : El i n s t a n t e de i n i c i o
% u : s a l i d a , muestras de l a f u n c i o n s i n c
7
8
9
10
clc
clear all
close all
11
12
13
14
15
16
17
A=2;
m=20;
no=5;
n=m:m; %2m+1 i n s t a n t e s de muestreo c e n t r a d o a l r e d e d o r de
cero
u ( 1 :m+no )=z e r o s (m+no , 1 ) ;
u (m+no +1:2m+1)=2 ones (mno +1 ,1) ;
18
19
20
21
22
23
24
% graficar sen
al
figure
stem ( n , u )
t i t l e ( s t r c a t ( Generacion de l a S e n
a l E s c a l o n A= , num2str
(A) ) )
xlabel ( Instantes n )
y l a b e l ( Sen
a l E s c a l o n )
Este codigo genera una se
nal escalon de amplitud 2 e inicia en la muestra -5 hasta la
muestra 20. Al ejecutarse el codigo se genera la grafica mostrada en la Figura 14.
11
12
h. Se
nal Rampa
La se
nal rampa es otro tipo de se
nal basica en el procesamiento de se
nales. Esta se
nal
puede ser vista como una acumulacion de la se
nal rampa. A continuacion se presenta
el codigo que permite generar u visualizar una se
nal rampa.
1
2
3
4
5
6
% C a l c u l a 2m+1 muestras de l a s e n
a l rampa
% para n= m+no :m+no ( e s d e c i r , c e n t r a d o a l r e d e d o r d e l o r i g e n )
.
% A : P e n d i e n t e de l a s e n
al
%m : Duracio n de l a s e n
al
% no : El i n s t a n t e de c r u c e por c e r o
% r : s a l i d a , muestras de l a f u n c i o n s i n c
7
8
9
10
clc
clear all
close all
11
12
13
14
15
16
17
A=5;
m=50;
no =7;
n=m:m; %2m+1 i n s t a n t e s de muestreo c e n t r a d o a l r e d e d o r de
cero
r ( 1 :m+no )=z e r o s (m+no , 1 ) ;
r (m+no +1:2m+1)=Acumsum ( ones (mno +1 ,1) ) ;
18
19
% graficar sen
al
13
20
21
22
23
24
figure
stem ( n , r )
t i t l e ( s t r c a t ( Generacion de l a S e n
a l Rampa A= , num2str (A
) ) )
xlabel ( Instantes n )
y l a b e l ( Sen
a l Rampa )
Al ejecutar este codigo se obtiene la grafica mostrada en la Figura 17, en la cual se
definio una pendiente de 5, con un instante de cruce por cero igual a 7 y se grafico hasta
la muestra 50.
14
15
j. Se
nal exponencial (an para a real)
La se
nal exponencial es un tipo de se
nales que son propias de los sistemas discretos
lineales e invariantes en el tiempo, por lo tanto, es importante poder analizarlas por
medio de su generacion y visualizacion en Matlab.
El siguiente codigo permite generar y visualizar una se
nal exponencial, de tal forma
que el usuario puede definir la base, la duracion y el instante de inicio.
1
2
3
4
5
6
% C a l c u l a 2m+1 muestras de l a s e n
al exponencial real
% para n= m+no :m+no ( e s d e c i r , c e n t r a d o a l r e d e d o r d e l o r i g e n )
.
% a : Base de l a s e n
al
%m : Duracio n de l a s e n
al
% no : I n s t a n t e de i n i c i o
% x : s a l i d a , muestras de l a f u n c i o n s i n c
7
8
9
10
clc
clear all
close all
11
12
13
14
15
16
17
a =0.5;
m=20;
no =0;
n=m:m; %2m+1 i n s t a n t e s de muestreo c e n t r a d o a l r e d e d o r de
cero
x ( 1 :m+no )=z e r o s (m+no , 1 ) ;
x (m+no +1:2m+1)=a . ( 0 :mno ) ;
18
19
20
21
22
23
24
% graficar sen
al
figure
stem ( n , x )
t i t l e ( s t r c a t ( Generacion de l a S e n
a l E x p o n e n c i a l a= ,
num2str ( a ) ) )
xlabel ( Instantes n )
y l a b e l ( Sen
al Esponencial r e a l )
Al ejecutarse este codigo se produce la se
nal exponencial mostrada en la Figura 20. En
esta se puede ver que la se
nal va desde la muestra -10 hasta la muestra 30. La base
definida en el codigo fue de 0.5.
corta de la se
nal dado que era una se
nal que creca en gran medida cada vez que se
graficaban mas muestras.
17
l. Se
nal exponencial [(a + jb)n base compleja])
Las se
nales exponenciales complejas son la forma general de las funciones propias de los
sistemas discretos lineales e invariantes en el tiempo. Este tipo de se
nales por lo general
se dividen en dos partes para poderlas analizar graficamente: Parte real e imaginario o
magnitud y fase.El siguiente codigo permite generar y visualizar una se
nal exponencial
compleja.
1
2
3
4
5
6
7
% C a l c u l a 2m+1 muestras de l a s e n
a l exponencial compleja
% para n= m+no :m+no ( e s d e c i r , c e n t r a d o a l r e d e d o r d e l o r i g e n )
.
% a : Parde r e a l de l a base de l a s e n
al
% b : Parde c o m p l e j a de l a base de l a s e n
al
%m : Duracio n de l a s e n
al
% no : I n s t a n t e de i n i c i o
% x : s a l i d a , muestras de l a f u n c i o n s i n c
8
9
10
11
clc
clear all
close all
12
13
14
15
16
17
18
19
a =0.2;
b=0.3;
m=6;
no=3;
n=m:m; %2m+1 i n s t a n t e s de muestreo c e n t r a d o a l r e d e d o r de
cero
x ( 1 :m+no )=z e r o s (m+no , 1 ) ;
x (m+no +1:2m+1)=(a+1 i b ) . ( 0 :mno ) ;
18
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
% graficar sen
al
figure
stem ( n , r e a l ( x ) )
t i t l e ( s t r c a t ( Generacion de l a S e n
al
num2str ( a ) , y b= , num2str ( b ) ) )
xlabel ( Instantes n )
y l a b e l ( Parte Real )
figure
stem ( n , imag ( x ) )
t i t l e ( s t r c a t ( Generacion de l a S e n
al
num2str ( a ) , y b= , num2str ( b ) ) )
xlabel ( Instantes n )
y l a b e l ( Parte I m a g i n a r i a )
figure
stem ( n , abs ( x ) , r )
t i t l e ( s t r c a t ( Generacion de l a S e n
al
num2str ( a ) , y b= , num2str ( b ) ) )
xlabel ( Instantes n )
y l a b e l ( Magnitud )
figure
stem ( n , phase ( x ) , r )
t i t l e ( s t r c a t ( Generacion de l a S e n
al
num2str ( a ) , y b= , num2str ( b ) ) )
xlabel ( Instantes n )
y l a b e l ( Fase en r a d i a n e s )
E x p o n e n c i a l a= ,
E x p o n e n c i a l a= ,
E x p o n e n c i a l a= ,
E x p o n e n c i a l a= ,
19
20
21
22
23
4.
Convoluci
on
x(k)h(n k) =
k=
h(k)x(n k)
(3)
k=
De esta ecuacion se puede ver que la convolucion cumple con la propiedad conmutativa.
Ademas, de la misma ecuacion se puede determinar el tama
no de la secuencia de salida
y. Si se mira la se
nal x como la entrada a un sistema discreto con respuesta al impulso
h, se puede ver que la u
ltima muestra de la se
nal resultante y sera la duracion de la
respuesta al impulso contando a partir de la u
ltima muestra de la se
nal de entrada
x. Por lo tanto, si la se
nal x tiene xn0 muestras y la respuesta al impulso tiene hn0
muestras, con tanto hn0 veces a partir de xn0 , se tiene que la cantidad de muestras
que definen la se
nal de salida sera de yn0 = xn0 + hn0 1.
A continuacion se presenta un codigo que permite calcular la operacion de convolucion
y visualizar cada una de las se
nales de entrada y la se
nal resultante. Este programa
pide como entrada al usuario que inserte en forma de vector cada una de las se
nales de
entrada al proceso de convolucion. Estas se
nales son llamas x y h. El usuario tambien
debe ingresar en xno y hno la componente del vector que corresponde a la muestra
cero de la secuencia discreta de x y h respectivamente. Con estos datos de entrada el
programa se encarga de calcular el vector y que corresponde a la secuencia de salida
as como determinar la componente yno que da informacion de donde se encuentra la
muestra cero. Finalmente el programe permite la visualizacion de la se
nal resultante y
de las se
nales de entrada.
1
2
3
%% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
%Convolucio n %
%% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
4
5
6
7
8
9
10
11
% C a l c u l a l a c o n v o l u c i o n e n t r e una s e n
a l x y una s e n
al h
% x : Sen
a l de e n t r a d a 1
% h : Sen
a l de e n t r a d a 2
% y : Sen
a l de s a l i d a
% xno : I n s t a n t e c e r o en l a s e n
al 1
% hno : I n s t a n t e c e r o en l a s e n
al 2
% yno : I n s t a n t e c e r o en l a s e n
a l de s a l i d a
12
13
14
15
clc
clear all
close all
16
17
18
19
20
21
22
23
x=[1 2 1 2];
xn=l e n g t h ( x ) ;
xno =1;
h=[1 2 3 2 1 ] ;
hn=l e n g t h ( h ) ;
hno =1;
yno=hno+xno 1;
24
24
25
26
27
28
29
30
31
32
33
34
35
36
37
f o r j =1:hn+xn1
y ( j ) =0;
f o r k=1: j
i f jk+1>xn
x ( jk+1)=0;
end
i f k>hn
h ( k ) =0;
end
y ( j )=x ( jk+1)h ( k )+y ( j ) ;
end
38
39
end
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
% graficar sen
al
figure
s u b p l o t ( 3 1 1 ) , stem ( n , x )
t i t l e ( Sen
a l de e n t r a d a x )
xlabel ( Instantes n )
y l a b e l ( Amplitud )
s u b p l o t ( 3 1 2 ) , stem ( n , h , r )
t i t l e ( Sen
a l de e n t r a d a h )
xlabel ( Instantes n )
y l a b e l ( Amplitud )
s u b p l o t ( 3 1 3 ) , stem ( n , y , m )
t i t l e ( Sen
a l de s a l i d a y )
xlabel ( Instantes n )
y l a b e l ( Amplitud )
b. En las paginas siguientes se mostraran los resultados obtenidos para diferentes entradas
x y respuestas al impulso h.
25
a- . h(n) = {1, 2, 3, 2, 1}
x(n) = {1, 2, 1, 2}
x(n) = {1, 2, 1, 2}
26
c- . h(n) = {1, 2, 1, 2}
x(n) = {1, 2, 3, 2, 1}
x(n) = {1, 2, 2, 2}
27
e- . h(n) = {1, 2, 3, 2, 1}
x(n) = {1,5, 2, 2, 1}
28
(4)
h(n) = {1, 2, 3, 2, 1}
h(n) = {1, 2, 1, 2}
29
h(n) = {1, 2, 3, 2, 1}
h(n) = {1, 2, 1, 2}
30
h(n) = {1, 2, 3, 2, 1}
h(n) = {1, 2, 1, 2}
31
h(n) = {1, 2, 3, 2, 1}
Figura 42: Convolucion de entrada senoidal con Fc = 100 [KHz] y Fs = 300 [KHz]
h(n) = {1, 2, 1, 2}
Figura 43: Convolucion de entrada senoidal con Fc = 100 [KHz] y Fs = 300 [KHz]
32
x=[1 2 1 2];
y=[1 2 3 2 1 ] ;
4
5
he=deconv ( y , x )
obteniendose el siguiente resultado:
1
2
he =
xe=deconv ( y , h )
Que dara como resultado:
1
2
xe =
3
4
5.
Observaciones
Dado que en Matlab las componentes de los vectores no inician en cero, se debe tener
mucho cuidado al momento de graficar las se
nales. Por esta razon se recomienda que
el usuario establezca correctamente los ejes de las funciones que se desean visualizar.
Tambien cabe decir que la longitud del vector que define el eje debe ser igual a la
longitud del vector de la secuencia que se desee graficar.
Cuando se deseen realizar simulaciones de sistemas fsicos reales, se debe tener en
cuenta que estan en un dominio continuo y que las simulaciones se realizan en tiempo
discreto, por tanto es importante al momento de hacer las simulaciones definir periodos
de muestreo lo suficientemente peque
nos para que las se
nales mantengan la forma de la
se
nal continua. Se recuerda que la funcion plot permite realizar visualizaciones como
si fueran continuas las se
nales que se estan trabajando.
6.
Conclusiones
Matlab es una herramienta robusta que permite realizar implementaciones de algoritmos para el procesamiento de se
nales. Este tipo de herramientas son de gran utilidad
para realizar investigaciones en ingeniera y ciencias basicas ya que permiten realizar simulaciones de modelos fsicos a fin de que se puedan predecir soluciones ante
problemas del mundo real.
El procesamiento de se
nales en tiempo discreto tiene la ventaja de que se pueden
realizar metodos numericos para realizar analisis. Por medio de este taller se realizaron analisis sobre las se
nales com
unmente empleadas en procesamiento de digital de
se
nales, permitiendo que se adquiriera la destreza para posteriormente realizar implementaciones en aplicaciones de la ingeniera.
Se logro dise
nar e implementar un algoritmo que permitiera calcular la convolucion
en tiempo discreto. Esto se comprobo por medio de ejemplos con diferentes tipos de
se
nales y respuestas al impulso, ademas del uso de se
nales senoidales para analizar el
comportamiento de sistemas con funciones de filtrado.
Referencias
[1] Alan V. Oppenheim, Ronald W. Schafer, Discrete-Time Signal Processing (3rd Edition),
Pearson, (2010)
[2] Sanjit K. Mitra, Digital Signal Processing (2nd Edition), Mc Graw Hill, (2001)
[3] Jhon G. Proakis, Manolakis, Tratamiento Digital de Se
nales, Pearson, (2007)
34