2016-07-25 8 views
0

Ich habe einen Algorithmus, der das Signal basierend auf einigen Parametern zerhackt und in einer Struktur speichert.Zuordnung von Signalsegmenten zu ihrem Signal

Code:

classdef Container < handle 
    properties 
     segments = struct('signal', {}, 'time', {}); 
    end 
    methods 
     function this = addsignal(this, varargin) 
      interval = diff(varargin{2}); 
      [~, locations] = findpeaks(interval,'THRESHOLD',0.7) 
      edges = [0; locations; numel(varargin{1})+1]; %note that 0 and one past the end is on purpose 
      newsegments = struct('signal', cell(numel(edges)-1, 1), 'time', cell(numel(edges)-1, 1), 'error', []); 
      %this loop works for no peaks, 1 peak and more than one peak (because of the 0 and numel+1) 
      for edgeidx = 1 : numel(edges) - 1 
       newsegments(edgeidx).signal = varargin{1}((edges(edgeidx)+1 : edges(edgeidx+1)-1)); 
       newsegments(edgeidx).time = varargin{2}(edges(edgeidx)+1 : edges(edgeidx+1)-1); 
      end 
      this.segments = [this.segments; newsegments]; %and append structure 
    end 

Dies ist, wie ich diese Funktion aufrufen:

file1 = 'file' 
signal1 = file1.yaxis 
time1 = file1.xaxis 
file" = 'file' 
signal2 = file2.yaxis 
time2 = file2.xaxis 
f = ltifilter.container(); % ltifilter is a package 
f.addsignal(signal1,time1); 
f.addsignal(signal2,time2); 
f.addsignal(signal3,time3); 

Wenn ich mit allen Signalen aufrufen, wird segments Struktur haben alle die gehackten Segmente des all-Signal kombiniert, gibt ist keine Möglichkeit zu sagen, welches Segment zu welchem ​​Signal gehört, ich möchte die Segmente wie folgt dem übergeordneten Signal zuordnen:

Jeder möglicher Vorschlag

+0

Sie nennen es wirklich mit der Eingabe 'signal1' und ist das der Name, den Sie in der Struktur speichern möchten? – Finn

+0

ja, sowas. – user5603723

+0

hat meinen Code bearbeitet, um zu zeigen, wie die Signale importiert werden. – user5603723

Antwort

0

da Sie speichern möchten zusätzliche Informationen hilfreich sein, Sie haben sie wie

segments = struct('signal', {}, 'time', {}, 'origin', {}); 

auf die Struktur hinzufügen, wenn Sie die funtion rufen wie im Code gezeigt ich denke, es wäre am besten, um den Eingangsnamen zu speichern (zum Beispiel singal1). Je nachdem, wie die Daten erfasst werden und wie viele Signale Sie haben, könnte es besser sein, den Dateinamen und/oder nur die Zahl ob das Signal zu bekommen, aber das liegt an Ihnen. Nur der Name der Eingabe ist ziemlich einfach, da es eine Matlabfunktion dafür gibt. nur um das Add for-Schleife ofy unsere Funktion:

newsegments(edgeidx).origin = inputname(varargin{1}) 

Bitte beachten Sie, dass dies nur funktioniert, wenn Sie es wie oben gezeigt nennen. Wenn Sie die Daten direkt als Eingabe eingeben, ist der Eingangsname leer.

+0

Was ich machen wollte, war, ich wollte alle Segmente eines bestimmten Signals holen, zum Beispiel habe ich ein Signal namens 'Signal1'. Im späteren Stadium meines Codes möchte ich für einige Berechnungen nur die Segmente von 'Signal1' verwenden. und ein anderer Teil meines Codes möchte ich Segmente von 'Signal2' verwenden. Wie gehe ich mit diesem Problem voran? – user5603723

+0

Denken Sie, eine andere Klasse zu erstellen, nur um die Daten zu halten, ist besser? – user5603723

+0

Sie könnten es wie folgt verwenden: Wenn alle Signale hinzugefügt werden, versuchen Sie es mit Segmenten (segments.origin == 'signal1') und Sie erhalten nur den Teil Ihrer Struktur, der Daten von signal1 hinzugefügt hat. Wenn dies für Sie funktioniert, würde ich keine andere Klasse erstellen, aber Sie müssen entscheiden, was besser in Ihrem Code funktioniert – Finn