Sunteți pe pagina 1din 30

LABORATORIO DE PROCESAMIENTO DIGITAL

DE SEÑALES

Prof. Mg. OPORTO DIAZ Edgard

EXPERIENCIA 2
PROPIEDADES DE LAS SEÑALES

Medina Contreras Albert


07190122
Romero Lázaro César
06190090
Rivera Solorzano Tania
07190083
Tocas Vilca César
05190008

Miércoles 11 de Setiembre -2019


I. OBJETIVOS:

Analizar y comprobar las diversas propiedades de las señales discretas empleando


Matlab.

 Desplazamiento en el tiempo: adelanto y retardo


 Inversión en el tiempo
 Escalamiento en el tiempo: compresión y ensanchamiento

II. EQUIPOS Y MATERIALES:

Computadora con Matlab.

III. MARCO TEÓRICO:

Presentar los comandos de Matlab empleados con una descripción breve de su


utilidad. Incluya además las siguientes funciones útiles: zeros, ones, square, sawtooth,
find, grid, fliplr y numel.

Comando Descripción

abs Valor absoluto

acker Calcula la matriz K para ubicar los polos de A-BK, vea también place

axis Corrige la escala del gráfico actual, vea también plot, figure

bode Dibuja el diagrama de Bode, vea también logspace, margin, nyquist1

c2dm Pasa del sistema continuo al discreto

clf Borra la figura (use clg en Matlab 3.5)

conv Convolución (útil para multiplicar polinomios), vea también deconv

ctrb Matriz de controlabilidad, vea también obsv

deconv Deconvolución y división de polinomios, vea también conv

det Halla el determinante de una matriz

dimpulse Respuesta al impulso de sistemas lineales de tiempo discreto, vea también dstep

Diseño de reguladores LQR lineales cuadráticos para sistemas de tiempo discreto, vea
dlqr
también lqr
dlsim Simulación de sistemas lineales de tiempo discreto, vea también lsim

dstep Respuesta al escalón de sistemas lineales de tiempo discreto, vea también stairs

eig Calcula los autovalores de una matriz

eps Tolerancia numérica del Matlab

feedback Conexión de dos sistemas por realimentación.

figura Crea una nueva figura o redefine la figura actual , vea también subplot, axis

for Lazo For-Next

format Formato Numérico (dígitos significativos, exponentes)

function Para archivos-m del tipo función

grid Dibuja la grilla en el gráfico actual

gtext Agrega texto al gráfico actual, vea también text

help Ayuda

hold Mantiene el gráfico actual, vea también figure

if Ejecuta código condicionalmente

imag Devuelve la parte imaginaria de un número complejo, vea también real

impulse Respuesta al impulso de sistemas lineales de tiempo continuo, vea también step, lsim, dlsim

input Prompt para entrada de usuario

inv Inversa de una matriz

Genera grilla de coeficiente de amortiguamiento (zeta) y tiempo de establecimiento (sigma)


jgrid
constantes , vea también sgrid, sigrid, zgrid

legend Leyenda en un gráfico


length Largo de un vector, vea también size

linspace Devuelve un vector linealmente espaciado

lnyquist1 Produce un diagrama de Nyquist en escala logarítmica , vea también nyquist1

log logaritmo natural, también log10: logaritmo común

loglog Grafica usando doble escala logarítmica, también semilogx/semilogy

logspace Devuelve un vector logarítmicamente espaciado

lqr Diseño de reguladores lineales cuadráticos LQR para sistemas continuos, vea también dlqr

lsim Simula un sistema lineal, vea también step, impulse, dlsim.

margin Devuelve margen de ganancia, margen de fase, y frecuencias de cruce, vea también bode

norm Norma de un vector

Grafica el diagrama de Nyquist, vea también lnyquist1. Note que este comando reemplaza al
nyquist1
comando nyquist para obtener diagramas de Nyquist más precisos.

obsv Matriz de observabilidad, vea también ctrb

ones Devuelve un vector o matriz de unos, vea también ceros

place Calcula la matriz K para ubicar los polos de A-BK, vea también acker

