Diferencia entre revisiones de «Taller de distorsión»

Sin resumen de edición
Sin resumen de edición
 
(No se muestran 19 ediciones intermedias del mismo usuario)
Línea 1: Línea 1:
Podemos usar [https://en.wikipedia.org/wiki/Ngspice Ngspice] para simular la distorsión en circuitos.
Tené en cuenta si estás introduciendo un comando de shell o un comando de ngspice, y también si estás dando órdenes al shell o a ngspice. Para salir de ngspice, escribe "quit". Se recomienda colocar todos los archivos en un único directorio y utilizarlo para ejecutar la simulación.
Archivos que necesitas para esos ejemplos se colocan en este directorio: https://cloud.undernet.uy/s/ByzeA7arTfGdxGD
=clip=
=clip=
v1 es una fuente voltaje independiente. Consulta el capítulo en el manual de Ngspice:
* 4.1 Independent Sources for Voltage or Current
v1 tiene una onda de voltaje sinusoidal. Los parámetros se explican aqui:
* 4.1.2 Sinusoidal 
d1 es un diodo de modelo 1N4148, algo común. El diodo (y varios otros componentes) necesita un comando ".model" para especificar sus parámetros. Podés ponerlo en un archivo se llama 1n4148.lib y incluir ese archivo. El contenido del archivo debe ser esto:
<pre>
.model 1n4148 D(IS=2.5n N=1.9 BV=100 RS=1)
</pre>
Los parámetros del modelo del diodo se definan en el capitulo "7.2.1 Diode Model (D)" del manual usuario de Ngspice.
==Archivo SPICE (clip.cir)==
==Archivo SPICE (clip.cir)==
<pre>
<pre>
Línea 11: Línea 30:


==comandos==
==comandos==
* ngspice clip.cir
* ngspice clip.cir (en el shell)
* tran 10us 3s
* tran 10us 3s (en ngspice)
* plot v(sig) v(out)  xlimit 0 10m
* plot v(sig) v(out)  xlimit 0 10m (en ngspice)
* plot v(sig) v(out)+1 xlimit 0 10m
* plot v(sig) v(out)+1 xlimit 0 10m (en ngspice)
* plot v(sig) v(out) 1000*-1*v1#branch xlimit 0 10m
* plot v(sig) v(out) 1000*-1*v1#branch xlimit 0 10m (en ngspice)


=amp 1=
=amp 1=
Línea 42: Línea 61:


==comandos==
==comandos==
* ngspice amp1.cir
* ngspice amp1.cir (en shell)
* plot v(sig) v(out) xlimit 0 3
* plot v(sig) v(out) xlimit 0 3 (en ngspice)
* fft v(out)
* fft v(out) (en ngspice)
* plot mag(v(out)) xlimit 0 10
* plot mag(v(out)) xlimit 0 10 (en ngspice)


=dist 1=
=dist 1=
Línea 81: Línea 100:


=amp 2=
=amp 2=
Vamos a correr una simulación y escuchar a la salida del circuito.
Para hacerlo, generamos un archivo que contiene una grabación de los voltages durante la simulación.
Convertiramos ese archivo a un archivo de audio, en formato WAV.
Para eso, usamos los programas de [https://github.com/Ttl/spice-audio-tools Spice Audio Tools].
==Archivo SPICE (amp2.cir)==
==Archivo SPICE (amp2.cir)==
<pre>
<pre>
Línea 192: Línea 216:
</pre>
</pre>


* https://github.com/Ttl/spice-audio-tools
=Archivo de WAV de entrada, WAV de salida=
Esta simulación consume el contenido de un archivo se llama [https://cloud.undernet.uy/s/FqfqEwxw7tsaHRy clean.wav].
Genera un archivo se llama out.wav.
 
Consulte en el [https://cloud.undernet.uy/s/mnjZEiEcPYB99NL manual de Ngspice]
* 8.2.9 Filesource (PWL sourced from file)
* 8.1 Code Model Element
* 8.1.1 %v represents a single-ended voltage port
* 8.1.1 Square brackets ([ ]) are used to enclose vector input nodes.
* 13.5.78 General Form: Shell: Call the command interpreter
* 13.5.56 General Form: Pre_<command>: execute commands prior to parsing the circuit


=Archivo de WAV de entrada, WAV de salida=
Necesitas esos archivos en el mismo directorio con el archivo SPICE (wav_in.cir):
# [https://cloud.undernet.uy/s/ST4wXi67BBNZac5 wavtospice.py]
# [https://cloud.undernet.uy/s/opnbgPRq6QmAepY spicetowav.py]
# [https://cloud.undernet.uy/s/FqfqEwxw7tsaHRy clean.wav]
 
==Archivo SPICE (wav_in.cir)==
<pre>
<pre>
.title wave input
.title wave input
* Consulte "8.2.9 Filesource (PWL sourced from file)" en el manual.
* Consulte "Code Model Element" en el manual de usuario de Ngspice.
* "%v represents a single-ended voltage port ..."
* "Square brackets ([ ]) are used to enclose vector input nodes."


a1 %v([in]) filesrc
a1 %v([in]) filesrc
Línea 215: Línea 248:


.control
.control
  * Consulte "13.5.56 General Form: Pre_<command>" en el manual.
   pre_shell python3 wavtospice.py clean.wav in.dat
  * Pre_<command>: execute commands prior to parsing the circuit
   pre_shell python wavtospice.py clean.wav in.dat
   tran 0.02m 10
   tran 0.02m 10
   wrdata out.dat v(out)
   wrdata out.dat v(out)
   shell python spicetowav.py out.dat out.wav
   shell python3 spicetowav.py out.dat out.wav
.endc
.endc
</pre>
</pre>
==comandos==
Nota: Pasar la opción -b hace que se ejecute y luego finalice. Consulte "12.3 Command line options for starting ngspice" en el manual
* ngspice -b wav_in.cir
Ahora podés escuchar out.wav. Un ejemplo del archivo de salida es aquí: https://cloud.undernet.uy/s/e2fsjes6fy6P6Ei