es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , ,

Answer

  1. Avatar for 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 y h2 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 argumento mode='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):

    h_t = np.convolve(h1, h2, mode='same') + h3
    

    Esto debería producir una nueva matriz h_t que contenga la respuesta al impulso general para los subsistemas dados, convolucionados y sumados con h3. La secuencia resultante debería tener una longitud igual a la longitud de h1, o en este caso, 6.

    Tenga en cuenta que esta implementación asume que las matrices h1, h2 y h3 ya están definidas y pobladas con los valores apropiados de respuesta al impulso para cada subsistema. Además, el rango de valores n considerados debe especificarse cuando se generan las respuestas al impulso para cada subsistema (es decir, a través de np.arange()), de modo que tengan la misma longitud y coincidan con el rango de valores n utilizados en la operación de convolución.

Comments are closed.