Vous êtes sur la page 1sur 32

INFORME TALLER No.

1
D.S.P.
Yeisson Ricardo Mendoza Castellanos
23 de septiembre de 2014
Taller No. 1: Tratamiento de se nales
basicas
1. Objetivos
Realizar un primer acercamiento a la herramienta de programacion de Matlab con rela-
cion 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 basicas
(a) De acuerdo a la gua del taller, se hace el script en MATLAB con el codigo mostrado.
1 clc;
2 clear all;
3 n=-10:19;
4 sen = sin(n/2 + 10 );
5 stem(sen);
6 xlabel ('muestras n' );
7 ylabel ('funcion seno (n)');
Dando como resultado la gura 1.
(b) Usando la herramienta help del MATLAB, se obtiene informaci on de la funcion stem de
la cual podemos extraer la siguiente informaci on:
1
stem Discrete sequence or stemplot.
stem(Y) plots the data sequence Y as stems from the x axis
terminated with circles for the data value. If Y is a matrix then
each column is plotted as a separate series.
stem(X,Y) plots the data sequence Y at the values specied
in X.
stem(...,lled) produces a stem plot with lled markers.
stem(...,LINESPEC) uses the linetype specied for the stems
and
markers. See PLOT for possibilities.
stem(AX,...) plots into axes with handle AX. Use GCA to get the
handle to the current axes or to create one if none exist.
H = stem(...) returns a vector of stemseries handles in H, one
handle
per column of data in Y.
(c) Del script propuesto en el numeral 2(a) se obtiene como resultado la gura 1. Donde se
Figura 1:
puede observar que la graca esta en funcion de la posici on de cada valor del vector sen.
(d) De la informacion obtenida para la funci on stem, se puede ver que para completar la
2
gr aca es necesario insertar un vector con los valores que generan ese resultado en la
funci on seno. Para esto se modica el script de la siguiente forma:
1 clc;
2 clear all;
3 close all;
4 n=-10:19;
5 sen = sin(n/2 + 10 );
6 stem(n,sen);
7 xlabel ('muestras n' );
8 ylabel ('funcion seno (n)');
Como resultado de este script se obtiene la gura 2, donde se aprecia la funci on seno en
funci on de n, respecto al valor de n.
Figura 2:
3. Ejecutando un Script
(a) Se crea un script en MATLAB con el siguiente c odigo:
1 clear all;
2 m = 50; % Cantidad de muestras
3 frec = 40; % frecuencia de la senal en Hz
3
4 Tsample = 3/frec ; % periodo de muestreo en segundos
5 n= -(m-1)/2: (m-1)/2; % instantes de muestreo
6 nT= n
*
Tsample;
7 y=sin(2
*
pi
*
frec
*
nT);
8 plot(nT, y)
9 title('Senal Discreta');
10 xlabel ( 'nT')
11 ylabel ( 'Magnitud')
Como resultado de este script se obtiene la gura 3
Figura 3:
(b) la gr aca anterior se aprecia que los valores gracados son muy peque nos, del orden de
x10
14
, lo cual se puede interpretar como un error en el calculo n umero del seno, esto se
debe a que:
y = sin (2f
0
n
t
)
f
0
= 40; T
sample
=
3
f
0
; n
t
= nT
sample
=
3n
f
0
y = sin

2f
0
3n
f
0

y = sin (6n)
Ya que n toma valores enteros, el resultado la funcion seno es igual a cero ya que
sin(n) = 0, esto es debido a que el tiempo de muestreo esta dado por T
sample
=
3
f
0
= 3T,
por tanto estamos tomando como tiempo de muestreo un m ultiplo del periodo de la onda,
gracando siempre el mismo punto, en este caso el 0. Por otra parte la funci on plot hace
una gr aca uniendo los puntos de la funci on con una linea recta, la cual no reeja clara-
mente el comportamiento de la se nal. Si cambiamos el tiempo de muestreo, como indica
4
la gua, a T
sample
=
0,2
f
0
, se alcanza a tomar 5 muestreos por periodo de la onda, logrando
una mejor gr aca. El script se cambia de la siguiente manera, y d a como resultado la
gura 4. La funci on plot no deja ver claramente el comportamiento de la se nal.
1 clear all;
2 m=50; % Cantidad de muestras
3 frec=40; % frecuencia de la senal en Hz
4 Tsample= 0.2/frec ; % periodo de muestreo en segundos
5 n= -(m-1)/2: (m-1)/2; % instantes de muestreo
6 nT= n
*
Tsample;
7 y=sin(2
*
pi
*
frec
*
nT);
8 plot(nT, y)
9 title('Senal Discreta');
10 xlabel ( 'nT')
11 ylabel ( 'Magnitud')
Figura 4:
(c) Al cambiar el comando plot por el comando stem, apreciamos una la diferencia de
resultados, en las guras 5 y 6 se pueden comparar las gracas resultantes con los scripts
del punto a y b
5
Figura 5: Con Script a
Figura 6: Con script b
De estos resultados se aprecia m as f acilmente el comportamiento de la se nal, en ambos
casos se ve el comportamiento peri odico. Si se disminuye el tiempo de muestreo de forma
que se tomen mas muestras por periodo, por ejemplo T
sample
=
0,1
f
0
, la gr aca de la se nal
mejora considerablemente, como se ve en la gura 7.
6
Figura 7:
Se puede calcular el periodo de la funcion continua ya que esta est a dada por la ecuaci on
y = sin (2f
0
t
n
), como se demostr o anteriormente, se puede proceder de la siguiente
forma:
y = sin (2f
0
t
n
) = cos (2f
0
t
n

/
2
)
Esta forma se adapta a la forma de una se nal sinosoidal discreta y = Acos (
0
+ ), ahora
se procede a comprobar si se trata de una se nal periodica, la cual tiene que cumplir la
regla:

