Sistemas temporales discretos

La definición de sistema discreto en el tiempo corresponde a una transformación o operador que relaciona un conjunto de valor de entrada \(x[n]\) con un conjunto de valores de salida \(y[n]\).
\[ y[n] = T\{x[n]\} \]

Sistemas sin memoria

Son aquellos en los que los valores de salida \(y[n]\) solo dependen de valores presentes de la entrada \(x[n]\). Es decir, no dependen de \(x[n-1]\), \(x[n-2]\), …
Un sistema sin memoria podría ser:
\[ y[n] = \left( x[n] \right)^2 \]

Sistemas lineales

Los sistemas lineales cumplen la propiedad de superposición. Esto significa que la salida será  igual a la suma proporcional de las entradas.

\[ T\{a\cdot x_1[n] + b\cdot x_2[n] \} = a\cdot T\{x_1[n]\} + b\cdot T\{x_[n]\} \]

Sistemas invariantes en tiempo

Un sistema invariante en el tiempo es aquel cuya salida se ve desplazada en tiempo si así lo hace la entrada. Por tanto, un desplazamiento temporal de la señal de entrada, provocará un desplazamiento en la señal de salida. De esta manera, un sistema será invariante si para todo \(n_0\), la señal \(x_1 = x[n-n_0]\) produce una señal a la salida cuyo valor se \(y_1[n] = y[n-n_0]\).

Un ejemplo de un sistema no invariante en tiempo es:
\[ y[n] = x[Mn]\]
La respuesta \(y_1[n-n_0]\) a la entrada \(x_1[n-n_0]\) es:
\[ y_1[n] = x_1[Mn] = x[Mn-n_0] \]
Como vemos, \[ y[n-n_0] = x[M(n-n_0)] \neq y_1[n] \]
Por tanto, el sistema no el invariante.

Sistemas causales

Un sistema causal es aquel que para determinar los valores de salida del sistema, solo se necesiten los valores presentes o pasados de la entrada.

Sistemas estables

Son aquellos que para cada una de las posibles entradas finitas del sistema, la salida siempre es finita. Cada una de las posibles entradas finitas del sistema significa:
\[ |x[n]| \leq B_x < \infty \] Una salida finitia signfica: \[ |y[n]| \leq B_y < \infty \]

Sistemas lineales invariantes en el tiempo

Los sistemas que son invariantes en tiempo y a la vez lineales se pueden estudiar fácilmente a través del operador convolución. De esta manera, es posible obtener cuál va a ser la salida de un sistema en función de su entrada.

Un sistema queda completamente descrito a través de su función de transferencia \(h[n]\). Esta función de transferencia es la salida que obtenemos cuando a la entrada aplicamos un impulso \(\delta[n]\).

Autofunciones en sistemas lineales invariantes

Como hemos visto, los sistemas lineales invariantes son de especial interés debido a que tienen ventajas sobre los sistemas no lineal o no invariantes y es que se puede describir mediante su respuesta impulsional.

Por propiedades de la función \(\delta [n]\), es posible describir la secuencia \(x[n]\) como:
\[ x[n] = \sum_{k=-\infty}^{+\infty} x[k]\cdot \delta[n-k] \]

De este modo, al aplicar la secuencia \(x[k]\) a la entrada de un sistema, su salida será:
\[ y[n] =  T\left\{x[n] \right\} = T\left\{\sum_{k=-\infty}^{+\infty} x[k]\cdot \delta[n-k] \right\} =\sum_{k=-\infty}^{+\infty} x[k]\cdot  T\left\{ \delta[n-k] \right\} \]

Si identificamos la transformación del tren de deltas \( T\left\{ \delta[n-k] \right\}\) como su respuesta impulsional \(h[n]\), obtenemos lo que se conoce como su ecuación de convolución:
\[ y[n] =  \sum_{k=-\infty}^{+\infty} x[k]\cdot  h[n-k] \]

Como ya se explicó en otra entrada, las autofunciones son útiles para la caracterización de sistemas. Las autofunciones son aquellas que al aplicarse en la entrada de un sistema, su salida es la misma que la función de la entrada multiplicada por una constante. Es decir, si \(x[n]\) es una autofunción de \(y[n]\):

\[ y[n] =  T\left\{x[n] \right\} = a \cdot x[n]  \]

donde \(a\) es una constante.

Una de las autofunciones de los sistemas invariantes es la exponencial compleja \(x[n] = z^n\) donde \(z\) es un número complejo cualquiera. Esta función es autofunción de cualquier sistema lineal invariante ya que:
\[ y[n] = \sum_{k=-\infty}^{+\infty} z^{n-k} h[k] = z^n\sum_{k=-\infty}^{+\infty} z^{-k} h[k]   \]

Si esta serie converge, ya que el sumatorio no depende de \(n\), \(y[n]\) puede escribirse como:
\[ y[n] = H(z) z^n\]

