You are on page 1of 25

PRACTICA # 2

ASIGNATURA: PROCESAMIENTO DIGITAL DE SEALES


TIEMPO PLANIFICADO EN EL SILABO: 6 HORAS
TIEMPO DE LA PRCTICA : 4 horas
NUMERO DE ESTUDIANTES POR GRUPO: Practica individual
De:

DANNY ARMIJOS

Para:
* Ing. Diego Orellana

1. TEMA:
SISTEMAS Y SEALES DE TIEMPO DISCREITO

2. OBJETIVOS:

Aprender a generar funciones para aplicar a programas de anlisis de seales


discretas como son las funciones sigmult, impseq, stepseq, sigad, sigshift, sigfold,
evenodd, conv_m.

Aprender sobre Secuencia exponencial, la

exponencial de valor complejo,

Secuencia Sinosoidal, Secuencia peridica, la adicin y multiplicacin de seales


discretas

Aprender a encontrar la convolucin de una seal

3. Materiales, Herramientas, Equipos y reactivos.

Materiales , Reactivos y Sofware

Programa Matlab 2014

4. Equipos y Reactivos

Equipos y herramientas
Una Computadora con capacidad de corer Matlab
5. IMARCO TERICO:
Seales y sistemas de tiempo discreto
Comenzamos con los conceptos de seales y sistemas en tiempo discreto. Se introducen
una serie de tipos importantes de seales y sus operaciones. Los sistemas lineales y
invariantes por desplazamiento se discuten sobre todo porque son ms fciles de analizar
e implementar. La convolucin y las representaciones de las ecuaciones de diferencia
reciben una atencin especial debido a su importancia en el procesamiento de seal
pg. 1

digital y en MATLAB. El nfasis en esta prctica est en las representaciones e


implementacin de seales y sistemas usando MATLAB.
Las seales se clasifican en general en seales analgicas y discretas. Una seal
analgica ser denotada por xa (t), en la cual la variable t puede representar cualquier
cantidad fsica, pero asumiremos que representa el tiempo en segundos. Una seal
discreta ser denotada por x (n), en la que la variable n es inter-valuable y representa
instancias discretas en el tiempo. Por lo tanto, tambin se denomina una seal de tiempo
discreto, que es una secuencia numrica y se indicar mediante una de las siguientes
anotaciones:
X (n) = {x (n)} = {. . . , X (-1), x (0), x (1),. . .}

6.

ACTIVIDADES DESARROLLAS:
6.1 Seales en Tiempo Discreto
6.1.1

Tipos de secuencias

Se Utiliza varias secuencias elementales en el procesamiento de seal digital para


el anlisis
Los propsitos. Siguen sus definiciones y representaciones de MATLAB.

Secuencia de muestras unitarias:

En MATLAB la funcin ceros (1, N) genera un vector de fila de N ceros, que se


pueden utilizar para implementar (n) en un intervalo finito. Sin embargo, la
relacin lgica n == 0 es una forma elegante de implementar (n).
Por ejemplo, para

Sobre el intervalo n1 n0 n2, utilizaremos la siguiente funcin de Matlab que se


observa en el cuadro 1.

function [x,n] = impseq(n0,n1,n2)


%Generates x(n) = dirac(n-n0);% n1 <= n <= n2
% ---------------------------------------------%[x,n] = impseq(n0,n1,n2)
n = [n1:n2];
x = [(n-n0)==0];
Cuadro. 1 funcin que representa d(n-n0) impseq

Secuencia de pasos unitarios:

En MATLAB la funcin ones (1, N) genera un vector de filas de N ones. Puede


usarse para generar u (n) en un intervalo finito. Una vez ms, un enfoque elegante
es utilizar la relacin lgica n> = 0. Para implementar

Sobre el intervalo n1 n0 n2, utilizaremos la siguiente funcin como se


observa en el cuadro n2.

function [x,n] = stepseq(n0,n1,n2)


% Generates x(n) = u(n-n0); n1 <= n <= n2
% -----------------------------------------% [x,n] = stepseq(n0,n1,n2)
%
n = [n1:n2]; x = [(n-n0) >= 0];
Cuadro. 2 funcion para una secuencia de pasos unitarios u(n-no)

Secuencia exponencial de valor real:


x(n) = an, n; a R

Secuencia exponencial. Por ejemplo, para generar x (n) = (0.9) n, 0 N 10,


necesitaremos la secuencia de comandos de MATLAB que se observa en el
cuadro 3 cuyo resultado se observa en la figura 1.

n = [0:8]; % representa un vector