plot Dibuja un gráfico, vea también figure, axis, subplot.

poly Devuelve el polinomio característico

polyadd Suma dos polinomios

polyval Valor numérico de un Polinomio

print Imprime el gráfico actual (a impresora o a archivo postscript)

pzmap Mapa de polos y ceros de sistemas lineales


rank Halla la cantidad de renglones o columnas linealmente independientes de una matriz

real Devuelve la parte real de un número complejo, vea también imag

rlocfind Halla el valor de k y los polos en el punto seleccionado

rlocus Grafica el lugar de raíces

roots halla las raíces de un polinomio

rscale Encuentra el factor de escala para un sistema con realimentación completa de estados

Set(gca,'Xtick',xticks,'Ytick',yticks) para controlar el número y el espaciado de marcas en los


set
ejes

series Interconexión en serie de sistemas Lineales que no dependan del tiempo

Genera grilla de razón de amortiguación (zeta) y frecuencia natural (Wn) constantes , vea
sgrid
también jgrid, sigrid, zgrid

sigrid Genera grilla de tiempo de establecimiento (sigma) constante, vea también jgrid, sgrid, zgrid

size Devuelve la dimensión de un vector o matriz, vea también length

sqrt Raíz cuadrada

Crea modelos en espacio de estado o convierte modelos LTI a espacio de estado, vea también
ss
tf

ss2tf representación Espacio de estado a función de transferencia , vea también tf2ss

ss2zp representación Espacio de estado a polo-cero ,vea también zp2ss

stairs Gráfico tipo escalera para respuesta discreta, vea también dstep

step Dibuja la respuesta al escalón , vea también impulse, lsim, dlsim.

subplot Divide la ventana Gráfico en secciones, vea también plot, figure

text Agrega texto al gráfico actual, vea también title, xlabel, ylabel, gtext

tf Crea una función de transferencia o convierte a función de transferencia, vea también ss


tf2ss Función de Transferencia a representación en espacio de estado, vea también ss2tf

tf2zp representación Función de Transferencia a Polo-cero , vea también zp2tf

title Agrega un título al gráfico actual

Devuelve el ancho de banda dado el coeficiente de amortiguamiento y el tiempo de


wbw
asentamiento o el tiempo de elevación.

Agrega una identificación al eje horizontal/vertical del gráfico actual, vea también title, text,
xlabel/ylabel
gtext

Zeros Devuelve un vector o matriz de ceros

Genera grilla de coeficiente de amortiguamiento (zeta) y frecuencia natural (Wn) constante ,


zgrid
vea también sgrid, jgrid,sigrid

zp2ss Polo-cero a representación en espacio de estado, vea también ss2zp

funciones útiles:

Comando Descripción

square Genera una onda cuadrada con período 2π para los elementos de la matriz de tiempo t.

Genera una onda de diente de sierra u onda triangular con período 2π para los elementos de la matriz de
sawtooth tiempo t con picos de -1 y 1 y aumenta linealmente con el tiempo con una pendiente de 1 / π en cualquier
otro momento .

find Buscar índices y valores de elementos no nulos

grid Mostrar u ocultar ejes líneas de cuadrícula

fliplr Flip array de izquierda a derecha

numel Número de elementos de matriz


IV. PROCEDIMIENTO:

01.- Desplazamiento de señales en el tiempo

Analice y compruebe los siguientes scripts para adelanto y retardo de


secuencias. Una de ellas logra resultados correctos.

%%01 desplazamiento de señales en el tiempo


%%script 1
n=0:4
x=[1 2 3 2 1];
subplot(2,1,1),stem(n,x)

%Desplazamiento de 3 unidades a la derecha


n=n+3;
y=x;
subplot(2,1,2),stem(n,y)

%%01 desplazamiento de señales en el tiempo


%%script 2
n_d=input('Entre retardo n_d: ') %Delay
n_a=input('Entre retardo adelanto n_a: ') %Advance

n1=-5:5; %Dominio original


