2014-12-06 1 views
1

여기에 ~ 20000 개의 매트 파일이 있습니다. 각 파일에는 시뮬레이션 결과, 시간 벡터 및 여러 신호 벡터가 포함되어 있습니다. 시간 벡터는 가변 스텝 타임 스탬프를 포함하고, 각각의 타임 스탬프에 대응하는 신호 값이있다.가변 단계에서 고정 단계까지의 matlab

목표 시스템이 1000 샘플/초의 샘플링 속도를 사용하기 때문에 가변 단계에서 0.001 초로 고정 단계로 변환하여 데이터 양을 줄이는 것입니다. 또 다른 이유는 다음 단계입니다. 기계 학습 기술을 적용 할 예정이므로 데이터가 적을수록 빠른 결과를 얻을 수 있습니다.

나는 이미 작동중인 코드가 있지만 매우 비효율적 인 것으로 보이는데, 나는 효율성을 향상시키기 위해 도움을 얻고 싶다. 그래서 여기

은 내가 가진 것입니다 :

time_vs; % Variable step timestamp vector 
s1; s2; s3; % Signals corresponding to time_vs 

% For each mat file I do (loading and so on omitted): 
new_time = min(time_vs):0.001:max(time_vs); % Create the new fixed step time vector. 

% Find indexes for nearest timestamps. 
indexes = []; 
for t = new_time 
    time_diff = abs(time_vs - t); 
    add_index = find(time_diff == min(time_diff)); 
    indexes = [indexes, add_index(1)]; 
end 

% Reduce the signals. 
s1 = s1(indexes); 
% and so on ... 

내 접근 방식은 고정 된 스텝 타임 스탬프 min(time_diff)에 가장 가까운 변수 스텝 시간 벡터 타임 스탬프, 검색됩니다. 이러한 타임 스탬프의 인덱스는 신호 s1 = s1(indexes)을 줄이기 위해 수집됩니다.

더 효율적인 해결책이 있기를 바랍니다.

미리 감사드립니다.

감사합니다, 에드 차 실행의 복잡성 내가 대신 선형 보간의 내장 기능이라고 생각했다 루프로

+0

주제에 대한 귀하의 업데이트는 무엇입니까? – knedlsepp

답변

0

:

s1 = interp1(time_vs, s1, new_time); 
+0

일찍 응답하지 않아 죄송합니다. 방금이 방법을 시도했는데 더 좋지 않은 것 같습니다. 무거운 루프가 시뮬레이션 결과에 한 번만 실행되고 각 신호 감소가 상당히 빠르기 때문일 수 있습니다. 귀하의 구현과 함께 각 신호에 대한 무거운 계산이 필요할 수 있습니다. 단 하나의 신호 만 있으면 더 빠를 수 있지만 11이 있습니다. –

+0

죄송합니다. 루프를 제거하는 것을 잊어 버렸습니다. –

관련 문제