x = (0.9).^n; % operacion de un numero escalar elevado a un
vector
disp('# escalar 0.9 elvado a vector n= [0:8]');x % muestra
mensaje en el command window
Cuadro. 3 Forma de ingresar los operadores para realizar una secuencia
exponencial

Figura. 1 Resultado de la operacin del cuadro 3

Secuencia exponencial de valor complejo:

Donde produce una atenuacin (si <0) o amplificacin (si> 0) y 0 es la


frecuencia en radianes. Se utiliza una funcin exp de MATLAB para generar
secuencias exponenciales. Por ejemplo, para generar x (n) = exp [(2 + j3) n],
0n10, necesitaremos el siguiente script de MATLAB como se observa en el
cuadro 4, cuyo resultado se puede ver en la figura 2.

n = [0:4]; % representa un vector


x = exp((2+3j)*n); %operacion de la exponencial de un numero
complejo por un vector
disp('resultado de la exp((2+3j)*[0:4]');x % muestra mensaje
en el command window
Cuadro. 4 Forma de ingresar los operadores para realizar una secuencia
exponencial

Figura. 2 Resultado de la operacin del cuadro numero 4

Secuencia Sinosoidal

Donde A es una amplitud y 0 es la fase en radianes. Una funcin de MATLAB cos


(o sin) se usa para generar secuencias sinusoidales. Por ejemplo, para generar x
(n) = 3cos (0.1n + / 3) + 2 sen (0.5n), 0 n 10, necesitaremos el siguiente

script de MATLAB que se observa en el cuadro 5 cuyo resultado de se representa


en la figura 3.

n = [0:8]; % representa un vector


x = 3*cos(0.1*pi*n+pi/3) + 2*sin(0.5*pi*n);% operacin con
seno y coseno
disp('resultado de 3*cos(0.1*pi*n+pi/3) + 2*sin(0.5*pi*n');x
% muestra mensaje en el command window
Cuadro. 5 Operaciones con seno y coseno de la funcin x

Figura. 3 Resultado del cuadro 5

Secuencia peridica:

Una secuencia x (n) es peridica si x (n) = x (n + N), n. El entero N ms pequeo


que satisface esta relacin se llama el perodo fundamental. Utilizaremos ~x (n)
para denotar una secuencia peridica. Para generar P perodos de ~x (n) desde
un periodo {x (n), 0 n N-1}, podemos copiar x (n) P veces esto se representa
en el cuadro 6.
xtilde = [x,x,...,x];
Cuadro. 6 Representacin de una secuencia peridica
Pero un enfoque elegante es utilizar las poderosas capacidades de indexacin de
MATLAB. Primero generamos una matriz que contiene P filas de valores de x (n).
Entonces podemos concatenar las filas de P en un vector de la fila larga usando la
construccin (:). Sin embargo, esta construccin slo funciona en columnas. Por lo
tanto, tendremos que usar el operador de transposicin de matriz 'para
proporcionar el mismo efecto en las filas.
xtilde = x' * ones(1,P); % P columnas de x; X es un vector de fila
xtilde = xtilde(:); % Vector columna larga
xtilde = xtilde'; % Vector de fila larga

Cuadro. 7 Representacin de una secuencia peridica en Matlab

6.1.2

Operaciones en secuencias

1. Adicin de seal
Se implementa en MATLAB por el operador aritmtico "+". Sin embargo, las
longitudes de x1 (n) y x2 (n) deben ser las mismas. Si las secuencias son de
longitudes desiguales, o si las posiciones de la muestra son diferentes para
secuencias de igual longitud, entonces no podemos utilizar directamente el
operador +. Tenemos que aumentar primero x1 (n) y x2 (n) para que tengan el
mismo vector de posicin n (y por lo tanto la misma longitud). Esto requiere una
cuidadosa atencin
A las operaciones de indexacin de MATLAB. En particular, el funcionamiento
lgico de la interseccin "&", las operaciones relacionales como "<=" y "==", y la
funcin find son necesarios para hacer x1 (n) y x2 (n) de longitud igual. La
siguiente funcin, denominada funcin sigadd, demuestra estas operaciones esto
se muestra en el cuadro8. Su uso se ilustra en el ejemplo 2.2 que se desarrollar
ms adelante
function [y,n] = sigadd(x1,n1,x2,n2)
% Implementa y (n) = x1 (n) + x2 (n)
unesdoc.unesco.org unesdoc.unesco.org
% [Y, n] = sigadd (x1, n1, x2, n2)
% Y = secuencia suma sobre n, que incluye n1 y n2
% X1 = primera secuencia sobre n1
% X2 = segunda secuencia sobre n2 (n2 puede ser diferente de
%
n = min(min(n1),min(n2)):max(max(n1),max(n2)); % duracin de
y1 = zeros(1,length(n)); y2 = y1; % inicializacin
y1(find((n>=min(n1))&(n<=max(n1))==1))=x1; % x1 con duracin
y2(find((n>=min(n2))&(n<=max(n2))==1))=x2; % x2 con duracin
y = y1+y2; % secuencia de adicin

n1)
y(n)
de
de

