Sie sind auf Seite 1von 16

1

FIEE-UNI Procesamiento Digital de Seales


Laboratorio N1 Introduccin al PDS
1 Introduccin a Matlab y Simulink
Los softwares de programacin utilizados en la aplicacin de Procesamiento Digital de Sea-
les (DSP) puede clasificarse en los siguientes dos categoras siguientes:
Software de simulacin: Este software se utiliza para modelar los sistemas DSP y, por lo
tanto, es una herramienta muy valiosa para el diseo real del sistema. En este laboratorio
Matlab y Simulink son utilizados para el modelado de sistemas.
Mientras MATLAB requiere escribir los programas, Simulink es una herramienta grfica, que
tiene bloques de funciones para DSP.
Software para el control de hardware: Este software es requerido para ejecutar hard-
ware de DSP tales como el Procesador Digital de Seal (DSP). Ejemplos de este software son
las rutinas para DSP escritas en los lenguajes de programacin asembler o C.

1.1 Fundamentos de MATLAB


Por favor, probar cada uno de los comandos de abajo y familiarcese con los tipos de co-
mandos y formatos de MATLAB.

Comandos en Matlab
MATLAB basado en PC se puede abrir haciendo clic en el icono de MATLAB. El prompt de
MATLAB es ">>", lo cual indica que los comandos se deben ingresar lnea por lnea, o bien
ejecutando un programa almacenado. Un programa completo, que consta de un conjunto de
comandos, se puede almacenar en un archivo de MATLAB para el uso repetido como lo
siguiente:
Abrir un archivo con cualquier editor de texto (ya sea en MATLAB o en otro editor) y
escribir el programa.
Despus de escribir el programa, salir del programa editor despus de guardarlo como un
archivo filename.m.
Para ejecutar el programa, puede hacerse desde el editor de textos de MATLAB, o escriba el
nombre del archivo despus del prompt:

>> NombreDeArchivo

El programa se ejecutar, y los resultados y mensajes de error, si lo hay, ser mostrada en


la pantalla. Los grficos aparecern en una nueva pantalla.

Nmeros
Ejemplo: Generar los nmeros reales z1 = 3, z2 = 4.
>> Z1 = 3;
>> Z2 = 4;

Ejemplo: Generar los nmeros complejos z1 = 3 + j4, z2 = 4 +j5.


>> z1 = 3 + j*4
>> z2 = 4 + j*5

Nota: El smbolo se puede utilizar en lugar de para representar a 1.

Ejemplo: Encuentre la magnitud y fase del numero complejo z = 3 + j4


>> Z = 3 + j*4
>> Z_mag = abs(z); // da la magnitud de 2
>> z_angle = angle(z); // da la fase de z en radianes

La adicin o sustraccin de nmeros (real o compleja):

Ing. Armando Alberto Cajahuaringa Camaco


2

>> z = zl + z2; % adicin


>> z = zl - z2; % resta

Multiplicacin y divisin de nmeros (real o complejo):


>> z = zl*z2; % multiplicacin
>> z = zl/z2; % divisin

Vectores y Matrices
Ejemplo: Generar los vectores x = [1 3 5] e y = [0 2 4 5 6].
>> X = [1 3 5]; % genera el vector de longitud 3
>> Y = [0 2 4 6 5] % genera el vector de longitud 5

La adicin o sustraccin de vectores x e y de la misma longitud:


>> Z = x + y; % suma
>> Z = x y; % resta

Multiplicacin o divisin de los vectores x e y de la misma longitud:


2 = x .* y; % multiplicacin elemento por elemento
Z = x ./ y; % Divisin elemento por elemento

Nota: El punto despus de x es necesaria puesto que x es un vector y no un nmero. La crea-


cin de espacios vectoriales unidimensionales y TiVo dimensiones utilizando MATLAB

Los comandos:
>> x = linspace(xl,x2,N1); % genera N1 puntos entre x1 y x2, y lo almacena en el vector x
>> y = linspace(yl,y2,N2); % genera N2 puntos entre y1 e y2, y lo almacena en el vector

Programacin con vectores


Programas que involucran vectores pueden escribirse utilizando un lazo FOR o comandos para
vector. Ya que MATLAB es bsicamente un programa basado en vectores, a menudo es ms
eficiente escribir programas utilizando comandos para vectores. Sin embargo, el comando para
un lazo FOR dan una comprensin ms clara del programa, especialmente para el principiante.

Ejemplo: Sume la siguiente serie:

S = 1 + 3 + 5 + 99

Una aproximacin con el lazo FOR:


>> S = 0,0; % inicializa la suma a cero
>> for i = 1: 2: 99
S = S + i;
end
>> S; % da el valor de la suma

