python实现 线性卷积用Toeplitz 矩阵运算
前言
在看论文的时候,发现Toeplitz 矩阵和线性卷积有关系,于是翻了程佩青老师的数字信号处理课本,发现是有讲过这点的。
Toeplitz 矩阵:从左上到右下的斜对角线都相同,如下
引子
以这道题为例子编程
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矩阵。