声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3979|回复: 26

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

[复制链接]
发表于 2016-8-30 10:20 | 显示全部楼层 |阅读模式

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

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

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

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

发表于 2016-8-31 09:32 | 显示全部楼层
两路信号都互相关了  还能不相似吗?

点评

有相关性不代表就相似啊  详情 回复 发表于 2016-9-27 09:23
发表于 2016-9-4 10:52 | 显示全部楼层
既要相似(源自同一声源),信号本身的谱还要越白越容易在噪音环境下找准互相关的峰值时延,白的意思就是信号本身的自相关只在Tao=0处有峰值。

点评

不白的信号其本身的自相关只在Tao=0处也有峰值。  发表于 2016-9-4 17:58
 楼主| 发表于 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 ;

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

多谢前辈

点评

1.时域互相关好像你只算了一个方向上的延迟,没算负向?按相关函数的定义是除以总点数不是采样率,是否要做归一化在这里倒是无所谓,反正你只需要找最大值的位置。超过数组范围的数据置零了吗? 2.频域做互相关是2  详情 回复 发表于 2016-10-7 10:34
发表于 2016-9-27 09:23 | 显示全部楼层
Raspberry 发表于 2016-8-31 09:32
两路信号都互相关了  还能不相似吗?

有相关性不代表就相似啊
发表于 2016-9-30 10:06 | 显示全部楼层
楼主知道咋办了吗
发表于 2016-10-7 10:34 | 显示全部楼层
lebronze 发表于 2016-9-26 14:55
前辈您好,您的回答真的很有启发性。
但是我现在的问题是各路信号自相关峰值都在tao=0处,但是两组互相 ...

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

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

3.数据去除了均值(直流成分)影响吗?
发表于 2016-10-8 08:34 | 显示全部楼层
I1=I-mean(I)
 楼主| 发表于 2016-10-17 17:44 | 显示全部楼层
TestGuru 发表于 2016-10-7 10:34
1.时域互相关好像你只算了一个方向上的延迟,没算负向?按相关函数的定义是除以总点数不是采样率,是否要 ...

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

点评

用互相关做时延测量做过几种,比如音响要调节各方位距离远近不同的喇叭到听者处的时间延迟等,还有几个相关视频。 http://v.youku.com/v_show/id_XMTI4MDEzOTA2NA==.html?from=y1.7-2 如何用互相关测量时间延迟  详情 回复 发表于 2016-10-18 12:24
 楼主| 发表于 2016-10-17 17:46 | 显示全部楼层

多谢回复,我试着去了均值,但计算出的时延和之前结果一样。
请问会不会是回声的影响?或者说是其它问题?
再就是我试着用了path加权的互相关算法,结果仍然不正确。
您觉得问题会出在哪
 楼主| 发表于 2016-10-17 17:47 | 显示全部楼层

楼主还没找到问题在哪,现在怀疑是回声的影响。
答主你也在做这个吗?你那边有什么经验没有啊
发表于 2016-10-18 08:51 | 显示全部楼层
我在论坛里看过一个跟你类似的  问题就出在补零那里  坛友一顿讨论  结果是lz自己马虎 补零的时候补了一个“n”造成的  改成“0”就好了  哈哈
 楼主| 发表于 2016-10-18 09:23 | 显示全部楼层
怪咖先生 发表于 2016-10-18 08:51
我在论坛里看过一个跟你类似的  问题就出在补零那里  坛友一顿讨论  结果是lz自己马虎 补零的时候补了一个 ...

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

点评

恩 恩 没问题  详情 回复 发表于 2016-10-18 11:11
发表于 2016-10-18 11:11 | 显示全部楼层
lebronze 发表于 2016-10-18 09:23
我这直接用的是X1=fft(x1,2*N1-1);fft自动补零,这里应该没问题

恩 恩 没问题
发表于 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

广义互相关的白化处理有了解,尚未做过实际的东东,有空准备弄弄。如果你有数据,也许可拿来看看,看是否是回声影响了测量。

点评

挺好的视频  详情 回复 发表于 2016-12-28 08:23
感谢提供资料  详情 回复 发表于 2016-10-19 09:04
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-4-27 08:36 , Processed in 0.112547 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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