Enfoque vectorial:
>> I = 1: 2: 99; % Crea el vector i
>> S = sum(i); % obtiene la suma S

Ejemplo: Generar la seal de tiempo discreto y(n) = n sen(n/2) en el intervalo de 0 n 10

Enfoque con el lazo FOR:


>> for n = 1:1:11
n1(n) = n 1;
y(n) = n1(n)*sin(pi*n1(n)/2);
end
>> y; % da el vector y
>> stem(n1,y) % grafica la seal y(n) vs. n con impulsos

Ing. Armando Alberto Cajahuaringa Camaco


3

Enfoque vectorial:
>> n = 0:10; % Crea el vector n
>> y = n .* sin(pi*n/2); % obtiene el vector y
>> stem(n, y); % grafica la seal y(n) vs n con impulsos

Operaciones bsicas de seales en MATLAB


Ejemplo: Definir la seal de tiempo discreto x(n) = n u(n) en un vector en el intervalo 0 n
10 y graficar la seal.

Solucin:
>> n = 0:10; % se define el vector n de longitud 11
>> u(1,11) = ones(1,11); % define el vector escalon unitario u de longitud 11
>> x = n .* u; % define el producto de n u(n)
>> stem(n,x); % grafica la seal discreta x(n)

Ejercicio 2: Trabajar con vectores y matrices


Escriba un programa MATLAB para dibujar la siguiente seal discreta en el rango de tiempo
de -10 n 10. Por favor etiquete todos los ejes de la grfica claramente. Si la secuencia es
compleja, trazar la magnitud y el ngulo por separado.
i. x(n) = u(n) - u(n - 3)
ii. x(n) = sin(n/3) u(n)
iii. x(n) = 0.5n ej n/2

Hay dos formas principales de multiplicar vectores o matrices. En MATLAB, si se dan dos vec-
tores a y b (ambos vectores de tamao 1xn), entonces los dos posibles comandos de multipli-
cacin en Matlab son: y = a * b e y = a .* b.

i. Comente sobre las diferencias entre los dos comandos, y establezca claramente cules se-
ran las salidas de estas dos operaciones.
ii. Escriba un pequeo programa en Matlab para evaluar estos dos comandos para el caso de
a = [1 2 3] y b = [4 5 6]. Son posibles las operaciones a * b y a.*b? Si no lo son, qu cam-
biara en la sintaxis para hacer posible las operaciones?

TIPOS DE SECUENCIAS
Usaremos diversas secuencias elementales en el procesamiento digital de las seales para
propsitos de anlisis. A continuacin, sus definiciones y su implementacin en Matlab.

S1) Secuencia de muestra unitaria0 delta de Kronecker


, =
[ ]= = , , , , , ,
,

En Matlab la funcin zeros(1,N) genera un vector fila de N ceros, el cual se usa para imple-
mentar [ ] sobre un intervalo finito. Sin embargo, la relacin lgica n==0 es una forma ele-
gante de implementar [ ]. Por ejemplo para implementar
, =
[ ]=
,
Sobre el intervalo n1 n0 n2, usaremos la implementada funcin .
function [x,n] = impseq(n0,nl,n2)
% Genera x(n) = delta(n-n0); n1 <= n <= n2
%--------------------------------------------
% [x,n] = impseq(n0,n1,n2)
%
n = [n1:n2]; x = [(n-nO) == 0];

Ing. Armando Alberto Cajahuaringa Camaco


4

S2) Secuencia de escaln unitario


,
[ ]= = , , , , , ,
, <

En Matlab la funcin ones(1,N) genera un vector fila de N unos, el cual se usa para implemen-
tar [ ] sobre un intervalo finito. Nuevamente, una aproximacin elegante es usar la relacin
lgica n 0. Para implementar
,
[ ]=
, <
sobre el intervalo n1 n0 n2, usaremos la implementada funcin .
function [x,n] = stepseq(n0,n1,n2)
% Genera x(n) = u(n-n0); n1 <= n <= n2
%----------------------------------------
% [x,n] = stepseq(n0,n1,n2)
%
n = [n1:n2]; x = [(n-n0) >= 0];

S3) Secuencia exponencial de valores reales

[ ]= , ;
En Matlab, el operador sobre arreglos .^ se requiere para implementar una secuencia expo-
nencial de valores reales. Por ejemplo, para generar

[ ]=( . ) , ,
Lo haremos en Matlab mediante:

n = [0:10]; x = (0.9).^n;
S4) Secuencia exponencial de valores complejos
( )
[ ]= ,
Donde es llamado una atenuacin y es la frecuencia angular en radianes. La funcin de
Matlab, , es usado para generar secuencias exponenciales. Por ejemplo, para generar
[ ]= [( + ) ], ,
Lo haremos mediante:

