声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 5501|回复: 3

[综合讨论] 请教高手,互相关函数求时延PHATGCC,得不到时延结果。帮分析

[复制链接]
发表于 2012-5-2 22:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
%使用两种方法求时延,xcorr和通过fft求
%具体为1、[c,lags]=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
[c,lags]=xcorr(x,y);
toc
subplot(212),plot(lags/Fs,c,'r'),title('xcorr'),grid on;
%计算两种方法的时延
[Am,Lm]=max(c);     %使用xcorr
d1=Lm-N
Delay1=d1/Fs
[Am,Lm]=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

使用加权函数之后PHAT

使用加权函数之后PHAT

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

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

 楼主| 发表于 2012-5-2 22:49 | 显示全部楼层
还有一个问题:我设的信号声源为1Khz,为什么我假定的时延就必须是在0.001以内呢?我将时延大于0.001,如0.004,两种方法的出的时延为0;时延0.0042,得出时延为0.0002,等等,时延为0.00004时,时延为0,等等。我想,是不是与信号的周期有关系?看了一些贴纸,说是时延必须小于d/c什么的,否则会有相位模糊。请问能解释这个是否有关系么?感激不尽!!
 楼主| 发表于 2012-5-6 10:22 | 显示全部楼层
为何大家只看不回复?大家讨论讨论估计就出来啦~~~~其核心问题就是,加上加权函数后,峰值为什么会变成在中心点(未加权值前不在中心点)。
发表于 2023-12-5 03:59 | 显示全部楼层
如果发出的是连续的正弦波(而非短时正弦脉冲或正弦脉冲串),常规互相关可测得相位差但不能测时延,除非预先知道时延小于一个周期。如果用广义互相关-PHAT来测,则互相关峰值将始终在t=0及其左右一个采样点的范围之类,所以更是不行的。

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


GCC_PHAT.png

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-28 11:42 , Processed in 0.073911 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表