0
N = 2r
Donde N y r, deben ser n umeros enteros.

0
= 2f
0
; f
0
= 40 80N = 2r 40N = r
Por tanto para todo N entero existira un valor r entero tambien, por tanto es una se nal
periodica, con un periodo dado por:
T =
2

0
=
2
80
=
1
40
seg
(d) Se nal Sinc denida como:
sinc (n) =

wc

n = 0
wc

sen(wcn)
wcn
n = 0
7
Se propone un script para evaluar esta funci on en m+1 muestras, el codigo es el siguiente:
1 % Calcula 2m+1 muestras de la funcion sin(2
*
pi
*
fl
*
t)/(pi
*
t)
2 % para n=-m : m (es decir, centrado alrededor del origen).
3 % fc :Frecuencia de corte [Hz] asociada a un filtro paso bajo
4 % :normalizada entre 0 y 1 respecto a la frecuencia de ...
muestreo, por lo tanto la
5 % :frecuencia maxima permitida es fc=0.5.
6 % x :salida, muestras de la funcion sinc
7
8 clear all;
9 m=50;
10 fc=0.25;
11 wc=fc
*
2
*
pi;
12 n=(-m:m); %2m+1 instantes de muestreo centrado alrededor de cero
13 xn=sin(wc
*
n);
14 xd=pi
*
n;
15 x(1:m)= xn(1:m)./ xd(1:m) ;
16 x(m+1)=2
*
fc ;
17 x(m+2:2
*
m+1)= xn(m+2:2
*
m+1)./ xd(m+2:2
*
m+1) ;
18 % graficar senal
19 figure ;
20 stem(n, x);
21 title( strcat('Generacion de la Senal Sinc -- fc= ', num2str(fc) ) );
22 xlabel ('Instantes n');
23 ylabel ('Senal Sinc');
De este c odigo se genera la gr aca que se encuentra en la gura 8, cuando se altera el
valor de m a 5 y 150 se obtienen las gr acas de las guras 9 y 10, respectivamente, se
aprecia que el valor de m solo altera el tama no del muestreo para la funcion.
8
Figura 8:
Figura 9:
9
Figura 10:
(e) Siguiendo las indicaciones del taller, corremos el c odigo variando los valores de fc a
0.1 y 0.5, para un valor de m de 50, los resultados se aprecian en las guras 11 y 12
respectivamente, en estas gracas se puede apreciar que al tomar valores cercanos a cero
se ve una gr aca m as arm onica, donde las amplitudes son m as bajas pero tambien mas
distribuidas, caso contrario de lo que pasa con el valor de 0.5, donde la amplitud m axima
es 1 pero para n = 0 toma valores de cero. Cuando se toma un valor de fc mayores a
0.5 el valor m aximo de la funci on pasa la unidad, por tanto no es unitaria.
10
Figura 11:
Figura 12:
(f) Funcion escal on en esta parte del taller se pide crear un script que graque la funcion
escal on, la cual depende de par ametros como:
A que representa la amplitud del escalon.
n
0
que representa el instante n donde empieza el escal on.
11
d que representa la duraci on del escal on.
el script desarrollado se muestra a continuaci on:
1 % Calcula 2m+1 muestras de la funcion escalon
2 % para n=-m : m (es decir, centrado alrededor del origen).
3 % x es la respuesta de la senal al instante n
4 clear all;
5 close all;
6 m=50;
7 n=(-m:m); %2m+1 instantes de muestreo centrado alrededor de cero
8 A=0.7; %Amplitud funcion escalon
9 n0=0; %instante n donde empieza la senal
10 d=12; %duracion de la funcion escalon.
11 x(1:m+n0)=0;
12 x(m+n0+1:m+n0+d)=A;
13 x(m+n0+d+1:2
*
m+1)=0;
14 % graficar senal
15 figure ;
16 stem(n, x);
17 title( strcat('Funcion escalon') );
18 xlabel ('Instantes n');
19 ylabel ('Senal escalon');
y da por resultado la graca que aparece en la gura 13.
Figura 13:
(g) En las gracas que aparecen en las guras 14 y 15, se aprecia la respuesta de la funci on
escal on cambiando los par ametros de amplitud, duraci on y desplazamiento.
12
Figura 14: A=0.2; n0=10; d=7
Figura 15: A=1; n0=-5; d=20
(h) Se nal rampa, para esta se nal se hizo el siguiente script donde los valores denidos por
el usuario dependen de par ametros como: el corte de la funci on con el eje n
0
, la duraci on
de la se nald, y la pendiente de la se nal p. Por otra parte la gr aca generada por el script
se encuentra en la gura
13
1 % Calcula 2m+1 muestras de la funcion rampa
2 % para n=-m : m (es decir, centrado alrededor del origen).
3 % x es la respuesta de la senal al instante n
4 clear all;
5 close all;
6 m=50;
7 p=1; %pendiente de la senal
8 n=(-m:m); %2m+1 instantes de muestreo centrado alrededor de cero
9 n0=8; %instante n donde la senal toma valor de cero
10 d=21; %duracion de la senal rampa.
11 k=m+n0-fix(d/2); %donde empieza la senal rampa
12 x(1:k)=0;
13 x(k+1:k+d)=p
*
(n(k+1:k+d)-n0);
14 x(k+d+1:2
*
m+1)=0;
15 % graficar senal
16 figure ;
17 stem(n, x);
18 title( strcat('Funcion rampa') );
19 xlabel ('Instantes n');
20 ylabel ('Senal rampa');
Figura 16: p=1; n0=8; d=21
(i) Variando los par ametros anteriormente nombrados, se consiguen las gracas mostradas
en las guras y .
14
Figura 17: p=0.25; n0=5; d=12
Figura 18: p=0.75; n0=-5; d=30
(j) Funcion exponencial (a
n
, para a real), para esta funci on se desarroll o el siguiente
script, donde los par ametros de evaluacion son, la base de la funcion, la duracion y el
inicio de ella.
15
1 % Calcula 2m+1 muestras de la funcion exponencial
2 % para n=-m : m (es decir, centrado alrededor del origen).
3 % x es la respuesta de la senal al instante n
4 clear all;
5 close all;
6 m=50;
7 n=(-m:m); %2m+1 instantes de muestreo centrado alrededor de cero
8 n0=2; %instante n donde la senal empieza a tomar valores
9 d=10; %duracion de la senal exponencial.
10 a=1.1; %valor de la base
11 k=m+n0; %donde terminan los valores ceros
12 x(1:k)=0;
13 x(k+1:k+d)=a.(n(k+1:k+d));
14 x(k+d+1:2
*
m+1)=0;
15 % graficar senal
16 figure ;
17 stem(n, x);
18 title( strcat('Funcion exponencial') );
19 xlabel ('Instantes n');
20 ylabel ('Senal exponencial');
De este script se obtiene la gr aca de la gura 19.
Figura 19: a=1.1; n0=2; d=10
(k) Variando los valores de la base, la duracion y el inicio de la se nal se obtienen las guras
20 y 21.
16
Figura 20: a=-1.1; n0=-2; d=8
Figura 21: a=0.5; n0=-1; d=20
(l) Funcion exponencial ((a + j b)
n
) se realiza un script para el calculo de la se nal
exponencial de base compleja, el codigo se presenta a continuaci on y las gracas producto
de este c odigo aparecen en las gura 22 y 23.
1 % x es la respuesta de la senal al instante n
17
2 clear all;
3 close all;
4 n0=-1; %n inicial
5 d=15; %duracion de la senal
6 n=(n0:n0+d-1); %vector n
7 a=0.5+1.1i; %valor de la base compleja
8 x(1:d)=a.(n(1:d));
9 % graficar senal
10 figure ;
11 stem(n, real(x));
12 title( strcat('Funcion exponencial parte real') );
13 xlabel ('Instantes n');
14 ylabel ('Senal exponencial real');
15 figure ;
16 stem(n, imag(x),'r');
17 title( strcat('Funcion exponencial parte imaginaria') );
18 xlabel ('Instantes n');
19 ylabel ('Senal exponencial imaginaria');
Figura 22: a=0.5+1.1i; n0=-1; d=15 (Parte real)
18
Figura 23: a=0.5+1.1i; n0=-1; d=15 (Parte imaginaria)
(m) Alterando los valores de la base, duracion y desplazamiento se obtienen las gr acas de
las guras 24,25,26 y 27.
Figura 24: a=-0.5+1.1i; n0=2; d=10 (Parte real)
19
Figura 25: a=-0.5+1.1i; n0=2; d=10 (Parte imaginaria)
Figura 26: a=1-0.8i; n0=1; d=13 (Parte real)
20
Figura 27: a=1-0.8i; n0=1; d=13 (Parte imaginaria)
4. Convoluci on
(a) En la gua se indica hacer un script para hacer la convoluci on entre dos se nales dadas
por x
n
y h
n
, y como resultado dando la se nal y
n
, a continuaci on se comparte el codigo
generado y las gr acas que genera se aprecian en la gura
1 close all
2 clear all
3 x=[1,2,3,2,1];
4 h=[1,2,-1,-2];
5 xno=5;hno=3;
6 m=length(x); %tamano senal x
7 n=length(h); %tamano senal h
8 nx=(-xno+1:m-xno); %vector n para x
9 nh=(-hno+1:n-hno); %vector n para h
10 yno=-hno-xno+2; %inicio vector n para y
11 ny=(yno:m+n-2+yno);%vector n para y
12 X=[x,zeros(1,n)]; %lleva los vectores al mismo tamano
13 H=[h,zeros(1,m)];
14 for i=1:n+m-1 %variacion de n
15 y(i)=0;
16 for j=1:m %variacion de k
17 if(i-j+1>0)
18 y(i)=y(i)+X(j)
*
H(i-j+1); %acumula x[k]
*
h[n-k]
19 else
20 end
21 end
22 end
23 y %muestra la convolucion en el workspace
21
24 %% grafica las senales y su convolucion
25 subplot(2,2,1)
26 stem(ny,y,'m');
27 ylabel('Y[n]');
28 xlabel('n');
29 title('Convolucion de x[n] y h[n]');
30 grid on
31 subplot(2,2,2)
32 stem(nx,x,'r');
33 ylabel('x[n]');
34 xlabel('n');
35 grid on
36 title('Senal x[n]');
37 subplot(2,2,3)
38 stem(nh,h);
39 ylabel('h[n]');
40 xlabel('n');
41 title('Senal h[n]');
42 grid on
Figura 28:
La convolucion como operaci on entre dos se nales discretas, en un barrido de productos
en todos los posibles escenarios en los que se puedan encontrar estas, por tanto para que
se genere alg un resultado deben compartir al menos un punto, por tanto la longitud de
22
la convoluci on resultante se ve reducida en 1 de la suma de las dos longitudes de las
se nales a convolucionar: L
y
= (m+n 1) donde L
y
es la longitud del vector resultante,
y donde m y n son las longitudes de las se nales entrantes.
(b) En este punto la gua pide evaluar la convoluci on entre distintas se nales, para lo cual
se transforma el script anterior en una funci on, que como datos de entrada requiere x
(vector x), h (vector h), xno (posici on del cero en el vector x) y,hno (posicion del cero en
el vector h). Las gr acas resultantes se muestran a continuacion (el n umero con sombrero
en el vector es el cero) en las guras 29, 30, 31, 32, y 33.
Figura 29: h = [

1, 2, 3, 2, 1],x = [

1, 2, 1, 2]
23
Figura 30: h = [

1, 2, 3, 2, 1],x = [1,

2, 1, 2]
Figura 31: h = [1,

2, 1, 2],x = [

1, 2, 3, 2, 1]
24
Figura 32: h = [

1, 2, 3, 2, 1],x = [1,

2, 2, 2];
Figura 33: h = [

1, 2, 3, 2, 1],x = [1,5,

2, 2, 1];
(c) Al comparar los resultados se conrma la propiedad conmutativa de la convolucion,
adem as del desplazamiento del cero de la funci on nal y
n
cuando se altera la posici on del
25
cero de las se nales, y al ingresar valores dentro de los vectores mas negativos o positivos
se logra aumentar las se nal resultante en la zona negativa o positiva, respectivamente.
(d) el script desarrollado para llevar a cabo el c alculo de la convoluci on entre la funcion seno
discreta dada en el numeral 3(a), y los sistemas del a y c del item 4(b), con las diferentes
frecuencias dadas en la gua.
1 clear all
2 close all
3 m=300; % Cantidad de muestras
4 frec=1000; % frecuencia de la senal en Hz
5 fcm=300000; % frecuencia de muestreo
6 Tsample= 1/fcm ; % periodo de muestreo en segundos
7 n= -m:m; % instantes de muestreo
8 nT= n
*
Tsample;
9 x=sin(2
*
pi
*
frec
*
nT);
10 h=[1,2,3,2,1]; %senal h
11 xno=m+1; %cero de la funcion seno
12 hno=1; %cero de h
13 funmiconv(x,h,xno,hno) %evaluacion mediante la funcion creada en 4b
Como resultado nos queda para las diferentes frecuencias y se nales h los gracos de las
guras 34, 35, 36, 37, 38, 39, 40, y 41
Figura 34: h = [

1, 2, 3, 2, 1],Frec = 1KHz,m = 300