n = [0:10]; x = exp(2+3j)*n;
S5) Secuencia sinusoidal

[ ]= ( + ),
Donde es la fase en radianes. Una funcin de Matlab cos (o sin) se usan para generar se-
cuencias sinusoidales. Por ejemplo, para generar:

[ ]= ( . + )+ ( . ),
Lo haremos de la siguiente manera:

n = [0:10]; x = 3*cos(0.1*pi*n + pi/3) + 2*sin(0.5*pi*n);


S6) Secuencia aleatoria
Muchas secuencias prcticas no pueden ser descritos mediante expresiones matemticas
como los mostrados anteriormente. Estas secuencias se denominan secuencias aleatorias (o
estocsticas) y se caracterizan por los parmetros de las funciones de densidad de probabili-
dad asociadas o sus momentos estadsticos.

Ing. Armando Alberto Cajahuaringa Camaco


5

En Matlab dos tipos de (pseudo) secuencias aleatorias estn disponibles. La ( , )


genera una secuencia aleatoria de longitud N, cuyos elementos son uniformemente distribuido
entre [0,1]. El ( , ) genera una secuencia aleatoria gaussiana ( , ) de longi-
tud N, con media 0 y varianza 1. Otros secuencias aleatorias se pueden generar usando trans-
formaciones de las funciones anteriores.

S7) Secuencia peridica


Una secuencia x[n] es peridica si [ ] = [ + ], . El entero N ms pequeo que satisfa-
ce la anterior relacin es llamado el . Usaremos [ ] para denotar una
secuencia peridica. Para generar P periodos de [ ] de un periodo { x[n], 0 nN-1 }, copia-
remos x[n] unas P veces.
xtilde = [x x x x];
Pero, una aproximacin elegante es usar la poderosa capacidad de indizacin de Matlab.
Primero generamos una matriz conteniendo P filas con valores de x[n]. Luego concatenaremos
las P filas en un vector fila ms largo, usando la construccin (:). Sin embargo, esta construc-
cin trabaja nicamente sobre columnas. Por lo tanto, tendremos que usar el operador de
transpuesta de una matriz ' para proporcionar el mismo efecto sobre las filas.

xtilde = x'*ones(1,P) % P columnas de x; x es un vector fila


xtilde = xtilde(:); % vector columna largo
xtilde = xtilde; % vector fila largo

Ntese que las dos ltimas lneas pueden combinarse en una sola.

OPERACIONES SOBRE SECUENCIAS


Describiremos brevemente las operaciones bsicas sobre secuencias y su implementacin
en Matlab.

OP1) Suma de seales


Esta es una suma de muestra por muestra dada por {x1[n]} + {x2[n]} = {x1[n] + x2[n]}
Se implementa en MATLAB por el operador aritmtico +. Sin embargo, las longitudes de
x1[)] y x2[n] deben ser el mismo. Si las secuencias son de longitudes desiguales, o si las posi-
ciones de las muestras son diferentes para secuencias de igual longitud, entonces no se puede
utilizar directamente el operador +. Tenemos que primero aumentar x1[n] y x2[n] de modo
que tengan el mismo vector de posicin n (y por lo tanto la misma longitud). Esto requiere una
cuidadosa atencin en Matlab de las operaciones de indizacin. En particular, el funcionamien-
to lgico de interseccin &, similar a las operaciones de relacin <=, ==, y la funcin
son requeridos para hacer que x1[n] y x2[n] sean de la misma longitud.
La funcin demuestra esta operacin.
function [y,n] = sigadd(x1,n1,x2,n2)
% implementa y(n) = x1(n)+x2(n)
%-----------------------------
% [y,n] = sigadd(x1,n1,x2,n2)
% y = suma de la secuencia sobre n, el cual incluye n1 y n2
% x1 = primera secuencia sobre n1
% x2 = segunda secuencia sobre n2 (n2 puede sr diferente de n1)
%
n = min(min(n1), min(n2)):max(max(n1), max(n2)); % duracion de y(n)
y1 = zeros(1,length(n)); y2 = y1; % inicializacion
y1(find((n>=min(n1))&(n<=max(n1))==1))=x1; % x1 con duracion de y
y2(find((n>=min(n2))&(n<=max(n2))==1))=x2; % x2 con duracion de y
y = y1+y2; % suma de las secuencias

Ing. Armando Alberto Cajahuaringa Camaco


6

OP2) Multiplicacin de seales


