Diferencia entre revisiones de «Taller de distorsión»

Sin resumen de edición
 
(No se muestran 21 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 191: Línea 215:
.ENDS
.ENDS
</pre>
</pre>
=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
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>
.title wave input
a1 %v([in]) filesrc
.model filesrc filesource (file="in.dat" amploffset=[0] amplscale=[100] timeoffset=0 timescale=1 timerelative=false amplstep=false)
.model 1n4148 D(IS=2.5n N=1.9 BV=100 RS=1)
r1 in out 1k
d1 out 0 1n4148
d2 0 out 1n4148
.control
  pre_shell python3 wavtospice.py clean.wav in.dat
  tran 0.02m 10
  wrdata out.dat v(out)
  shell python3 spicetowav.py out.dat out.wav
.endc
</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