y
y

Cuadro. 8 Desarrollo de la funcin sigadd que permite realizar la


adiccin igualando
2. Multiplicacion
de seal las longitudes de los vectores
Esta es una multiplicacin de muestra por muestra (o "punto")) dada por

Se implementa en MATLAB por el operador de matriz. Una vez ms, las


restricciones similares se aplican para el operador * como para el operador +.
Por lo tanto, hemos desarrollado la funcin sigmult que se observa en el
cuadro 9, que es similar a la funcin sigadd. Su uso se ilustra en el ejemplo
2.2.

function [y,n] = sigmult(x1,n1,x2,n2)


% Implementa y (n) = x1 (n) * x2 (n)
% [Y, n] = sigmult (x1, n1, x2, n2)
% Y = secuencia del producto sobre n, que incluye n1 y n2
% X1 = primera secuencia sobre n1
% X2 = segunda secuencia sobre n2 (n2 puede ser diferente de n1)
%
n = min(min(n1),min(n2)):max(max(n1),max(n2)); % duration of y(n)
y1 = zeros(1,length(n)); y2 = y1; %
y1(find((n>=min(n1))&(n<=max(n1))==1))=x1; % x1 with duration of y
y2(find((n>=min(n2))&(n<=max(n2))==1))=x2; % x2 with duration of y
y = y1 .* y2; % sequence multiplication

Cuadro. 9 Desarrollo de la funcin sigmult que permite realizar la


multiplicacin de vectores igualando las longitudes.
3. Shifting:
En esta operacin, cada muestra de x (n) se desplaza en una cantidad k para
obtener una secuencia desplazada y (n).

Si dejamos que m = n-k, entonces n = m + k y la operacin anterior es dada


por

Por lo tanto, esta operacin no tiene efecto sobre el vector x, pero el vector n
cambia aadiendo k a cada elemento. Esto se muestra en la funcin
sigshift.que se observa en el cuadro 10.
function [y,n] = sigshift(x,m,k)
% implements y(n) = x(n-k)
% ------------------------% [y,n] = sigshift(x,m,k)
%
n = m+k; y = x;
Cuadro. 10 Representacin de la funcin sigshift que lo que hace es
desplaza una seal
4. Folding (Plegado)
En esta operacin cada muestra de x (n) es volteada alrededor de n = 0 para
obtener una secuencia plegada y (n).
En MATLAB esta operacin se implementa mediante la funcin fliplr (x) para
los valores de muestra y por la funcin -fliplr (n) para las posiciones de
muestra como se muestra en la funcin sigfold la cual se puede observar en
el cuadro 11.

function [y,n] = sigfold(x,n)


% implements y(n) = x(-n)
% ----------------------% [y,n] = sigfold(x,n)
%
y = fliplr(x); n = -fliplr(n);
Cuadro. 11 Representacin de la seal sigfold que lo que hace es
encontrar la reflejada de una seal.
5. Energa de seal
La energa de una secuencia x (n) viene dada por

Donde el exponente * denota la operacin de conjugacin compleja.1 La


energa de una secuencia de duracin finita x (n) se puede calcular en
MATLAB usando el script que se observa en el cuadro 12.
Ex = sum(x .* conj(x)); % one approach
Ex = sum(abs(x) .^ 2); % another approach
Cuadro. 12 Script que permite encontrar la energa de una funcion x(n)
6. A continuacin desde el cuadro 12 al 15 se representan ejemplos de
la utilizacin de las funciones

creadas previamente en diversos

ejemplos
6.1 Ejemplo 2.1

Generar y trazar cada una de las siguientes secuencias en el intervalo


indicado.
a. x(n) = 2(n + 2) (n 4), 5 n 5.
b. x(n) = n[u(n)u(n10)]+10e0.3(n10)[u(n10)u(n20)], 0 n 20.
c. x(n) = cos(0.04n) + 0.2w(n), 0 n 50, where w(n) is a Gaussian
random sequence with zero mean and unit variance.
d. x(n) = {..., 5, 4, 3, 2, 1, 5, 4, 3, 2, 1, 5, 4, 3, 2, 1, ...}; 10 n 9.
La resolucion de este ejercicio de todos los literales lo podemos observar
en el cuadro 13 donde esta el script y la representacioin de las funciones
resultantes se observa en la figura 4 a), b), c) y d).

