Normalized cross-correlation function
古いコメントを表示
Hello, i am trying to write a normilized cross-correlation method function , but i can't complete it. Here are the details of the formula :

My code is
x=rand(1,1000);
N=length(x); %// length of signal
n1=128; %// length of window
xf=framing(x,n1,n1/2,rectwin(n1)); %this function frames the signal i will get xf(128,14)
win_num=size(xf,2);
for col=1:win_num
for m=1:n1+1
for n=1:n1-m
ccor(m,col)=sum(xf(n+m,col)*(xf(n,col)))/ sqrt(sum(xf(n)^2)*sum(xf(n+m)^2) );
end
end
end
Note that i want to see the correlation values betwen -1 and 1 like in the figure but instead i get

.
1 件のコメント
devi sowjanya
2021 年 3 月 6 日
Can you please provide the framing function code
採用された回答
その他の回答 (2 件)
Kirby Fears
2015 年 9 月 18 日
編集済み: Kirby Fears
2015 年 9 月 18 日
0 投票
Hi Manolis,
You are looping n and m by starting at 1, but in the formula you posted the sum starts at 0. You will need to correct your calculations to include the 0 terms in the summation. You should also consider pre-allocating "ccor" to save yourself some computational time.
You may have access to the xcorr function which calculates cross correlations. It has several options to control normalization.
Hope this helps.
2 件のコメント
Manolis Michailidis
2015 年 9 月 18 日
Kirby Fears
2015 年 9 月 21 日
Indeed the loop variables are only used as indices, so you are correct. My mistake. I assumed the loop variables were also used as numeric values in the summand. I'm writing another answer below.
Image Analyst
2015 年 9 月 29 日
0 投票
Do you have the Image Processing Toolbox? If so, why not just use the built-in function normxcorr2()?
1 件のコメント
Manolis Michailidis
2015 年 9 月 29 日
編集済み: Manolis Michailidis
2015 年 9 月 29 日
カテゴリ
ヘルプ センター および File Exchange で Spectral Estimation についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!