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