Beruflich Dokumente
Kultur Dokumente
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
Nmeros
Ejemplo: Generar los nmeros reales z1 = 3, z2 = 4.
>> Z1 = 3;
>> Z2 = 4;
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
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
S = 1 + 3 + 5 + 99
Enfoque vectorial:
>> I = 1: 2: 99; % Crea el vector i
>> S = sum(i); % obtiene la suma S
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
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)
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.
[ ]= , ;
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:
Ntese que las dos ltimas lneas pueden combinarse en una sola.
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);
[ ]= ( ) + + ( )
[ ]= ( ) ( )
= ( ) ( ) = | ( )|
= | ( )|
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)
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));
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)');
EJEMPLO3.
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 .
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')
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:
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
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')
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};
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])
[ ]= [ ]+ [ ]
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
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:
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);
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].