'xcorr()' giving some negative values
显示 更早的评论
I have two arrays A and B both having only positive values with some being zero. I am using c=xcorr(A,B) to get the cross correlation. I would expect the result to be all positive but getting some negative values. What is the reason?
4 个评论
Jan
2017-1-29
Could you post the concerned data and the code? Perhaps it is only it is only a typo and wild guessing the reason is a waste of time. Thanks.
dpb
2017-1-29
More than likely it's just rounding error...for example if use the example data for xcorr
>> load sensorData s1 s2
>> plot(s1)
>> hold all
>> plot(s2)
>> cor=xcorr(abs(s1),abs(s2));
>> max(cor)
ans =
0.0025
>> min(cor)
ans =
-3.3204e-19
>> sum(cor<0)
ans =
255
>> length(cor)
ans =
5241
>>
the data going in were all >=0 by abs() operation and still some 5% of the resulting autocorrelation values are negative. Now the largest in absolute value of those is only on order of machine double precision, but it's still negative.
Biplab Roy
2017-1-31
dpb
2017-1-31
Sure
cor(cor<0)=0;
if you feel you must. But, in general, when you use floating point, rounding errors are inherent with the beastie.
回答(0 个)
类别
在 帮助中心 和 File Exchange 中查找有关 Correlation and Convolution 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!