2017-08-31 32 views
0

我目前正试图在Matlab/Octave中实现一个循环,其中读取文件中的数据并将其存储在一个数组中,然后集成在1600个点的批处理中(每个数据点间隔在10ns)。 我了解我需要做什么的逻辑,但无法对其进行编码。任何帮助,将不胜感激。循环通过数据集成在块中:MATLAB

trace_int = zeros(320000,1); 
trace_c = zeros(200,1); 
trace = dlmread('trace_all.dat',' ',[0,0,320000,1]); 
while i = 1:200 
    trace_i(i,:) = trace(1+1599*(i-1):1:1600*(i)); 
    trace_c(i,:) = trapz(trace_i(i)); 
end 

这就是数据的模样

20 1484 
30 1484 
40 1483 
50 1484 
60 1484 
70 1484 
80 1483 
90 1483 

回答

2

没有必要为一个循环:

% create sample data 
trace = [20 1484; 30 1454; 40 1493; 50 1414; 60 1404; 70 1494; 80 1473; 90 483]; 

n = 4; % this would be 1600 in your case 
trace_c = trapz (reshape (trace (:, 2), n, [])) 

回报:

trace_c = 
    4396.0 3910.5 
+0

通过触摸打我吧!请注意,你并没有考虑整合中的X数据(OP也不公平),但由于它的时间间隔不变,所以我们可以在最后除以dx – Wolfie

+0

@Wolfie因为他说空间是恒定的10ns。 ..感谢编辑,我总是忘记,MATLAB不能处理#作为评论 – Andy

+0

是的,简化了事情。不用担心,我经常误用'''当我处于完全VB模式 – Wolfie