python实现 线性卷积用Toeplitz 矩阵运算

python实现 线性卷积用Toeplitz 矩阵运算

前言

在看论文的时候,发现Toeplitz 矩阵和线性卷积有关系,于是翻了程佩青老师的数字信号处理课本,发现是有讲过这点的。

Toeplitz 矩阵:从左上到右下的斜对角线都相同,如下
python实现 线性卷积用Toeplitz 矩阵运算_第1张图片

引子

以这道题为例子编程

python实现 线性卷积用Toeplitz 矩阵运算_第2张图片

python代码

import numpy as np
from scipy.linalg import toeplitz

a=[3,7,5,-1,2]
b=[4,-1,2,3]
c_len=len(a)+len(b)-1

#把向量b变成Toeplitz 矩阵
col=[b[0] if i==0 else 0 for i in range(len(a))]
row=b+[0]*(c_len-len(b))
t = toeplitz(col,row)

c=np.dot(np.array(a),t)
print(c)

原理解释

书上P18把这个线性卷积如何变成矩阵推导的很详细,就不赘述了。最后可见H矩阵是依次循环右移一位后下移一行,使得形成各对角线相同的矩阵,即Toeplitz矩阵。

依次循环右移一位后下移一行,使得形成各对角线相同的矩阵,即Toeplitz矩阵。

python实现 线性卷积用Toeplitz 矩阵运算_第3张图片

你可能感兴趣的:(python,矩阵,人工智能)