Se implementa en Matlab por el operador sobre arreglos .*. Otra vez las restricciones
similares para la suma de seales se aplican para el operador .*. Por lo tanto se ha imple-
mentado la funcin , que es similar a la funcin .
function [y,n] = sigmult(x1,n1,x2,n2)
% implementa y(n) = x1(n)+x2(n)
%-----------------------------
% [y,n] = sigmult(x1,n1,x2,n2)
% y = producto de las secuencias sobre n, el cual 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)); % duracion de y(n)
y1 = zeros(1,length(n)); y2 = y1; % inicializacion
y1(find((n>=min(n1))&(n<=max(n1))==1))=x1; % x1 con duracion de y
y2(find((n>=min(n2))&(n<=max(n2))==1))=x2; % x2 con duracion de y
y = y1.*y2; % suma de las secuencias

OP3) Escalamiento
En esta operacin cada muestra es multiplicada por un escalar . { [ ]} = { [ ]} .
OP4) Desplazamiento
En esta operacin cada muestra de x[n] es desplazada por una cantidad k para obtener una
secuencia desplazada de y[n].
y[n] = { x[n-k] }
Si hacemos m = n k, entonces n = m + k y la anterior operacin est dado por:
y[m+k] = { x[m] }
Por lo tanto, esta operacin no tiene efecto sobre el vector , pero el vector es cambiado, ya
que se ha sumado a cada elemento. Esto es implementado en la funcin .
function [y,n] = sigshift(x,m,n0)
% implementa y(n) = x(n-n0)
%-------------------------
%. [y,n] = sigshift(x,m,n0)
%
n = m+n0; y = x;

OP5) Inversa
En esta operacin cada muestra de x[n] es volteado alrededor de n=0 para obtener una
secuencia volteada de y[n]
y[n] = { x[-n] }
En Matlab esta operacin es implementada por la funcin ( ) para valores de amplitud
de la muestra y por la funcin ( ) para las posiciones de la muestra; lo que se im-
plementa en la funcin .
function [y,n] = sigfold(x,n)
% implementa y(n) = x(-n)
%-----------------------
% [y,n] = sigfold(x,n)
%
y = fliplr(x); n = -fliplr(n);

Ing. Armando Alberto Cajahuaringa Camaco


7

OP6) Sumatoria de las muestras de una secuencia


Esta operacin difiere de la operacin de suma de seales. Esta suma todos los valores de
las muestras de x[n] entre n1 y n2.

[ ]= ( ) + + ( )

Esta es implementada por la funcin ( ( 1: 2)).


OP7) Producto de las muestras de una secuencia

Esta operacin tambin difiere de la operacin de multiplicacin de seales. Este multiplica


todos los valores de muestra de la secuencia x[n] entre n1 y n2.

[ ]= ( ) ( )

Esta es implementada por la funcin ( ( 1: 2)).


OP8) Energa de una seal

La energa de una secuencia x[n] est dado por:

= ( ) ( ) = | ( )|

Donde el superndice * denota la operacin de conjugacin compleja. La energa de una


secuencia de duracin finita x[n] puede calcularse en Matlab usando:
Ex = sum(x.*conj(x)); % una primera implementacin.
Ex = sum(abs(x).^2); % otra implementacin.

OP9) Potencia de una seal


La potencia promedio de una secuencia peridica x[n], de periodo fundamental N, est da-
do por:

= | ( )|

SECUENCIAS BASICAS DE TIEMPO DISCRETO


La Secuencia Delta
n=-30:30; % especifica el ndice n
delta=(n= =0); % define la secuencia delta
stem(n,delta, filled) % grafica la secuencia delta
La Secuencia de Escaln Unitario- I
n=-30:30; % especifica el ndice n
u_step=(n>=0); % define la secuencia Escaln unitario
stem(n, u_step, filled) % grafica la secuencia Escaln unitario
La Secuencia d Escaln Unitario-II
Proporcionar un cdigo en MATLAB para bosquejar una secuencia de tiempo discreto x[n] es-
pecificado por [ ] = 2 [ ] + 3 [ 1] 5 [ 3]
n=-30:30; % especifica el ndice n
xn=2*(n= =0)+((n-1)= =0)-5*((n-3)= =0); % define la secuencia x[n]
stem(n,xn; filled);grid % grafica la secuencia x[n]

Ing. Armando Alberto Cajahuaringa Camaco


8

La Secuencia Rampa-I
n=-10:10; % define index n
ramp=n.*(n>=0); % define a ramp
stem(n,ramp, filled) % plot ramp
La Secuencia Rampa-II
Genere y grafique una versin desplazada de una secuencia rampa, r[n-5]
n=-10:15; % define el ndice n
x=(n-5).*((n-5)>=0); % define la versin desplazada de la rampa
stem(n,x,filled);grid % grafica la versin desplazada de la rampa
La Secuencia Exponencial
Defina y bosqueje la secuencia exponencial de tiempo-discreto dado por:

