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

Numpy 最大长度序列的线性自相关不收敛于Kronecker delta,numpy,scipy,correlation,Numpy,Scipy,Correlation,。对于小长度,例如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**8 seq = max_len_seq(8)[0]* 2 - 1 aco

。对于小长度,例如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**8

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

这里发生了什么?这是舍入问题吗?

“这是舍入问题吗?”

有点
seq.dtype
np.int8
,当
correlate
的输入数组具有相同的类型时,返回的数组也具有该数据类型。所以
acorr.dtype
np.int8
。问题在于,真实相关性计算中的值范围为-18到255,而该范围不能用
np.int8
表示。尖峰的值255“环绕”为值-1。(我想这是一个绕圈子的问题。)

解决方法是将
seq
转换为浮点,这可以通过将
seq=max_len_seq(8)[0]*2-1
中的一个系数设置为浮点值来实现。例如

seq = max_len_seq(8)[0]* 2 - 1.0
然后
seq
(因此
acorr
)具有数据类型
np.float64
,并且该图显示了预期峰值