Finding a signal inside a time series

3 views (last 30 days)
Valentin
Valentin on 27 Oct 2015
I would like to find the exact replica of signal A in time series B. I am working with the simple toy example below, in which A is located starting at the 4th position in B.
I thought that using xcorr would achieve this but I am clearly failing somewhere. xcorr doesn't seem to be the right function despite the Matlab help notes on xcorr and comments such as: " Cross-correlation is usually the simplest way to determine the time lag between two signals. The position of peak value indicates the time offset at which the two signals are the most similar. http://stackoverflow.com/questions/15371577/finding-the-difference-between-two-signals
A = [1 2 1];
B = [0 9 8 1 2 1 7 3 1 0];
[c, lags] = xcorr(A,B)
lags(c==max(c))
c =
Columns 1 through 12
0.0000 1.0000 5.0000 14.0000 18.0000 11.0000 6.0000 12.0000 26.0000 26.0000 9.0000 0.0000
Columns 13 through 19
0.0000 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000
lags =
-9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9
ans =
-1 0
The max correlation values are located at lags of -1 and 0, which doesn't match the offset required to get A to match B. This leads me to ask: 1) When is xcorr useful for finding the exact signal in another signal and 2) What function should I be using to find the location of A in B. Ideally I would like to test this method on more complicated signals as well as look for methods of detecting "similar" signals inside other (longer) signals.
Thank you

Answers (0)

Community Treasure Hunt

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

Start Hunting!