Вы находитесь на странице: 1из 16

Ing.

Armando Alberto Cajahuaringa Camaco Pgina 1



FIEE UNI ANALISIS DE SEALES Y SISTEMAS
LABORATORIO N 8
ALIAS DE UNA SEAL MUESTREADA
Las siguientes seales analgicas son muestreadas a una frecuencia Fs=40 Hz.
x1(t) = cos(2n(1u)t)
x2(t) = cos(2 n(Su)t)
Las secuencias discretas obtenidas sern
x1(n) = cos _2n
1u
4u
n] = cos [
n
2
n
x2(n) = cos _2
Su
4u
n_ = cos _
S
2
n ] = cos _
1
2
n +2 n] = cos [
n
2
n
Es decir, las secuencias x1(n) y x2(n) son idnticas, es decir, la frecuencia F2=50Hz es un
alias de la frecuencia F1=10 Hz cuando ambas son muestreadas a Fs=40Hz.
De hecho, todas la sinusoides de la forma cos( 2n(F1 +4uk)t ) con k=1,2,3,... producen sea-
les discretas idnticas cuando son muestreadas a 40 Hz. Es decir, todas estas son alias de
F1=10 Hz.
Nota: en general, las frecuencias Fo +kF
S
con k = u, _1, _2, son indistinguibles (y por
lo tanto alias) de la frecuencia Fo despus del muestreo, por lo tanto a partir de las
muestras de una seal de tiempo continuo no es posible determinar cul es la frecuen-
cia de la seal original.
En la figura 1 se muestra un caso de alias: Una sinusoide de frecuencia F1 = 1/8 Hz y otra de
F2=-7/8 Hz se muestrean a Fs= 1 Hz produciendo muestras idnticas.

Figura 1
Ejercicios
1. Usando Matlab reproducir la grfica anterior. Primero consiga la grfica continua en azul y
la grfica muestreada de color negro. Use el comando plotyy.
Ing. Armando Alberto Cajahuaringa Camaco Pgina 2

2. Graficar las siguientes seales:
a) x(n)= (u(-n+2)-u(-n))e
-2n
b) x(n)= cos(27 n/10)
Observaciones
El Teorema de Shannon es un resultado terico, en el cual se considera un muestreador
idealizado y no se consideran errores en los componentes electrnicos utilizados para im-
plementar de manera prctica el muestreo o la reconstruccin de la seal. En un sistema
real, la restriccin terica que establece el Teorema (Fs 2Fmax), deber ser exagerada al
menos unas cinco veces.
La frmula de interpolacin es no causal de manera que no puede ser implementada en
tiempo real.
La hiptesis sobre el contenido de frecuencias de x
u
(t) tampoco es directamente aplicable a
cualquier seal y aunque la mayora de las seales de inters tienen un contenido de fre-
cuencias limitado, en el caso en que no lo tengan, el teorema no se puede aplicar. Por otro
lado, siempre es posible usar filtros analgicos pasabajas para evitar problemas con el con-
tenido de frecuencias ms altas que 2Fs.
Debido al importante papel que juega la tasa de muestreo, F
N
=2Fmax se le llama la tasa de
muestreo de Nyquist.
Dado una frecuencia de muestreo Fs para una seal analgica, la mxima frecuencia la que
la seal discreta puede representar sin ambigedad es fm=F
N
/2.
EJEMPLO1.
Para la siguiente seal analgica
x
u
(t ) = Scos(2uuunt) + Ssin(6uuunt) +1ucos(12uuunt)
a) Cul es la tasa de Nyquist para esta seal?
b) Si se muestrea esta seal a una tasa Fs=5000 muestras/seg, Cul es la seal obtenida tras
el muestreo?
c) Cul es la seal analgica x
u
i
(t) que se obtendra a partir de estas muestras mediante el
interpolador ideal de Shannon?
Solucin
a) Las frecuencias contenidas en la seal analgica son:
F1 = 1 KHz, F2 = 3 KHz, F3 = 6 KHz.
De donde Fmax = 6 kHz, entonces la tasa de Nyquist es F
N
= 2Fmax = 12 kHz.
b) Como se est muestreando a una tasa menor que la de Nyquist: Fs = 5 kHz, en la seal
muestreada no se tendrn todas las frecuencias de la seal original, la mxima frecuencia
que la seal discreta puede representar sin ambigedad es Fs/2 = 2.5 kHz.
En efecto, la seal muestreada es x|n] = x
u
( nI ) = x
u
( nF
S
) = x
u
( nSuuu ), por lo tanto:
x|n] = Scos _2n
1
S
n] +Ssin_2n
S
S
n] +1u cos _2n
6
S
n]
= Scos _2n
1
S
n] +Ssin_2n( 1
2
S
)n] +1u cos _2n( 1 +
1
S
)n]
= Scos _2n
1
S
n] +Ssin_2n(
2
S
)n] +1u cos _2n
1
S
n]
Ing. Armando Alberto Cajahuaringa Camaco Pgina 3

