如何计算矢量中的元素数量,因为它们在公差带内通过

时间:2014-07-10 19:29:52

标签: matlab loops

我有一个循环进出容差范围的数据向量。我需要启动计数器,因为它在退出时进入并停止,然后将持续时间输入到新的向量中,并继续此过程直到数据向量结束。我完全失去了如何处理这个问题。请帮忙。我已经尝试过循环,并且我不断获得乐队中元素的总数。我需要每个周期的计数 - 而不是频段内的元素总数。提前谢谢。

2 个答案:

答案 0 :(得分:0)

以下代码我认为可以满足您的需求。该代码生成0和1之间的随机向量,并设置> = 0.5的in_band区域。持续时间存储在count_vector中。这可以修改以适合您的应用程序。

vec = rand(100,1);

%in_band >= thresh
thresh = 0.5;
count = 0;

count_vector = [];

for ii=1:length(vec)
    %if vector enters into the in band region, begin counting
    if vec(ii) >= thresh;
        count = count + 1;

    %if vector falls back out of band, log count and reset counter
    elseif (vec(ii) < thresh) && (count > 0)

        count_vector(length(count_vector) + 1) = count;        
        count = 0;
    end


end

figure; plot(vec)
hold on
line([0 length(vec)], [thresh thresh], 'Color', 'r')

答案 1 :(得分:0)

也许这就是你想要的(从你的问题中很难说出来):

data = [8 3 2 3 2 2 6 4 4 6 1 4 6 1 1 8]; %// data vector
tol_lower = 3; %// upper limit of tolerance band
tol_upper = 7; %// lower limit of tolerance band

ind = (data>=tol_lower)&(data<=tol_upper); %// 1 if within band, 0 otherwise
d = diff([0 ind 0]); %// positive if data enters band, negative if it leaves band
result = find(d<0)-find(d>0); %// duration of within-band periods

使用示例数据,结果为

result =
     1     1     4     2