필터 지우기
필터 지우기

cross correlation mismatch

조회 수: 1 (최근 30일)
zozo
zozo 2012년 3월 12일
I am facing a strange situation. I have a signal x (sum of sines and cosines) of length 50000 samples. One hand, I delay it directly by converting it into frequency domain and multiplying it by the delaying exponential,then ifft to produce y. One other hand, I delay it block by block using overlap add method (also in frequency domain) to produce z. Both produce exactly identical results.
%%OLA %%
clc
clear all
close all
fs=50000; % sampling frequency in Hz
f1=500; % frequency of signal in Hz
f2=400;
f3=300;
t_duration=1; %duration of LONG signal in seconds
t = 0:1/fs:t_duration-1/fs; %sampling points
% %x=square(2*pi*f3*(t)); %LONG input signal
x = 10*(sin(2*pi*f1*t)+sin(9*pi*f3*t)+cos(10*pi*300*(t))); %LONG input signal)+s
% % plot(x)
% load('rolo');
% x=mic_in(2,:);
%x=randn(size(t));
d=-0.00656438263; % time delay in seconds
P=1000; %block length
fax = fs*[(0:P/2) (-P/2+1:-1)]/P; % Create frequency shift vector in the frequency domain
h = ifft(exp(-1i*d*2*pi*fax)); %impulse response
L = length(h);
M = length(x);
% Pad x with zeros, as needed, to make M = QL for some integer Q
M_save = M;
r = P-mod(M,L);%%%%%check point%%%%%
M = M + r;
x_z = [x(:)' zeros(1,r)];
Q = M/L;
y = zeros(1,L+M_save-1);
% Compute h_z and H_z
N = 2^nextpow2(2*L); % FFT block length for max. computational efficiency
H_z = fft(h,N); %N-point fft of impulse response 'h'
% Compute y
y0 = zeros(1,L*(Q-1)+N);
y1 = zeros(1,N);
for i = 0 : Q-1
m = i*L;
x_i = x_z(m+1:m+L);
x_iz = [x_i(:)' zeros(1,N-L)];
X_iz = fft(x_iz);
y1 = ifft(X_iz.*H_z);
y0(m+1:m+N) = y0(m+1:m+N) + y1;
end
y = real(y0(1:L+M_save-1));
yd= [y(1:L-1)+y(end-(L-2):end) y(L:end-(L-1))];
tf=(0:length(y)-1)/fs;
y_z = 10*(sin(2*pi*f1*(t-d))+sin(9*pi*f3*(t-d))+cos(10*pi*300*((t-d)))); %analytic
stem(yd-y_z) % verification
But when I perform cross correlation between them using xcorr(x,y) I get peak at the correct number of samples(say 49 for example) but by doing xcorr(x,z), I get the peak at 49-1000=-951 samples. where 1000 is my block length in OLA method.
What is the reason behind this? How can I rectify it?
  댓글 수: 4
Honglei Chen
Honglei Chen 2012년 3월 12일
Then why do you say they produce exactly identical results? Can you explain how you did overlap-add?
zozo
zozo 2012년 3월 12일
I have updated my code in question above. Please have a look. What am I missing?

댓글을 달려면 로그인하십시오.

답변 (0개)

카테고리

Help CenterFile Exchange에서 Correlation and Convolution에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by