%exponential sequence
n=-30:30; % define el ndice n
n=(0.8).^n.*(n>=0); % define la secuencia x[n]
stem(n,x);grid % grafica la secuencia exponencial

SECUENCIAS PERIODICAS
Una seal de tiempo-discreta x[n] se dice que es peridico si existe una constante positiva (el
periodo) para el cual x[n+N]=x[n], para todo n. Podemos generar fcilmente una seal peri-
dica en MATLAB.

EJEMPLO1.
Use MATLAB para crear una extensin peridica de la secuencia x[n]={1,1,0,0,-1,-1};
N=4;
x=[1 1 0 0 -1 -1];
xp=repmat(x,1,N);
stem(n,xp)

NOTA: La funcin repmat crea un duplicado de una matriz o vector.

EJEMPLO2.
Genere y grafique cada una de las siguientes secuencias sobre el intervalo indicado.
a) [ ] = 2 [ + 2] [ 4] , 5 5
[ ] = ( [ ] [ 10] + 10 . ( )
b) ( [ 10] [ 20]), 0 20)
Donde w[n] es una secuencia aleatoria
c) [ ] = cos(0.04 ) + 0.2 [ ], 0 50
Gaussiana con media 0 y varianza 1.

d) [ ] = , 5, 4, 3, 2, 1, 5, 4, 3, 2, 1, 5, 4, 3, 2, 1, ; 10 9.

Solucin
a)
n = [-5:5];
x = 2*impseq(-2,-5,5) - impseq(4,-5,5);
stem(n,x); title('Secuencia del ejemplo 1.a')
xlabel('n'); ylabel('x(n)');
b)
n = [0:20];
xl = n.*(stepseq(0,0,20)-stepseq(10,0,20));

Ing. Armando Alberto Cajahuaringa Camaco


9

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('Secuencia del ejemplo 1.b')
xlabel('n'); ylabel('x(n)');

c)
n = [0:50];
x = cos(0.04*pi*n) + 0.2*randn(size(n));
subplot(2,2,2) ; stem(n,x); title('Secuencia del ejemplo 1.c')
xlabel('n'); ylabel('x(n)');

d) Ntese que en el intervalo dado, la secuencia peridica tiene 4 periodos.


n = [-10:9]; x = [5,4,3,2,1];
xtilde = x'*ones(1,4);
xtilde = (xtilde(:))';
subplot(2,2,4); stem(n,xtilde); title('Secuencia del ejemplo 1.d')
xlabel('n'); ylabel("xtilde(n)');

EJEMPLO3.

Sea [ ] = 1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1 . Determine y grafique las siguientes secuencias:



a) 1[ ] = 2 [ 5] 3 [ + 4]
b) 2[ ] = [3 ] + [ ] [ 2]
a) La secuencia x[n] es diferente de cero en el intervalo -2 n 10. Por lo tanto,
n = -2:10; x = [1:7,6:-1:1]; % generacin de x[n]

Para generar x1[n], el primer trmino es obtenido desplazando x[n] por 5 y el segundo tr-
mino desplazando x[n] por -4. Este desplazamiento y suma de los trminos se realizan fcil-
mente usando las funciones y .