Obtenindose finalmente x|n] = 1Scos [2n
1
5
n Ssin[2n
3
5
n
Otra manera de obtener el resultado anterior es como sigue:
La nica frecuencia que se puede obtener sin ambigedad es F1, pues F1 = 1 kHz < Fs/2, las
otras dos frecuencias producirn alias cuya frecuencia est dada por
F
i
= F
k
kF
S
, con
F
S
2
< F
i
<
F
S
2
,
Es decir,
F
1
i
= F
1
= 1 KEz
F
2
i
= F
2
F
S
= S KEz S KEz = 2 KEz
F
3
i
= F
3
F
S
= 6 KEz S KEz = 1 KEz
Por lo tanto,
1
= F
1
i
F
S
=
1
5
, ,
2
= F
2
i
F
S
=
2
5
, ,
3
= F
3
i
F
S
=
1
5
, que coincide con el resultado
anterior.
c) Como solamente la informacin de las frecuencias 1kHz y 2kHz est presente en la seal
muestreada, solo se recuperar:
x
u
i
(t ) = 1Scos(2uuunt) Ssin(4uuunt)
que evidentemente no es la seal original. Esta distorsin es provocada por el aliasing ori-
ginado por la baja velocidad de muestreo.
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
6|n] = ]
1, n =
, n
= _, , , 1, , ,

_
En Matlab la funcin zeros(1,N) genera un vector fila de N ceros, el cual se usa para imple-
mentar 6|n] sobre un intervalo finito. Sin embargo, la relacin lgica n==0 es una forma ele-
gante de implementar 6|n]. Por ejemplo para implementar
6|n n

] = _
1, n = n

, n n


Sobre el intervalo n1 n
0
n2, usaremos la implementada funcin |mpxeq.
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];
S2) Secuencia de escaln unitario
u|n] = ]
1, n
, n <
= _, , , 1, , ,

_
En Matlab la funcin ones(1,N) genera un vector fila de N unos, el cual se usa para implemen-
tar u|n] sobre un intervalo finito. Nuevamente, una aproximacin elegante es usar la relacin
lgica n 0. Para implementar
Ing. Armando Alberto Cajahuaringa Camaco Pgina 4

u|n n

] = _
1, n n

, n < n


sobre el intervalo n1 n
0
n2, usaremos la implementada funcin xtepxeq.
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
x|n] = a
n
, n; a
En Matlab, el operador sobre arreglos .^ se requiere para implementar una secuencia expo-
nencial de valores reales. Por ejemplo, para generar
x|n] = (. 9)
n
, n 1,
Lo haremos en Matlab mediante:
n = [0:10]; x = (0.9).^n;
S4) Secuencia exponencial de valores complejos
x|n] = e
(o+jw

)n
, n
Donde o es llamado una atenuacin y w

es la frecuencia angular en radianes. La funcin de


