Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 两个信号之间的相似性:寻找简单的度量_Matlab_Signals_Signal Processing - Fatal编程技术网

Matlab 两个信号之间的相似性:寻找简单的度量

Matlab 两个信号之间的相似性:寻找简单的度量,matlab,signals,signal-processing,Matlab,Signals,Signal Processing,我在A组中有20个信号(时间进程),在B组中有20个信号。我想找到一个度量来表明A组与B组不同。例如,我对每个组中的信号运行xcorr。但现在我需要比较一下。我试图获取每个xcorr对的最大振幅,这是最大相似性的一种度量。然后我比较了两组之间的所有这些值,但没有差异。我还能做什么?我也可以比较频谱,但我又不知道该取什么频率。 非常感谢您的任何建议/推荐 每组大约有20个信号。那些是我的样品。我不知道有什么不同。在这里,我为每组带来9个样本信号,它们的自相关和信号子集的互相关(第1组与第1组、第2

我在A组中有20个信号(时间进程),在B组中有20个信号。我想找到一个度量来表明A组与B组不同。例如,我对每个组中的信号运行xcorr。但现在我需要比较一下。我试图获取每个xcorr对的最大振幅,这是最大相似性的一种度量。然后我比较了两组之间的所有这些值,但没有差异。我还能做什么?我也可以比较频谱,但我又不知道该取什么频率。 非常感谢您的任何建议/推荐

每组大约有20个信号。那些是我的样品。我不知道有什么不同。在这里,我为每组带来9个样本信号,它们的自相关和信号子集的互相关(第1组与第1组、第2组与第2组、第1组与第2组)。我看不出有任何明显的区别。我也不明白你打算如何比较互相关,我应该取什么样的峰值?对所有信号进行去趋势化和z评分

在此处输入图像描述

好吧,这可能是一个过于简单的答案,也可能是一个过于复杂的衡量标准,但也许它值得一些东西

为了比较信号,我们必须建立一些标准来比较它们。这可能是很多事情。如果我们想要视觉上相似的信号,我们就进行时域分析。如果我们谈论的是声音相似的音频信号,我们关心的是频率或时频分析。如果信号应该代表噪声,那么信号方差应该是一个很好的度量。一般来说,我们可能希望综合使用各种措施。我们可以通过加权指数来实现这一点

首先,让我们建立我们所拥有的:有两组信号:集合A和集合B。我们需要一些测量来显示集合A不同于集合B。信号被去渲染

我们在a中取信号a,在b中取信号b。我们可以比较的事情列表:

  • 时域相似性(静态):就地相乘和求和

  • 时域相似性(带shift*):对每个信号进行fft, 乘法和ifft。(我认为这相当于matlab的xcorr。)

  • 频域相似性(静态**):对每个信号进行fft, 乘,和

  • 频域相似性(带shift*):将两者相乘 接收信号并进行fft。这将显示信号是否共享相似的信息 光谱形状

  • 能量相似性(如果长度不同,则为功率):将两者平方 信号,并对每个信号求和(除以信号长度表示功率)。(自 信号被去趋势化,这应该是信号方差。)然后 减去并取绝对值以测量信号方差 相似性

*(使用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;
我们为每对信号计算这个指数


我希望这一信号特征概述能有所帮助。如果有什么不清楚的地方,请评论。

您能告诉我们每个波形中的样本数量吗?是否有明显的周期性?信号与自身的自相关(功率谱)通常是存在的信号类型的良好指示。a中不同信号之间的互相关(类似)可能高于相应的AB相关性。您希望它们以何种方式不同?最终测试应该是:取两个随机信号(可能来自a,可能来自B).执行测试。如果测试值<某物->相同,其他->不同?显示统计差异。谢谢你的回答!这里我在我的原始帖子中添加了详细信息。你说你对它们进行了去趋势和z评分。也许趋势线的斜率,或者信号的平均值和方差就是你需要的。现在它们看起来都像噪音。我想st到detrend,因为趋势是由测量设备引入的。当我比较两组之间的简单std时,它也没有区别。显然,信号是相似的——否则我会太简单:)问题是我可以尝试什么其他测量方法?非常感谢您的回答!我会处理它,并在这里向您更新。只是关于总体框架。据我所知,有三种可能的方法来确定效果:1。比较各组中所有可能的配对,并使用t检验显示我的相似性度量在两组之间存在显著差异。2.比较各组内和两组之间所有可能的配对,并表明我在组内的相似性度量大于组间的相似性度量。如果对于每个信号,我有两个测量值(两个样本),那么我可以计算每个组的每个样本这两个样本之间的相似性