[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('Secuencia del ejemplo 2.a')
xlabel('n'); ylabel('x1(n)');

b) El primer termino de x1[n] puede escribirse como x[-(n-3)]. Por lo tanto, esta es obtenida
primero volteando x[n] y luego desplazando el resultado por 3. El segundo trmino es una
multiplicacin de x[n] por x[n-2], ambos trminos con la misma longitud pero de diferente
soporte (o posiciones de la muestra). Estas operaciones pueden realizarse fcilmente usando
las funciones y .
[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('Secuencia del ejemplo 2b')

EJEMPLO4.
( . . )
Genera la seal de valores complejos [ ]= , y graficar su
magnitud, fase, parte real y parte imaginaria en cuatro subplots separados.
n = [-10:1:10]; alpha = -0.1 + 0.3j;
x = exp(alpha*n);
subplot(2,2,l); stem(n,real(x)); title('parte real'); xlabel('n')
subplot(2,2,2); stem(n,imag(x)); title('parte imaginaria'); xlabel('n')

Ing. Armando Alberto Cajahuaringa Camaco


10

subplot(2,2,3); stem(n,abs(x)); title ('magnitud'); xlabel('n')


subplot(2,2,4); stem(n,(180/pi)*angle(x)); title ('Fase'); xlabel('n')

CONVOLUCION
Si secuencias arbitrarias son de duracin infinita, entonces Matlab no, puede usarse directa-
mente para calcular la convolucin. Matlab tiene una funcin interna llamada que calcula
la convolucion entre dos secuencias de duracin finita. La funcin asume que las dos
secuencias empiezan en n=0 y es invocado por
y=conv(x,h)

Por ejemplo, para realizar la convolucin de x=[3, 11, 7, 0, -1, 4, 2] y h=[2, 3, 0, -5, 2, 1],
en Matlab, hacemos:
x = [3, 11, 7, 0, -1, 4 2],
h = [2, 3, 0, -5, 2, 1];
y = conv(x,h)
y =
6 31 47 6 -51 -5 41 18
Para obtener los valores correctos de y[n]. Sin embargo, la funcin ni proporciona, ni
acepta ninguna informacin de tiempo si las secuencias tienen soporte arbitrario. Lo que se
necesita es un punto de inicio y un punto de fin de y[n]. Si x[n] y y[n] dados son de duracin
finita, es fcil determinar estos puntos.
Sea { [ ]; } { [ ]; } las secuencias de duracin finita.
Para el ejemplo anterior, los puntos de inicio y fin de y[n] son:

= + = +
Respectivamente. Una simple extensin de la funcin , denominado _ , el que rea-
liza la convolucin de secuencias de soporte arbitrario, se ha implementado.
function [y,ny] = conv_m(x,nx,h,nh)
% Modificacion de la rutina de convolucion para procesamiento de seales
%--------------------------------------------------
% [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);

EJEMPLO5.
Realice la convolucin de x[n] y h[n] anterior usando _ .
x = [3, 11, 7, 0, -1, 4]; nx = [-3:3];
h = [2, 3, 0, -5, 2, 1]; ny = [-1:4];
[y,ny] = conv_m(x,nx,h,nh)
y =
6 31 47 6 -51 -5 41 18 -22 -3 8 2
ny =
-4 -3 -2 -1 0 1 2 3 4 5 6 7

Por lo tanto:

Ing. Armando Alberto Cajahuaringa Camaco


11

[ ] = 6, 31, 47, 6, 51, 5, 41, 18 , 22, 3, 8, 2



Un mtodo alternativo puede implementarse en Matlab. Este mtodo usa una aproximacin de
multiplicacin de matriz-vector, que ser explorado ms adelante.

CORRELACION DE SECUENCIAS
Si comparamos la operacin de convolucin con el de la correlacin cruzada, de dos secuen-
cias arbitrarias, observaremos una semejanza muy cercana.
La correlacin cruzada [ ] puede ser puesta en la forma
[ ] = [ ] [ ]
Y la autocorrelacin [ ] en la forma
[ ] = [ ] [ ]
Por lo tanto, estas correlaciones pueden ser calculadas usando la funcin si las secuen-
cias son de duracin finita.

EJEMPLO6.
En este ejemplo demostraremos una aplicacin de la correlacin cruzada de secuencias. Sea

[ ] = , , , , , ,

un prototipo de secuencia, y sea y[n] una versin desplazada y alterada por el ruido

y[n] = x[n-2] + w[n]

donde w[n] es una secuencia Gaussiana de media 0 y varianza 1. Calcule la correlacin cruza-
da entre y[n] y x[n].
Solucin
Por la forma construida e y[n], se sigue que y[n] es muy similar a x[n-2] y por lo tanto su
correlacin cruzada debe mostrar una muy fuerte similitud para =2. Para probarlo, usando
Matlab, calcularemos la correlacin cruzada usando dos diferentes secuencias de ruido:
% Secuencia de ruido 1
x = [3, 11, 7, 0, -1, 4, 2]; nx=[-3:3]; % la seal x(n)
[y,ny] = sigshift(x,nx,2); % para obtener x(n-2)
w = randn(l,length(y)); nw = ny; % generacion de w[n]
[y,ny] = sigadd(y,ny,w,nw); % para obtener y(n) = x(n-2) + w(n)
[x,nx] = sigfold(x,nx); % para 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('lag variable 1')
ylabel('rxy');title('Crosscorrelation: Secuencia de ruido 1')
%
% Secuencia de ruido 2
x = [3, 11, 7, 0, -1, 4, 2]; nx-[-3:3]; % la seal x(n)
[y,ny] = sigshift(x,nx,2); % para obtener x(n-2)
w = randn(1,length(y)); nw = ny; % generar w(n)
[y,ny] = sigadd(y,ny,w,nw); % para obtener y(n) = x(n-2) + w(n)
[x,nx] = sigfold(x,nx); % para obtener x(-n)
[rxy,nrxy] = conv_m(y,ny,x,nx); % correlacion cruzada
subplot(2,1,2);stem(nrxy,rxy)
axis([-5,10,-50,250]);xlabel('lag variable 1')
ylabel('rxy');title('Correlacion cruzada: Secuencia de ruido 2')

Ing. Armando Alberto Cajahuaringa Camaco


12

En la siguiente figura se ob-


serva que la correlacin cruza-
da, en efecto, tiene un pico en
=2, lo que implica que y[n] es
similar a x[n] desplazado en 2.
Esta aproximacin puede ser
usada en aplicaciones similar al
procesamiento de seales de
radar para la identificacin y
localizacin de objetos.
Cabe mencionar que el tool-
box de Procesamiento de Sea-
les de Matlab, tiene una funcin
llamada para el clculo
delas correlaciones de secuen-
cias.
En su forma ms simple:
( , )
calcula la correlacin cruzada
entre los vectores x e y, mien-
tras que
( )
calcula la autocorrelacin del vector x. Se genera resultados que son idnticos a la obtenida
por el uso apropiado de la funcin _ . Sin embargo, la funcin no puede propor-
cionar la informacin de tiempo (como se hace con la funcin _ ), que luego debe ser
obtenido por otros medios. Por lo tanto, se hace hincapi en el uso de la funcin _ .
ECUACIONES EN DIFERENCIA
Una rutina llamada est disponible para resolver numricamente las ecuaciones en dife-
rencia, al que se da el vector de entrada y los coeficientes de la ecuacin en diferencia. En su
forma ms simple esta rutina es invocado como
y=filter(b,a,x)

donde, b={b0, b1,...,bM }; a={a0, a1, ...,aN}

son los coeficientes de la ecuacin en diferencia, y x es el vector de entrada. La salida y tiene


la misma longitud que la entrada x. Uno debe asegurarse que el coeficiente a0 no sea cero.
Veamos el uso de esta rutina con el siguiente ejemplo.

EJEMPLO7.
Dado la siguiente ecuacin en diferencia

[ ] [ ]+ . [ ] = [ ];
a) Calcule y grafique la respuesta al impulso h[n] para -20 n 100.
b) Calcule y grafique la respuesta al escaln unitario s[n] para -20 n 100.
c) El sistema modelado por h[n] es estable?

