Python实现离散信号自相关函数

Python实现公式r\left [ k \right ] = \sum _{n}x\left [ n \right ]\cdot x\left [ n + k \right ]的计算,包括手动实现逻辑理解自相关函数的核心计算过程

1.基础概率与公式说明

公式r\left [ k \right ] = \sum _{n}x\left [ n \right ]\cdot x\left [ n + k \right ]是离散自相关函数的定义

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值