我在 A 组中有 20 个信号(时间过程),在 B 组中有 20 个信号。我想找到一种方法来表明 A 组与 B 组不同。例如,我对每个信号中的信号运行 xcorr团体。但现在我需要以某种方式比较它们。我尝试取每个 xcorr 对的最大振幅,这是对最大相似性的一种度量。然后我比较了两组之间的所有这些值,但没有区别。我还可以做些什么?我也可以比较频谱,但我又不知道要采用什么频率仓。 非常感谢任何建议/引用!
我在每组中有大约 20 个信号。这些是我的样本。我不知道 a-prirori 可能有什么区别。在这里,我为每组带来了 9 个样本信号,它们对信号子集的自相关和互相关(第 1 组与第 1 组、第 2 组与第 2 组、第 1 组与第 2 组)。我没有看到任何明显的区别。我也不明白你建议如何比较互相关,我应该采取什么峰值?所有信号都经过去趋势处理和 z 评分。
最佳答案
嗯,这可能是一个过于简单的答案,也可能是一个过于复杂的衡量标准,但也许它是有值(value)的。
为了比较信号,我们确实必须建立一些标准来比较它们。这可能是很多事情。如果我们想要在视觉上看起来相似的信号,我们会执行时域分析。如果我们谈论听起来相似的音频信号,我们就会关心频率或时频分析。如果信号应该代表噪声,那么信号方差应该是一个很好的衡量标准。一般来说,我们可能希望结合使用各种措施。我们可以使用加权索引来做到这一点。
首先让我们确定我们拥有的东西:有两组信号:A 组和 B 组。我们想要一些显示 A 组与 B 组不同的度量。信号是去趋势的。
我们在 A 中获取信号 a,在 B 中获取信号 b。我们可以比较的事物列表:
时域相似性(静态):原地相乘和求和。
时域相似性(带偏移*):对每个信号取 fft, 相乘,ifft。 (我相信这相当于 matlab 的 xcorr。)
频域相似性(静态**):对每个信号取 fft, 相乘,求和。
频域相似性(带偏移*):将两者相乘 发出信号并采取 fft。这将显示信号是否具有相似性 光谱形状。
能量(或功率,如果长度不同)相似:将两者平方 信号并对每个信号求和(并除以信号长度以获得功率)。 (自从 信号被去趋势化,这应该是信号方差。)然后 减去信号方差的测量值并取绝对值 相似度。
* (with shift) -- 你可以选择对整个相关向量求和来测量总的一般相关性,你可以选择只对相关向量中超过某个阈值的值求和(就好像你期望回声一个信号在另一个信号中),或者只是从相关向量中取最大值(其中它的索引是导致与第一个信号最大相关的第二个信号的偏移)。此外,如果达到最大相关性所需的偏移量很重要(即,如果信号仅在需要相对较小的偏移量以达到最大相关点时才相似),那么您可以合并索引位移的度量。
**(频域相似性)——您可能想要屏蔽您不关心的部分频谱,例如,如果您只关心更高频率的结构(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;
我们为每对信号计算该索引。
我希望这个信号表征概述对您有所帮助。如果有任何不清楚的地方,请发表评论。
关于matlab - 两个信号之间的相似性 : looking for simple measure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20644599/