Matlab, exp, es usado para generar secuencias exponenciales. Por ejemplo, para generar
x|n] = exp|(2 +3j)n], n 1,
Lo haremos mediante:
n = [0:10]; x = exp(2+3j)*n;
S5) Secuencia sinusoidal
x|n] = cux(w

n +0), n
Donde 0 es la fase en radianes. Una funcin de Matlab cos (o sin) se usan para generar se-
cuencias sinusoidales. Por ejemplo, para generar:
x|n] = 3 cux(. 1an +a 3 ) +2 x|n(. 5an), n 1
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.
En Matlab dos tipos de (pseudo) secuencias aleatorias estn disponibles. La rand (1, N)
genera una secuencia aleatoria de longitud N, cuyos elementos son uniformemente distribuido
entre [0,1]. El randn (1, N) genera una secuencia aleatoria gaussiana rand (1, N) 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 x|n] = x|n +N], n . El entero N ms pequeo que
Ing. Armando Alberto Cajahuaringa Camaco Pgina 5

satisface la anterior relacin es llamado el pcrioJo unJomcntol. Usaremos x|n] para deno-
tar una secuencia peridica. Para generar P periodos de x|n] de un periodo { x[n], 0 nN-1 ],
copiaremos 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
inJ son requeridos para hacer que x1[n] y x2[n] sean de la misma longitud.
La funcin sigoJJ 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
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 sigmult, que es similar a la funcin sigoJJ.
function [y,n] = sigmult(x1,n1,x2,n2)
% implementa y(n) = x1(n)+x2(n)
%-----------------------------
Ing. Armando Alberto Cajahuaringa Camaco Pgina 6

% [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 o. o{x|n]] = {ox|n]] .
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 x, pero el vector n es cambiado, ya
que se ha sumado k a cada elemento. Esto es implementado en la funcin sigsit.
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 liplr(x) para valores de amplitud
de la muestra y por la funcin liplr(n) para las posiciones de la muestra; lo que se im-
plementa en la funcin sigolJ.
function [y,n] = sigfold(x,n)
% implementa y(n) = x(-n)
%-----------------------
% [y,n] = sigfold(x,n)
%
y = fliplr(x); n = -fliplr(n);
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.
Ing. Armando Alberto Cajahuaringa Camaco Pgina 7

x|n]
n2
n=n1
= x(n1) ++x(n2)
Esta es implementada por la funcin su m(x(n1: n2)).
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.
_x|n]
n2
n=n1
= x(n1) x(n2)
Esta es implementada por la funcin proJ(x(n1: n2)).
OP8) Energa de una seal
La energa de una secuencia x[n] est dado por:

x
= x(n)x

(n)

-
= |x(n)|
2

-

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:
P
x
=
1
N
|x(n)|
2
N-1


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

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]
La Secuencia Rampa-I
Ing. Armando Alberto Cajahuaringa Camaco Pgina 8

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.
EJEMPLO2.
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.
EJEMPLO3.
Genere y grafique cada una de las siguientes secuencias sobre el intervalo indicado.
a) x|n] = 2o|n +2] o|n 4] , S n S
b) x|n] = n(u|n] u|n 1u] +1uc
-0.3(n-10)
(u|n 1u] u|n 2u]), u n 2u)
c) x|n] = cos(u.u4nn) +u.2w|n], u n Su
Donde w[n] es una secuencia aleatoria
Gaussiana con media 0 y varianza 1.
d) x|n] = _
, S, 4, S, 2, 1, S, 4, S, 2, 1, S, 4, S, 2, 1,

_ ; 1u n 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 Pgina 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)');
EJEMPLO4.
Sea x|n] = _1, 2, S, 4, S, 6, 7, 6, S, 4, S, 2, 1

_. Determine y grafique las siguientes secuencias:
a) x1|n] = 2x|n S] Sx|n +4]
b) x2|n] = x|S n] +x|n]x|n 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 x|gxh|t y x|gadd.
[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 termino 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 x|gu|d y x|gmu|t.
[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')
EJEMPLO5.
Genera la seal de valores complejos
x|n] = e
(-.1+j.3)n
, 1 n 1 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);
Ing. Armando Alberto Cajahuaringa Camaco Pgina 10

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')
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 cunu que calcula
la convolucion entre dos secuencias de duracin finita. La funcin cunu 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, hecemos:
x = [3, 11, 7, 0, -1, 4],
h = [2, 3, 0, -5, 2, 1];
y = conv(x,h)
y =
6 31 47 6 -51
Para obtener los valores correctos de y[n]. Sin embargo, la funcin cunu 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 {x|n]; n
xh
n n
xe
] y {h|n]; n
hh
n n
he
] dos secuencias de duracin finita.
Para el ejemplo anterior, los puntos de inicio y fin de y[n] son:
n
yh
= n
xh
+n
hh
y n
ye
= n
xe
+n
he

