Acquisition, filtrage et analyse d'un signal

Bonjour à tous !

Je me présente, Yoan, jeune ingénieur orienté plus mécanique qu'électronique (ce qui est une tare pour moi !), qui se rend compte qu'il a beaucoup d'idées en tête mais pas assez de culture électronique pour les réaliser.

Je vais donc entrer directement dans le vif du sujet, pour vous donner une vague idée d'où je pars :smiley:

J'ai dans l'idée de me faire un détecteur de son (ou lumière ou vibration), qui me prévient lorsqu'un certain seuil est dépassé.

L'idée est donc, d'acquérir un signal, le filtrer en "temps réel", ou du moins avec le moins de retard possible, et lorsque le signal filtré dépasse un seuil que j'aurai défini, bim mon système envoie un créneau ANA ou digital dans un enregistreur (toute la partie enregistreur avec base de temps existe déjà, on va donc se concentrer sur les étapes précédentes).

Petite mise en situation :
Je suis dans un véhicule qui roule, avec beaucoup de bruits parasites (on va se faciliter la vie en coupant la radio), j'enlève ma ceinture en roulant, l'IHM me prévient et envoie un son reconnaissable à l'oreille. Je veux savoir quand ce son est apparu.

En synthétisant, ça donne:

  • Acquisition d'un signal (petite carte micro avec gain réglable)
  • Entrée du signal dans une carte type Arduino
  • Le signal est très bruité, je souhaite donc le lisser avec un petit filtre (moyenne mobile par exemple)
  • Le warning ceinture de l'IHM sonne --> dès que la carte voit cette nouvelle fréquence et/ou amplitude, elle envoie un créneau analogique de 0 à 5V (ou plus simple, elle allume une led)

Evidemment pour que cela fonctionne, il faudrait faire une petite passe d'apprentissage pour que la carte détecte ce que sont les bruits ambiants, du son que je veux reconnaître.

Ma question est donc, pensez vous qu'une carte Arduino est adaptée à mon besoin ? Elle ferait donc acquisition/filtrage/analyse du signal via un dépassement de seuil/envoie de l'information de détection du warning via créneau analogique ? Cela choque-t-il quelqu'un ?

Après peut-être que le plus simple serait d'avoir un filtre physique passe haut via montage RC ? La sortie ne devient active qu'une fois une fréquence sonore dépassée.

J'espère que mon projet en intéressera plus d'un ici, en tout cas si on me dit que c'est possible, je me lancerai enfin dans l'apprentissage des notions de base Arduino, avant de me lancer billes en tête la dedans !

Merci à tous, et à bientôt.
Yo

Bonjour

Intéressant masi il me semble que l'exposé est trop général pour répondre sur les moyens à employre qui peuvent différer selon la ,manière dont l'évènement 'émerge' du bruit.

Partons sur le son : des enregistrements effectués avec Audacity permettraient de bien identifier le pb à résoudre , et même de tester des traitements divers sur le signal enregistré.

Parler 'moyens techniques' avant d'avancer davantage dans la caractérisation du travail à faire est prématuré.

Quand j'étais en activité on serait probabablement partis d'emblée sur un DSP et non un processur standard pour ce type de projet. Aujourd'hui les processeurs standards, 'non DSP' ont bien progressé.

Si l'on reste à proximité d'Arduino certaines cartes Teensy , les librairies associées et un outil graphique permettent d'envisager du traitement audio.

YoanNoopy:
Evidemment pour que cela fonctionne, il faudrait faire une petite passe d'apprentissage pour que la carte détecte ce que sont les bruits ambiants, du son que je veux reconnaître.

Si l'application est capable d'apprentissage, on s'approche de l'IA, ce qui va être compliqué avec un arduino. En revanche, si tu définis toi-même un seuil haut à partir duquel il est légitime d'actionner une led, ça devrait être tout à fait jouable.

Une recherche avec "filtre digital, acquisition, arduino, f legrand " sur ton moteur de recherche préféré devrait t'orienter vers pas mal de tutoriels en français.

A noter que si tu n'a encore jamais touché à un arduino, il serait judicieux de commencer par le commencement avec les tutoriels "généraux" épinglés en haut du présent forum, voire de commencer avec un livre de découverte sur l'arduino (ça foisonne sur le net).

Si tu veux faire du traitement du signal proprement, il te faut avoir une fréquence d'échantillonage

  • constante et connue,
  • au moins deux fois supérieure à la fréquence la plus haute du signal à analyser.

De plus il te faudra de la mémoire, pas mal, et de la puissance de calcul, pas mal aussi.
Pour toutes ces raisons tu aurais avantage à considérer l'utilisation d'un Raspberry Pi plutôt qu'un Arduino.
Avec un RPI, tu es sous Linux, tu peux utiliser des librairies de haut niveau pour ton projet.

al1fch:
Bonjour

Intéressant masi il me semble que l'exposé est trop général pour répondre sur les moyens à employre qui peuvent différer selon la ,manière dont l'évènement 'émerge' du bruit.

Partons sur le son : des enregistrements effectués avec Audacity permettraient de bien identifier le pb à résoudre , et même de tester des traitements divers sur le signal enregistré.

Parler 'moyens techniques' avant d'avancer davantage dans la caractérisation du travail à faire est prématuré.

Quand j'étais en activité on serait probabablement partis d'emblée sur un DSP et non un processur standard pour ce type de projet. Aujourd'hui les processeurs standards, 'non DSP' ont bien progressé.

Si l'on reste à proximité d'Arduino certaines cartes Teensy , les librairies associées et un outil graphique permettent d'envisager du traitement audio.

Merci à tous pour vos réponses :).
Effectivement avant d'attaquer mon sujet, je m’entraînerai aux sujets de bases, allumage de led, ... Pour le moment je souhaitais savoir si l'Arduino est une solution adaptée.

Effectivement, j'ai déjà utilisé Audacity pour extraire la valeurs de la fréquence sonore remarquable par rapport au bruit ambiant. Evidemment chaque "warning" dans un véhicule étant différent par rapport à sa source (ouverture de porte, ceinture, marche arrière, ...), je peux faire moi même un apprentissage via Audacity et trouver chaque fréquences qui m'intéressent.

Replaçons le problème :
Je sais que mon véhicule en conditions de roulage émet des bruits que j’appellerai "ambiant", avec des fréquences plutôt basses. Je connais la fréquence du warning que je cherche (grâce à Audacity). Je souhaiterai concevoir un système qui, part le biais d'un micro en entrée, m'envoie l'information de l'apparition de cette fréquence (allumage d'une led pour commencer, et en finalité, envoie un trigger 0 à 5V sur un de mes GPIO).

Sachant que les bruits ambiants pourraient fausser la détection du warning dans le micro, j'aimerai "lisser" la mesure faite par le micro et éviter un Faux Positif.

Pensez vous que l'Arduino suffirait ? Dans mon esprit simpliste du monde des bisounours, ça a l'air.

Ça donnerait quelque chose comme ça :

  • Sortie analogique venant du micro
  • Lissage de la sortie informatique (je préfère éviter les circuits RC pour le moment)
  • Transformation de la valeurs analogique en estimation de la fréquence
  • Lorsque la fréquence dépasse une valeurs seuil, la led s'allume
  • (à terme) la led s'allume, la sortie analogique n°xxx passe de 0 à 5V pendant 500ms

Quand j'étais en activité

alors on te souhaite une longue et heureuse retraite :slight_smile:

Merci !
Ma formulation ne convient pas car les 'activités' ne manquent pas ......

lene 567 est un circuit qui selectionne des frequence .
si ça peut t 'aider?

cordialement
alain

alainav1:
lene 567 est un circuit qui selectionne des frequence .
si ça peut t 'aider?
https://www.experimentalistsanonymous.com/diy/Datasheets/NE567.pdf

cordialement
alain

Et bien vois tu, c'est là où mes compétences s'arrêtent. J'ai beau m'en sortir en anglais, là c'est la technique qui m'échappe et je suis incapable de te dire si ça m'aide ou non.
Par contre je sais dire merci :smiley:

Içi une explication en français sur ce que peut faire un NE 567 , vénérable circuit intégré des années 70 et toujours utile comme le NE 555

=Détecter la présence d'une fréquence déterminée, en fait une petite plage de fréquence
Reste à tester son comportement sur le terrain avec le rapport signal/bruit existant et constater ou pas de déclenchements intempestifs.

biggil:
Si tu veux faire du traitement du signal proprement, il te faut avoir une fréquence d'échantillonage

  • constante et connue,

Pas nécessairement; mais sûrement pas avec un Arduino.

Quant à la comparaison Linux ..... ?????

Cordialement,
bidoulleelec

bidouilleelec:
Pas nécessairement; mais sûrement pas avec un Arduino.

Quant à la comparaison Linux ..... ?????

Cordialement,
bidoulleelec

Alors, peut être que ce n'est pas suffisant mais c'est peut être une idée pas si mauvaise :
https://us.banggood.com/Wholesale-Warehouse-Microphone-Voice-Sound-Sensor-Module-For-Arduino-wp-Usa-76461.html?akmClientCountry=FR&gmcCountry=FR&currency=EUR&cur_warehouse=USA&createTmp=1&utm_source=googleshopping&utm_medium=cpc_bgcs&utm_content=zouzou&utm_campaign=pla-usw-fr-all-pc&ad_id=324115201626

Cette petite carte d'acquisition sonore, permet de sortir le signal sous forme Analogique (avec j'ose imaginer, une relation connue entre la tension et la fréquence et/ou le niveau sonore). En faisant entrer cette info dans une des entrées ANA de l'Arduino, je ne peux rien en faire ?

Elle a un truc pas mal cette carte, c'est sa sortie Digitale liée avec le potard. De ce que je comprends, le potard c'est purement le réglage de la sensibilité du micro = le potard vers 0 : prends tous les bruits/potard au maximum : ne prendra que les bruits dont l'amplitude est supérieure à un seuil. C'est pas mal, mais malheureusement je risque de choper d'autres bruits que celui que je cherche précisément.