Este es lo mismo que decir que si a la entrada de un sistema lineal invariante se aplica una secuencia exponencial \(z^n\), a la salida se obtiene la misma secuencia multiplicada por una constante. Por tanto, queda demostrado que las exponenciales complejas \(z^n\) son autofunciones de un sistema lineal invariante cuyos autovalores están determiandos por:
\[ H(z) =  \sum_{k=-\infty}^{+\infty} z^{-k} h[k] \]

Si se interpreta \(z\) como una variable, \(H(z)\) es una función compleja de variable independiente compleja que se conoce como función de transferencia y describe el comportamiento del sistema frente a cualquier entrada.

Sistemas definidos por ecuaciones en diferencias finitas

Los sistemas discretos se pueden caracterizar, además de por su respuesta impulsional, por ecuaciones en diferencias finitas lineales con coeficientes constantes. Una ecuación en diferencias finitas lineal con coeficientes constantes corresponde a:
\[ \sum_{k=0}^P a_k y[n-k] = \sum_{k=0}^{Q} b_k x[n-k] \]
donde \(x[n]\) es una dato (ya que es la secuencia de entrada), \(y[n]\) es la incógnita de la ecuación y \(a_k\) y \(b_k\) son los coeficientes independientes de \(n\). El orden de la ecuación corresponde al mayor entre \(P\) y \(Q\).

No obstante, si se describe un sistema mediante ecuaciones en diferencias finitas, este no queda totalmente caracterizado debido a la falta de información sobre el estado del sistema antes de aplicar ninguna secuencia a la entrada. Es por eso, que para poder determinar cuál será la salida del sistema a una determinada secuencia, es necesario conocer también las condiciones iniciales del sistema. Por ejemplo, en el sistema que define un sumador:
\[ y[n] = x[n] + y[n-1]\]
si se le aplica una secuencia constante \(x[n] = 1\) para \(n\geq 0\), el valor de \(y[0]\) será:
\[ y[0] = x[0] + y[-1] = 1 + y[-1] \]
Solo se podrá determinar el valor de \(y[0]\) si conocemos \(y[-1]\). Normalmente, el sistema se supone que estaba en reposo y que las condiciones iniciales son \(y[n] = 0\) para \(n<0\). De esta manera, \(y[0] = 1\)
\subsubsection{Sistemas recurrentes y no recurrentes}

Los sistemas recurrentes son aquellos que proporcionan valores de \(y[n]\) en función de valores de la propia salida calculados anteriormente. Es decir:
\[ y[n] = \frac{1}{a_0}\left( \sum_{k=0}^{Q} b_k x[n-k] – \sum_{k=1}^{P} a_k y[n-k]  \right) \]

Si la salida \(y[n]\) solo depende de los valores presentes y pasados de \(x[n]\), o lo que es lo mismo, P = 0, el sistema es no recurrente.

\[ y[n] = \sum_{k=0}^{Q} \frac{b_k}{a_0} x[n-k] \]

Respuesta impulsional

Para obtener la respuesta impulsional de un sistema lineal invariante definido por diferencias finitas, basta con aplicar a la entrada la secuencia exponencial \(x[n] = z^n\). Como hemos visto, esta secuencia es autofunción del sistema y por tanto la salida será:
\[ y[n] = H(z) z^n \]

\(H(z)\) no tiene por qué existir siempre ya que el sumatorio que lo define debe converger.

Un sistema lineal invariante definido por ecuaciones de diferencias finitas, como hemos visto, corresponde a la ecuación:

\[ \sum_{k=0}^P a_k y[n-k] = \sum_{k=0}^{Q} b_k x[n-k] \]

Al sustituir \(x[n]\) e \(y[n]\) en la ecuación, se obtiene:
\[ \sum_{k=0}^P a_k H(z)z^{n-k} = \sum_{k=0}^{Q} b_k z^{n-k} \]

\(H(z)\) no depende de k, por lo que puede salir fuera del sumatorio.

\[ H(z) \sum_{k=0}^P a_k z^{n-k} = \sum_{k=0}^{Q} b_k z^{n-k} \]

Si despejamos \(H(z)\) obtenemos:

\[ H(z) = \frac{\sum_{k=0}^{Q} b_k z^{n-k}}{\sum_{k=0}^P a_k z^{n-k}} = \frac{\sum_{k=0}^{Q} b_k z^{-k}}{\sum_{k=0}^P a_k z^{-k}} \]

Por tanto, la función de transferencia de un sistema caracterizado por una ecuación en diferencias finitas es un cociente de polinomios en \(z^{-1}\) cuyos coeficientes son directamente los coeficientes de la ecuación.

Por ejemplo, si queremos diseñar un sistema de orden 2 no recurrente que cancele un tono a la frecuencia \(\omega_0 = \frac{\pi}{4}\), la ecuación en diferencias finitas debe seguir la siguiente expresión:
\[ y[n] = \sum_{k=0}^Q b_k x[n-k] \]

ya que el sistema es no recurrente. Por ser de orden 2, \(Q=2\). Por tanto, queda calcular los coeficiente \(b_k\).