x1=[-5 -4 -6 -2 -1 0 1 2 3 3 3]; %Rango de la secuencia para el
dominio dado
subplot(3,1,1);
stem(n1,x1);
title('Señal x1(n)'); %Señal sin desplazamiento
n2= n1+n_d; %Dominio de la secuencia con retraso
x2=x1; %La misma secuencia solo cambia su
dominio
subplot(3,1,2);
stem(n2,x2); %Secuencia con retardo
title('Señal con retardo x(n-n_d)');

n3=n1-n_a;
x3=x1;
subplot(3,1,3);
stem(n3,x3);
title('Señal con adelanto x(n+n_a)');

Figura con retardo 3 y adelanto 3

02.- Inversión en el tiempo

Analice y compruebe los siguientes scripts para invertir señales en el tiempo.

%%02 Inversion en el tiempo


%%script 1

n=-1:2;%[-1 0 1 2]
x=[3 1 -2 -4];
subplot(3,1,1)
stem(n,x);
axis([-3 3 -5 5]);
title('Señal x(n)');

c=fliplr(x); %invierte el vector


subplot(3,1,2);
stem(n,c); %y lo dibuja en el mismo dominio
title('Señal x(n) invertido pero con dominio incorrecto');

y=fliplr(-n);
subplot(3,1,3);
stem(y,c);
title('Señal invertida en el tiempo x(-n)');

%%02 Inversion en el tiempo


%%script 2
t1=[-1 0 1 2 3 4];
%x=square(t1,50);
%x=sawtooth(2*pi*t1)
x1=[1 2 3 4 5 6]
stem(t1,x1);

%procedimniento equivalente a: y=fliplr(-n)


t2=-t1;
longitud=length(t1);
t2=t2(longitud:-1:1);
x2=x1(longitud:-1:1);
figure(2);
stem(t2,x2);
Figura original como ejemplo

Figura ejemplo invertida


03.- Escalamiento en el tiempo de señales

Analice y compruebe los siguientes scripts para compresión y escalamiento de


secuencias.

%%03 Escalamiento en el tiempo


%%compresion en el tiempo
%%script 1
t1=[-10:1:10];
length(t1)
x1=[1 2 3 4 5 6 7 8 9 10 10 10 9 8 7 6 5 4 3 2 1];
length(x1)
subplot(2,1,1);
stem(t1,x1)
axis([-10 10 0 11]);

%x2(t)=x1(2*t)
longitud_t1=length(t1)
t=t1/2;
t2=t(1:2:longitud_t1);
longitud_t2=length(t2); %Nuevo vector de tiempo, comprimido
x2=x1(1:2:longitud_t1); %Nueva secuencia, comprimida

subplot(2,1,2);
stem(t2,x2);
axis([-10 10 0 10]);

Observamos que la comprensión entre 2 se realiza de forma correcta y tomando los


puntos enteros y así evitando el error de tomar decimales.
%%03 Escalamiento en el tiempo
%%Escalamiento en el tiempo o ampliacion
%%script 2
t1=[-10:1:10];
x1=[1 2 3 4 5 6 7 8 9 10 10 10 9 8 7 6 5 4 3 2 1];
subplot(2,1,1);
stem(t1,x1);
axis([-20 20 0 10]);

%x2(t)=x1(t/2);
longitud_t1=length(t1);
Inicial_t1=t1(1);
Final_t1=t1(longitud_t1);
t2=(2*Inicial_t1:1:2*Final_t1) %Nuevo tiempo, al doble de duración
longitud_t2=length(t2)

for i=1:longitud_t2
if mod(i,2)==0
x2(i)=x1(i/2); %Nueva secuencia, comprimida
else
x2(i)=0;
end
end
subplot(2,1,2);
stem(t2,x2);
axis([-20 20 0 10]);

En este caso de expansión, el resultado queda espaciado por valores intermedios de 0


para evitar este resultado corregiremos este script en el ejercicio propuesto N1 y
veremos un ejemplo en el ejercicio propuesto n3.
ROBLEMAS PROPEUSTOS

01 – Genere funciones para los scripts dados:


Funciones:
seq_adv Adelanto de secuencia

Elaboramos en el editor:

