Matlab 两个信号之间的相似性:寻找简单的度量
我在A组中有20个信号(时间进程),在B组中有20个信号。我想找到一个度量来表明A组与B组不同。例如,我对每个组中的信号运行xcorr。但现在我需要比较一下。我试图获取每个xcorr对的最大振幅,这是最大相似性的一种度量。然后我比较了两组之间的所有这些值,但没有差异。我还能做什么?我也可以比较频谱,但我又不知道该取什么频率。 非常感谢您的任何建议/推荐 每组大约有20个信号。那些是我的样品。我不知道有什么不同。在这里,我为每组带来9个样本信号,它们的自相关和信号子集的互相关(第1组与第1组、第2组与第2组、第1组与第2组)。我看不出有任何明显的区别。我也不明白你打算如何比较互相关,我应该取什么样的峰值?对所有信号进行去趋势化和z评分 在此处输入图像描述Matlab 两个信号之间的相似性:寻找简单的度量,matlab,signals,signal-processing,Matlab,Signals,Signal Processing,我在A组中有20个信号(时间进程),在B组中有20个信号。我想找到一个度量来表明A组与B组不同。例如,我对每个组中的信号运行xcorr。但现在我需要比较一下。我试图获取每个xcorr对的最大振幅,这是最大相似性的一种度量。然后我比较了两组之间的所有这些值,但没有差异。我还能做什么?我也可以比较频谱,但我又不知道该取什么频率。 非常感谢您的任何建议/推荐 每组大约有20个信号。那些是我的样品。我不知道有什么不同。在这里,我为每组带来9个样本信号,它们的自相关和信号子集的互相关(第1组与第1组、第2
好吧,这可能是一个过于简单的答案,也可能是一个过于复杂的衡量标准,但也许它值得一些东西 为了比较信号,我们必须建立一些标准来比较它们。这可能是很多事情。如果我们想要视觉上相似的信号,我们就进行时域分析。如果我们谈论的是声音相似的音频信号,我们关心的是频率或时频分析。如果信号应该代表噪声,那么信号方差应该是一个很好的度量。一般来说,我们可能希望综合使用各种措施。我们可以通过加权指数来实现这一点 首先,让我们建立我们所拥有的:有两组信号:集合A和集合B。我们需要一些测量来显示集合A不同于集合B。信号被去渲染 我们在a中取信号a,在b中取信号b。我们可以比较的事情列表:
- 时域相似性(静态):就地相乘和求和
- 时域相似性(带shift*):对每个信号进行fft, 乘法和ifft。(我认为这相当于matlab的xcorr。)
- 频域相似性(静态**):对每个信号进行fft, 乘,和
- 频域相似性(带shift*):将两者相乘 接收信号并进行fft。这将显示信号是否共享相似的信息 光谱形状
- 能量相似性(如果长度不同,则为功率):将两者平方 信号,并对每个信号求和(除以信号长度表示功率)。(自 信号被去趋势化,这应该是信号方差。)然后 减去并取绝对值以测量信号方差 相似性
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;
我们为每对信号计算这个指数
我希望这一信号特征概述能有所帮助。如果有什么不清楚的地方,请评论。您能告诉我们每个波形中的样本数量吗?是否有明显的周期性?信号与自身的自相关(功率谱)通常是存在的信号类型的良好指示。a中不同信号之间的互相关(类似)可能高于相应的AB相关性。您希望它们以何种方式不同?最终测试应该是:取两个随机信号(可能来自a,可能来自B).执行测试。如果测试值<某物->相同,其他->不同?显示统计差异。谢谢你的回答!这里我在我的原始帖子中添加了详细信息。你说你对它们进行了去趋势和z评分。也许趋势线的斜率,或者信号的平均值和方差就是你需要的。现在它们看起来都像噪音。我想st到detrend,因为趋势是由测量设备引入的。当我比较两组之间的简单std时,它也没有区别。显然,信号是相似的——否则我会太简单:)问题是我可以尝试什么其他测量方法?非常感谢您的回答!我会处理它,并在这里向您更新。只是关于总体框架。据我所知,有三种可能的方法来确定效果:1。比较各组中所有可能的配对,并使用t检验显示我的相似性度量在两组之间存在显著差异。2.比较各组内和两组之间所有可能的配对,并表明我在组内的相似性度量大于组间的相似性度量。如果对于每个信号,我有两个测量值(两个样本),那么我可以计算每个组的每个样本这两个样本之间的相似性