好形象的描述,这可能是过于简单化的答案,和一个非常复杂的措施,但也许其价值的东西。
为了比较信号,我们确实需要建立一些标准来比较它们。这可能是很多事情。如果我们希望看起来视觉上相似的信号,我们执行时域分析。如果我们正在谈论类似的音频信号,我们关心频率或时频分析。如果信号应该代表噪声,那么信号变化应该是一个很好的衡量标准。总的来说,我们可能想要使用各种措施的组合。我们可以用加权指数来做到这一点。
首先让我们来确定一下我们有什么:有两组信号: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;
我们为每对信号计算这个指数。
我希望信号表征的这个轮廓有所帮助。如果有任何疑问,请留言。
您能否告诉我们每个波形中的采样数量?有没有明显的周期性?信号与自身的自相关(功率谱)通常是存在的信号种类的良好指示。并且A中不同信号(“相似”)之间的互相关可能高于相应的AB相关性。你希望他们有什么不同?最终的测试应该是:取两个随机信号(可能来自A,可能来自B)。进行测试。如果测试值 same,else - > different?显示统计差异。 –
Floris
谢谢你的回答! – user1597969
在这里,我添加了细节到我原来的职位。 – user1597969