How can I use cross-correlation as a tool to align two signals in MATLAB?
1 view (last 30 days)
Show older comments
How can I use cross-correlation as a tool to align two signals in MATLAB?
1 Comment
dpb
on 16 Mar 2014
I answered w/ an example precisely the same question within the last week or so. Here...
Answers (1)
Image Analyst
on 16 Mar 2014
And I hope you know (though you probably don't because it's not well known) that the max of the cross correlation does not guarantee the best alignment. Just imagine a signal that's a Gaussian hump on the left and a tall box (taller than the Gaussian) on the right. And you're correlating it with a template that's the same as the Gaussian. The max will not be where the two Gaussians would align. Is that surprising to you? Run this demo to find out why:
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
imtool close all; % Close all imtool figures if you have the Image Processing Toolbox.
clear; % Erase all existing variables. Or clearvars if you want.
workspace; % Make sure the workspace panel is showing.
format long g;
format compact;
fontSize = 20;
sigma = 10
x = 1:200;
longSignal = exp(-(x-50).^2/sigma^2);
longSignal(120:160) = 2;
subplot(3,1,1);
plot(x, longSignal, 'b-', 'LineWidth', 3);
grid on;
title('Long Signal', 'FontSize', fontSize);
% Enlarge figure to full screen.
set(gcf, 'Units', 'Normalized', 'OuterPosition', [0 0 1 1]);
% Give a name to the title bar.
set(gcf, 'Name', 'Demo by ImageAnalyst', 'NumberTitle', 'Off')
% Make template to correlate with.
template = exp(-(x-50).^2/sigma^2);
subplot(3,1, 2);
plot(x, template, 'b-', 'LineWidth', 3);
grid on;
title('Template Signal', 'FontSize', fontSize);
ylim([0 2]);
xc = xcorr(longSignal, template);
subplot(3,1, 3);
plot(xc, 'b-', 'LineWidth', 3);
grid on;
title('Cross Correlation', 'FontSize', fontSize);
![](https://www.mathworks.com/matlabcentral/images/broken_image.png)
See, the max is where the Gaussian aligns with the tall box, not where it aligns with "itself".
2 Comments
Image Analyst
on 16 Mar 2014
For comparison, here's what you get if the box is not in the signal:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/178145/image.jpeg)
And here's what you get if the template is centered at 90.
![](https://www.mathworks.com/matlabcentral/images/broken_image.png)
I imagine from looking at those you can figure out something.
See Also
Categories
Find more on Bartlett in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!