%% Ejemplo 2.1
%Generar y trazar cada una de las siguientes secuencias en el
intervalo indicado.
%%%%a. x(n) = 2(n + 2) (n 4), 5 n 5.
disp('ejercicio a')
figure(1);
n = [-5:5]; %vector
x = 2*impseq(-2,-5,5) - impseq(4,-5,5); % uso de la funcion impseq
creada anteriormente
stem(n,x); title('Sequence in Problem 2.1a')%permite graficar un
conjunto de nmeros discretos
xlabel('n'); ylabel('x(n)');% etiqueta eje x e y
pause;% para programa para contiar hacer enter
%b. x(n) = n [u(n) ? u(n ? 10)]+10e?0.3(n?10) [u(n ? 10) ? u(n ?
20)], 0 ? n ? 20.
disp('ejercicio b')
figure(2);
n = [0:20];
x1 = n.*(stepseq(0,0,20)-stepseq(10,0,20));% uso de la funcion
stepseq creada anteriormente
x2 = 10*exp(-0.3*(n-10)).*(stepseq(10,0,20)-stepseq(20,0,20));
x = x1+x2;
subplot(2,2,3); stem(n,x); title('Sequence in Problem 2.1b')
xlabel('n');
ylabel('x(n)');
pause;
%% c. x(n) = cos(0.04pin) + 0.2w(n), 0 ? n ? 50.
disp('ejercicio c')
figure(3);
n = [0:50];
x = cos(0.04*pi*n)+0.2*randn(size(n));
subplot(2,2,2);
stem(n,x); title('Sequence in Problem 2.1c')
xlabel('n'); ylabel('x(n)');
pause;
%%x(n) = {..., 5, 4, 3, 2, 1, 5, 4, 3, 2, 1, 5, 4, 3, 2, 1, ...}; ?10 ?
n ? 9.
disp('ejercicio d')
figure(4);
n = [-10:9];
x = [5,4,3,2,1];
xtilde = x' * ones(1,4); xtilde = (xtilde(:))';
subplot(2,2,4); stem(n,xtilde); title('Sequence in Problem 2.1d')
xlabel('n'); ylabel('xtilde(n)');

Cuadro. 13 Resolucin del ejercicio 2.1 a), b), c) y d)


7

a)

b)

c)

d)
Figura. 4 a), b), c) y d) Respuestas del ejercicio 2.1
6.2 Ejemplo 2.2

Sea x (n) = {1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1}.


Determine y trace los siguientes Secuencias.
n = -2:10;
x = [1:7,6:-1:1];
a) x1(n) = 2x(n 5) 3x(n + 4)
b) x2(n) = x(3 n) + x(n) x(n 2)
La resolucion de este ejercicio de todos los literales lo podemos observar
en el cuadro 14 donde esta el script y la representacioin de las funciones
resultantes se observa en la figura 5.
%% Ejemplo2.2
%Sea x (n) = {1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1}.
n = -2:10;
x = [1:7,6:-1:1];
%Determine y trace los siguientes Secuencias.
%%a) x1(n) = 2x(n 5) 3x(n + 4)
figure(1)
[x11,n11] = sigshift(x,n,5); [x12,n12] = sigshift(x,n,-4);
[x1,n1] = sigadd(2.*x11,n11,-3*x12,n12);
subplot(2,1,1); stem(n1,x1); title('Sequence in Example 2.2a')
xlabel('n'); ylabel('x1(n)');
%%b) x2(n) = x(3 n) + x(n) x(n 2)
[x21,n21] = sigfold(x,n); [x21,n21] = sigshift(x21,n21,3);
[x22,n22] = sigshift(x,n,2); [x22,n22] =sigmult(x,n,x22,n22);
[x2,n2] = sigadd(x21,n21,x22,n22);
subplot(2,1,2); stem(n2,x2); title('Sequence in Example 2.2b')
xlabel('n'); ylabel('x2(n)');
Cuadro. 14 Resolucin del ejemplo 2.2 aplicando funciones creadas
previamente

Figura. 5 Resultado obtenido tras correr el cdigo del cuadro 14

6.3

EJEMPLO 2.3 Generar la seal de valor complejo


x(n) = e(0.1+j0.3)n, 10 n 10
La resolucion de este ejercicio lo podemos observar en el cuadro 15
donde esta el script y la representacioin de las funciones resultantes se
observa en la figura 6.

