归一化相关

时间:2016-04-13 14:54:40

标签: python correlation

我在使用归一化相关时遇到了麻烦。我使用python绘制不同的图,例如相关性,归一化相关性和自相关性。

当我使用我自己定义的带有窦的函数时,它运行良好,但是当我尝试使用三角形和箱形波的维基百科示例时,归一化的相关性不再起作用。

这是我使用的代码(只有函数):

def crosscor(sig, known):
    ans = np.array([])
    temp = 0
    for i in range(len(sig)-len(known)):
        for j in range(len(known)):
            temp += sig[i+j]*known[j]
        ans = np.append(ans, temp)
        temp = 0
    return ans



def normcrosscor(sig, known):
    ans = np.array([])
    temp = 0
    x2 = 0
    y2 = 0
    for i in range(len(sig)-len(known)):
        for j in range(len(known)):
            x2 += (sig[i+j]-np.mean(sig[i:i+len(known)]))**2
            y2 += (known[j]-np.mean(known))**2
        sigx = (1/len(known)*x2)**(1/2)
        sigy = (1/len(known)*y2)**(1/2)
        for j in range(len(known)):
            if sigx != 0 and sigy != 0:
                temp += (sig[i+j]-np.mean(sig[i:i+len(known)]))*(known[j]-np.mean(known))/(sigx*sigy)            
            else:
                temp += 0
        temp = 1/len(known)*temp
        ans = np.append(ans, temp)
        x2 = 0
        y2 = 0
        temp = 0
    return ans  

def autocor(sig):
    x = sig
    y = sig
    ans = np.array([])
    y = np.lib.pad(y, (len(sig), len(sig)), 'constant', constant_values=(0, 0))
    for t in range(len(y)-len(sig)+1):
        s = 0
        for i in range(len(x)):
            s += x[i]*y[i+t]
        ans = np.append(ans, s)   
    return ans

当我用鼻窦尝试这个时,我的结果如下:

enter image description here

当我使用三角波和blok波来比较我得到的信号时:

enter image description here

我希望归一化的相关性也会给我一个最大值接近100的结果。

有人能帮助我吗?

0 个答案:

没有答案