2 method to calculate CCF gives wrong result

I am writing code to compute CCF using 2 method, one from formula and one from fft. the sampling rate of the data is 250Hz, the data length is 5s (1250samples), which is in the channel of eeg 8 and 9. i am computing the 3 to 4 s data from both channels.
At first, i will get data out first. but form data2, i don't know if i need to zero padding the beginning of the data or just take the 250 sampls before the data into my array.
data1 = eegp1(8,500:1000);
data1 = data1 - mean(data1);
delay = 250;
data2t = eegp1(9,500:1000);
data2t = data2t - mean(data2t);
data2 = [zeros(1,delay) data2t zeros(1,delay)];
then method1:
xaxis = -delay:delay;
CCF = zeros(1,delay*2+1);
for i = -delay:delay
sum = 0;
for j = 1:501
sum = sum+data1(j)*data2(j+i+delay);
end
CCF(i+delay+1)=sum/(501-abs(i));
end
% [c,lags] = xcorr(data1,data2,250);
% figure(2);
% plot(lags,c);
CSD = abs(fft(CCF));
CCF = CCF/max(abs(CCF));
CSD = CSD/max(abs(CSD));
figure(1);
plot(xaxis,CCF);
title('CFF result');
method2:
fdata1 = fft(data1);
fdata2 = fft(data2t);
CSD2 = fdata1.*conj(fdata2);
CCF2 = ifft(CSD2);
CCF2 = CCF2/max(abs(CCF2));
CSD2 = CSD2/max(abs(CSD2));
figure(2);
plot(CCF2);
title('CFF result');
The result comes out wrong, can someone help me? thanks verymuch!

Réponses (1)

Wayne King
Wayne King le 19 Juil 2013
Hi, look at this example:
rng default;
x = randn(8,1);
y = randn(8,1);
npad = length(x)+length(y)-1;
xcor_1 = fftshift(ifft(fft(x,npad).*conj(fft(y,npad))))
[c,~] = xcorr(x,y)

Catégories

En savoir plus sur Signal Processing dans Centre d'aide et File Exchange

Tags

Question posée :

Bo
le 19 Juil 2013

Community Treasure Hunt

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

Start Hunting!

Translated by