El uso de un amplificador operacional con realimentación positiva es útil para obtener una respuesta histerética. Para entender cómo funciona, primero necesitamos explicar cómo funciona un amplificador operacional sin realimentación.

Un operacional sin realimentación actúa como un comparador. Definimos \(V_d = V_p – V_n\). Si esta tensión es positiva, la salida \(V_o\) será \(+V_{cc}\). Si la tensión es negativa, la salida \(V_o\) será \(-V_{cc}\).

\[ V_o = \left\{\begin{matrix}
+V_{sat} & ; V_d > 0 \\
-V_{sat} & ; V_d < 0
\end{matrix}\right. \]

El funcionamiento de un amplificador operacional con histéresis sigue el mismo razonamiento. Como hemos visto, el funcionamiento de este topología es no lineal, y por tanto los valores de salida se limitan a \(+V_{sat}\) y \(-V_{sat}\). En un comparador como el anterior, el cambio entre la tensión de saturación positiva y negativa se da cuando la tensión diferencia cambia de signo. Si fijamos una de las tensiones, podemos entender mejor qué ocurre. Por ejemplo, si hacemos \(V_n = 0\):

El cambio se de tensió de salida se da en 0V, ya que es cuando la tensión diferencia de entrada (\(V_d = V_p – V_n\)).

Si se aumenta la tensión \(V_p\) a 2 V, la tensión de cambio aumenta a 2V

Si se utiliza realimentación positiva, es posible hacer que la tensión de cambio sea diferente si la tensión de salida es la de saturación positiva o negativa en función de la salida actual. Con una histéresis no-inversora, si la tensión de salida es positiva, la salida cambiará cuando \(V_{in}\) es \(V_{TL}\) (threshold low). Si la tensión de salida es negativa, la salida cambiará cuando \(V_{in}\) es \(V_{TH}\) (threshold high).

Existen dos versiones básicas de op amp con histéresis: la inversora y la no inversora.

Op amp con histéresis no inversora

\[ V_{TH} = \frac{}{}V_{sat}^+\]

minted es un paquete de LaTeX que permite añadir código a tu documento y mostrarlo resaltado. Minted utiliza Python para compilar, por lo que el primer paso es instalar Python 2.6 o superior.

  1. Instalar Python
  2. Añadir la ruta de Python a las variables del entorno de Windows.
    1. Botón derecho en el icono de Windows.
    2. Sistema
    3. En el buscador añadir «variables» y clickar en «Editar variables del sistema».
    4. Clickar en Variables del entorno.
    5. En Variables del sistema, añadir a la entrada Path la localización de la carpeta Scripts de Python. En mi caso está en D:\Windows\Python\Python36-32\Scripts. Es muy probable que este paso no sea necesario en tu sistema y que al instalar Python ya se haya añadido la ruta a las variables del sistema. Si al ejecutar python en CMD da un error, entonces este paso es obligatorio.
    6. Instalar pip.
    7. Instalar pygments:
      1. Abrir CMD en Windows y escribir: pip install Pygments
      2. Probar que se ha instalado correctamente escribiendo en CMD pygmentize -h
    8. Ahora desde TexStudio hay que modificar la llamada al compilador de LaTeX.
      1. Opciones > Configurar TeXStudio > Órdenes
      2. Modificar las entradas LaTeX y PdfLaTeX por: latex.exe -src -interaction=nonstopmode -shell-escape %.tex y pdflatex.exe -synctex=1 -interaction=nonstopmode -shell-escape %.tex respectivamente. De esta manera se añade la etiqueta -shell-escape después de -interaction=nonstopmode
      3. Cerrar TeXStudio
      4. Abrir de nuevo

Y si no ha habido ningún problema en los pasos anteriores, se debería poder compilar utilizando minted. Para más información, visitad la guía de instalación de minted.

\begin{minted}[mathescape,
linenos,
numbersep=8pt,
gobble=0,
frame=lines,
framesep=2mm]{csharp}
    public static int width = 64;	// Landscape width
    public static int height = 128;	// Landscape height
    public static int depth = 64;	// Landscape depth
    public int heightScale = 20;	// Maximum terrain's height
    public float detailScale = 25.0f;
    public Transform vrCamera;
    public GameObject grassBlock;	// Grass block object
    Block[,,] worldBlocks = new Block[width, height, depth];// 3D array with blocks
\end{minted}

 

  1. Instanciar PARAMETERS de la librería SPECIAL.
  2. Editar propiedades de PARAMETERSS (doble click).
  3. Click en «New property».
  4. Añadir parámetro. Ejemplo: Name: Vin_variable, Value: 0.7
  5. Modificar valor del componente asignando el nuevo parámetro entre {}. Ejemplo: VAMPL: {Vin_variable}
  6. Añadir «Parametric sweep» en la configuración del perfil de simulación.
  7. Por último, realizar la simulación.

El dispositivo Cyclone IV de Altera dispone de unas memorias embebidas llamadas M9K. Estas memorias son configuradas por el sintetizador (Quartus) y dependiendo del tamaño necesario, se pueden combinar varias. Estas memorias siempre son síncronas, por lo que para que el sintenizador utilice una memoria M9K a partir del código, la memoria en cuestión debe estar gobernada por la señal de reloj.

Estas memorias pueden funcionar con un puerto puerto simple (entrada-salida) o un puerto doble. La configuración de puerto doble consiste en leer de manera independiente una misma memoria por dos puertos. Otra de los modos de funcionamiento es ROM, en el que se escribe el contenido al programar la FPGA y solo es posible leer su contenido.

Dependiendo de la configuración, la capacidad disponible las memorias M9K puede variar. Para anchos de palabra de 1, 2 y 4 bits la capacidad disponible es de 8k (8192 bits). Para tamaños de palabra mayores (8+1), (16+2), (32+4), la capacidad disponible es de 9k (9216 bits).

Las configuraciones en modo ROM son:

  • 8k x 1 bit
  • 4k x 2 bits
  • 2k x 4 bits
  • 1k x (8+1) bits
  • 512 x (16+2) bits
  • 256 x (32+4) bits

Las configuraciones en modo puerto doble son:

  • 8k x 1 bit
  • 4k x 2 bits
  • 2k x 4 bits
  • 1k x (8+1) bits
  • 512 x (16+2) bits

En el caso de los anchos de palabra no potencias de 2, se puede utilizar estos bits extras para control de errores.

Ejemplo de memoria 1k x 16

La primera opción está más optimizada ya que se necesita menos hardware para obtener el mismo resultado.

Para generar señales digitales periódicas, como por ejemplo senos o cosenos, se suele utiliza la técnica de síntesis digital directa. Esta consiste en almacenar la señal en una memoria y recorrer las diferentes direcciones de la memoria para obtener la señal. Por tanto, se necesita de un contador que incremente un determinado número de pasos la dirección de memoria a la que hay que acceder.


La frecuencia sintetizada depende de 3 factores:

  • P: el incremento que se hace de la dirección de memoria
  • \(f_{clk}\): la frecuencia de reloj
  • \(2^M\): el número de muestras que hay de un periodo de la señal.

Ejemplo: síntesis de un seno de 1 Hz

Tenemos almacenado en un memoria el ciclo completo de un seno como aparece en la imagen utilizando 16 muestras (\(2^M = 16\)) :

La frecuencia del reloj es de 8 Hz, es decir, saca 8 muestras por segundo. Por tanto, para obtener una frecuencia del seno de salida de 1 Hz, debemos sacar 8 muestras. Esto conduce a la conclusión de que debemos obtener las muestras de la memoria de 2 en 2. Lo que significa que P = 2.

Por tanto,

\[ f_{sintetizada} = \frac{P f_{clk}}{2^M} \]

El máximo paso que se puede dar es \(P = 2^{M-1}\) para poder cumplir el teorema de Nyquist y tener una señal parecida a la de la imagen:

En este caso, la frecuencia es máxima y corresponde a \(\frac{f_{clk}}{2}\). El mínimo paso que se puede dar es P= 1, en el que la frecuencia es mínima y corresponde a \(\frac{f_{clk}}{2^M}\).

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} \]

Para añadir bibliografía en LaTeX a partir de un archivo BibTeX .bib, el archivo BibTeX debe tener la siguiente estrutura:

@article{CrystekMicrowave,
author = {{Crystek Microwave}},
title = {{CATTEN-0100-BNC}},
url = {http://www.crystek.com/microwave/spec-sheets/attenuator/CATTEN-0100-BNC.pdf}
}

En el archivo .tex, hay que añadir las siguientes intrucciones:

\bibliography{fileNameWithoutExtension}
\bibliographystyle{unsrt}

En \bibliographystyle{unsrt} el argumento puede ser:

plain Estilo normal. Se listan en orden alfabético
unsrt Igual que plain pero aparecen en orden de citación
alpha Igual que plain pero utiliza las etiquetas para identificar la cita en lugar de números
abbrv Igual que plain pero utiliza abreviaciones para los nombres, meses o nombres de revistas

Ahora para citar la referencia en el texto, hay que hacerlo con:

\cite{CrystekMicrowave}

Solo aquellas citas que se hayan llamado en el texto aparecerán en el apartado de referencias.
Si se está usando TexMaker, será necesario compilar varias veces BibTeX y varias veces la compilación rápida para ver los cambios reflejados.