2017-08-16 51 views
0

我有一個有少量噪聲成分的圖。我打算從該圖中選擇數據,最好超過閾值,在我的情況下,我打算將它保持在Y軸上的2.009。並繪製只在它上面的線條。如果有什麼下面我將要繪製它爲0 我們可以在圖中選擇並繪製高於閾值的值

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); 

此代碼會將數據看(圖中爲5每2.8秒,我打算使用第一2.8秒的閾值。此外,我有另外的代碼,但我只是不知道,如果它的工作原理,因爲它把將要分析

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 

回答

2

的問題很長一段時間是你試圖可能潛在數千次和a將數千個點粘貼到一個會導致計算機上出現嚴重內存和圖形問題的圖上。你可以做的一件事是預先處理所有的信息,然後將其全部繪製在一起,這將花費更少的時間。

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) 

因爲MATLAB是一種高度矢量化的語言,這種格式將不僅是更快的計算由於缺乏循環,也更加節省您的計算機上的圖形引擎並不需要處理數千個點。

MATLAB處理圖的方式是每行都有句柄。繪製矢量時,MATLAB能夠將矢量簡單地存儲在一個地址中,並在繪圖時調用一次。但是,當每個點被單獨調用時,MATLAB必須將每個點存儲在內存中的一個單獨位置,並分別調用它們並完全分開處理每個點。

每請求這裏是編輯 圖(T1(A),plot_vals(A))

+0

感謝你爲這個。用這個你的意思是說它會更快?我會試試看,謝謝。 – Matlaber

+0

當我運行thsi代碼時出現錯誤 使用。* 時出現錯誤矩陣尺寸必須一致。 al(第62行)中的錯誤 plot_vals = a。* A; %乘以邏輯向量,這將無效值設置爲 0,並保留有效值不變 – Matlaber

+2

哦,我做了一個虛擬編輯。 – Durkee