Solucin
De la ecuacin en diferencias: b={1}; a={1, -1, 0.9};

Ing. Armando Alberto Cajahuaringa Camaco


13

a)
b = [1]; a = [1, -1, 0.9];
x = impseq(0,-20,120); n = [-20:120];
h = filter(b,a,x);
subplot(2,1,1); stem(n,h);
title('Respuesta al Impulso'); xlabel('n'); ylabel('h(n)')
b)
x = stepseq(0,-20,120);
s = filter(b.a.x);
subplot(2,1,2); stem(n,s)
title('Respuesta al Escalon'); xlabel('n'); ylabel('s(n)')

c) Para determinar la estabilidad del sistema, tenemos que determinar h[n] para toda n Aun-
que no hemos descrito un mtodo para resolver la ecuacin en diferencias, usaremos la grfica
de la respuesta al impulso para observar que h[n] es prcticamente cero para n > 120. Por lo
tanto, la sumatoria de su valor absoluto puede ser calculada usando Matlab:
sum(abs(h));
ans = 14.8775

lo que implica que el sistema es estable. Otra forma alternativa de es usando la funcin .
z = roots(a) ;
magz = abs(z)
magz = 0.9487
0.9487
Desde que las magnitudes de ambas races son menores que uno, el sistema es estable.

En la discusin anterior notamos que si una o ambas secuencias en la convolucin son de lon-
gitud finita, entonces es posible usar Matlab para su clculo numrico. Esto es hecho usando la
funcin como se muestra en el siguiente ejemplo.

EJEMPLO8.
Sea un sistema discreto caracterizado por su respuesta al impulso h[n]=(0.9)n u[n], y sea la
secuencia de entrada, de duracin finita, x[n]=u[n] - u[n-10]. Calcular y[n] = x[n]*h[n].

Solucin
Si el sistema LTI, dado por la respuesta al impulso h[n], puede ser descrito por una ecuacin
en diferencias, entonces y[n] puede obtenerse usando la funcin filter. De la expresin de
h[n]:
(0.9)[ 1] = 0.9(0.9) [ 1] = (0.9) [ 1]
O
[ ] (0.9)[ 1] = (0.9) [ ] (0.9) [ 1] = (0.9) ( [ ] [ 1])
= (0.9) [ ]= [ ]
El ltimo paso se sigue del hecho que la [ ] es diferente de cero nicamente para n=0. Por
definicin h[n] es la salida de un sistema LTI cuando la entrada es

