Python实现公式的计算,包括手动实现逻辑理解自相关函数的核心计算过程
1.基础概率与公式说明
公式是离散自相关函数的定义
x[n]是离散信号(可以理解为随时间/索引n变化的序列)
k是延迟量(表示将信号x向右平移k个单位后,与原信息做"滑动点乘求和")
r[k]输出延迟k对应的自相关值,反映信号再延迟k下与自身的相似程度
2.手动实现示例(纯Python逻辑)
先从最基础的"手动遍历计算"入手,清洗展示公式的执行过程:
def autocorrelation_manul(x):
"""
手动实现离散自相关函数计算:r[k] = sum_n x[n] * x[n + k]
:param x:输入离散信号(1D列表/数组)
:return:自相关结果r,长度为2*len(x)-1(覆盖-len(x)+1到len(x)-1)
"""
N = len(x)
#自相关结果长度:延迟范围是-(N-1)到N-1,共2N-1个值
r = [0] * (2 * N -1)
#延迟k的范围:从-(N-1)到N-1,用索引0到2N-2表示
for k_idx in range(2 * N - 1):
#转换的实际延迟:k = -(N-1)+k_idx
k = k_idx - (N-1)
#计算sum_n x[n] * x[n+k]
total = 0
#计算n+k,判断是否再有效索引内(0<=n+k<N)
for n in range(N):
#计算n+k,判断是否再有效索引内(0 <= n + k < N)
n_shifted = n + k
if 0 <= n_shifted < N:
total += x[n] * x[n_shifted]
r[k_idx] = total
return r
x = [1,2,3,2]
r_manual = autocorrelation_manul(x)
print("手动实现结果:",r_manual)