Numpy 最大长度序列的线性自相关不收敛于Kronecker delta
。对于小长度,例如n=2**7: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
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
,并且该图显示了预期峰值