2017-08-16 1 views
0

Ich habe ein Grundstück, in dem es ein paar Lärmkomponenten sind. Ich plane, Daten von diesem Diagramm vorzugsweise über einem Schwellenwert auszuwählen, in meinem Fall plane ich, es bei 2.009 auf der Y-Achse zu belassen. Und zeichne die Linien, die nur darüber gehen. Und wenn alles unter das heißt ich würde es als 0 darstellen möchten, wie wir in der FigurWählen und plotten Wert über einem Schwellenwert

enter image description here

t1=t(1:length(t)/5); 
t2=t(length(t)/5+1:2*length(t)/5); 
t3=t(2*length(t)/5+1:3*length(t)/5); 
t4=t(3*length(t)/5+1:4*length(t)/5); 
t5=t(4*length(t)/5+1:end); 
X=(length(prcdata(:,4))/5); 
a = U(1 : X); 
b = U(X+1: 2*X); 
c = U(2*X+1 : 3*X); 
d = U(3*X+1 : 4*X); 
e = U(4*X+1 : 5*X); 
figure; 
subplot (3,2,2) 
plot(t1,a); 
subplot (3,2,3) 
plot(t2,b); 
subplot(3,2,4) 
plot(t3,c); 
subplot(3,2,5) 
plot(t4,d); 
subplot(3,2,6) 
plot(t5,e); 
subplot(3,2,1) 
plot(t,prcdata(:,5)); 
figure; 
A=a(a>2.009,:); 
plot (t1,A); 

Dieser Code teilt die Daten (im Bild in 5 alle 2,8 Sekunden sehen können, ich plane, die Schwellwertbildung in ersten 2,8 Sekunden zu verwenden. auch ich einen anderen Code hatte, aber ich bin nur nicht sicher, ob es funktioniert, wie es dauerte eine lange Zeit zu

figure; 
A=a(a>2.009,:); 
plot (t1,A); 
for k=1:length(a) 
    if a(k)>2.009 
     plot(t1,a(k)), hold on 
    else 
     plot(t1,0), hold on 
    end 
end 
hold off 

Antwort

2

Das Problem analysiert werden, ist, dass Sie versuchen, möglicherweise mehrere tausend Mal plotten und a Dding Tausende von Punkten auf ein Diagramm, das schwerwiegende Speicher- und Grafikprobleme auf Ihrem Computer verursacht. Eine Sache, die Sie tun können, ist, alle Informationen vor zu verarbeiten und dann alles auf einmal zu zeichnen, was wesentlich weniger Zeit in Anspruch nimmt.

figure 
threshold = 2.009; 
A=a>threshold; %Finds all locations where the vector is above your threshold 
plot_vals = a.*A; %multiplies by logical vector, this sets invalid values to 0 and leaves valid values untouched 
plot(t1,plot_vals) 

Da MATLAB eine hoch vektorisiert Sprache ist, wird dieses Format nicht nur schneller sein aufgrund eines Mangel berechnen von for-Schleifen, es ist auch viel weniger intensiv auf Ihrem Computer als die Grafik-Engine nicht zu verarbeiten Tausende von Punkten einzeln.

Die Art und Weise, wie MATLAB Plots behandelt, ist mit Handgriffen zu jeder Zeile. Wenn Sie einen Vektor plotten, kann MATLAB den Vektor einfach in einer Adresse speichern und beim Plotten einmal aufrufen. Wenn jeder Punkt jedoch einzeln aufgerufen wird, muss MATLAB jeden Punkt an einem separaten Ort im Speicher ablegen und alle einzeln aufrufen und jeden Punkt grafisch getrennt behandeln.

Per Anfrage ist hier die Bearbeitungs Grundstück (t1 (A), plot_vals (A))

+0

Vielen Dank dafür. Damit meinst du, es wird schneller sein? Ich werde es ausprobieren, danke. – Matlaber

+0

Wenn ich thsi Code lief, bekam ich einen Fehler Fehler bei der Verwendung. * Matrix Abmessungen müssen übereinstimmen. Fehler in al (Zeile 62) plot_vals = a. * A; % multipliziert mit logischem Vektor, dies setzt ungültige Werte auf 0 und belässt gültige Werte unverändert – Matlaber

+2

Oh, ich habe einen Dummy gemacht, editing. – Durkee

Verwandte Themen