%%EJEMPLO 2.3 Generar la seal de valor complejo


% x(n) = e(0.1+j0.3)n, 10 n 10
n = [-10:1:10];
alpha = -0.1+0.3j;
x = exp(alpha*n);
subplot(2,2,1); stem(n,real(x));title('parte real');xlabel('n')
subplot(2,2,2); stem(n,imag(x));title('parte
imaginaria');xlabel('n')
subplot(2,2,3); stem(n,abs(x));title('parte de
magnitud');xlabel('n')
subplot(2,2,4); stem(n,(180/pi)*angle(x));title('parte e
fase');xlabel('n')
Cuadro. 15 Resolucin del ejemplo 2.3 de la generacin de una seal de
valor complejo

Figura. 6 Resultado obtenido tras correr el cdigo del cuadro 15

7. Sntesis par e impar


Una secuencia de valores reales xe (n) se denomina incluso (Simtrico) si
xe(n) = xe(n)
De forma similar, una secuencia real xo (n) se llama impar (antisimtrica) si
xo(n) = xo(n)
Entonces cualquier secuencia arbitraria real x (n) se puede descomponer en sus
componentes pares e impares.
x(n) = xe(n) + xo(n)
Donde las partes par e impar son dadas por

Respectivamente. Utilizaremos esta descomposicin para estudiar las propiedades de


la transformada de Fourier. Por lo tanto, es un buen ejercicio desarrollar una funcin
MATLAB simple para descomponer una secuencia dada en sus componentes pares e
impares. Utilizando las operaciones de MATLAB discutidas hasta ahora, podemos
obtener la siguiente funcin evenodd que se observa en el cuadro 16.

function [xe, xo, m] = evenodd(x,n)


% Real signal decomposition into even and odd parts
% ------------------------------------------------% [xe, xo, m] = evenodd(x,n)
%
if any(imag(x) ~= 0)
error('x is not a real sequence')
end
m = -fliplr(n);
m1 = min([m,n]); m2 = max([m,n]); m = m1:m2;
nm = n(1)-m(1); n1 = 1:length(n);
x1 = zeros(1,length(m)); x1(n1+nm) = x; x = x1;
xe = 0.5*(x + fliplr(x)); xo = 0.5*(x - fliplr(x));
Cuadro. 16 Creacin de la funcin evenodd

8.

EJEMPLO 2.4
Sea x (n) = u (n) - u (n - 10). Descomponga x (n) en componentes pares e impares.
La resolucion de este ejercicio lo podemos observar en el cuadro 17 donde esta el
script y la representacioin de las funciones resultantes se observa en la figura 7.

%EJEMPLO 2.4 Sea x (n) = u (n) - u (n - 10).


%%Descomponga x (n) en componentes pares e impares.
n = [0:10]; x = stepseq(0,0,10)-stepseq(10,0,10);
[xe,xo,m] = evenodd(x,n);
subplot(2,2,1); stem(n,x); title('Pulso Rectangular')
xlabel('n'); ylabel('x(n)'); axis([-10,10,0,1.2])
subplot(2,2,2); stem(m,xe); title('Even Part')
xlabel('n'); ylabel('xe(n)'); axis([-10,10,0,1.2])
subplot(2,2,4);
stem(m,xo); title('')
xlabel('n'); ylabel('xe(n)');
axis([-10,10,-0.6,0.6])
Cuadro. 17 Script de la Resolucin del ejercicio 2.4

Figura. 7 Resultado obtenido tras correr el cdigo del cuadro 17


9. CONVOLUCION
Se introdujo la operacin de convolucin la ecuacin 1 para describir la respuesta de
un sistema LTI. En DSP es una operacin importante y tiene muchos otros usos que
veremos a lo largo de este libro. La convolucin se puede evaluar de muchas
maneras diferentes. Si las secuencias son funciones matemticas (de duracin finita o
infinita), entonces podemos analizar analticamente ecuacin 1

para todo n para

obtener una forma funcional de y (n).


y(n) = x(n) h(n)
9.1 EJEMPLO 2.7
Sea el impulso rectangular x (n) = u (n) - u (n - 10) del ejemplo 2.4 una
entrada a un sistema LTI con respuesta de impulso h(n) = (0.9)^n u(n).
La resolucion de este ejercicio lo podemos observar en el cuadro 18 donde esta
el script y la representacioin de las funciones resultantes se observa en la figura 8
a) y b).

%EJEMPLO 2.7 Sea el impulso rectangular x (n) = u (n) - u (n - 10)


%del ejemplo 2.4 una entrada a un sistema LTI con respuesta de impulso
%h(n) = (0.9)^n u(n)
x = [3, 11, 7, 0, -1, 4, 2]; % vector
h = [2, 3, 0, -5, 2, 1];%vector
y = conv(x, h)% convolucion
stem(y);
title('conv(x, h)')

Cuadro. 18 Scrip de resolucin del ejemplo 2.7 con la funcin conv

a)

