2015-11-26 45 views
5

Ho salvato diversi grafici Matlab in un unico .fig. La figura è così: picture Ora, vorrei introdurre un filtro in questi grafici per ridurre i rumori, ma sfortunatamente ho perso il codice che genera questi segnali.
C'è un modo per estrarre i dati di ciascun segnale in questa figura? Ho provato questo:Come estrarre i dati dalla figura in MATLAB?

open('ttc_delay1000.fig'); 
h = gcf; %current figure handle 
axesObjs = get(h, 'Children'); %axes handles 
dataObjs = get(axesObjs, 'Children'); %handles to low-level graphics objects in axes 

objTypes = get(dataObjs, 'Type'); %type of low-level graphics object 

xdata = get(dataObjs, 'XData'); %data from low-level grahics objects 
ydata = get(dataObjs, 'YData'); 

Ma io sono confuso e non so se è il modo giusto di agire. Grazie!

+0

Ebbene, che cosa fa il vostro prodotto codice? –

+0

Ho Objtypes e xdata, ydata, strutture composte da una cella 5x1. Ogni riga di queste strutture contiene i dati di ciascun segnale, credo. È giusto? – Betelgeuse

+0

Sembrerebbe così :) Prova a riprodurre la trama su una nuova figura, basata su quei dati. Questo è un modo sicuro per saperlo. Si noti che le maniglie sono di solito memorizzate in vettori in ordine inverso: roba tracciata di solito pop in cima alla lista. –

risposta

7

una battuta per il vostro problema:

data = get(findobj(open('ttc_delay1000.fig'), 'Type','line'), {'XData','YData'}); 

I passi ci sono (da entrambe le chiamate interne alle chiamate esterne):

  • aprire il file;
  • esaminare per la serie di linee;
  • restituisce i dati.

data{n,1} conterrà il XData del LineSeries numero n, ingannare il data{n,2} conterrà la YData di detto LineSeries.

Se si vuole lisciare le linee direttamente in figura, l'idea è la stessa:

%//Prepare moving average filter of size N 
    N = 5; 
    f = @(x) filter(ones(1,N)/N, 1, x); 

    %//Smooth out the Y data of the LineSeries 
    hf = open('ttc_delay1000.fig'); 
    for hl = transpose(findobj(hf,'Type','line')) 
      set(hl, 'YData', f(get(hl,'YData'))); 
    end; 
    saveas(hf, 'ttc_delay1000_smooth.fig'); 
+0

Aspetta, findobj funziona per i nipoti? Cosa ho fatto in tutti questi anni! – BillBokeey

+0

@BillBokeey Quando il primo argomento è un handle grafico (o un array di), la ricerca è limitata a quegli handle e ai relativi discendenti. –

+0

Oh, grazie, sento di aver perso meno tempo nella mia vita :) – BillBokeey

Problemi correlati