Outils pour utilisateurs

Outils du site


tns

http://arduino.cc/en/Tutorial/AnalogInputPins

http://www.microsmart.co.za/technical/2014/03/01/advanced-arduino-adc/

http://www.instructables.com/id/Arduino-is-Slow-and-how-to-fix-it/

doc atmel 328p: http://www.atmel.com/images/doc8161.pdf

ligne de commande

plot

qt

http://www.qcustomplot.com/index.php/download

installation:

 tar -xvf QCustomPlot-source.tar.gz
 tar -xvf QCustomPlot.tar.gz
 cd qcustomplot
 tar -xvf ../QCustomPlot-sharedlib.tar.gz
 cd qcustomplot-sharedlib/sharedlib-compilation/
 qmake sharedlib-compilation.pro
 make
 cd ../../examples/plots
 qmake plot-examples.pro
 make
 
 

gnuplot

tns

https://www.google.fr/search?client=ubuntu&channel=fs&q=fir+c+implementation&ie=utf-8&oe=utf-8&gfe_rd=cr&ei=sD7ZVJKjOYHo7Aau5oCwDg

http://iowahills.com/A7ExampleCodePage.html

https://sestevenson.wordpress.com/implementation-of-fir-filtering-in-c-part-1/

https://www.youtube.com/watch?v=fdCAsZkjpSg

objectif

appli audio

filtre passe bande sur gbf-

equation de récurence fournie

1° dev sous qt: on travaille sur des wav en double précision fitres simples, echo/ reverb

boite génération signal (sinus amplitude et fréquence variable)

filtre décimation

programmation IT/timer

adc 12 bits sur nucleo

implémentation arduino

Pour connaître la place disponible en ram: http://playground.arduino.cc/Code/AvailableMemory

int freeRam () {

  extern int __heap_start, *__brkval;
  int v;
  return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}

De base avec Serial, il reste de l'ordre de 1600 octets disponibles en RAM

install arduino 1.6.0

ouvrir une un console

cd ~/Téléchargements/
wget http://arduino.cc/download_handler.php?f=/arduino-1.6.0-linux64.tar.xz
tar xf download_handler.php?f=%2Farduino-1.6.0-linux64.tar.xz
cd arduino-1.6.0
./arduino

Cette nouvelle version utilisera le même fichier de config ~/.arduino que la version 1.5 et ira chercher les sketchs dans ~/sketchbook

La nouvelle version affiche:

Le croquis utilise 450 octets (1%) de l'espace de stockage de programmes. Le maximum est de 32 256 octets.
Les variables globales utilisent 9 octets (0%) de mémoire dynamique, ce qui laisse 2 039 octets pour les variables locales. Le maximum est de 2 048 octets.

Gestion fichiers wav

TODO: vérifier qu'on a le nécessaire pour lire les wav sinon ajouter à apt-get:

 sudo apt-get install libsndfile1-dev  sndfile-tools

http://www.mega-nerd.com/libsndfile/

http://www.mega-nerd.com/libsndfile/api.html

http://www.mega-nerd.com/libsndfile/tools/

code source du chirp: http://sndfile-tools.sourcearchive.com/documentation/1.03-2/sndfile-generate-chirp_8c-source.html

sndfile-generate-chirp -linear -from 100 -to 2000 11000 5 /tmp/chirp.wav   
sndfile-spectrogram /tmp/chirp.wav 800 800 /tmp/image.png   && display /tmp/image.png
sndfile-spectrogram  /home/bvandepo/Bureau/IUT/qt/wav/cartoon1.wav 800 800 /tmp/image.png && display /tmp/image.png
sndfile-spectrogram  /home/bvandepo/Bureau/IUT/qt/wav/jonathan_chirp.wav 800 800 /tmp/image.png && display /tmp/image.png 
sndfile-spectrogram  /home/bvandepo/Bureau/IUT/qt/wav/jonathan_chirpout.wav 800 800 /tmp/image.png && display /tmp/image.png

Calcul du module d'un filtre numérique en C

calc_module.c
// coefficients fournis dans tableau num et den en double. Résultat dans tableau module en double
void calc_module (unsigned int nb_pt, long unsigned int fmin,long unsigned int fmax,long unsigned int fe, double* num,double* den, short unsigned int taille_num,short unsigned int taille_den, double* module )
    {double ren,imn,red,imd,freq ;
 
    for (unsigned int ind=0; ind<=nb_pt-1; ind++)
    {
        freq = fmin + ind*(double(fmax-fmin))/(double(nb_pt-1));
        ren=0;imn=0;red=0;imd=0;
 
        for (unsigned int k=0; k<taille_num; k++)
        {
            ren=ren + (num[k]*cos(2*M_PI*freq*k/fe));
            imn=imn + (num[k]*sin(2*M_PI*freq*k/fe));
        }
 
        for (unsigned int k=0; k<taille_den; k++)
        {
            red=red + (den[k]*cos(2*M_PI*freq*k/fe));
            imd=imd + (den[k]*sin(2*M_PI*freq*k/fe));
        }
        module[ind] = sqrt((pow(ren,2)+pow(imn,2))/(pow(red,2)+pow(imd,2)));
    }
}

Tests :

tests.c
     //Pbas butter ordre 2, fc=1000, fe=100000
    double n_rii[3] = {0.0009446918438402,0.0018893836876803,0.0009446918438402};
    double d_rii[3] = {1.0000000000000000,-1.9111970674260730,0.9149758348014336};
    //LPC10, fe=8000
    double n_lpc[1] = {1.0000000000000000};
    double d_lpc[10] = {-0.9066005084154077,-0.0894023777130527,-0.0737403635454538,-0.1058346286389015,-0.0805322009937170,0.7530041872610538,-0.2893637471696474,-0.0765682373294319,0.1198196170751025,-0.0831829803216555};
    //PHaut FIR ordre20, fe=48000, fs=1000, fp=2000
    double n_fir[21] = {-0.0242371571968972,-0.0301724044152419,-0.0361555490565042,-0.0420070672503898,-0.0475441084943809,-0.0525880968984849,-0.0569723066108962,-0.0605490435416172,-0.0631960811056043,-0.0648220319326880,0.9346296113838384,-0.0648220319326880,-0.0631960811056043,-0.0605490435416172,-0.0569723066108962,-0.0525880968984849,-0.0475441084943809,-0.0420070672503898,-0.0361555490565042,-0.0301724044152419,-0.0242371571968972};
    double d_fir[1] = {1.0};
 
    double module[1000];
 
//    calc_module(1000,100,50000,100000,n_rii,d_rii,3,3,module);
//    calc_module(1000,100,4000,8000,n_lpc,d_lpc,1,10,module);
    calc_module(1000,100,24000,48000,n_fir,d_fir,21,1,module);
tns.txt · Dernière modification: 2015/03/31 09:33 par bvandepo