Solución a los Problemas de
Procesamiento de Señales y Sistemas
1. Convolución y Simulación de Sistemas
a. Convolución de la señal x(n) con el filtro y(n) en Python
El sistema dado es un filtro pasa baja con la ecuación de diferencia: y(n) = y(n-1) -
0.9y(n-2) + x(n) . La señal de entrada es x(n) = [1, 0, 1, 0] para n=0 a
n=3 .
Para realizar la convolución, primero necesitamos encontrar la respuesta impulsional
h(n) del sistema. La respuesta impulsional se obtiene cuando la entrada es un impulso
unitario delta(n) . Así, h(n) = h(n-1) - 0.9h(n-2) + delta(n) .
Calculamos los primeros valores de h(n) : * h(0) = 1 (ya que delta(0) = 1 y las
condiciones iniciales son cero) *
h(1) = h(0) - 0.9h(-1) + delta(1) = 1 - 0 + 0 = 1 * h(2) = h(1) -
0.9h(0) + delta(2) = 1 - 0.9 * 1 + 0 = 0.1 * h(3) = h(2) - 0.9h(1) +
delta(3) = 0.1 - 0.9 * 1 + 0 = -0.8 * h(4) = h(3) - 0.9h(2) +
delta(4) = -0.8 - 0.9 * 0.1 + 0 = -0.89
Usamos h = [1, 1, 0.1, -0.8, -0.89] para la convolución.
El código Python para la convolución y la simulación directa es el siguiente:
import numpy as np
# Definición de la señal de entrada x(n)
x = [Link]([1, 0, 1, 0])
# Definición de la respuesta impulsional h(n) del filtro
# y(n) = y(n-1) - 0.9y(n-2) + x(n)
# Para encontrar h(n), consideramos x(n) = delta(n)
# h(n) = h(n-1) - 0.9h(n-2) + delta(n)
# h(0) = h(-1) - 0.9h(-2) + delta(0) = 0 - 0 + 1 = 1
# h(1) = h(0) - 0.9h(-1) + delta(1) = 1 - 0 + 0 = 1
# h(2) = h(1) - 0.9h(0) + delta(2) = 1 - 0.9*1 + 0 = 0.1
# h(3) = h(2) - 0.9h(1) + delta(3) = 0.1 - 0.9*1 + 0 = -0.8
# h(4) = h(3) - 0.9h(2) + delta(4) = -0.8 - 0.9*0.1 + 0 = -0.89
h = [Link]([1, 1, 0.1, -0.8, -0.89]) # Calculamos hasta un
punto para la convolución
# Convolución de x(n) y h(n)
y_conv = [Link](x, h)
# Simulación directa del sistema
# y(n) = y(n-1) - 0.9y(n-2) + x(n)
y_sim = [Link](len(x))
y_prev1 = 0
y_prev2 = 0
for n_idx in range(len(x)):
y_sim[n_idx] = y_prev1 - 0.9 * y_prev2 + x[n_idx]
y_prev2 = y_prev1
y_prev1 = y_sim[n_idx]
print(f'Respuesta impulsional h(n): {h}')
print(f'Resultado de la convolución y_conv: {y_conv}')
print(f'Resultado de la simulación directa y_sim: {y_sim}')
# Comparación de los resultados
# Para comparar, necesitamos considerar la misma longitud de n.
# La convolución y_conv tendrá una longitud de len(x) + len(h) -
1.
# La simulación y_sim tiene la longitud de x.
# Para una comparación justa, tomaremos los primeros 'len(x)'
elementos de y_conv.
print(f'Comparación de los primeros elementos:')
print(f'y_conv (primeros {len(x)} elementos):
{y_conv[:len(x)]}')
print(f'y_sim: {y_sim}')
# Explicación de la diferencia/similitud
print('\nExplicación:')
print('La convolución de la señal de entrada x(n) con la
respuesta impulsional h(n) del sistema')
print('representa la salida del sistema si este fuera un sistema
LTI (Lineal e Invariante en el Tiempo).')
print('La simulación directa calcula la salida del sistema
recursivamente usando la ecuación de diferencia dada.')
print('Si el sistema es LTI, ambos resultados deberían ser
idénticos para las mismas condiciones iniciales.')
print('En este caso, la convolución y la simulación directa
deberían coincidir para los primeros elementos,')
print('ya que la respuesta impulsional se calculó a partir de la
ecuación de diferencia del sistema.')
print('Las diferencias en la longitud se deben a que la
convolución extiende la señal de salida,')
print('mientras que la simulación directa solo calcula la salida
para la duración de la entrada x(n).')
b. Comparación de resultados
Los resultados obtenidos de la ejecución del script Python son:
• Respuesta impulsional h(n): [1. 1. 0.1 -0.8 -0.89]
• Resultado de la convolución y_conv: [1. 1. 1.1 0.2 -0.79 -0.8 -0.89
0. ]
• Resultado de la simulación directa y_sim: [1. 1. 1.1 0.2]
Comparación de los primeros elementos: * y_conv (primeros 4 elementos): [1. 1.
1.1 0.2] * y_sim : [1. 1. 1.1 0.2]
¿Son iguales/diferentes? ¿Por qué?
Los primeros elementos de la convolución ( y_conv ) y la simulación directa ( y_sim )
son idénticos. Esto se debe a que el sistema es un sistema LTI (Lineal e Invariante en el
Tiempo). Para un sistema LTI, la salida puede obtenerse mediante la convolución de la
señal de entrada con la respuesta impulsional del sistema, o mediante la simulación
directa de su ecuación de diferencia.
La diferencia en la longitud total de y_conv y y_sim se explica porque la operación de
convolución produce una señal de salida de longitud len(x) + len(h) - 1 ,
mientras que la simulación directa solo calcula la salida para la duración de la señal de
entrada x(n) .
c. Diagrama de bloques del sistema y(n)
El diagrama de bloques para la ecuación de diferencia y(n) = y(n-1) - 0.9y(n-2)
+ x(n) se construye de la siguiente manera:
1. Entrada: La señal de entrada es x(n) .
2. Retardos: Se necesitan dos retardos ( Z^-1 ) para obtener y(n-1) y y(n-2) a
partir de y(n) .
3. Multiplicadores:
◦ y(n-1) se multiplica por 1 (implícito).
◦ y(n-2) se multiplica por -0.9.
4. Sumadores:
◦ Un sumador combina x(n) con la salida de los retardos y multiplicadores.
Estructura del diagrama:
• La señal x(n) entra a un sumador.
• La salida del sumador es y(n) .
• y(n) se realimenta a un bloque de retardo Z^-1 para obtener y(n-1) .
• y(n-1) se realimenta a otro bloque de retardo Z^-1 para obtener y(n-2) .
• La salida de y(n-1) (multiplicada por 1) se suma al sumador principal.
• La salida de y(n-2) se multiplica por -0.9 y se suma al sumador principal.
En resumen, es una estructura de realimentación donde la salida actual y(n) depende
de la entrada actual x(n) y de las salidas anteriores y(n-1) y y(n-2) .
2. Examen de Propiedades de Sistemas
a. Sistema 1: y(n) = x(5-n²)
Linealidad: * Homogeneidad: Se cumple. Si la entrada es a*x1(n) , la salida es
a*x1(5-n²) = a*y1(n) . * Superposición: Se cumple. Si la entrada es x1(n) +
x2(n) , la salida es (x1 + x2)(5-n²) = x1(5-n²) + x2(5-n²) = y1(n) +
y2(n) .
El sistema es lineal.
Invariancia en el tiempo: Si la entrada es x(n-k) , la salida es y'(n) = x(5-n²) . La
salida esperada para un sistema invariante sería y(n-k) = x(5-(n-k)²) = x(5 -
n² + 2nk - k²) . Como y'(n) no es igual a y(n-k) , el sistema no es invariante en
el tiempo.
Causalidad: Para n=0 , y(0) = x(5) . La salida en n=0 depende de una entrada
futura ( x(5) ). Por lo tanto, el sistema no es causal.
b. Sistema 2: y(n) = ln(e^x(n))
Simplificando la expresión, y(n) = ln(e^x(n)) = x(n) . Este es un sistema de
identidad.
Linealidad: * Homogeneidad: Se cumple. Si la entrada es a*x1(n) , la salida es
a*x1(n) = a*y1(n) . * Superposición: Se cumple. Si la entrada es x1(n) + x2(n) ,
la salida es x1(n) + x2(n) = y1(n) + y2(n) .
El sistema es lineal.
Invariancia en el tiempo: Si la entrada es x(n-k) , la salida es y'(n) = x(n-k) . La
salida esperada para un sistema invariante sería y(n-k) = x(n-k) . Como y'(n) es
igual a y(n-k) , el sistema es invariante en el tiempo.
Causalidad: Para y(n) = x(n) , la salida en el instante n depende únicamente de la
entrada en el mismo instante n (presente). Por lo tanto, el sistema es causal.
c. Sistema 3: y(n) = x¹/²(n²)
Linealidad: * Homogeneidad: Se cumple. Si la entrada es a*x1(n) , la salida es
(a*x1)(n²) = a * x1¹/²(n²) = a * y1(n) . * Superposición: No se cumple. Si la
entrada es x1(n) + x2(n) , la salida es (x1 + x2)¹/²(n²) = (x1(n²) +
x2(n²))¹/² . Esto no es igual a y1(n) + y2(n) = x1¹/²(n²) + x2¹/²(n²) , ya
que (A+B)¹/² ≠ A¹/² + B¹/² .
El sistema no es lineal.
Invariancia en el tiempo: Si la entrada es x(n-k) , la salida es y'(n) = x¹/²(n² -
k) . La salida esperada para un sistema invariante sería y(n-k) = x¹/²((n-k)²) =
x¹/²(n² - 2nk + k²) . Como y'(n) no es igual a y(n-k) , el sistema no es
invariante en el tiempo.
Causalidad: Para n=2 , y(2) = x¹/²(4) . La salida en n=2 depende de una entrada
futura ( x(4) ). Por lo tanto, el sistema no es causal.
3. Diagrama de Bloques a Ecuación de Diferencias
El diagrama de bloques proporcionado representa un sistema lineal e invariante en el
tiempo (LTI) que puede describirse mediante una ecuación de diferencias. Analizando el
flujo de la señal a través de los bloques de retardo ( Z^-1 ), los multiplicadores y los
sumadores, podemos derivar la ecuación que relaciona la salida y1(n) con la entrada
x(n) .
Análisis del flujo de la señal:
1. Parte de alimentación directa (Feedforward):
◦ La señal de entrada x(n) se divide en dos caminos.
◦ Camino superior: x(n) se suma con x(n-1) (resultado de x(n) pasando
por un retardo Z^-1 ). Esto produce el término x(n) + x(n-1) .
◦ Camino inferior: x(n) pasa por dos retardos Z^-1 consecutivos,
resultando en x(n-2) . Este término se multiplica por 0.12 , dando 0.12 *
x(n-2) .
◦ Ambos caminos se suman, generando la parte de alimentación directa de la
ecuación: x(n) + x(n-1) + 0.12 * x(n-2) .
2. Parte de realimentación (Feedback):
◦ La señal de salida y1(n) se realimenta al sistema.
◦ y1(n) pasa por un retardo Z^-1 , resultando en y1(n-1) . Este término se
multiplica por -2.5 , dando -2.5 * y1(n-1) .
◦ y1(n-1) pasa por otro retardo Z^-1 , resultando en y1(n-2) . Este
término se multiplica por 0.1 , dando 0.1 * y1(n-2) .
Ecuación de diferencias resultante:
Combinando las partes de alimentación directa y realimentación en el sumador final
que produce y1(n) , obtenemos la siguiente ecuación de diferencias:
y1(n) = x(n) + x(n-1) + 0.12 * x(n-2) - 2.5 * y1(n-1) + 0.1 *
y1(n-2)