首先,我是编程方面的新手。
我有大量的频率测量值。我想检查频率(f)在t = 900 %sec.
的整个时间间隔内是否具有以下特征:
f>=50.05 || f<=49.95
但是程序应该在接下来的900秒内每秒检查一次。如果满足标准。所以它应该检查f(i:i+900)
。我尝试用循环来解决它以找到那些间隔,但数据的数量太大。这是代码:
T1 = zeros(length_f,1);
T2 = zeros(length_f,1);
for i = 1:length_f
if f(i:i+900)>=50.05
T1(i)=1;
end
if f(i:i+900)<=49.95
T2(i)=1;
end
end
K1=find(T1==1);
K2=find(T2==2);
谢谢!
答案 0 :(得分:0)
您应该在较小版本的数据上使用分析器来检查哪些行会导致您出现“数据太大”的问题。
如果我理解正确,您需要查看数据的前900秒,如果i
- th值满足您的任一条件,请查看i+900
- 点,记录满足向量K1
和K2
条件的所有点的索引。
我建议修改循环以使用while
循环并手动控制计数变量。像
% Fixed parameters
f_upper_lim = 50.05;
f_lower_lim = 49.95;
max_count = 900;
% Variables
% Position in f
ii = 1;
% Positions left to test
count = max_count;
% Indices where f(ii) >= f_upper_lim
K1 = [];
% Indices where f(ii) <= f_lower_lim
K2 = [];
while count > 0 & ii <= length_f
if f(ii) >= f_upper_lim
K1 = [K1, ii];
% Reset count - test next max_count values
count = max_count;
elseif f(ii) <= f_lower_lim
K2 = [K2, ii];
% Reset count - test next max_count values
count = max_count;
else
count = count - 1;
end % if
ii = ii + 1;
end % while
与以往一样,您应该使用一小组数据进行测试。