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

Linear autocorrelation of maximum length sequence does not converge to Kronecker delta

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**8

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

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

"Is this a rounding problem?"

有点。 seq.dtypenp.int8,当 correlate 的输入数组具有相同类型时,返回的数组也具有该数据类型。所以 acorr.dtypenp.int8。问题在于真实相关性计算中的值范围为 -18 到 255,而该范围不能用 np.int8 表示。秒杀值,255,"wraps around"到值-1。 (我想这是一个 wrap-arounding 问题。:)

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

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

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