b)
Figura. 8 Resultado obtenido tras correr el cdigo del cuadro 18

9.2

Ejemplo 2.8

Dadas las dos secuencias siguientes x(n) = [3, 11, 7,0,1, 4, 2], 3 n
3; h(n) = [2,3, 0,5, 2, 1], 1 n 4
Determine the convolution y(n) = x(n) * h(n).
La resolucion de este ejercicio

lo podemos observar en el cuadro 19

donde esta el script y la representacioin de las funciones resultantes se


observa en la figura 9 a) y b).

% Ejemplo 2.8 Dadas las dos secuencias siguientes


% x(n) = [3, 11, 7,0,1, 4, 2], 3 n 3; h(n) = [2,3, 0,5, 2,
1], 1 n 4
%determine the convolution y(n) = x(n) * h(n).
x = [3, 11, 7, 0, -1, 4, 2]; nx = [-3:3];
h = [2, 3, 0, -5, 2, 1]; nh = [-1:4];
[y,ny] = conv_m(x,nx,h,nh)
stem(y,ny)
title('conv_m(x,nx,h,nh)');
Cuadro. 19 Scrip de resolucin del ejemplo 2.7 con la funcin conv

a)

b)
Figura. 9 Resultado obtenido tras correr el cdigo del cuadro 19
10. La funcin conv no proporciona ni acepta ninguna informacin de temporizacin si las
secuencias tienen soporte arbitrario. Lo que se necesita es un punto inicial y un punto
final de y (n). Dada la duracin finita x (n) yh (n), es fcil determinar estos puntos.
Dejar
{X (n); Nxb n nxe} y {h (n); Nhb n nhe}
7

Ser dos secuencias de duracin finita. Entonces, refirindonos al ejemplo 2.8


observamos que los puntos inicial y final de y (n) son
Nyb = nxb + nhb y nye = nxe + nhe
Respectivamente. Ahora se puede disear una modificacin simple de la funcin
conv, llamada conv m, que realiza la convolucin de secuencias de soporte
arbitrarias.
La creacin de esta funcin la podemos observar en el cuadro 20 donde esta el script
function [y,ny] = conv_m(x,nx,h,nh)
% Modified convolution routine for signal processing
% -------------------------------------------------% [y,ny] = conv_m(x,nx,h,nh)
% [y,ny] = convolution result
% [x,nx] = first signal
% [h,nh] = second signal
%
nyb = nx(1)+nh(1); nye = nx(length(x)) + nh(length(h));
ny = [nyb:nye]; y = conv(x,h);

Cuadro. 20 Script de la funcin de convolucin

11.

Ejemplo 2.9

Realizar la convolucin en el Ejemplo 2.8 usando la funcin conv_m.


La resolucion de este ejercicio lo podemos observar en el cuadro 21 donde esta el
script y la representacion resultante se observa en la figura 10
%% Ejemplo 2.9 Realizar la convolucin en el Ejemplo 2.8 usando la
funcin conv m.
x = [3, 11, 7, 0, -1, 4, 2]; nx = [-3:3];
h = [2, 3, 0, -5, 2, 1]; ny = [-1:4];
[y,ny] = conv_m(x,nx,h,nh)

Cuadro. 21 Script del ejemplo 2.9

Figura. 10 Resultado obtenido tras correr el cdigo del cuadro 21

12. Ejemplo 2.10 En este ejemplo se demostrar una aplicacin de la secuencia de


correlacin cruzada. Dejar

x(n) = [3, 11, 7,0,-1, 4, 2]


Ser una secuencia de prototipos, y dejar que y (n) sea su versin corrompida y
desplazada por el ruido
y(n) = x(n - 2) + w(n)
Donde w (n) es la secuencia gaussiana con media 0 y varianza 1. alcule la
Correlacin cruzada entre y (n) y x (n).

noise sequence 1

Secuencia de ruido 1

La resolucion de este ejercicio lo podemos observar en el cuadro 22 donde esta el


script y la representacioin de las funciones resultantes se observa en la figura 11

%Ejemplo 2.10 En este ejemplo se demostrar una aplicacin de la