[ ] 0.9 [ 1] = [ ]
Ahora, la funcin de Matlab puede usarse para calcular la convolucin indirectamente.

b = [1]; a = [1,-0.9];
n = -5:50; x * stepseq(0,-5,50) - stepseq(10,-5,50);
y = filter(b,a,x);
subplot(1,1,1);
subplot(2,1,2); stem(n,y); title('Secuencia de salida')
xlabel('n'); ylabel('y(n)'); axis([-5,50,-0.5,8])

Ing. Armando Alberto Cajahuaringa Camaco


14

La grafica obtenida evidencia que es igual al determinado por el clculo de la convolucin.


En el ejemplo 8, la respuesta al impulso fue una secuencia exponencial de un solo lado
por lo que se pudo determinar una representacin en ecuacin en diferencias. Esto significa
que no todas las respuestas al impulso de longitud infinita se pueden convertir en ecuaciones
en diferencias. El anlisis anterior, sin embargo, se puede extender a una combinacin lineal
de las secuencias de exponenciales de un solo lado, lo que resulta en ecuaciones diferenciales
de orden superior.

RESPUESTAS DE ENTRADA CERO Y ESTADO CERO


En el procesamiento de seal digital la ecuacin de diferencia generalmente se resuelve pa-
ra tiempos futuros a partir de n = 0. Por lo tanto, las condiciones iniciales sobre x(n) e y(n)
son necesarios para determinar la salida para n > 0. La ecuacin en diferencias a continuacin,
est dada por

Sujeto a las condiciones iniciales

Una solucin a dicha ecuacin es obtenida de la forma:

[ ]= [ ]+ [ ]
Donde [ ] es llamado la solucin de entrada cero, solucin debida nicamente a las
condiciones iniciales (asumiendo que ellas existen), mientras que la solucin de estado cero,
[ ], es una solucin debido nicamente a la entrada x[n] (asumiendo que las condiciones
iniciales son cero.

Sistemas de Tiempo-Discreto
La contraparte discreta de los comandos step e impulse son dstep y dimpulse. Ilustra-
remos estos comandos con algunos ejemplos:

A. El comando dstep

%Step response of a discrete-time linear system


n=0:20; % specify discrete-time vector
num=[4 1] % specify the numerator of H(z)
den=[1 -1 0.5]; % specify the denominator of H(z)
y=dstep(num,den,n); % compute the step response
stem(n,y,filled) % sketch the step response
title(discrete-time step response of linear system)
xlabel(index,[n])
ylabel(y[n])

Ing. Armando Alberto Cajahuaringa Camaco


15

B. El comando dimpulse
% Impulse response of a discrete-time linear system
n=0:20;
num=[4 1];
den[1 -1 0.5];
y=dimpulse(num,den,n);
stem(n,yfilled)
title(discrete-time impulse response of linear system)
ylabel(y[n])
xlabel(index,[n])

C. El commando zplane - I
Un sistema LTI de tiempo-discreto es modelado por su funcin de transferencia dado por:

Graficar los polos y ceros del sistema.


num=[0 0 1 3 1]; % Define le numerador de H(z)
den=[1 3 7 3 9]; % Define el denominador de H(z)
zplane(num,den) % Grafica el mapa de polos y cero.

EJEMPLO A
% Este programa en MATLAB realiza la operacin de convolucion
% Se genera la funcin escaln unitario.
x=ones (1,11);
% Se define la funcin respuesta al impulso.
for k = 1:10;
h(k) = 0.6^(k-1);
end
% Convoluciona la entrada con la respuesta al impulse y lo grfica.
c=conv(x,h);

Ing. Armando Alberto Cajahuaringa Camaco


16

for k=1:11;
n(k)=k-1;
y(k)=c(k);
end
% [n' y']
stem(n, y, 'fill')

EJEMPLO B
a) Resolver la ecuacin en diferencias de un sistema de tiempo discreto caracterizado por:
y[n] - 0.6y[n-1] = 4u[n]
b) Graficar para n=0 a 9.

Resolviendo analticamente:
y[n] = yc[n] + yp[n] = C(0.6)n + 10
y[0]= 0 = C + 10 C=-10, entonces
y[n]= 10[1-(0.6)n]u[n].

Usando Matlab, para una solucin recursiva.


n=[0:9];
y(1)=0;
for m=2:10;
y(m)=0.6*y(m-1)+4;
end
stem(n,y,'fill'),grid

Ing. Armando Alberto Cajahuaringa Camaco

Das könnte Ihnen auch gefallen