Bonjour,
J'ai un signal (type chromatogramme) de dimension 1xm (une valeur pour chaque variable) et je voudrais déterminer une surface sous chacun des pics présents dans mon signal, comment faire svp ??
Merci de votre aide ! :calim2:
Version imprimable
Bonjour,
J'ai un signal (type chromatogramme) de dimension 1xm (une valeur pour chaque variable) et je voudrais déterminer une surface sous chacun des pics présents dans mon signal, comment faire svp ??
Merci de votre aide ! :calim2:
Salut,
peux-tu être plus clair?
une valeur pour chaque variable, tu as donc m variables (une fonction à m variables)? et tes variables sont reliées entre elles?
Deuxième question :
Comment définis-tu une surface sous un pic ?
Si on imagine que ton pic est à l'indice k est-ce que ta surface est définie par la surface de l'indice (k-1) à (k+1) ?
Christophe
Salut!
C'est un problème qui revient fréquemment dans ces discussions: qu'est-ce qu'un pic? Il est nécessaire d'en donner une définition rigoureuse: y a-t-il des "faux pics", où commence et où finit un pic?Citation:
Comment définis-tu une surface sous un pic ?
Jean-Marc blanc
Je vais donc essayer d'etre plus clair...
Mon signal comporte des pics, chaque variable ayant une valeur donnée, si on trace la courbe reliant chaque point (note: que des valeurs positives), on obtient une courbe possédant plusieurs pics plus ou moins large (et donc plusieurs points d'inflexion si on dérivait celle ci).
Je voudrais connaitre la surface (ou l'aire je ne sais pas si on peut différencier les deux dans ce cas) sous ces pics.
Pour faire simple, et pour éclaircir mon explication, prenons le cas d'un seul pic, qui ressemblerait à une gaussienne, existe t-il un moyen de calculer la surface sous cette gaussienne, partant des deux extrémités de la courbe ? Bien sur cela est un cas plus simple car mes pics ne sont pas gaussiens mais cela me parrait être un bon début...
En espérant avoir été plus clair... Merci à vous ! :calim2:
Re,
Je ne comprends toujours pas pourquoi tu parles de plusieurs variables mais ce n'est sans doute pas très grave.
Pour calculer l'aire sous ta courbe, tu peux utiliser la méthode des trapèzes.
A partir d'une série de point tu peux dessiner des trapèzes comme ceci :
http://img24.imageshack.us/img24/3735/image2kc.png
Ensuite il suffit de calculer les aires de chaque trapèze et de faire la somme.
Dans Matlab, il y a une fonction qui fait cela automatiquement : trapz
Code:help trapz
Ensuite il reste le problème de la détection des pics, as-tu réussi à les détecter?
Merci, cette idée du trapèze est intéressante, dans le cas ou tu as une ligne de base idéale...
Dans la plupart des cas, si je reprends l'exemple de ta figure, rares sont les cas ou le premier et le dernier point sont à la même ordonée... ce qui complique un peu le problème car dans ce cas nous relions (fictivement) le premier point et le dernier point. La surface (ou aire) qui nous interesse alors est la surface entre le la courbe et la ligne de base fictive.
En reprenant ton schema rapidement, c'est la surface rouge qui m'interesse !
Merci pour ton aide !
Ce n'est pas beaucoup plus compliqué : il te suffit de faire une différence entre l'aire délimité par l'axe des abscisses et l'aire sous ton pic :
C'est plus facile avec un dessin. Dans l'exemple suivant on a :
(aire rouge) = (aire bleu) - (aire verte)
et les aires bleus et vertes peuvent être calculé par la méthode des trapèzes : l'aire bleue, c'est une sommet de trapèze et l'aire verte c'est un trapèze (dont A et B sont 2 sommets).
Merci pour ton aide, cette approche me parait bien pour des cas simples... Voici le genre de signal que je peux obtenir.... Ce que je voudrai c'est quantifier la surface colorée sous les pics A, B, C, D afin de pouvoir déterminer des rapports entre les pics... Dans ce cas, il est bien évident que les trapèzes sont compliqués à determiner... Je pense à une approche par intégrale mais je ne sais pas si des fonctions existe pour le faire simplement... en gros définiir un point de départ et un point d'arrivé, qui encadrent le pic, et le calcul de l'aire sous le pic serait effectué !
Merci de votre aide ! :calim2:
As-tu regardé la foncion trapz?
Cette fonction effectue la méthode des trapèzes sur un intervalle, tu dois juste lui renseigner les coordonnées x et y de tes points...
(La méthode des trapèzes est une très bonne approximation de ton intégrale, se toute manière tu ne peux pas calculer la vraie intégrale car tu n'as pas l'expression analytique de ta fonction.)
Oui j'ai regardé la fonction trapèze, utile dans ton exemple ou tu as quelques points que l'on peut relier par des droites... Très complexe dans mon exemple... car les trapèzes sont difficilement identifiables. J'en conclu donc qu'il n'est pas possible de faire ce type d'estimation avec la fonction trapz. J'ai recherché quelques approches sur Matlab Central, et les approches utilisées semblent très compliquées et utilisables sur les pics larges et bien résolus, ce qui n'est pas mon cas...
:calim2:
Comment définis-tu les limites des portions colorées ?
Autant pour les deux premières j'arrive à deviner, autant pour les deux autres (cyan et magenta) je ne vois pas très bien leurs limites (surtout la fin)... :?
Ton signal est discret et l'échantillonage semble assez fin. De plus, tu cherches à calculer des rapports. Dans ce cas, pourquoi ne pas simplement sommer les valeurs du signal contenu dans chaque portion (méthode des rectangles) ? Il suffit alors pour chaque valeur appartenant à une portion de calculer la distance entre la valeur et le segment qui relie le début et la fin de la portion.
Ou encore plus simple, tu récupères les coordonnées des points du polygone délimitant chaque portion et tu utilises POLYAREA
Salut!
Comme tu ne nous a pas encore dit ce que tu appelles un pic, je précise ma question par un petit exemple: tu as les valeurs expérimentales suivantes:
Combien cette fonction présente-t-elle de pics, sachant que l'incertitude de mesure sur tes valeurs est de 1% ?Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 164 175 184 191 192 196 199 200 199 196 191 192 184 175 164
Jean-Marc Blanc
Merci pour votre aide, je vais essayer de repondre clairement à vos questions...
Les limites des portions colorées peuvent être définies par l'utilisateur en choisissant un point de départ et un point d'arrivée ou bien de façon automatique.
Pour ce qui est du mot pic, qui pose apparemment problème, je le défini comme étant les "bosses" colorées sur le schéma du message précédent, je ne trouve pas d'explication plus simple !!!! A chaque valeur de X sont associées des Y, lorque le signal est stable, on a une ligne de base, lorsque l'on a une variation on a un pic ! Pour qu'un pic soit défini il doit y avoir départ puis retour à la ligne de base en passant par un sommet.
Dans ton exemple FR119492 (figure jointe), je dirai qu'il y a un pic pour simplifier même si on peut imaginer qu'il y en ai 3... mais cela nécéciterait des algo de deconvolution donc restons sur un cas simple avec 1 pic.
Merci:calim2:
Je ne vois pas bien ton problème... Tu as bien une série de données? Ces données sont-elles régulièrement espacés? Si elles ne le sont pas, tu dois avoir 2 vecteurs : un en x, l'autre en y, non?
La fonction trapz fait le calcul directement, ce n'est pas à toi de chercher les côté du trapèze... (Si tu as une bonne résolution, la méthode des rectangles évoqués par Dut te donnera sensiblement le même résultat)
Un exemple avec les données de FR119492 :
Si on veut connaître l'aire entre la courbe et l'axe des abscisses :Code:
1
2
3
4 x = 1:15; y = [164,175,184,191,192,196,199,200,199,196,191,192,184,175,164]; figure,plot(x,y); hold on,plot([1 15],[164 164]);
Si on veut connaître l'aire entre la courbe et la droite qui délimite le pic :Code:aire1 = trapz(x,y);
Dans ce cas, la droite qui délimite le pic est parallèle à l'axe des abscisses (car les valeurs extrêmes valent toutes les deux 164), mais ça marcherait même si elles ne sont pas parallèles.Code:aire2 = trapz(x,y)-trapz([1 15],[164 164]);
Donc tu as juste besoin d'avoir :
- les données de ta courbes.
- le point de départ et d'arrivée de ton pic.
Ou est-ce que ça bloque dans ton cas?
Je vais tester ces méthodes, merci à tous pour votre aide.
slt,j'ai eu la meme probleme j'ai un signal et je veut calculer la surface sous les pics alors j'ai essayé d'utiliser le fitting gaussienne et j'ai alors generer trois gaussienne puisque j'ai besoin que de trois pic seulement et pour chaque pic (pour calculer l'aire il suffit alors de faire l'integrale de ce dernier) ,toutefois il est necessaire de donné pour chaque gaussienne leur amplitude et leur position (connue déja) mais aussi la largeur à mi_hauteur (inconnue :calim2:)
donc pour trouver ce dernier j'ai pris un seuil =l'amplitude /2 et j'ai essayer de determiner les point d'intersection de ce seuil avec la courbe x1 et x2 ,alors LMH=(x2-X1) :roll:
le probleme c'est au niveau des point d'intersection j'arrive pas à touver ces points.........:calim2: