Les fichiers audio dans LTspice pour la simulation d’effets

Cet article explique comment importer et exporter des fichiers audio (au format wav) dans LTspice.
Cela est très intéressant pour tester un effet analogique et simuler par exemple le rendu d’une pédale de guitare!

Commençons par un montage de base avec un AO:

baseInv

C’est un amplificateur inverseur. Comme R1 = R2, c’est un inverseur simple.

L’AMPLIFICATEUR OPERATIONNEL

Pour l’ampli op, on a choisi un ampli op standard LM741. 

Je passe rapidement sur les détails techniques : on utilise le fichier LM741.sub et on ajoute la directive
« .lib C:\monchemin\LM741.sub »
On renomme opamp2 en LM741/NS.

LM741

Il reste à ajouter une alimentation symétrique en -4.5v, +4.5V pour alimenter l’AO. On utilise pour cela deux « cells » avec les labels V+ et V- :alimA0

Ci-joint le circuit inverseur.

AJOUT D’UN FICHIER AUDIO EN ENTREE

Le « trick », c’est de presser la touche « ctrl » tout en cliquant droit sur le générateur de tension (le composant « voltage »):

EntreeWav1

Dans le champ « value », on utilise le mot clef wavefile
wavefile= »C:\monchemin\monfichier.wav » chan 0
chan 0 indique de prendre le premier canal, en cas de fichier stéréo.
EntreeWav2
Ci-joint le fichier audio (enregistré avec un smartphone de base) : say it aint so extrait . Ce fichier dure environ 15.2 secondes. Dans la « simulation command », on ajuste la durée à 15.3 secondes.

ENREGISTREMENT DU FICHIER AUDIO EN SORTIE

On ajoute pour cela une directive avec le mot clef .wave :
.wave « C:\monchemin\monfichierWavOut.wav » 16 44100 Vout

  • .wave : pour indiquer que la sortie est un audio au format wav,
  • « C:\… » : le nom du fichier de sortie,
  • 16 : nombre de bits de quantification – 16 bits est la valeur standard,
  • 44100 : fréquence d’échantillonnage en Hz, c’est à dire le nombre de valeurs par seconde. 44100, c’est la qualité CD,
  • Enfin, Vout est le label qui correspond à la sortie.
  • SortieWav

SIMULATION D’UN EFFET PASSE-BAS

Pour que cela devienne intéressant, on transforme notre circuit inverseur en un passe-bas par l’ajout d’une capa en parallèle de la résistance R2.

SortieWavPasseBas

La fréquence de coupure du passe-bas est 1/(2*pi*R2*C1). Avec C1=160n, cette fréquence est d’environ 1kHz.

On lance la simulation. Notez bien que la simulation demande une latence considérable. Il est conseillé de tester son circuit sur des fichiers courts.

Ci-joint, le fichier audio en sortie du passe-bas : say it aint so extrait passe base 1kHz .

CONCLUSION

L’audio en entrée et en sortie, la possibilité de simuler des effets analogiques. Rien à dire : LT spice c’est génial!

P.J. : le schéma spice pour le passe-bas avec audio en entrée et sortie : PB

Compiler le code source de TensorFlow avec les optimisations AVX2 et FMA sous Mac OS X

Ce post concerne l’installation du paquet TensorFlow à partir du code source.

La motivation première est d’éviter ce warning :

"The TensorFlow library wasn't compiled to use AVX2 and FMA instructions, but these are available on your machine and could speed up CPU computations."

Pour contextualiser, je travaille sur un MacBook Pro 2017:

MacBook Pro (13-inch, 2017, Two Thunderbolt 3 ports)
Processeur 2.3 GHz Intel core i5 (2 coeurs)
Mémoire 8 Go 2133 MHz LPDDR3
Graphisme Intel Iris Plus Graphics 640 1536 Mo

Donc pas de GPU.

L'objectif est de compiler TensorFlow « nativement » pour ma machine, ce qui a priori devrait être mieux optimisé et donc plus performant en temps de calcul que l’installation standard par « pip install tensorflow ».