secuencia de correlacin cruzada. Dejar
%x(n) = [3, 11, 7,0,-1, 4, 2]
%Ser una secuencia de prototipos, y dejar que y (n) sea su versin
corrompida y desplazada por el ruido
%y(n) = x(n - 2) + w(n)
x = [3, 11, 7, 0, -1, 4, 2]; Nx = [- 3: 3]; % Seal dada x (n)
[y, ny] = sigshift (x, nx, 2); % Obtener x (n - 2)
w = randn (1, length(y)); nw = ny; % Generar w (n)
[y, ny] = sigadd (y, ny, w, nw); % Obtenemos y (n) = x (n-2) + w (n)
[x, nx] = sigfold (x, nx); % Obtener x (-n)
[rxy,nrxy] = conv_m(y,ny,x,nx); % correlacion cruzada
subplot(1,1,1), subplot(2,1,1);stem(nrxy,rxy)
axis([-5,10,-50,250]);xlabel('variable de retardo 1')
ylabel('rxy');title('Correlacion cruzada: noise sequence 1')
%
% noise sequence 2
x = [3, 11, 7, 0, -1, 4, 2]; nx=[-3:3]; % seal dada x(n)
[y,ny] = sigshift(x,nx,2); % obtener x(n-2)
w = randn(1,length(y)); nw = ny; % genera w(n)
[y,ny] = sigadd(y,ny,w,nw); % obtiene y(n) = x(n-2) + w(n)
[x,nx] = sigfold(x,nx); % obtiene x(-n)
[rxy,nrxy] = conv_m(y,ny,x,nx); % correlacion cruzada
subplot(2,1,2);stem(nrxy,rxy) % grafia en muestras
axis([-5,10,-50,250]);xlabel('variable de retardo l')
ylabel('rxy');title('Correlacion cruzada: noise sequence 2')

Cuadro. 22 Script del ejemplo 2.10

Figura. 11 Resultado obtenido tras correr el cdigo del cuadro 21

13.

Tener en cuenta que la caja de herramientas de procesamiento de seales en


MATLAB tambin proporciona una funcin llamada xcorr para los clculos de
correlacin de secuencias. En su forma ms simple como se observar en el
cuadro 23.

xcorr(x,y)% es una funcin de matlab interna de la correlacin cruzada

Cuadro. 23 funcin xcorr sirve para el clculo de correlacin de


secuencias
Calcula la correlacin cruzada entre los vectores x e y, mientras que el cuadro 24
xcorr(x)

Cuadro. 24 funcion xcorr


Calcula la auto correlacin del vector x. Genera resultados idnticos a los
obtenidos por el uso adecuado de la funcin conv_m. Sin embargo, la funcin
xcorr no puede proporcionar la informacin de temporizacin (o lag) (como se
hace por la funcin conv m), que luego debe obtenerse por otros medios.
Una funcin llamada filtro est disponible para resolver las ecuaciones de
diferencia numricamente, dados los coeficientes de las ecuaciones de entrada y
de diferencia. En su forma ms simple, esta funcin es invocada por cuadro 25
y = filter(b,a,x)

Cuadro. 25 Funcin filter

Cuando cuadro 26
b = [b0, b1, ..., bM];
a = [a0, a1, ..., aN];

Cuadro. 26 expresin de dos funciones


Para calcular y representar la respuesta al impulso, MATLAB proporciona la
funcin impz. Cuando es invocado por cuadro 27.
h = impz(b,a,n);

Cuadro. 27 Funcin impz

14.

Ejemplo 2.11

Dada la siguiente ecuacin de diferencia y(n) y(n 1) + 0.9y(n 2) = x(n); n


a. Calcular y trazar la respuesta de impulso h (n) en n = -20,. . . , 100.
b. Calcular y trazar la respuesta de paso unitario s (n) en n = -20,. . . , 100.
c. Est estable el sistema especificado por h (n)?
La resolucion de este ejercicio lo podemos observar en el cuadro 28 donde esta el
script y la representacioin de las funciones resultantes se observa en la figura 12 a) y
b).
%Ejemplo 2.11 Dada la siguiente ecuacin de diferencia
%y(n) y(n 1) + 0.9y(n 2) = x(n); n
%a. Calcular y trazar la respuesta de impulso h (n) en n = -20,. . . , 100.
%b. Calcular y trazar la respuesta de paso unitario s (n) en n = -20,. . . ,
100.
%c. Est estable el sistema especificado por h (n)?
b = [1]; a=[1, -1, 0.9];
% a)
b = [1]; a = [1, -1, 0.9]; n = [-20:120];
h = impz(b,a,n);
subplot(2,1,1); stem(n,h);
title('Impulse Response'); xlabel('n'); ylabel('h(n)')
% b)
x = stepseq(0,-20,120); s = filter(b,a,x);
subplot(2,1,2); stem(n,s)
title('Step Response'); xlabel('n'); ylabel('s(n)')
%c)Para determinar la estabilidad del sistema, tenemos que determinar h (n)
para todo n.
%Aunque no hemos descrito un mtodo para resolver la ecuacin de diferencias,
%podemos usar la grfica de la respuesta de impulso para observar que h (n)
%es prcticamente cero para n> 120. De ah que la sumatoria | h (n) | Puede
%determinarse a partir de MATLAB utilizando
sum(abs(h))
%Dado que las magnitudes de ambas races son menores que uno, el sistema es
estable.
7

