kakaluote28 发表于 2012-5-2 22:38

请教高手,互相关函数求时延PHATGCC,得不到时延结果。帮分析

%使用两种方法求时延,xcorr和通过fft求
%具体为1、=xcorr(x,y);
%2、X=fft(x,2*N-1);Y=fft(y,2*N-1);gcc=X.*conj(Y);gcc=fftshift(ifft(gcc));
% 贴程序
% 备注:设,使用10khz的采样频率,对1khz的声源采样。两信号时间时延为0.0004
clc,clear;
N=512;%长度
Fs=10000;%采样频率10khz
n=0:N-1;
t=n/Fs;   %时间序列
%信号
x=cos(2*pi*1000*t);
y=cos(2*pi*1000*(t+0.0004));
x=awgn(x,30);   %信噪比10db
y=awgn(y,30);
subplot(211);
plot(t(1:128),x(1:128),'r');
hold on;
plot(t(1:128),y(1:128),':');
legend('x信号', 'y信号');
xlabel('时间/s');ylabel('x(t) y(t)');
title('原始信号');grid on;
hold off
%互相关函数
figure(2);
tic
X=fft(x,2*N-1);
Y=fft(y,2*N-1);
gcc=X.*conj(Y);
% G=abs(X).*abs(Y);
% gcc=gcc./G;
gcc=fftshift(ifft(gcc));
% gcc=abs(gcc);
toc
lags=-N+1:1:N-1;    %使用时间坐标
subplot(211),plot(lags/Fs,gcc),title('gcc'),grid on;
tic
=xcorr(x,y);
toc
subplot(212),plot(lags/Fs,c,'r'),title('xcorr'),grid on;
%计算两种方法的时延
=max(c);   %使用xcorr
d1=Lm-N
Delay1=d1/Fs
=max(gcc);   %使用fft
d2=Lm-N
Delay2=d2/Fs
% plot(lags/Fs,c,'r');
% title('相关函数');
% xlabel('时间/s');ylabel('Rxy(t)');


结果为:
Elapsed time is 0.001596 seconds.
Elapsed time is 0.001157 seconds.
d1 =
   4
Delay1 =
4.0000e-004
d2 =
   4
Delay2 =
4.0000e-004

问题:
但我修改程序如:(将注释去掉即可)
G=abs(X).*abs(Y);
gcc=gcc./G;                  %使用加权函数为PHAT:A=1/abs(X.*conj(Y));
gcc=fftshift(ifft(gcc));
gcc=abs(gcc);
%得到的结果却是不正确的,但图形感觉挺好的,尖峰突出!可是就是得不到时延!
结果:
Elapsed time is 0.002830 seconds.
Elapsed time is 0.001097 seconds.
d1 =
   4
Delay1 =
4.0000e-004
d2 =
   0
Delay2 =
   0

%更改时延,0.0005,0.0006,0.0007等等,都得不到正确结果
请各位大侠帮忙解答,感激不尽!

kakaluote28 发表于 2012-5-2 22:49

还有一个问题:我设的信号声源为1Khz,为什么我假定的时延就必须是在0.001以内呢?我将时延大于0.001,如0.004,两种方法的出的时延为0;时延0.0042,得出时延为0.0002,等等,时延为0.00004时,时延为0,等等。我想,是不是与信号的周期有关系?看了一些贴纸,说是时延必须小于d/c什么的,否则会有相位模糊。请问能解释这个是否有关系么?感激不尽!!

kakaluote28 发表于 2012-5-6 10:22

为何大家只看不回复?大家讨论讨论估计就出来啦~~~~其核心问题就是,加上加权函数后,峰值为什么会变成在中心点(未加权值前不在中心点)。

TestGuru 发表于 2023-12-5 03:59

如果发出的是连续的正弦波(而非短时正弦脉冲或正弦脉冲串),常规互相关可测得相位差但不能测时延,除非预先知道时延小于一个周期。如果用广义互相关-PHAT来测,则互相关峰值将始终在t=0及其左右一个采样点的范围之类,所以更是不行的。

对于常规互相关,应采用白噪声、最大长度序列(MLS)等具有白噪声频谱的信号来测量时延,因此应用范围受限。而广义互相关-PHAT将被测信号做了白化处理,从而将测试信号的范围扩大到普通讲话和音乐等,但是它仍然不能用于测量一个单频正弦波的时延。实际上,当测试信号中含有强烈的周期成份(例如:缓慢的钢琴独奏声)时,常常会出现虚假的广义互相关峰值,并可能导致错误的峰值识别。Multi-Instrument 具有独特的、经改进后的 GCC-PHAT 算法,能够在这种具有挑战性的条件下正确地识别互相关峰值。




页: [1]
查看完整版本: 请教高手,互相关函数求时延PHATGCC,得不到时延结果。帮分析