我在使用归一化相关时遇到了麻烦。我使用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
当我用鼻窦尝试这个时,我的结果如下:
当我使用三角波和blok波来比较我得到的信号时:
我希望归一化的相关性也会给我一个最大值接近100的结果。
有人能帮助我吗?