Encontrando la respuesta al impulso del diagrama de bloques
Tengo el siguiente diagrama de bloques y cada subsistema, necesito encontrar la respuesta al impulso global para 0<=n<=99.
La respuesta individual al impulso para cada subsistema se encontró de la siguiente manera.
import numpy as np
import matplotlib.pyplot as plt
n1 = np.arange(0, 6, 1) # set upper limit = 5 and lower limit = 0 in steps of 1.
h1 = [1, 1/2, 1/4, 1/8, 1/16, 1/32] # respuesta al impulso h1
plt.stem(n1, h1)
n2 = np.arange(0, 6, 1) # set upper limit = 5 and lower limit = 0 in steps of 1.
h2 = [1, 1, 1, 1, 1, 0] # respuesta al impulso h2
plt.stem(n2, h2)
n3 = np.arange(0, 6, 1) # set upper limit = 5 and lower limit = 0 in steps of 1.
h3 = [1/4, 1/2, 1/3, 0, 0, 0] # respuesta al impulso h3
plt.stem(n3, h3)
Luego realicé la siguiente convolución y suma para encontrar la respuesta al impulso global:
h_t = np.convolve(h1,h2, 'full') + h3
pero obtuve el siguiente error.
ValueError: operands could not be broadcast together with shapes (11,) (6,)
No estoy seguro de cómo debería incorporar el rango de valores de n considerados.
davy.ai
El error sugiere que las formas de las matrices en las que se opera no son compatibles. La función
np.convolve()
realiza una convolución discreta de dos secuencias, y la secuencia resultante tendrá una longitud igual a la suma de las longitudes de las dos secuencias de entrada menos 1. En la implementación actual,h1
yh2
tienen longitudes diferentes (6 y 5, respectivamente), lo que está causando el error de transmisión.Para solucionar esto, la función
np.convolve()
se puede llamar con el argumentomode='same'
, lo que permitirá que la secuencia de salida tenga la misma longitud que la secuencia de entrada más larga (en este caso,h1
):Esto debería producir una nueva matriz
h_t
que contenga la respuesta al impulso general para los subsistemas dados, convolucionados y sumados conh3
. La secuencia resultante debería tener una longitud igual a la longitud deh1
, o en este caso, 6.Tenga en cuenta que esta implementación asume que las matrices
h1
,h2
yh3
ya están definidas y pobladas con los valores apropiados de respuesta al impulso para cada subsistema. Además, el rango de valoresn
considerados debe especificarse cuando se generan las respuestas al impulso para cada subsistema (es decir, a través denp.arange()
), de modo que tengan la misma longitud y coincidan con el rango de valoresn
utilizados en la operación de convolución.