Cet article est principalement inspiré de la documentation de TensorFlow : https://www.tensorflow.org/install/source.
Je suis parti en fait de ce « post » : https://gist.github.com/winnerineast/05f63146e4b1e81ae08d14da2b38b11f, dans lequel il manque cependant des prérequis avant la compilation.
Enfin, la compilation sous Mac OS fait appel à « Bazel ». Son installation est expliquée là : https://docs.bazel.build/versions/master/install-os-x.html.

Dans un premier temps, j’explique l’installation d’Anaconda et la mise en place d’un environnement virtuel.
Ça n’est pas directement lié à notre problème, mais cela permet de poser le contexte.

Anaconda

Installation

Il faut aller là https://www.anaconda.com/distribution/ et cliquer sur le lien 64-Bit Command Line Installer (435 MB) - installation en ligne de commande.

Ensuite ouvrir un terminal et aller dans le répertoire Downloads

$ cd Downloads

Lancer l’installation

$ bash Anaconda3-2019.07-MacOSX-x86_64.sh

Création d’un environnement virtuel (python 3.6)

$ conda create --name py36 python=3.6 anaconda

Quand on veut activer l’environnement virtuel dans un terminal

$ source activate py36

Pour sortir de l’environnement

$ conda deactivate
On revient à nos moutons : taper

$ source activate py36

Puis

$ conda update numpy (inutile a priori puisqu’on vient d’installer l’environnement py36, mais ça peut servir s’il est déjà installé).

ON REVIENT A LA COMPILATION

 

ATTENTION, à ne pas oublier.

Il faut installer deux paquets avant la compilation sous peine de générer des erreurs.

$ source activate py36 (si ce n’est pas déjà fait)

$ pip install -U keras_applications==1.0.6 --no-deps

$ pip install -U keras_preprocessing==1.0.5 --no-deps

Pas besoin de l’option «--user » parce qu’on est dans un env. virtuel.

INSTALLATION DE BAZEL

« install Bazel using binary installer » tel que décrit dans https://docs.bazel.build/versions/master/install-os-x.html

Dans le GitHub, sélectionner la version 0.26.1 https://github.com/bazelbuild/bazel/releases/tag/0.26.1 puis télécharger le fichier bazel-0.26.1-installer-darwin-x86_64.sh

Enfin installer :

$ cd Downloads

$ bash bazel-0.26.1-installer-darwin-x86_64.sh --user

Attention, il est important que la version de Bazel soit <= 0.26.1

TELECHARGEMENT DU CODE SOURCE DE TENSORFLOW

$ git clone https://github.com/tensorflow/tensorflow.git

$ cd tensorflow

$ git checkout r1.14

La dernière ligne indique que l’on utilise la version/branche 1.14 de TensorFlow

COMPILATION

$ source activate py36 (si ce n’est pas déjà fait)

$ ./configure

Garder les options par défaut dans la configuration.

En particulier, l’option « march=native » indique que la compilation est faite pour votre Mac.

$ bazel clean

$ bazel build -c opt --copt=-mavx2 --copt=-mfma  -k //tensorflow/tools/pip_package:build_pip_package

ATTENTION LA COMPILATION PEUT PRENDRE DU TEMPS, PLUSIEURS HEURES SUR MA MACHINE.

CONSTRUIRE LE PAQUET

$ ./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

INSTALLER LE PAQUET avec pip

$ pip install /tmp/tensorflow_pkg/tensorflow-1.14.1-cp36-cp36m-macosx_10_7_x86_64.whl

Test pour vérifier que TensorFlow fonctionne

Sortir du dossier tensorflow :
$ cd

$ source activate py36 (si besoin)
$ python
Python 3.6.9 |Anaconda, Inc.| (default, Jul 30 2019, 13:42:17) 
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name=‘a')
>>> b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name=‘b')
>>> c = tf.matmul(a, b)
>>> with tf.Session() as sess:
        print (sess.run(c))
        aa = sess.run(a)
        bb = sess.run(b)
>>> print(aa.dot(bb))

Et voilà!