好形象的描述,這可能是過於簡單化的答案,和一個非常複雜的措施,但也許其價值的東西。
爲了比較信號,我們確實需要建立一些標準來比較它們。這可能是很多事情。如果我們希望看起來視覺上相似的信號,我們執行時域分析。如果我們正在談論類似的音頻信號,我們關心頻率或時頻分析。如果信號應該代表噪聲,那麼信號變化應該是一個很好的衡量標準。總的來說,我們可能想要使用各種措施的組合。我們可以用加權指數來做到這一點。
首先讓我們來確定一下我們有什麼:有兩組信號: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