필터 지우기
필터 지우기

xcorr question - better align two signals

조회 수: 3 (최근 30일)
Fan Mei
Fan Mei 2017년 1월 6일
댓글: Fan Mei 2017년 1월 10일
I tried to align two signal better using the below code. The s1 and s2 is in the attached txt file. However, td I got is -24482. I am wondering if there is a way to improve this function. Please help!!
function [td,ny]=align_signal(s1,s2)
ny=ones(size(s1))*NaN;
[C21,lag21] = xcorr(s2,s1);
C21 = C21/nanmax(C21);
[M21,I21] = nanmax(C21);
t21 = lag21(I21);
if t21<0
ny(-t21:end) = s1(-t21:end);
else
ny(t21:end)=s1(t21:end);
end
td=abs(t21);

채택된 답변

Jordan Ross
Jordan Ross 2017년 1월 10일
Hello Fan,
Unfortunately, the MATLAB functions that compute the sample cross-correlation from two provided sequences (such as "xcorr" in the Signal Processing Toolbox) cannot deal with incomplete data.
One possible solution is to find the NaN value's in the signals and to ignore the measurements (at that time value) for both sequences. The following code shows how you can remove those NaN's:
% Remove NaNs
s2NanLoc = find(isnan(s2));
s1NanLoc = find(isnan(s1));
nanLocs = unique([s1NanLoc; s2NanLoc]);
s1(nanLocs) = [];
s2(nanLocs) = [];
When I do this with your dataset I am able to get a "td" of 4.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Correlation and Convolution에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by