2013-12-17 41 views
5

我在A组中有20个信号(时间过程),B组中有20个信号。我想找到一个方法来显示A组不同于B组。例如, ,我为每组中的信号运行xcorr。但现在我需要以某种方式比较它们。我试图采取每个xcorr对的最大幅度,这是排序最大相似度的度量。然后我比较了两组之间的所有这些值,但没有区别。我还可以做些什么?我也可以比较频谱,但后来我再也不知道要采用什么频率范围。 任何建议/引用高度赞赏!两个信号之间的相似性:寻找简单的测量

我在每组中有大约20个信号。那些是我的样品。我不知道a-prirori可能是什么区别。在这里,我为每个组带来9个样本信号,它们的自相关和信号子集的互相关性(组1对组1对组2对组2对组2)。我没有看到任何明显的差异。我也不明白你如何建议比较交叉相关性,我应该采取什么样的高峰?所有的信号都趋于平稳和z得分。

enter image description hereenter image description here进入这里 enter image description here enter image description here enter image description here enter image description here enter image description here

+0

您能否告诉我们每个波形中的采样数量?有没有明显的周期性?信号与自身的自相关(功率谱)通常是存在的信号种类的良好指示。并且A中不同信号(“相似”)之间的互相关可能高于相应的AB相关性。你希望他们有什么不同?最终的测试应该是:取两个随机信号(可能来自A,可能来自B)。进行测试。如果测试值 same,else - > different?显示统计差异。 – Floris

+0

谢谢你的回答! – user1597969

+1

在这里,我添加了细节到我原来的职位。 – user1597969

回答

6

好形象的描述,这可能是过于简单化的答案,和一个非常复杂的措施,但也许其价值的东西。

为了比较信号,我们确实需要建立一些标准来比较它们。这可能是很多事情。如果我们希望看起来视觉上相似的信号,我们执行时域分析。如果我们正在谈论类似的音频信号,我们关心频率或时频分析。如果信号应该代表噪声,那么信号变化应该是一个很好的衡量标准。总的来说,我们可能想要使用各种措施的组合。我们可以用加权指数来做到这一点。

首先让我们来确定一下我们有什么:有两组信号:A组和B组。我们想要一些显示A组不同于B组的信号。这些信号是去趋势的。

我们采取的一种信号和信号B在B的事情的清单,我们可以比较:在时域(静态)

  • 相似度:乘到位总和。

  • 时域相似性(带*):取每个信号的fft, 乘以ifft。 (我相信这相当于MATLAB的xcorr。)在频域(静态**)

  • 相似:每个信号的采取FFT, 乘法和总和。

  • 频域相似性(带*):乘以两个 信号并取fft。这将显示信号是否共享类似的光谱形状。

  • 相似的能量(或功率,如果不同的长度):广场两个 信号和每个求和(和由用于电力信号长度除)。 (由于 的信号被去除了,所以这应该是信号变化)。然后 减去并取绝对值来衡量信号变化 的相似性。

*(带班) - 你可以选择来总结整个相关向量测量总一般关联,你可以选择总和的超过某个阈值的相关矢量值只(好像您期望另一个信号的回波),或者从相关向量(其指数是第二个信号中与第一个信号的相关性最大的相移)中取最大值。另外,如果达到最大相关所需的移位量是重要的(即,如果信号只有在相对较小的移位才能达到最大相关点时才相似),那么可以包含指数位移的度量。 (频域相似度) - 例如,如果您只关心更高频率的结构(fs/4以上),您可能需要掩盖您不关心的部分频谱, ,你可以这样做:

mask = zeros(1,n); mask(n/4): 
freq_static = mean(fft(a) .* fft(b) .* mask); 

而且,我们可能想实现像这样一个循环相关:

function c = circular_xcorr(a,b) 
c = xcorr(a,b); 
mid = length(c)/2; 
c = c(1:mid) + c(mid+1:end); 
end 

最后,我们选择的是重要的或相关的特征,并创建一个加权指数。例如:

n = 100; 
a = rand(1,n); b = rand(1,n); 
time_corr_thresh = .8 * n; freq_corr_thresh = .6 * n; 
time_static = max(a .* b); 
time_shifted = circular_xcorr(a,b); time_shifted = sum(time_shifted(time_shifted > time_corr_thresh)); 
freq_static = max(fft(a) .* fft(b)); 
freq_shifted = fft(a .* b);  freq_shifted = sum(freq_shifted(freq_shifted > freq_corr_thresh)); 
w1 = 0; w2 = 1; w2 = .7; w3 = 0; 
index = w1 * time_static + w1 * time_shifted + w2 * freq_static + w3 * freq_shifted; 

我们为每对信号计算这个指数。

我希望信号表征的这个轮廓有所帮助。如果有任何疑问,请留言。

+0

非常感谢您的回答!我会努力工作,并会在这里更新你。只是关于总体框架。据我所知有三种可能的方法来确定效果: 1.比较每组内的所有可能的配对,并使用t检验来显示两组之间我的相似性度量显着不同。 2。比较每个组内和两组之间的所有可能的对,并显示组内的相似性度量大于组间的相似性度量。 – user1597969

+0

3.如果对于每个信号我有两个测量值(两个测试仪),所以我可以计算出这两个测试仪之间每个样本组的相似性,然后使用t检验比较组间结果(如[1]中所示) 。这个结果也会给我一个重现性的测量。 有意义吗? – user1597969

+0

哦,是啊!我认为这会很好。我很高兴你问这个,因为我可能会为我的闪烁研究做一个类似的组相似性测试:) – Brian

相关问题