2015-11-26 5 views
0

Je souhaite mesurer la faible longueur d'impulsion d'un signal, puis la tracer pour voir si le rapport pwm change pendant le temps d'exécution de ce signal. Le signal lui-même a été acquis à l'aide d'un oscilloscope et stocké sous forme de fichier cvs, le canal 2 est un signal d'impulsion où je veux évaluer dans quelles limites les impulsions sont stables ou non.Matlab mesure la largeur d'impulsion et la courbe dans le temps pour l'évaluation de la gigue

with d = dutycycle(CH2)

je pourrais obtenir le cycle de service de mon signal

Comment puis-je tracer le rapport cyclique ou à faible temps d'impulsion comme une ligne graphique ou sur le terrain pour voir ses changements au fil du temps?

Les deux fichiers de contrôle sont ici:

+0

Eh bien, je trouve que, avec 'code' p = largeur d'impulsion (CH2, TIME, 'Polarity', 'négative') 'code' i pourrait mesurer les faibles Puls longueur quelque chose que je voulais absolument ... Mes prochaines questions seraient comment espacer uniformément le temps faible sur le signal d'impulsion pour avoir une idée des changements de longueur d'impulsion – Moes

Répondre

0

Votre signal est tout à fait propre, de sorte que vous pouvez simplement utiliser seuillage simple. Si vous aviez besoin de gérer un peu plus de bruit, voici un moyen.

L'approche de base consiste à décomposer le signal par morceaux (en une séquence de segments constants). L'identification du point de changement vous donne l'heure de début et de fin ainsi que l'ampleur de chaque segment.

enter image description here

Ensuite, tous les temps sont même les fronts montants et les heures impaires sont fronts descendants (ou vice versa). Les différences entre ces deux vecteurs donnent une durée haute et basse de chaque impulsion, et les différences entre les fronts montants donnent une durée par impulsion.

rising = TIME(1+est.time(2:2:end)); 
falling = TIME(1+est.time(1:2:end)); 
hightime = falling(2:end) - rising(1:end-1); 
lowtime = rising(2:end) - falling(2:end); 
plot([lowtime hightime diff(rising)]) 
legend('Low Time', 'High Time', 'Pulse Duration') 

Analysis Results: Low, High, and Cycle durations

Cycle de service est alors hightime ./ diff(rising), et vous pouvez procéder à vos calculs de gigue. Pour effectuer la segmentation, j'ai utilisé le code de ma thèse, mais ce cas simple (constante par morceaux) a déjà été résolu par Killick et al. al (2012)

R. Killick, P. Fearnhead, and I. A. Eckley. Optimal detection of changepoints with a linear computational cost. Journal of the American Statistical Association, 107(500):1590–1598, Dec 2012. doi: 10.1080/01621459.2012.737745.

+0

Comment tracer avec des couleurs alternées? Cela a l'air cool! .. Merci pour votre contribution ... j'ai essayé la fonction peakfinder de Matlabs Fileexchange car je ne pouvais pas trouver l'identification de point de changement dans mon installation de labview ^^ http://www.mathworks.com/matlabcentral/fileexchange/25500 -peakfinder-x0 - sel - thresh - extrema - points d'inclusion - interpoler- – Moes