J'ai évidemment pensé à la solution Raspberry, mais encore une fois, je suis pas bien compétent en électronique/informatique, je me sers de mon sujet sonore pour justement en apprendre plus sur l'automatisation. Honnêtement, je ne voyais pas ce problème comme bien complexe à la base:

  • Signal ANA entrant et filtré (en utilisant les banques de données Arduino par exemple, sans trop forcer)
  • Déclaration d'une valeurs seuil (fréquence)
  • Quand le signal filtré dépasse la valeurs seuil --> led allumée (+sortie ANA active)

bidouilleelec:

Si tu veux faire du traitement du signal proprement, il te faut avoir une fréquence d'échantillonage constante et connue,

Pas nécessairement;

Mais si, je maintiens. Tu peux toujours prendre une flopée d'échantillons et faire des moyennes, ce n'est pas du traitement du signal propre.

mais sûrement pas avec un Arduino.

donc, si on ne peut pas avoir une fréquence d'échantillonage constante et connue avec un Arduino, et bien l'Arduino ne convient pas pour faire du traitement du signal (sans même parler de la mémoire et de la puissance de calcul)

Quant à la comparaison Linux ..... ?????

Oui, c'est quoi la question ? On trouve certes des tas de biblios pour Arduino, mais on ne peut pas comparer avec Linux.

biggil:
Pas nécessairement;

Mais si, je maintiens. Tu peux toujours prendre une flopée d'échantillons et faire des moyennes, ce n'est pas du traitement du signal propre. donc, si on ne peut pas avoir une fréquence d'échantillonage constante et connue avec un Arduino, et bien l'Arduino ne convient pas pour faire du traitement du signal (sans même parler de la mémoire et de la puissance de calcul)

Je maintiens également : pas nécessairement. Mais avec un Arduino?

Cordialement,
bidouilleelec

Bonjour à tous et merci pour vos réponses.
Pour information, je suis super têtu et j'ai envie de pousser le sujet le plus loin possible avant d'envisager une solution plus "sage" (type Raspberry ou autre).

Je me suis dons lancé dans les tuto de base Arduino pour en apprendre un maximum. Une fois que j'aurai jugé mes compétences suffisantes je me lancerai dans un cahier des charges pour mon code, et je le débuterai. Vous aurez donc mes premiers bouts de code et les conclusions que j'en aurai fait d'ici peu.

Merci à tous de vos retours.
Yo

Vous feriez peut être mieux d'échantillonner à une fréquence fixe (pas forcément en continu: Arduino peut le faire assez bien/pas trop mal), de stocker des episodes sur une carte SD ou de les transmettre via une joncrion série (tout PC ou RPi peut les avaler), et de vous servir de votre PC/RPi , muni de python, pour determiner quel traitement infliger(dans le monde libre, R, Octave -entre autres - marchent assez bien sur RPi, a fortiori sur PC). Une fois que ce traitement est determiné, choisir la carte electronique qui le fera (si c'est faisable) et programmer le traitement découle de source .
NB : ballau a fait un échantillonneur , partiquement à la vitesse maximum du convertisseur A/D de l'arduino qui fonctionne très bien (et qui devient très pratique une fois remplacée la transmission binaire par une conversion en ASCII)Capturing an analog signal with Arduino and python | Freedom Embedded

YoanNoopy:
Merci à tous pour vos réponses :).
Effectivement avant d'attaquer mon sujet, je m’entraînerai aux sujets de bases, allumage de led, ... Pour le moment je souhaitais savoir si l'Arduino est une solution adaptée.

Effectivement, j'ai déjà utiliser Audacity pour extraire la valeurs de la fréquence sonore remarquable par rapport au bruit ambiant. Evidemment chaque "warning" dans un véhicule étant différent par rapport à sa source (ouverture de porte, ceinture, marche arrière, ...), je peux faire moi même un apprentissage via Audacity et trouver chaque fréquences qui m'intéressent.

Replaçons le problème :
Je sais que mon véhicule en conditions de roulage émet des bruits que j’appellerai "ambiant", avec des fréquences plutôt basses. Je connais la fréquence du warning que je cherche (grâce à Audacity). Je souhaiterai concevoir un système qui, part le biais d'un micro en entrée, m'envoie l'information de l'apparition de cette fréquence (allumage d'une led pour commencer, et en finalité, envoie un trigger 0 à 5V sur un de mes GPIO).

Sachant que les bruits ambiants pourraient fausser la détection du warning dans le micro, j'aimerai "lisser" la mesure faite par le micro et éviter un Faux Positif.

Pensez vous que l'Arduino suffirait ? Dans mon esprit simpliste du monde des bisounours, ça a l'air.

Ça donnerait quelque chose comme ça :

  • Sortie analogique venant du micro
  • Lissage de la sortie informatique (je préfère éviter les circuits RC pour le moment)
  • Transformation de la valeurs analogique en estimation de la fréquence
  • Lorsque la fréquence dépasse une valeurs seuil, la led s'allume
  • (à terme) la led s'allume, la sortie analogique n°xxx passe de 0 à 5V pendant 500ms

Merci. Je n'avais vraiment pas pensé à Audacity pour enquêter sur le problème.