%funcion seq_adv
%adelanto de secuencia
function [x2,n2] = seq_adv(x1,n1,adelanto)
%n_a=input('Entre adelanto n_a: ')
n_a=adelanto;
n2= n1-n_a; %Dominio de la secuencia con
retraso
x2=x1; %La misma secuencia solo cambia
su dominio

mint=min(n1);
maxt=max(n1);
minx=min(x1);
maxx=max(x1);
if mint>min(n2)
mint=min(n2)
end
if maxt<max(n2)
maxt=max(n2)
end
if minx>min(x2)
minx=min(x2)
end
if maxx<max(x2)
maxx=max(x2)
end
if minx>0
minx=0;
elseif maxx<0
maxx=0;
end
subplot(2,1,1);
stem(n1,x1);
axis([mint maxt minx maxx]);
subplot(2,1,2);
stem(n2,x2);
axis([mint maxt minx maxx]);
end

Hacemos un ejemplo aplicativo definiendo un vector x1 y n1, luego le damos un


adelanto por ejemplo de 3 y tendremos lo siguiente.
Obteniendo la siguiente gráfica:
seq_del Retardo de secuencia

Elaboramos en el editor

%funcion seq_del
%funcion retardo de secuencia
function [x2,n2] = seq_del(x1,n1,retardo)
%n_a=input('Entre retardo n_a: ')
n_a=retardo;
n2= n1+n_a; %Dominio de la secuencia con
retraso
x2=x1; %La misma secuencia solo cambia su
dominio
mint=min(n1);
maxt=max(n1);
minx=min(x1);
maxx=max(x1);

if mint>min(n2)
mint=min(n2)
end
if maxt<max(n2)
maxt=max(n2)
end
if minx>min(x2)
minx=min(x2)
end
if maxx<max(x2)
maxx=max(x2)
end
if minx>0
minx=0;
elseif maxx<0
maxx=0;
end
subplot(2,1,1);
stem(n1,x1);
axis([mint maxt minx maxx]);
subplot(2,1,2);
stem(n2,x2);
axis([mint maxt minx maxx]);

end

Realizamos el siguiente ejemplo aplicativo, dando dos vectores y luego un


retraso de 4.
Obteniendo una gráfica:
seq_inv Inversión de secuencia

Elaboramos en el editor la función inversión


%funcion seq_inv
%inversion de secuencia
function [x2,n2] = seq_inv(x1,n1)
x2=fliplr(x1); %invierte el vector
n2=fliplr(-n1); %invierte el vector

mint=min(n1);
maxt=max(n1);
minx=min(x1);
maxx=max(x1);

if mint>min(n2)
mint=min(n2)
end
if maxt<max(n2)
maxt=max(n2)
end
if minx>min(x2)
minx=min(x2)
end
if maxx<max(x2)
maxx=max(x2)
end
if minx>0
minx=0;
elseif maxx<0
maxx=0;
end
subplot(2,1,1);
stem(n1,x1);
axis([mint maxt minx maxx]);
subplot(2,1,2);
stem(n2,x2);
axis([mint maxt minx maxx]);
end

seq_cmp Compresión de secuencia

Elaboramos en el editor la siguiente función:

%funcion seq_cpm
%comprension de secuencia
function [x2,n2] = seq_cpm(x1,n1,compres)
%longitud_n1=input('Comprension longitud_n1: ')
longitud_n1=length(n1);
n2=n1/compres;
x2=x1;
j=1;
for i=1:(length(n2)-1)
%escoger el valor redondeado
nn2=round(n2(i));
if nn2<n2(i)
nn2=nn2+1;
end
if nn2< n2(i+1)
nc(j)=nn2;

delta=((x2(i+1)-x2(i)))/(n2(i+1)-n2(i))*(nn2-n2(i));
%delta=0;
xc(j)=x2(i)+delta;
j=j+1;
end
end
%x1=x2;
%n1=n2;
n2=nc;
x2=xc;

