Discussions au sujet de NI LabVIEW

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 

Moyenner une waveform

Bonjour, 

 

Je doit réalisé sur LabVIEW un oscilloscope. Le signal à traiter est donné par un GBF, récupéré via une carte d'acquisition. Dans le programme, j'utilise un assistant DAQ (permet de régler les paramètres d'acquisition : le nombre d'échantillons, la fréquence d'échantillonnage...) dans une boucle while. 

 

Cet assistant revoit une waveform et génère une courbe à chaque itération de la boucle while. Comme tout sur "bon ascilloscope", je cherche à y introduire une fonction qui permet de réduire le bruit du signal. Pour cela, j'aimerai faire un système pour moyenner le signal. 

 

Est-il possible de stocker quelques itérations, en faire une moyenne et retourner cette moyenne dans un graph ?

Pour ne pas ralentir l'affichage (afficher une courbe à chaque itération et non toutes les 5 itérations si on moyenne sur 5 itérations), est-il possible de faire un stockage "glissant" ?

 

 Si dessous une image de l'assistant : 

Révélation
Capture.PNG

  

J'espère avoir été assez clair. 

 

Simon 

0 Compliments
Message 1 sur 6
4 730 Visites

Bonjour,

 

Il me semble que tu devrais utiliser la méthode Producteur, consomateur.

Tu le trouveras aisement ce modéle dans le menu Fichier -> Nouveau -> Modele de conception Producteur consommateur.

Le but étant d'avoir une 1ère boucle qui fait l'acquisition et une 2ème qui traite les données sans ralentir l'acquisition.

Ensuite pour ce qui est du filtrage tu as une librairie dédié sous labView ou bien le VI Express comme indiqué en PJ...

Je ne connais pas ton application : si elle est simple ou complexe.

Perso quand c'est une application complexe, je suis pas fan des VI Express...

0 Compliments
Message 2 sur 6
4 692 Visites

Bonjour,

 

Faire des moyennes avec un oscilloscope 'réel ou virtuel) demande déjà de savoir quel type de moyenne et pour quel type de signal.

 

Si le signal est stationnaire ( produit par un GBF) et périodique. Aors il faut au moins enregistrer une période et aussi enrgistrer le signal TTL associé pour disposer d'une référence de phase, ou se servir du sisgnal TTL comme trigger. On peut alors faire ce qu'on appelle une "moyenne synchrone". Si le bloc enregistré est de 1000 points avec toujours la même réféfence de phase, il est possible de calculer un bloc moyenné où la cellule d'indice i sera la moyenne des cellules d'indice i des différents tableaux.attention, sSi on ce prend pas en compte la phase des différents blocs on finit par une moyenne nulle !!!!

 

Si le signal est simplement constant, on peut faire une moyenne en ligne par un filtre passe bas avec une relation du type y(n) )= (N-1/N)*y(n-1) + x(n)/N. Où x(n) est l'entrée numéro n et y(n) la soortie numéro n. N un nombre de moyennse à adapter au problème N=100 si c'est possible lisse très bien un signal constant bruité., cela revient à augmenter artificiellement la résolution du convertisseur de la carte d'acquisition.

 

 

Message 3 sur 6
4 607 Visites

Merci pour ces réponses. 

 

J'arrive un peu tard mais bon.

Je vais regarder pour la methode prod-conso. 

Pour ce qui est du signal, il s'agit d'un signal perdiodique stationnaire auquel j'applique un trigger. Je vois à peu près ce que tu veux dire Seram, mais j'avoue avoir un peu de mal à manipuler le format waveform, pour ce qui est stockage entre autre. 

0 Compliments
Message 4 sur 6
4 509 Visites

Bonjour,

 

Je ne suis pas tous les jours devant mon PC... qui est en panne.

Si le problème consiste à "nettoyer" la réponse d'un système linéaire à une excitation sinus, alors c'est assez simple.

La réponse est normalement sinus et le bruit en haute fréquence, un filtre passe bas un pôle suffit parfois. 

 

On peut le faire en ligne sur la boucle WHILE avec un registre à décalage et la relation:

y(n) = y(n-1) *(N-1)/N   + x(n)/N

N est le nombre de moyennes,

n est l'indice de la donnée, x pour l'entrée et y pour la sortie du filtre

Il faut initialiser le registre par 0 par exemple. Le transitoire sera curieux, mais pour un sisgnal sinus par définition stationnaire, ce n'est pas un soucis

Il faut placer le filtre entre le bloc d'acquisition et le graphe...

Le filtre va introduire un déphasage, donc placer le même filtre pour tous les signaux si on veut les comparer dans le domaine des temps. Le retard est  N/Fe...

 

Il faut évidemment respecter la règle de Shannon ( Fe > 2* F sinus) mais bien plus si on veut regarder le signal sur l'oscillo. Il faut prendre au moins le rapport 20 au lieu de 2

 

Par exemple :

Fc fréquence de coupure du filtre passe bas = 2 * F sinus 

Fe fréquence d'échantillonnage = 20 * F sinus

N nombre de moyennes = Fe / Fc = 10 dans l'exemple..

 

Cela devrait répondre au problème.

Merci de me tenir au courant du résultat. Je n'ai pas en ce moment dde PC avec LV, pour tester

 

 

0 Compliments
Message 5 sur 6
4 493 Visites

Meri beaucoup pour ta réponse. 

Je devrais y arriver avec toutes ces infos. 

 

0 Compliments
Message 6 sur 6
4 401 Visites