PDS-Lab 03 SDLIT 20 I
PDS-Lab 03 SDLIT 20 I
PDS-Lab 03 SDLIT 20 I
3.1 OBJETIVO
Al finalizar este Laboratorio, el estudiante será capaz de comprender y manejar la operación de
Convolución en sistemas discretos, que cumplen con la propiedad de linealidad e invarianza en
el tiempo.
3.2 EQUIPOS Y MATERIALES REQUERIDOS
El equipo de experimentación necesario para realizar el presente laboratorio es:
1. PC INTEL CORE i5 o superior.
2. Sistema Operativo Windows 10.
3.3 SOFTWARE REQUERIDO
El siguiente software es necesario para realizar este laboratorio:
1. Octave V5.2, https://www.gnu.org/software/octave/
2. Librerías y archivos de soporte.
Un sistema de tiempo discreto transforma una señal de entrada en el dominio del tiempo para
generar una señal de salida con las propiedades más deseables mediante la aplicación de un
algoritmo compuesto de operaciones sencillas aplicada a la señal de entrada y a sus versiones
retardadas.
En el Ejercicio 3.1 se ilustra la aplicación de un sistema de tiempo discreto descrito por la ecuación
3.1 para el suavizado de los datos alterados por la adición de ruido aleatorio. Luego se considerará
la experimentación de otros sistemas discretos y estudiar sus propiedades.
Ejercicio 3.1
En la ecuación 3.1 se presenta la función de que este filtro suavizado de cinco puntos considerado
como y[n] depende de las muestras de entrada actual x[n] y pasadas de la forma x[n - k], el sistema
es causal y para este ejemplo queda descrito por la ecuación:
y[n] = 1/5{x[n] + x[n - 1] + x[n - 2] + x[n - 3] + x[n - 4]} (3.1)
Generalizando la ecuación anterior se obtiene:
M 1
1
y n x n k (3.2)
M k 0
que define un filtro para el suavizado de M puntos. El sistema de la ecuación (3.2) también se le
conoce como filtro promedio móvil. Se ilustra en este ejercicio el uso en el filtrado del ruido
presente en una señal senoidal discreta, cuyo resultado se muestra en la Fig. 3.1.
clear,clc,
# Laboratorio N°3 - Ejercicio N°3.1: Filtro Promedio
# Móvil de M puntos.
# ----------------------------------------------------
# Generación de la señal discreta de entrada
fm = 8000; # Frecuencia de muestreo en Hz.
Tm = 1/fm; # Periodo de muestreo en segundos
f = 100; # frecuencia de la sinusoide en Hz.
n = 0:Tm:0.10-Tm;
N = length(n); # Longitud de los datos del proceso
s = cos(2*pi*f*n); # Sinusoide de baja frecuencia
r = 0.5*(0.5-rand(1,N));# Secuencia de ruido
x = s+r;
# Implementación del Filtro Promedio Móvil
M = 8; # Longitud de datos deseado
num = ones(1,M);
y = filter(num,1,xn)/M; # Cálculo del Promedio Móvil
# utilizando la función filter
# Presentación de la señal discreta de la entrada y salida
subplot(2,2,1);
plot(n,s,'.r');grid;
axis([0, 0.10, -1.5, 1.5]);
xlabel('Tiempo n (Seg)'); ylabel('Amplitud');
title('Señal discreta N° 1');
subplot(2,2,2);
plot(n,r,'b');grid;
axis([0, 0.10, -1.5, 1.5]);
xlabel('Tiempo n (Seg)'); ylabel('Amplitud');
title('Señal discreta ruido N° 2');
subplot(2,2,3);
plot(n,x,'.r'); grid;
axis([0, 0.10, -1.5, 1.5]);
xlabel('Tiempo n (Seg)'); ylabel('Amplitud');
title('Señal discreta de entrada');
subplot(2,2,4);
plot(n,y,'.r'); grid;
axis([0, 0.10, -1.5, 1.5]);
xlabel('Tiempo n (Seg)'); ylabel('Amplitud');
title('Señal discreta de salida');
axis;
Preguntas:
3.1 Ejecutar el código anterior para M = 3 para generar la señal de salida con x[n] = s[n]
+ r[n] como entrada. ¿Qué método de procesamiento se aplicaría para comparar el nivel
del ruido de la entrada x[n] suprimida por el sistema discreto por medio de este código en
comparación con los resultados para M = 8?
3.2 Si al sistema discreto y[n] = 0.5(x[n] + x[n-1]) se cambia a y[n] = 0.5(x[n] - x[n-1]),
¿Cuál será su efecto sobre la entrada x[n] = s[n] + rn[n]?
3.3 Modifica el código del programa del Ejercicio N° 3.1, y verifica el efecto del filtro sobre la
suma de las señales discretas x1[n] = cos(2*π*0.05*n) y x2[n] = cos(2*π*0.47*n), es decir sobre
x[n] = x1[n] + x2[n] para M = 3. ¿Qué componente de la señal discreta x[n] es suprimida?
Propiedad de linealidad
Por lo tanto, si la salida de un sistema continuo es y[n] y su entrada x[n], entonces la relación entre
ambas puede expresarse como:
donde el operador T [ ] denota la transformación hecha a la señal discreta por el sistema. De esta
manera, para las entradas x1[n] y x2[n], el sistema producirá dos salidas:
y1[n] = T [x1[n]] (3.4)
y2[n] = T [x2[n]] (3.5)
El sistema será lineal, si para dos valores escalares α1 y α2 cualesquiera, se cumple que:
T[α1x1[n] + α2x2[n]] = T{α1x1[n]} + T{α2x2[n]} (3.6)
Esta propiedad de linealidad expresado en forma general es como sigue:
n n
T i xi n T i xi n
i 1 i 1
para n entradas diferentes con yi[n] = T [αi xi[n]]
Como ejemplo vamos a determinar si el siguiente sistema discreto es lineal:
y[n] = nx[n] (3.7)
Sean x1[n] y x2[n] entradas arbitrarias y α1, α2 constantes. Entonces y1[n]=α1nx1[n] e y2[n]=α2nx2[n].
Sea x3[n] = α1x1[n] + α2x2[n] una combinación lineal cualquiera de las entradas anteriores. Por lo
tanto, y3[n] = nx3[n] = n{α1x1[n] + α2x2[n]} = α1nx1[n] + α2nx2[n].
Ejercicio 3.2
Sea el sistema discreto expresado por la ecuación (3.2). A continuación, se demuestra que este
sistema discreto es lineal, cuyo resultado grafico se presenta en la Fig. 3.1. En él se observa que
los datos de la suma de las salidas independientes coinciden con los datos de la salida de la
suma de las entradas independientes (cada punto verde y círculo rojo coinciden). Para este fin
se ha utilizado el siguiente código de programa utilizando Octave:
clear;clf;clc;
# -----------------------------------------------------------
# Laboratorio N° 3: Ejercicio 3.2
# Verificación de la linealidad de un sistema discreto
# Determinar si el sistema:
# y[n]=1/M{x[n]+x[n-1]+...+x[n-M-1]} es lineal
# -----------------------------------------------------------
# Generamos 2 secuencia arbitrarias con los mismos elementos
N=100;
nn=0:N-1;
xn1=0.5*nn;
xn2=sin(2*pi*0.3*nn);
#
# Generamos las salidas para cada una de las entradas
alfa1=0.1;
alfa2=0.5;
3.4 Modifica el código del programa del Ejercicio N° 3.2, y demuestre si el sistema discreto
dado por y[n] = x[n] - x[n-1] x[n+1] es lineal. Previamente, demostrar analíticamente si el
sistema discreto propuesto es o no lineal.
Ejercicio 3.3
Sea el sistema discreto del Filtro de Promedio Móvil expresado por la ecuación (3.2).
Se demuestra que este sistema discreto es invariante en el tiempo que está representado en la Fig.
3.3, donde se ve que los datos de la salida actual coinciden con los datos de la salida desplazada
(cada muestra azul y rojo coinciden al desplazar uno de ellos en la cantidad k de retardo de
prueba). Para este fin se ha utilizado el siguiente código de programa utilizando Octave.
clear;clf;clc;
# -----------------------------------------------------------
# Laboratorio N° 3: Ejercicio 3.3
# Invariancia en el tiempo
# Determinar si el sistema discreto Filtro Móvil es invariante
# -----------------------------------------------------------
# Generación de la secuencia de entrada
n = 0:40;
k = 3; # Retardo de prueba
xn=cos(2*pi*0.0625*n)+cos(2*pi*0.625*n);
#
M = 4; # Número de puntos para evaluación del promedio móvil
#
# Secuencia de entrada x[n] retardada en k unidades de tiempo
xnk = [zeros(1,k) xn];
# Parametros del Filtro móvil
num = ones(1,4);
den=1;
# Cálculo de la salida y[n]
yn = (filter(num,den,xn))/M;
# Calculo de la salida ynk[n]
ynk = filter(num,den,xnk)/M;
subplot(3,1,2)
stem(n,ynk(1:41),'r');
ylabel('Amplitud');
title(['Salida debido al retardo de la entrada x[n-
',num2str(k),']']);grid;
subplot(3,1,3)
stem(n,difn,'bk');
xlabel('Tiempo n'); ylabel('Amplitud');
title('Señal diferencia');grid;
Preguntas:
3.5 Ejecute el código del Ejercicio 3.3 y compare las secuencias de salida y[n] e y[n-k] para k=10.
¿Cuál es la relación entre estas dos secuencias? ¿Es este sistema invariante en el tiempo?
3.6 Repetir la pregunta 3.5 para tres funciones coseno con diferentes de valores de frecuencias de
entrada. ¿ Es este sistema discreto invariante en el tiempo?
3.7 Considere otro sistema discreto definido por:
y[n] = nx[n] + x[n - 1] (3.9)
Modificar el código del Ejercicio 3.3 para simular y determinar si este sistema discreto es
invariante en el tiempo o no.
y que al incrementarse los valores de k se verifica que el valor de la suma de |h[k]| en cada paso
de la iteración tiende a converger a un valor finito, si el sistema discreto es estable. Si el valor de
|h[k]| tiende al final en un valor menor que 10-6, entonces se asume que la suma S de la ecuación
(3.10) converge y S tiende a un valor finito, menor que ∞.
Ejercicio 3.4
En este ejercicio utilizaremos al sistema discreto Filtro de Promedio Móvil expresado por la
ecuación (3.2) para evaluar su estabilidad para M = 5.
Como resultado, se demuestra que este sistema discreto es estable por que el valor del |h[n]| es
menor que 10-6 el valor de S es 1. Para este fin se ha utilizado el siguiente código de programa
utilizando Octave.
Del punto de vista de la gráfica de la respuesta impulsional presentada en la Fig. 3.4, se observa
que la secuencia es acotada.
clear;clf;clc;
# -----------------------------------------------------------
# Laboratorio N° 3: Ejercicio 3.4
# Estabilidad de un sistema SDLIT
# Determinar si el sistema discreto Promedio Móvil es estable
# -----------------------------------------------------------
# Parámetros del sistema discreto Promedio Móvil
# Para M = 5, numera = [1 1 1 1 1] y denomina = [1];
FLAVIO N. CARRILLO GOMERO - 2020
21
N = 200;
n = 0: N;
# Cálculo del h[n] del Promedio Móvil
M=5;
numera = ones(1,M);
denomina=1;
hn = (1/M).*impz(numera,denomina,N+1);
# Evaluacion si h[n] es acotada
suma = 0;
for k = 1:N+1;
suma = suma + abs(hn(k));
if abs(hn(k)) < 10^(-6),
break,
end
end
Preguntas:
3.8 Ejecute el código del Ejercicio 3.4 para otros valores de M y demostrar para cada uno de ellos
si el sistema discreto Promedio Móvil es estable.
3.9 Determinar la estabilidad en forma analítica y luego verificar mediante el uso y
modificaciones necesarias del código del Ejercicio 3.4, de los siguientes sistemas discretos:
(a) y[n] = x[4-n]
(b) y[n] = 1/4y[n - 1] + x[n], n ≥ 0, y[-1] = 0
Ejercicio 3.5
En Octave, una forma de calcular la integral anterior es utilizando la función conv(x,h). Deberá
notarse que si la señal de entrada x(t) ≠ 0, t1 < t < t2 y la respuesta impulsional h(t) ≠ 0, t3 < t < t4
la salida será y(t) ≠ 0, t1 + t2 < t < t2 + t4. Por ejemplo:
t t t t
Si, x t rect y h t rect , entonces: y t rect * rect
2
2
2 2
Mediante Octave se desarrolló la operación de convolución entre x(t) y h(t), cuyo resultado es
mostrada en la Fig. 3.5.
clear;clf;clc;
# -----------------------------------------------------------
# Laboratorio N° 3: Ejercicio 3.5
# Convolución en tiempo continuo
# -----------------------------------------------------------
t=-1.2:0.0001:1.2;
xt=zeros(size(t));
ht=zeros(size(t));
y=conv(xt,ht);
tt=t(1)+t(1):0.0001:t(end)+t(end);
subplot(3,1,3),plot(tt,y*0.0001,'k');
xlabel('t seg');ylabel('y(t)'); grid on;
title('Convolución x(t)*h(t)');
axis([-2.5, 2.5, -0.2, 2.2]);
Preguntas:
3.10 Considere el sistema continuo LIT definido por la respuesta impulsional h(t)=e-(t/0.02)[u(t)-
u(t-0.05)], para t en segundos y -ꝏ < t < ꝏ.
Genere la señal x(t)=cos(200πt) para -0.2 < t < 0.2 segundos. Desarrolle en forma analítica el
cálculo de la señal de salida y(t) y luego construya en Octave el programa pertinente que
compruebe lo hallado analíticamente.
donde hk[n] es la respuesta del sistema al impulso desplazado δ[n−k]. Además, si se considera
que el sistema discreto posee la propiedad de ser invariante en el tiempo, entonces:
y n x k T n k x k h n k x n * n
k k
(3.15)
donde hk[n] es la respuesta impulsional del sistema discreto (salida del sistema cuando en la
entrada se aplica la secuencia δ[n]). Al operador ‘*‘se le denomina operación de la convolución.
En consecuencia, se puede concluir que para conocer la respuesta de un sistema SDLIT ante
cualquier entrada, se requiere conocer solamente su respuesta impulsional h[n] del sistema
discreto.
La convolución es una herramienta matemática empleada en el Procesamiento Digital de la Señal,
y aunque se ha definido como un operador que permite determinar la respuesta de un sistema
SDLIT, también puede operar sobre dos señales arbitrarias.
Ejercicio 3.6
La convolución de dos secuencias de longitud finita siempre proporciona una secuencia con un
número finito de muestras. En este ejercicio se usarán las siguientes secuencias:
FLAVIO N. CARRILLO GOMERO - 2020
24
δ[n] h[n]
Ejercicio 3.7
En este ejercicio, se va a verificar y[n] como el resultado analítico de la convolución discreta
entre las secuencias x[n] y h[n] dadas por las siguientes expresiones:
x n cos n u n 4 h n e0.2nu n 5
(a) Determina la expresión de cálculo de y[n] convolucionando x[n] con h[n].
(b) Ejecuta el siguiente código y verifica que este programa es una solución de cálculo, y luego
verifica y compara resultados desarrollando otro código utilizando el comando conv de Octave:
clear,clf,clc,
# -----------------------------------------------------------
# Laboratorio N° 3: Ejercicio 3.7
# Convolución Discreta
# -----------------------------------------------------------
#
N=70;
nn=0:N; #rango de la variable discreta temporal
#
# Desarrollo de x[n]
K=4; # Retardo de la secuencia de entrada x[n]
Omega=0.20*pi; # Frecuencia digital de la funcion coseno
xn=cos(Omega*nn).*[zeros(1, K),ones(1, length(nn)-K)];
#
# Desarrollo de h[n]
M=5; # Retardo de la respuesta impulsional h[n]
hn=(exp(-0.2*(nn-M))).*[zeros(1, M),ones(1, length(nn)-M)];
# Cálculo de y[n]
for n=0:N
for k=K:n-M
ydn(n,k)=exp(-(0.2*n)).*exp(0.2*(k))*cos(Omega*k);
end
end
yn=sum(ydn,2);# sum(x) suma todos los elementos del vector x
# sum(A,1) suma cada columna de la matriz A,
# sum(A,2) suma cada fila de la matriz A;
# Gráficos resultado
# Grafico de x[n]
subplot(3,1,1);
stem(nn,xn,'r');grid;
axis([0, 70, -1.0, 1.0]);
xlabel('Tiempo n (Seg)'); ylabel('Amplitud');
title('Señal discreta x[n]');
# Grafico de h[n]
subplot(3,1,2);
stem(nn,hn,'k');grid;
axis([0, 70, 0, 1.0]);
xlabel('Tiempo n (Seg)'); ylabel('Amplitud');
title('Respuesta impulsional del sistema discreto h[n]');
# Gráfico de y[n]
subplot(3,1,3);
stem(yn,'b'); grid;
axis([0, 70, -1, 1]);
xlabel('Tiempo n (Seg)'); ylabel('Amplitud');
title('Señal discreta de salida y[n] ');
Ejercicio 3.10
Utilizando el editor de Octave y sin utilizar el comando conv(), programa una función
ConvCompleja.m para calcular la convolución de dos secuencias complejas, cuya cabecera sea:
Carga un archivo denominado complejodat.txt que debe contener los vectores complejos x
e y que debes elaborar previamente. Calcula la convolución de ambos vectores utilizando la
función cuyo código acabas de desarrollar. Verifica tus resultados utilizando la función conv().
3.9 CORRELACIÓN CRUZADA
En esta sección vamos a analizar la operación de correlación entre señales discretas, que es de
gran interés de cara a las aplicaciones. Se define la correlación cruzada entre dos señales
discretas como:
rxy k x n y n k , k = 0, ±1, ±2, .... (3.18)
n
donde:
* El parámetro k representa el desplazamiento o retardo (lag) retardo temporal entre dos señales.
* La secuencia y[n - k] se desplaza k muestras a la derecha respecto de x[n] para k > 0 y k muestras
hacia la izquierda para k < 0.
* El orden de los subíndices en rxy[k] indica que la secuencia x[n] queda fija e y[n] se desplaza.
* rxy k x n y n k y n k x n y m x m k r k
yx (3.19)
n n m
del cual se observa que la correlación cruzada entre dos secuencias x[n] e y[n] se puede obtener
por medio de la convolución de y[n] con el espejo de x[n].
Para evitar que el resultado de la correlación dependa de las secuencias consideradas se definen
los coeficientes de correlación y autocorrelación normalizada de la siguiente forma:
rxy k
xy k .... correlación normalizada (3.23)
rxx 0 ryy 0
rxx k
xx k .... autocorrelación normalizada (3.24)
rxx 0
clear;clf;clc;
# -----------------------------------------------------------
# Laboratorio N° 3: Ejercicio 3.5
# Correlación en tiempo discreto
# -----------------------------------------------------------
# ------------------------------------
# Secuencia x[n]
# ------------------------------------
C1=0; U1=3 ; C2=7 ;
N=C1+U1+C2;
M=-3;
n=-N:N; #rango de la variable discreta temporal
xn =[zeros(1,N+C1+M),ones(1,U1),zeros(1,C2-M+1)];
subplot(4,1,1),stem(n,xn,'r');
xlabel('n seg'); ylabel('x[n]');grid on;
title('Secuencia x[n]');
axis([-11, 11, -0.2, 1.2]);
# ------------------------------------
# Secuencia espejo de x[n]
# ------------------------------------
xne =[zeros(1,C2-M+1),ones(1,U1),zeros(1,N+C1+M)];
subplot(4,1,2),stem(n,xne,'r');
xlabel('n seg'); ylabel('x[-n]');grid on;
title('Secuencia espejo de x[n]');
axis([-11, 11, -0.2, 1.2]);
# ------------------------------------
# Secuencia y[n]
# ------------------------------------
K=1; # Retardo de la secuencia de entrada x[n]
yn = [zeros(1,N+C1+K),ones(1,U1),zeros(1,C2-K+1)];
subplot(4,1,3),stem(n,yn);
xlabel('n seg');ylabel('y[n]');grid on;
title('Secuencia y[n]');
axis([-11 11, -0.2, 1.2]);
rxy=conv(xne,yn);
nn=n(1)+n(1):n(end)+n(end);
subplot(4,1,4),stem(nn,rxy,'k');
xlabel('n seg');ylabel('y[n]'); grid on;
title('Correlación rxy[k] = y[k]*x[-k]');
axis([-11, 11, -0.2, 3.2]);
FLAVIO N. CARRILLO GOMERO - 2020
29
Ejercicio 3.12
Desarrolla un código en Octave para calcular la función de correlación cruzada discreta definida
en (3.18) utilizando la siguiente cabecera:
[rxy,kr]=corrcruzada(x,kx,h,kh)
donde kr,kx y kh son los vectores de índices temporales de las 3 secuencias involucradas.
(a) Utilizando los datos del Ejercicio 3.11 comparar con los resultados son similares a los
obtenidos en dicho ejercicio.
(b) Calcula en forma analítica la correlación rxy[n] de:
x n e0.2nu n 2 y n cos(0.2 n)u n 5
y mediante el uso del código desarrollado en este Ejercicio compara tus resultados con lo obtenido
en forma analítica.