mint=min(n1);
maxt=max(n1);
minx=min(x1);
maxx=max(x1);
if mint>min(n2)
mint=min(n2)
end
if maxt<max(n2)
maxt=max(n2)
end
if minx>min(x2)
minx=min(x2)
end
if maxx<max(x2)
maxx=max(x2)
end
if minx>0
minx=0;
elseif maxx<0
maxx=0;
end
subplot(2,1,1);
stem(n1,x1);
axis([mint maxt minx maxx]);
subplot(2,1,2);
stem(n2,x2);
axis([mint maxt minx maxx]);
end

seq_wid Ensanchamiento de secuencia


%funcion seq_wid
%ensanchamiento de secuencia
function [x2,t2] = seq_wid(x1,t1,ancho)

n1=ancho*t1;
t2=n1(1);
x2=x1(1);
for i=1:(length(n1)-1)
auxt=t1(i+1)-t1(i);
t2=[t2 (n1(i)+auxt): auxt: n1(i+1)]
auxx=(x1(i+1)-x1(i))/ancho;
%%solucion cuando el valor x1(i)=x1(i+1) ":auxx:" se vuelve
ambiguo
if auxx~=0
x2=[x2 (x1(i)+auxx): auxx: x1(i+1)];
else
xx2=ones(1,ancho);
xx2=xx2*x1(i);
x2=[x2 xx2]
end
%%con redondeo:
x2=round(x2);
% for j=1:ancho
% x2=[x2 auxx];
% %x2=[x2 (x1(i)+auxx): auxx: x1(i+1)];
% end
%x2=[x2 x2(i+1)];
end

mint=min(t1);
maxt=max(t1);
minx=min(x1);
maxx=max(x1);
if mint>min(t2)
mint=min(t2)
end
if maxt<max(t2)
maxt=max(t2)
end
if minx>min(x2)
minx=min(x2)
end
if maxx<max(x2)
maxx=max(x2)
end
if minx>0
minx=0;
elseif maxx<0
maxx=0;
end
subplot(2,1,1);
stem(t1,x1);
axis([mint maxt minx maxx]);
subplot(2,1,2);
stem(t2,x2);
axis([mint maxt minx maxx]);
end
02 – Empleando las funciones creadas

a) Defina una secuencia x[n], con dominio y rango apropiados, y


determine/grafique:
- Si es par o impar
- Sus componentes par y/o impar
- x[-n]
- x[3n]
- x[n/3] – x[-n+1]

b) Dada las secuencias x1[n], x2[n] y x3[n], definirlas en Matlab.

Determine/grafique:
- x1[n], x2[n] y x3[n]
- x1[2n] - x2[-n] + x3[-n+4]
- x1[0.5n] - x2[2n] + x3[-n-2]
- x1[n/a] - x2[b*n] + x3[-n+c] (asuma a, b y c)

Solución 2a.

%Lab2_03_propuesto2.m
%PROBLEMAS PROPUESTOS
%02 empleando las funciones creadas :
%a
T=0.1;
n1=[-5:1:5];
x1=[6 2 3 7 5 5 5 7 3 2 6];
%%llamamosa la funcion inversor
figure(1)
[x2,n2] = seq_inv(x1,n1);
if x2==x1
title('es funcion par')
elseif x2==-x1
title('es funcion impar')
end
%%falta componentes: PAR E IMPAR PREGUNTA 03-02
%% x[-n]
x1=[6 2 3 7 5 5 5 2 3 -1 -2];
figure(2)
[x3,n3] = seq_inv(x1,n1);
%% x[3n]
figure(3)
[x4,t4] = seq_wid(x1,n1,3);
%% x[n/3]+(-x[-n+1])
figure(4)
[x5,n5]=seq_cpm(x1,n1,3); %%comprimimos x[n/3]
[x6,n6]=seq_inv(x1,n1); %%invertimos x[-n]
[x6,n6]=seq_del(-x6,n6,1); %%hacemos un retardo x[-n+1] luego (-
x[-n+1])
[x7,n7]=seq_sum(x5,n5,x6,n6);

Obteniendo las siguientes gráficas:

Resultado de graficar: x[n] y evaluar si es una función par

Resultado de graficar: x[n1] y x[-n1]


Resultado de graficar: x[n1] y x[3n1]