Respectivamente. Una simple extensin de la funcin cunu, denominado cunu_m, 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);
EJEMPLO6.
Realice la convolucin de x[n] y h[n] anterior usando cunu_m.
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 Pgina 11

y|n] = _
6, S1, 47, 6, S1, S, 41, 18 , 22, S, 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 secuencias
arbitrarias, observaremos una semejanza muy cercana.
La correlacin cruzada r
yx
||] puede ser puesto en la forma
r
yx
||] = y||] x||]
Y la autocorrelacin r
xx
||] en la forma
r
xx
||] = x||] x||]
Por lo tanto, estas correlaciones pueden ser calculadas usando la funcin cunu si las secuen-
cias son de duracin finita.
EJEMPLO7.
En este ejemplo demostraremos una aplicacin de la correlacin cruzada de secuencias. Sea
x|n] = _
3, 11, 7, , 1, 4, 2

_
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)
Ing. Armando Alberto Cajahuaringa Camaco Pgina 12

axis([-5,10,-50,250]);xlabel('lag variable 1')
ylabel('rxy');title('Correlacion cruzada: Secuencia de ruido 2')

En la siguiente figura se observa
que la correlacin cruzada, en
efecto, tiene un pico en =2, lo
que implica que y[n] es similar a
x[n] desplazado en 2. Esta apro-
ximacin puede ser usada en
aplicaciones similar al procesa-
miento de seales de radar para
la identificacin y localizacin de
objetos.

Cabe mencionar que el toolbox de
Procesamiento de Seales de
Matlab, tiene una funcin llamada
xcuur para el clculo delas co-
rrelaciones de secuencias.
En su forma ms simple:
xcurr(x, y)
calcula la correlacin cruzada
entre los vectores x e y, mientras
que
xcurr(x)
calcula la autocorrelacin del vector x. Se genera resultados que son idnticos a la obtenida
por el uso apropiado de la funcin cunu_m. Sin embargo, la funcin xcurr no puede propor-
cionar la informacin de tiempo (como se hace con la funcin cunu_m), que luego debe ser
obtenido por otros medios. Por lo tanto, se hace hincapi en el uso de la funcin cunu_m.

ECUACIONES EN DIFERENCIA
Una rutina llamada ||ter 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.
EJEMPLO8.
Dado la siguiente ecuacin en diferencia
y|n] y|n 1] +. 9y|n 2] = x|n];
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?
Ing. Armando Alberto Cajahuaringa Camaco Pgina 13

Solucin
De la ecuacin en diferencias: b={1}; a={1, -1, 0.9};
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 ruutx.
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 ||ter como se muestra en el siguiente ejemplo.
EJEMPLO9.
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]:
(u.9)|n 1] = u.9(u.9)
n-1
u|n 1] = (u.9)
n
u|n 1]
O
|n] (u.9)|n 1] = (u.9)
n
u|n] (u.9)
n
u|n 1] = (u.9)
n
(u|n] u|n 1])
= (u.9)
n
o|n] = o|n]
El ltimo paso se sigue del hecho que la o|n] es diferente de cero nicamente para n=0. Por
definicin h[n] es la salida de un sistema LTI cuando la entrada es
y|n] u.9y|n 1] = x|n]
Ahora, la funcin ||ter de Matlab puede usarse para calcular la convolucin indirectamente.
b = [1]; a = [1,-0.9];
Ing. Armando Alberto Cajahuaringa Camaco Pgina 14

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])

La grafica obtenida evidencia que es igual al determinado por el clculo de la convolucin.
En el ejemplo 9, 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 para
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:
y|n] = y
ZI
|n] +y
ZS
|n]
Donde y
ZI
|n] 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,
y
ZS
|n], 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 Pgina 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.
Ing. Armando Alberto Cajahuaringa Camaco Pgina 16

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);
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

Вам также может понравиться