最大长度序列的线性自相关不会收敛到Kronecker delta

时间:2018-03-20 12:52:11

标签: numpy scipy correlation

The linear autocorrelation of a Maximum Length Sequence approximates a Kronecker delta。这种情况也发生在scipy中,对于小长度,例如n = 2 ** 7:

import numpy as np 
from scipy.signal import max_len_seq
import matplotlib.pyplot as plt

seq = max_len_seq(7)[0]* 2 - 1
acorr = np.correlate(seq, seq, 'full')
plt.plot(acorr);

n == 2**7

但不是长度较长,例如N = 2 ** 8

seq = max_len_seq(8)[0]* 2 - 1
acorr = np.correlate(seq, seq, 'full')
plt.plot(acorr);

n == 2**8

这里发生了什么?这是一个四舍五入的问题吗?

1 个答案:

答案 0 :(得分:1)

“这是一个舍入问题吗?”

排序。 seq.dtypenp.int8,当correlate的输入数组具有相同类型时,返回的数组也具有该数据类型。因此acorr.dtypenp.int8。问题是真实相关计算中的值范围为-18到255,并且该范围不能用np.int8表示。尖峰值255,“环绕”值-1。 (我想这会使它成为一个环绕问题。:)

修复是将seq转换为浮点,这可以通过使seq = max_len_seq(8)[0]* 2 - 1中的一个系数成为浮点值来完成。 E.g。

seq = max_len_seq(8)[0]* 2 - 1.0

然后seq(因此acorr)的数据类型为np.float64,图表显示了预期的峰值。