La entrada del sistema será:
\[ x[n] = \cos{\left(\frac{\pi}{4}n\right)} = \frac{1}{2} \left( e^{j \frac{\pi}{4} n} + e^{-j \frac{\pi}{4} n} \right) \]

Debido a la fórmula de Euler (\(e^{jx} = \cos{x} + j \sin{x}\)), la entrada puede escribirse como combinación lineal de dos exponenciales. Como se ha demostrado, este tipo de funciones son autofunciones del sistema lineal invariante y por tanto la salida será:
\[ y[n] = \frac{1}{2} e^{j \frac{\pi}{4} n} H\left(e^{j \frac{\pi}{4}} \right) + \frac{1}{2} e^{-j \frac{\pi}{4} n} H\left(e^{-j \frac{\pi}{4}} \right)  \]

Para cancelar un tono a esta frecuencia la salida debe ser nula, \( y[n] = 0\). Esto ocurre si:
\[ H\left(e^{j \frac{\pi}{4}} \right) = H\left(e^{-j \frac{\pi}{4}} \right) = 0\]

La función de transferencia \(H(z)\) será:
\[ H(z) = \sum_{k=0}^{Q=2} b_k z^{-k}\]
ya que \(P = 0\) por ser un sistema no recurrente.

Podemos desarrollar \(H(z)\) como:
\[H(z) = b_0 + b_1 z^{-1} + b_2 z^{-2} \]

Esta expresión se puede escribir como un producto de raíces y es equivalente a:
\[ H(z) = b_0 \prod_{i=0}^1 \left(1-z_i z^{-1}\right) = b_0 \left( 1 -z_0 z^{-1}\right) \left(1-z_1 z^{-1} \right)  \]

donde \(z_0 = e^{j \frac{\pi}{4}}\) y \(z_1 = e^{-j \frac{\pi}{4}}\).

Podemos identificar ambas expresiones si desarrollamos este producto:
\[ H(z) = b_0 \left(1 + \left(-z_0-z_1\right) z^{-1} + z_0 z_1 z^{-2} \right) \]

El término \(b_0\) solo determina la ganancia del sistema y puede valer simplemente 1. Por tanto:
\[ b_0 = b_0 = 1\]
\[ b_1 = -z_0 -z_1 = -e^{j \frac{\pi}{4}}-e^{-j \frac{\pi}{4}} = 2\cdot \cos{\frac{\pi}{4}} = \sqrt{2}\]
\[ b_2 = z_0 z_1 = e^{j \frac{\pi}{4}}\cdot e^{-j \frac{\pi}{4}} = 1\]

Finalmente, \(H(z)\) queda como:
\[ H(z) = 1 +  \sqrt{2}z^{-1} + z^{-2} \]

y:

\[ y[n] = 1 + \sqrt{2} z^{-1} + z^{-2} \]

Rubén Sánchez Mínguez
IC design engineer en Analog Devices

2 opiniones en “Sistemas temporales discretos”

  1. Hola, buenos días.
    Tengo en la cabeza un proyecto que me ronda desde hace bastante tiempo, pero que no soy capaz de desarrollar por mi falta de conocimientos.
    Expongo lo que quiero hacer y vosotros me decís si es posible, y como.
    Quiero que cuando llueva se bajen las persianas de mi casa.
    Para ello he pensado en utilizar los esp8266–
    El primero como servidor, conectado a un modulo sensor de lluvia. Para que cuando llueva se conecte con cada uno de esp8266 (AP)
    que habrá instalados en cada persiana y están bajen.
    Es posible que se comuniquen entre los esp8266 y se realice lo que quiero utilizando las entradas, salidas, gpo0 y gpo2.

    Quedo a la espera de vuestras respuestas. Un abrazo y GRACIAS..

    1. Hola Dani,

      básicamente lo que quieres realizar se puede solucionar elegantemente con el protocolo MQTT. Si no estás familiarizado con este protocolo, te explico por encima cómo funciona para que determines tú mismo si es lo que estás buscando.

      El protocolo MQTT es un protocolo TCP/IP que basa su comunicación en nodos publicadores y suscriptores. Esto significa que hay nodos (los publicadores) que simplemente envían información, mientras que otros solo reciben información (los suscriptores). En este caso, el ESP8266 que tenga conectado el transductor que detecte la presencia de lluvia será el publicador, que notificará a todos los suscriptores de que es necesario bajar las persianas. Cada ESP8266 que tengas conectados a las persianas actuarán como suscriptores, recibiendo todos los paquetes enviados por los publicadores (en este caso, solo uno).

      Por tanto, lo que te propongo es crear una red MQTT mediante ESP8266 en el que el nodo con el sensor sea el publicador y el resto suscriptor. Desconozco los detalles de implementación de este protocolo en los integrados ESP8266, pero seguramente necesites una Raspberry Pi o algún módulo con embedded Linux para crear un servidor MQTT.

      Espero haberte ayudado en tu duda.

      Saludos,
      Rubén

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.