Diferencia entre revisiones de «Taller de distorsión»

Sin resumen de edición
 
(No se muestran 12 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>
* https://github.com/Ttl/spice-audio-tools


=Archivo de WAV de entrada, WAV de salida=
=Archivo de WAV de entrada, WAV de salida=
==Archivo SPICE (wav_in.cir)==
Esta simulación consume el contenido de un archivo se llama [https://cloud.undernet.uy/s/FqfqEwxw7tsaHRy clean.wav].
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.  
Genera un archivo se llama out.wav.  
Línea 209: Línea 228:
* 13.5.56 General Form: Pre_<command>: execute commands prior to parsing the circuit
* 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:
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/ST4wXi67BBNZac5 wavtospice.py]
# [https://cloud.undernet.uy/s/opnbgPRq6QmAepY spicetowav.py]
# [https://cloud.undernet.uy/s/opnbgPRq6QmAepY spicetowav.py]
# [https://cloud.undernet.uy/s/FqfqEwxw7tsaHRy clean.wav]
# [https://cloud.undernet.uy/s/FqfqEwxw7tsaHRy clean.wav]


 
==Archivo SPICE (wav_in.cir)==
<pre>
<pre>
.title wave input
.title wave input
Línea 229: Línea 248:


.control
.control
   pre_shell python3 wavtospice.py clean.wav in.dat
   pre_shell python3 wavtospice.py clean.wav in.dat
   tran 0.02m 10
   tran 0.02m 10
Línea 242: Línea 260:
* ngspice -b wav_in.cir
* ngspice -b wav_in.cir


Ahora podés escuchar out.wav.
Ahora podés escuchar out.wav. Un ejemplo del archivo de salida es aquí: https://cloud.undernet.uy/s/e2fsjes6fy6P6Ei