Resultado de graficar: x[n/3] +(– x[-n+1])


Solución 2B.
%Lab2_03_propuesto2_b.m
%PROBLEMAS PROPUESTOS
%02 empleando las funciones creadas :
%b
n1=[-5:5];
x1=zeros(1,length(n1));
x1=[x1(1:5)+(-1) x1(6:length(n1))+(1)];
n2=[-2 -1 0 7];
x2=[1 2 3 1];
n3=[-4:3];%[-4 -3 -2 -1 0 1 2 3]
x3=[-1 2 2 1 1 2 1 -1];

%%graficas x1[n1] x2[n2] y x3[n3]


figure(1)
subplot(3,1,1)
stem(n1,x1);
subplot(3,1,2)
stem(n2,x2);
subplot(3,1,3)
stem(n3,x3);

%A% x1[2n]-x2[-n]+x3[-n+4]
figure(2)
[ax1,an1] = seq_wid(x1,n1,2);
[ax2,an2] = seq_inv(-x2,n2);
[ax3,an3] = seq_inv(x3,n3);
[ax3,an3] = seq_del(-ax3,an3,1);
[ax,an]=seq_sum(ax1,an1,ax2,an2);
[ax,an]=seq_sum(ax,an,ax3,an3);
stem4(ax1,an1,ax2,an2,ax3,an3,ax,an);

%B% x1[n/2]-x2[2n]+x3[-n-2]
figure(3)
[ax1,an1] = seq_cpm(x1,n1,2);
[ax2,an2] = seq_wid(-x2,n2,2);
[ax3,an3] = seq_inv(x3,n3);
[ax3,an3] = seq_adv(x3,n3,2);
stem4(ax1,an1,ax2,an2,ax3,an3,ax,an);

%C% x1[n/a]-x2[b*n]+x3[-n+c]
a=2;
b=2;
c=3;
figure(4)
[ax1,an1] = seq_cpm(x1,n1,a);
[ax2,an2] = seq_wid(-x2,n2,b);
[ax3,an3] = seq_inv(x3,n3);
[ax3,an3] = seq_adv(x3,n3,c);
stem4(ax1,an1,ax2,an2,ax3,an3,ax,an);
Gráfica de las tres funciones definidas para los ejercicios
x1[n], x2[n] y x3[n]

(figure1)
Resultado de x1[2n] +(- x2[-n]) + x3[-n+4]

Figure(2)
Resultado de graficar x1[0.5n] - x2[2n] + x3[-n-2]

Figure(3)
Resultado de Graficar: x1[n/a] - x2[b*n] + x3[-n+c] ( a=2, b=2 y c=3)

Figure(4)
03 – Para el caso de ensanchamiento de secuencia, modificar la función
creada tal que para los índices donde no existan valores definidos en la
secuencia original se considere como valor el promedio entero
(redondeado) de los valores contiguos de la secuencia original (en lugar
de ceros).

Reemplazar los ceros por el promedio entero de los valores contiguos

SOLUCION 3

%Lab2_03_propuesto2_b.m
%PROBLEMAS PROPUESTOS
%03 correcion de ensanchamiento:
n1=[-10:1:10];
x1=[1 2 3 4 5 6 7 8 9 10 10 10 9 8 7 6 5 4 3 2 1];
[x2,t2] = seq_wid(x1,n1,2);
Resultado de aplicar el script corregido y además como se indico en el ejercicio
también rellenamos los ceros con valores medios entre cada valor vecino y
tomando como valor correcto su número redondeado.
V. OBSERVACIONES Y CONCLUCIONES:

1) Comprobamos las diversas propiedades de las señales discretas empleando


nuestro programa Matlab.
2) Empleando códigos y algoritmos en Matlab comprobamos el desplazamiento
en el tiempo tanto el adelanto como el retardo.
3) De la misma manera comprobamos la inversión en el tiempo utilizando ciertos
parámetros.
4) Utilizando los Scripts propuestos en la guía demostramos el escalamiento en el
tiempo, tanto la comprensión como el ensanchamiento.

S-ar putea să vă placă și