26
Figura 35: h = [

1, 2, 3, 2, 1],Frec = 10KHz,m = 30
Figura 36: h = [

1, 2, 3, 2, 1],Frec = 50KHz,m = 6
27
Figura 37: h = [

1, 2, 3, 2, 1],Frec = 100KHz,m = 3
Figura 38: h = [1, 2,

1, 2],Frec = 1KHz,m = 300
28
Figura 39: h = [1, 2,

1, 2],Frec = 10KHz,m = 30
Figura 40: h = [1, 2,

1, 2],Frec = 50KHz,m = 6
29
Figura 41: h = [1, 2,

1, 2],Frec = 100KHz,m = 3
(e) Funci on deconv: Esta funcion recupera uno de los vectores implicados en una convolu-
ci on, partiendo de su resultado y uno de los vectores que particip o en la convolucion, para
este numeral se debe usar para recuperar los vectores x
n
del numeral 4(b), partiendo de
h
n
y su respuesta y
n
.
De 4(b) se tiene:
para a x
n
= [

1, 2, 1, 2], h
n
= [

1, 2, 3, 2, 1], y
n
= [

1, 4, 6, 4, 2, 6, 5, 2]
para b x
n
= [1,

2, 1, 2], h
n
= [

1, 2, 3, 2, 1], y
n
= [1,

4, 6, 4, 2, 6, 5, 2]
para c x
n
= [

1, 2, 3, 2, 1], h
n
= [

1, 2, 1, 2], y
n
= [1,

4, 6, 4, 2, 6, 5, 2]
para d x
n
= [1,

2, 2, 2], h
n
= [

1, 2, 3, 2, 1], y
n
= [1,

4, 5, 2, 5, 8, 6, 2]
para e x
n
= [

1,5, 2, 2, 1], h
n
= [

1, 2, 3, 2, 1], y
n
= [1,5,

5, 6,5, 4, 2,5, 5, 4, 1]
como se puede apreciar en el c odigo siguiente, se calcul o el valor de x
n
, para cada caso.
1 >> [xn12,r12]=deconv([1,4,6,4,-2,-6,-5,-2],[1,2,3,2,1])
2
3 xn12 =
4
5 1 2 -1 -2
6
7
8 r12 =
9
10 0 0 0 0 0 0 0 0
11
30
12 >> [xn3,r3]=deconv([1,4,6,4,-2,-6,-5,-2],[1,2,-1,-2])
13
14 xn3 =
15
16 1 2 3 2 1
17
18
19 r3 =
20
21 0 0 0 0 0 0 0 0
22
23 >> [xn4,r4]=deconv([1,4,5,2,-5,-8,-6,-2],[1,2,3,2,1])
24
25 xn4 =
26
27 1 2 -2 -2
28
29
30 r4 =
31
32 0 0 0 0 0 0 0 0
33
34 >> [xn5,r5]=deconv([1.5,5,6.5,4,-2.5,-5,-4,-1],[1,2,3,2,1])
35
36 xn5 =
37
38 1.5000 2.0000 -2.0000 -1.0000
39
40
41 r5 =
42
43 0 0 0 0 0 0 0 0
5. INFORME
Con el presente informe se busca demostrar la participaci on activa en el desarrollo del taller
propuesto, las concluciones y observaciones est an distribuidas a lo largo de la realizaci on de
trabajo, adicionalmente a nado la observaci on que todos los objetivos planteados son cumpli-
dos al realizar el taller. Se reforzaron diferentes aspectos de la materia como lo son el uso de
herramientas computacionales para el an alisis de se nales discretas, el planteamiento de varias
funciones b asicas en forma discreta y el refuerzo en el uso de la convolucion como operaci on
entre se nales.
31

Vous aimerez peut-être aussi