线性卷积 toeplitz 矩阵 vs 循环卷积 toeplitz 矩阵

信息处理 matlab 数字通信 卷积 矩阵
2022-02-18 00:51:26

我在理解卷积是线性时和圆形时构建 Toeplitz 矩阵之间的区别时遇到了问题。据我所知,Toeplitz 矩阵可以如下构建H

H = toeplitz(h;zeros(N-L,1),h(1), zeros(1,N-1));

其中 h 是通道,L 是通道的长度,N 是与通道卷积的符号的总长度。

我的问题是,如果与通道的卷积是循环的,那么 Toeplitz 矩阵还会以相同的方式构建吗?

1个回答

它们大体上是不同的。对于长度为的两个信号,如果将输出指定为长度为并带有适当的填充,则线性和循环卷积是等效的。通过 DFT 进行的卷积本质上是循环的,这就是为什么必须在逆 DFT 之前进行填充以产生线性卷积。因此,这是它们相同的特殊情况。NMN+M1

如果您的目标是始终产生线性卷积,则不必担心形成圆形 Toeplitz 矩阵,因为使用常规 Toeplitz 时结果将相同并且这样做更简单。

的指定输出的规则和圆形 Toeplitz 矩阵N+M1

%% Toeplitz Convolution

x = [1 8 3 2 5];
h = [3 4 1];

% Form the row and column vectors for the Toeplitz matrix
r = [h zeros(1, length(x) - 1)];
c = [h(1) zeros(1, length(x) - 1)];

% Toeplitz matrix
hConv = toeplitz(c,r)

% Compare the two types of convolutions
y1 = x*hConv
y2 = conv(x, h)

hConv =

 3     4     1     0     0     0     0
 0     3     4     1     0     0     0
 0     0     3     4     1     0     0
 0     0     0     3     4     1     0
 0     0     0     0     3     4     1


y1 =

 3    28    42    26    26    22     5


y2 =

 3    28    42    26    26    22     5

%% Toeplitz Circular Convolution

% Convolution length
n = length(x) + length(h) - 1;
numElementDiff = n - length(h);

% Set up the circular Toeplitz matrix
c = [h(1) fliplr([h(2:end) zeros(1, numElementDiff)])];
hConvCirc = toeplitz(c, [h zeros(1, numElementDiff)])

% Compare the two types of convolutions
y1 = [x zeros(1, length(c) - length(x))]*hConvCirc
y2 = cconv(x, h, n)

hConvCirc =

     3     4     1     0     0     0     0
     0     3     4     1     0     0     0
     0     0     3     4     1     0     0
     0     0     0     3     4     1     0
     0     0     0     0     3     4     1
     1     0     0     0     0     3     4
     4     1     0     0     0     0     3


y1 =

     3    28    42    26    26    22     5


y2 =

    3.0000   28.0000   42.0000   26.0000   26.0000   22.0000    5.0000

在这里,我们正在测试三件事:

  1. 线性卷积conv()等效于使用适当的 Toeplitz 矩阵执行矩阵乘法。
  2. 循环卷积cconv()相当于使用适当的循环 Toeplitz 矩阵执行矩阵乘法。
  3. 输出长度指定为 ,因此我们看到线性和循环卷积是等价的。N+M1

如果要执行不同大小的循环卷积,则必须以不同的方式形成 Toeplitz 矩阵。这通常涉及对矩阵条目本身或正在操作的信号进行某种类型的填充。Mathworks在此处对 Toeplitz 矩阵和线性与循环卷积进行很好的总结