Dans le cadre de mon projet je voudrais exploiter le signal audio qui sort de ma chaine hifi par un LINE OUT. Son niveau est donnée pour 2V. Je voudrais ajouter une composante continue a ce signal de 2,5V afin de pouvoir lire l'intégralité du signal avec la fonction AnalogRead() pour réaliser une FFT.
Comment faire pour ajouter une telle composante continue sur ce signal?
Ampli-op : vu la bande passante considéré avec l'arduino, pas besoin d'aller chercher des AOP audio à 50€
Un bon vieux 741 ou similaire fait l'affaire
Les résistances : 2k à 4k7 ca ira bien
Capa NON POLARISE de 1 à 4uF (ou bien 2 capa polarisée en série mais en sens inverse du double de la valeur)
N'oublie pas que l'Arduino a des capacité d’échantillonnage limitée.
Si c'est pour faire de la mesure de niveau il faut peut être faire un circuit de mesure de crête avec filtrage passe-bas.
Oups j'ai oublié de préciser sans AOP si possible car un bête sommateur peu le faire j'y avais penser, j'ai trouver sur le net des gens qui parlaient de restaurateur de tension positive mais j'ai pas trouver de schéma, apparement cela se ferait avec résistance et diode.
Pour l'AOP je suis obligé d'utiliser un AOP Single-Supply, Rail-to-Rail car je veux utiliser le 0 - +5V de mon alimentation, c'est un peu luxueux mais je n'ais pas trop le choix, je prendrais donc un AD820.
J'ai marqué résolu mais si quelqu'un a le montage pour ajouter une composante continue sans AOP je suis toujours preneur.
Ah, du traitement du signal
Allo, Shannon, Nyquist ? Vous êtes là ?
Bon, en théorie si tu veut faire du traitement du signal propre il faut :
une fréquence d'échantillonnage stable, donc pas un échantillonnage par soft mais un échantillonnage drivé par un timer, si possible avec DMA
un filtre passe bas externe pour assurer que ton signal ne comporte pas de fréquence supérieure à 1/2 la fréquence d’échantillonnage
la fréquence d’échantillonnage max avec l'ATmega doit être de l'ordre de 9kHz, ce qui veut dire que tu ne peux échantillonner un signal ne comportant pas de fréquence suppérieure à 4.6kHz. Il faut un filtre qui commence à couper à 3,5 kHz et qui soit aux environ de -48dB à 4.5kHz, c'est à dire un ordre 16 = 16 étages de filtres enchainés...
Bref, rien qui soit dans le domaine de faisabilité d'un ATmega.
Risque : repliement de spectre et ta FFT va te sortir des valeurs fantôme de fréquences autres qui se sont repliées.
Par exemple si tu échantillonne à 8kHz un signal qui comporte un sinus à 7kHz, dans ta FFT que tu considère que de 1 à 4 kHz, tu verra un pic (on dit une raie) à 1kHz
Donc tout faux.
Normalement on travaille en sur-échantillonage : on met un filtre analogique "doux" qui prend 1 ou 2 octave pour atténuer les hautes fréquences, on échantillonne à au moins 4 fois la fréquence requise, puis on fait un filtrage numérique "dur" et on sous-échantillonne.
Mais ca c'est avec des DSP.
oui la capa est prévue pour enlever la composante continu, j'ai un condensateur tantale qui doit trainer par là qui fera très bien l'affaire.
Pour ce qui est de la FFT, peu importe les théorèmes qui se cachent derrière, elle réalise ce que je souhaite, a savoir détecter les basses , medium et aigu d'un signal audio, le site sur laquelle je l'ai trouvée est le suivant :http://neuroelec.com/2011/03/fft-library-for-arduino/.
Maintenant si des "fantômes" apparaissent ce n'est pas bien grave, c'est pour un jeu de lumière avec des LEDs RGB 3W.
Une solution plus simple c'est d'utiliser 3 filtres (passe-bas, passe-bande et passe-haut) suivit de filtre pour détecter uniquement le niveau crête.
Ca fait 3 ampli op, un peu plus de capa/résistances.
c'est simple en terme de soft
Mais c'est pas toi qui en parlait déjà sur un autre topic ?
Il me semble avoir vu un schéma de ce genre dans les dernières semaines.
Oui au début je voulais utiliser des filtres passes bandes et j'ai testé la librairie FFT qui faisait ce que je souhaitais donc j'ai laisser tomber les filtres.
Sympa bien que le titre ne soit pas exact. C'est plus un analyseur de niveau par bande qu'un "graphic equalizer" qui permet de corriger le son lui même.
Mais ca semble bien adapté à ton projet en tout cas.
Je prends le train en route.
Il n'est pas besoin d'avoir un ampli op pour ajouter une composante continue : une capa et un simple pont de résistance suffisent.
Les entrées de l'ATMega sont à haute impédance on peut se contenter d'un pont qui consomme au plus 1 mA ce qui donne environ deux résistances de 2 et 3 Kohms (centrage sur 2V -> voir l'explication en dessous).
Valeur de la composante continue:
Sur un ATMega la discrimination du "0" et du "1" se fait à une valeur fixe centrée autour de 2,4V avec très peu d'hystérésis (voir la datasheet). En utilisation en mode digital si on veut éviter les résultats aléatoires il faut s'éloigner de cette valeur de 2,4V.
Je suppose que quand on utilise le convertisseur analogique/digital la partie digitale est isolée mais je pense qu'il est inutile de chercher les ennuis par plaisir et personnellement je choisirai une composante centrée vers 2 Volt.