lebronze 发表于 2016-8-30 10:20

关于广义互相关求时延的问题

各位大牛好,本人现在在做一个声音定位的实验,就是麦克风阵列(多个麦克风)采集声音,然后每采集到的两路数据做广义互相关求时延。
      现在的问题是:不同麦克风采集到的声音数据还是有一定的差异,所以互相关求时延老是不对;然后我又试着只用一路数据,然后手动添加一些数据造成时延,然后用互相关求的结果就是对的。
   所以想问问:两路信号互相关求时延时,是不是要求做互相关的两路数据一定要相似,如果这两路信号差异比较大,是不是求得的时延结果就会不好?还望有经验的高手解答一下

Raspberry 发表于 2016-8-31 09:32

两路信号都互相关了还能不相似吗?

TestGuru 发表于 2016-9-4 10:52

既要相似(源自同一声源),信号本身的谱还要越白越容易在噪音环境下找准互相关的峰值时延,白的意思就是信号本身的自相关只在Tao=0处有峰值。

lebronze 发表于 2016-9-26 14:55

TestGuru 发表于 2016-9-4 10:52
既要相似(源自同一声源),信号本身的谱还要越白越容易在噪音环境下找准互相关的峰值时延,白的意思就是信 ...

前辈您好,您的回答真的很有启发性。
但是我现在的问题是各路信号自相关峰值都在tao=0处,但是两组互相关的到的时延却不对。
(1)尝试过用时域直接求互相关,代码如下:
%% 互相关函数定时延
for m=1:N1
    Sxy(m)=0;
for n=1:N1-m
   Sxy(m)=Sxy(m)+x1(n)*x2(n+m);
end
Rxy(m)=(1/N1)*Sxy(m);
end

c1=max(abs(Rxy));
a1=find(abs(Rxy)==c1) ;%找出最大点
delay1=a1/fs ;               %最大点数/采样率
(2)转到频域求互相关,代码如下:
%% 互相关函数定时延
X1=fft(x1,2*N1-1);
X2=fft(x2,2*N2-1);
Pxx=X1.*X1;
Pyy=X2.*X2;
Pxy=X1.*conj(X2);                   %N*1 complex


% %方法a.原始互相关函数定时延
R=ifft(Pxy);                     
R=real(R);                        
                           
R=fftshift(R);
c=max(abs(R));
a=find(abs(R)==c) ;%找出最大点
Rl2=fix(length(R)/2);
delay=(a-(Rl2)-1)/fs ;

结果是算的都不正确,而且取得信号点数不同,时延估计出来也不同。
麻烦您看看代码帮我把把脉,尤其是时域互相关,我不是很清楚最后最大值要除以总点数还是采样率

多谢前辈

Eminem 发表于 2016-9-27 09:23

Raspberry 发表于 2016-8-31 09:32
两路信号都互相关了还能不相似吗?

有相关性不代表就相似啊

怪咖先生 发表于 2016-9-30 10:06

楼主知道咋办了吗

TestGuru 发表于 2016-10-7 10:34

lebronze 发表于 2016-9-26 14:55
前辈您好,您的回答真的很有启发性。
但是我现在的问题是各路信号自相关峰值都在tao=0处,但是两组互相 ...

1.时域互相关好像你只算了一个方向上的延迟,没算负向?按相关函数的定义是除以总点数不是采样率,是否要做归一化在这里倒是无所谓,反正你只需要找最大值的位置。超过数组范围的数据置零了吗?

2.频域做互相关是2N个点吧,要补N个零吧?

3.数据去除了均值(直流成分)影响吗?

minoz 发表于 2016-10-8 08:34

I1=I-mean(I)

lebronze 发表于 2016-10-17 17:44

TestGuru 发表于 2016-10-7 10:34
1.时域互相关好像你只算了一个方向上的延迟,没算负向?按相关函数的定义是除以总点数不是采样率,是否要 ...

多谢前辈回复。
1.我目前已经确定用广义互相关(GCC)做时延估计了,时域就不考虑了
2.频域互相关要先求原信号的FFT,是要在原始信号的末尾补N个零
3.数据没有去均值然后我后面试着去了均值,算出的时延没有变化,和之前不去均值结果一样。
现在考虑是不是回声的影响,试着对原始互相关进行PATH加权,可是结果还是不对。
请问前辈您有这方面的经验吗?这里感觉应该是有什么实际问题中的小技巧我没搞明白

lebronze 发表于 2016-10-17 17:46

minoz 发表于 2016-10-8 08:34
I1=I-mean(I)

多谢回复,我试着去了均值,但计算出的时延和之前结果一样。
请问会不会是回声的影响?或者说是其它问题?
再就是我试着用了path加权的互相关算法,结果仍然不正确。
您觉得问题会出在哪

lebronze 发表于 2016-10-17 17:47

怪咖先生 发表于 2016-9-30 10:06
楼主知道咋办了吗

楼主还没找到问题在哪,现在怀疑是回声的影响。
答主你也在做这个吗?你那边有什么经验没有啊

怪咖先生 发表于 2016-10-18 08:51

我在论坛里看过一个跟你类似的问题就出在补零那里坛友一顿讨论结果是lz自己马虎 补零的时候补了一个“n”造成的改成“0”就好了哈哈

lebronze 发表于 2016-10-18 09:23

怪咖先生 发表于 2016-10-18 08:51
我在论坛里看过一个跟你类似的问题就出在补零那里坛友一顿讨论结果是lz自己马虎 补零的时候补了一个 ...

我这直接用的是X1=fft(x1,2*N1-1);fft自动补零,这里应该没问题

怪咖先生 发表于 2016-10-18 11:11

lebronze 发表于 2016-10-18 09:23
我这直接用的是X1=fft(x1,2*N1-1);fft自动补零,这里应该没问题

恩 恩 没问题

TestGuru 发表于 2016-10-18 12:24

lebronze 发表于 2016-10-17 17:44
多谢前辈回复。
1.我目前已经确定用广义互相关(GCC)做时延估计了,时域就不考虑了
2.频域互相关要先 ...

用互相关做时延测量做过几种,比如音响要调节各方位距离远近不同的喇叭到听者处的时间延迟等,还有几个相关视频。

http://v.youku.com/v_show/id_XMTI4MDEzOTA2NA==.html?from=y1.7-2
如何用互相关测量时间延迟?(英文)

http://v.youku.com/v_show/id_XMTI4MDIyNzM4MA==.html?from=y1.7-2
如何用互相关或自相关测量时间延迟?(中文)


用互相关法加白噪声或最大长度序列MLS测量声速(英文)
http://v.youku.com/v_show/id_XMTI4MTA1MzI4OA==.html?from=y

用互相关法加白噪声或最大长度序列MLS测量声速(中文)
http://v.youku.com/v_show/id_XMTI4MTQyNzYxNg==.html?from=y1.7-2

广义互相关的白化处理有了解,尚未做过实际的东东,有空准备弄弄。如果你有数据,也许可拿来看看,看是否是回声影响了测量。
页: [1] 2
查看完整版本: 关于广义互相关求时延的问题