Traitement d'un signal

pascal82

XLDnaute Occasionnel
Bonjour,

J'ai des mesures dans l'ordre chronologique de n à n+x et je dois définir le type de signal en fonction de son amplitude et définir le début et la fin de chaque palier. Dans un monde parfait ou les variations sont importantes et nettes pas de problème, par contre ce n'est pas le cas dans les exemples que j'ai mis a dispo dans le fichier.

Explication:
Il faut a minima 5 mesures consécutives pour valider et noter le palier avec son type
La première valeur est la référence de début de palier (n) et on compare les valeurs suivantes (n+i) a la référence du palier pour calculer l'écart
Ecart (Valeur Max - Valeur Min)
si E <= 0.5 alors Type 1
si 0.5 < E <= 1.5 alors type 2
si E > 1.5 alors Changement de palier ou point atypique

Mon problème vient du fait que si:
- Le palier commence par un type 1 pas de problème il reconnaîtra le type 2 suivant
- Le palier commence par un type 2 alors il ne reconnaîtra pas le type 1 qui peut survenir après quelques mesures.
Si quelqu'un pouvait me donner une piste de traitement je suis preneur.

Merci par avance aux contributeurs

Cordialement

Code:
=Option Explicit

Sub CasSimple()
Dim i%, j%
Dim PalierX1%, PalierY1%
Dim Max1!, Min1!, E1!, Somme1!, moyenne1!, a!

Range("F2:H100").ClearContents

'charge les données en C1-----------------------------------------------------------
For i = 0 To 64
Range("c1").Value = Range("c4").Offset(i, 0).Value

'a=> ref1----------
a = Range("c1").Value
Somme1 = Range("c1").Value + Somme1

'-----------------------------------------------------------------------------------
       If a > Max1 Then Max1 = a
       If a < Min1 Then Min1 = a
       
        j = j + 1
        E1 = Max1 - Min1
' Incrémente Palier type1-----------------------------------------
                If E1 < 0.501 And E1 > 0 Then
                PalierX1 = PalierX1 + 1
                End If
                
' Incrémente Palier type2 ------------------------------------------
                If E1 > 0.501 And E1 < 1.501 Then
                PalierY1 = PalierY1 + 1
                End If
                
'ecriture palier si variation si E1 > 1.5  ------------------------
                If E1 > 1.501 And (PalierX1 > 4 Or PalierY1 > 4) Then
                    If PalierX1 > 4 Then
                    Range("F1000").End(xlUp)(2).Resize(1, 1).Value = "Type 1"
                    moyenne1 = (Somme1 - a) / (PalierX1 + 1)
                    PalierX1 = 0
                    End If
                    If PalierY1 > 4 Then
                    Range("F1000").End(xlUp)(2).Resize(1, 1).Value = "Type 2"
                    moyenne1 = (Somme1 - a) / (PalierY1 + 1)
                    PalierY1 = 0
                    End If
                Range("H1000").End(xlUp)(2).Resize(1, 1).Value = i
                Range("G1000").End(xlUp)(2).Resize(1, 1).Value = moyenne1
                Max1 = Range("C1").Value
                Min1 = Range("C1").Value
                j = 1
                Somme1 = Range("C1").Value
                End If
                               
 'ecriture variation si E1 > 1.5  -----------------------------------
                If E1 > 1.501 And (PalierX1 < 5 Or PalierY1 < 5) Then
                Max1 = Range("C1").Value
                Min1 = Range("C1").Value
                j = 1
                Range("F1000").End(xlUp)(2).Resize(1, 1).Value = "Variation"
                Range("G1000").End(xlUp)(2).Resize(1, 1).Value = "Variation"
                Range("H1000").End(xlUp)(2).Resize(1, 1).Value = i + 1
                PalierY1 = 0
                PalierX1 = 0
                Somme1 = Range("C1").Value
                End If

Next
End Sub
 

Pièces jointes

  • Traitement données.xls
    71 KB · Affichages: 98
  • Traitement données.xls
    71 KB · Affichages: 100
  • Traitement données.xls
    71 KB · Affichages: 99
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Traitement d'un signal

Bonjour pascal82,

Pas certain du tout d'avoir bien interprété la demande. Un fichier en annexe (une simple ébauche, pas optimisée) pour voir si j'ai bien compris.
Pour une cellule de la ligne i (colonne C), on regarde l'écart avec cette cellule i (écart en valeur absolu) des cellules situées après. Tant que l'écart garde le même type 1 ou 2, on continue à descendre dans la colonne C. Quand l'écart change de type, on arrête. S'il y a plus de 4 cellules ayant le même type d'écart, on les surligne (en colonne A).
 

Pièces jointes

  • Traitement données v1.xls
    79 KB · Affichages: 108

pascal82

XLDnaute Occasionnel
Re : Traitement d'un signal

Bonjour mapomme, le forum,

Désolé, pas pu répondre avant mais "Boulot" et "dodo"
Merci pour votre proposition, cependant nous rencontrons le même problème. En effet tout dépends de la référence initiale choisie pour lancer le premier calcul d'écart. Je m'explique prenons l'onglet du cas 4 en exemple
Référence par rapport au numéro chrono.
Détection d'un type 1 de (chrono) 1 à 6 tout va bien
Chrono 7 => détection en variation => tout va bien
Chrono 8 à 13 en type 2 parce que la (réf) est 8, et enfin 17 à 21 en type 1 avec une ref en 17, alors que si sélection initiale de la ref était 9 et non 8 alors vous détecteriez de 9 à 18 en type 1
Etc...

Je me doute bien de la complexité de programmation pour atteindre les résultats attendus en fonction du tableau de couleur J1:M7 de chaque onglet mais voila le casse tête.

Cordialement
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Traitement d'un signal

Bonsoir pascal82 :) ,

J'avais un peu poussé plus loin la chose. mais sans atteindre vos résultats. Je n'ai pas encore compris comment vous obtenez vos résultats (je sais, je suis long à la détente :eek:)

Je vous joins, malgré tout, ce à quoi j'étais arrivé.
 

Pièces jointes

  • Traitement données v2.xls
    101.5 KB · Affichages: 82

pascal82

XLDnaute Occasionnel
Re : Traitement d'un signal

Bonsoir mapomme,

Les résultats obtenus et "flagués" avec code de couleur correspondent à un traitement manuel du signal. Exemple avec onglet "Cas4" => Ecart max pour C4:C9 = 0.11 donc de Type 1, etc... Le tableau F2:H15 est le résultat de traitement avec mon premier code qui ne répond pas a tous les cas .

J'ai observé votre code et il est déjà très complexe. Malheureusement il ne répond pas encore a tous les cas de figures. La difficulté majeure que je rencontre est de déterminer un type 1 juste derrière un Type 2 lorsqu'il n'y a pas ou peu de variation. La sélection de la donnée de référence est donc primordiale et il faudrait pratiquement une nouvelle référence a chaque données ou la méthode choisie n'est pas la bonne (je pense).

En bref je m'arrache le peu de cheveux qu'il me reste

Cordialement
 
Dernière édition: