选择并绘制高于阈值

时间:2017-08-16 00:53:15

标签: matlab threshold

我有一个情节,其中有一些噪音成分。我计划在我的情况下从该图中选择数据,最好是超过阈值,我打算在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);

此代码将数据分割(每隔2.8秒将图像分成5个,我计划在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

1 个答案:

答案 0 :(得分:2)

问题在于您尝试绘制可能数千次,并在绘图上添加数千个点,这会导致计算机出现严重的内存和图形问题。您可以做的一件事是预先处理所有信息,然后一次性绘制所有信息,这将花费更少的时间。

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是一种高度矢量化的语言,由于缺少for循环,这种格式不仅计算速度更快,而且计算机的密集程度也更低,因为图形引擎不需要单独处理数千个点

MATLAB处理绘图的方式是每行的句柄。绘制矢量时,MATLAB能够简单地将矢量存储在一个地址中,并在绘图时调用一次。但是,当单独调用每个点时,MATLAB必须将每个点存储在内存中的单独位置,并单独调用所有这些点,并以图形方式完全单独处理每个点。

此处的每个请求都是编辑     情节(T1(A),plot_vals(A))