Cuadro. 28 Script del ejemplo 2.11

a)

b)
Figura. 12 Resultado obtenido tras correr el cdigo del cuadro 28

15. EJEMPLO 2.12


Consideremos la convolucin dada en el Ejemplo 2.7. La secuencia de entrada es de
duracin finita x(n) = u(n) u(n 10) Mientras que la respuesta de impulso es de
duracin infinita h(n) = (0.9)n u(n) determine: y(n) = x(n) h(n).
La resolucion de este ejercicio lo podemos observar en el cuadro 29 donde esta el
script y la representacioin de las funciones resultantes se observa en la figura 13 a) y
b).

%EJEMPLO 2.12 Consideremos la convolucin dada en el Ejemplo 2.7.


%La secuencia de entrada es de duracin finita
%x(n) = u(n) ? u(n ? 10)
%Mientras que la respuesta de impulso es de duracin infinita
%Determine y(n) = x(n) ? h(n).
b = [1]; a = [1,-0.9];
n = -5:50; x = stepseq(0,-5,50) - stepseq(10,-5,50);
y = filter(b,a,x);
subplot(2,1,2); stem(n,y); title('Output sequence')
xlabel('n'); ylabel('y(n)'); axis([-5,50,-0.5,8])

Cuadro. 29 Script del ejemplo 2.11

Figura. 13 Resultado obtenido tras correr el cdigo del cuadro 29

7. DISCUSIN:
En la presente prctica se aprendi sobre el funcionamiento de algunas funciones de
Matlab como es el caso de realizar operaciones con las diversas funciones creadas
para el anlisis de seales discretas, la importancia de saber usar Matlab ya que se
puede facilitar mucho el clculo con lo que es la convolucin y correlacin haciendo
ms fcil analizar las seales discretas, la cual permite ahorrarse de realizar estos
clculos a mano ya que son muy tediosos de all la gran ventaja de utilizar el
programa que nos ahorra el tiempo de anlisis.
8. CONCLUSIN:
Matlab es una herramienta que permite realizar operaciones de anlisis tanto
matemtico como grafico que permite trabajar con funciones prescritas o generar
nuevas funciones la cual nos ahorra bastante tiempo ya que este anlisis hecho a
mano demorara muchsimo tiempo y con posibles erros humanos que no ocurre con
este software.
9. RECOMENDACIONES:
Es recomendable colocar al lado de cada funcin %%% un comentario de que realiza
esta parte del cdigo para llevar ms claro el funcionamiento de cada programa
generado en matlab.

Al momento de usar el software cerciorarse de las variables a utilizar ya que matlab


reconoce tanto maysculas como minsculas.
Cerciorarse que las longitudes de los vectores a realizarse sean compatibles o sino a
travs de funciones acoplar este vector para que sea posible realizar los diversos
clculos.
Al momento de trabajar con vectores se debe colocar un punto previo a la operacin a
utilizar ya que caso contrario el software piensa que son unidades escales y
reproducir error.
Si se desea graficar ms de una figura en un mismo programa por separado utilizar la
funcin figure(n) y al final de cada programa la funcin pause; la cual al momento de
dar enter correr con creacin de otra figura y si se desea graficar dos funciones o
ms en una figura utilizar la funcin subpot..

10. BIBLIOGRAFA
[1] J. W. Cooley and J. W. Tukey. An algorithm for the machine computation of complex
Fourier series. Mathematical Computations, 19:297301, April 1965.
[2] Vinay K. Incle & Jhon G. Proakis. Digital Signal Progrssing Using Matlab.
Northeastern University. Third edition
[3] D. Hanselman and B. Littlefield. Mastering MATLAB 7. Pearson/Prentice Hall,
Englewood Cliffs, NJ, 2005.
[4]J. G. Proakis and D. G. Manolakis. Digital Signal Processing:Principles, Algorithms and
Applications. Prentice Hall, Upper Saddle River, NJ, fourth edition, 2006.

You might also like