Main Content

toeplitz

托普利茨矩阵

说明

示例

T = toeplitz(c,r) 返回非对称托普利茨矩阵,其中 c 作为第一列,r 作为第一行。如果 cr 的首个元素不同,toeplitz 将发出警告并使用列元素作为对角线。

示例

T = toeplitz(r) 返回对称的托普利茨矩阵,其中:

  • 如果 r 是实数向量,则 r 定义矩阵的第一行。

  • 如果 r 是第一个元素为实数的复数向量,则 r 定义第一行,r' 定义第一列。

  • 如果 r 的第一个元素是复数,则托普利茨矩阵是抽取了主对角线的 Hermitian 矩阵,这意味着对于 ij 的情况,Ti,j=conj(Tj,i)。主对角线的元素会被设置为 r(1)

示例

全部折叠

r = [1 2 3];
toeplitz(r)
ans = 3×3

     1     2     3
     2     1     2
     3     2     1

创建具有指定的列和行向量的非对称托普利茨矩阵。因为列向量和行向量的首个元素不匹配,toeplitz 发出警告并使用列作为对角线上的元素。

c = [1  2  3 4];
r = [4 5 6];
toeplitz(c,r)
Warning: First element of input column does not match first element of input row. 
         Column wins diagonal conflict.
ans = 4×3

     1     5     6
     2     1     5
     3     2     1
     4     3     2

创建包含复数行和列向量的托普利茨矩阵。

c = [1+3i 2-5i -1+3i];
r = [1+3i 3-1i -1-2i];
T = toeplitz(c,r)
T = 3×3 complex

   1.0000 + 3.0000i   3.0000 - 1.0000i  -1.0000 - 2.0000i
   2.0000 - 5.0000i   1.0000 + 3.0000i   3.0000 - 1.0000i
  -1.0000 + 3.0000i   2.0000 - 5.0000i   1.0000 + 3.0000i

您可以使用 toeplitz 创建循环矩阵。循环矩阵在循环卷积等应用中使用。

使用 toeplitz 从向量 v 创建循环矩阵。

v = [9 1 3 2];
toeplitz([v(1) fliplr(v(2:end))], v)
ans = 4×4

     9     1     3     2
     2     9     1     3
     3     2     9     1
     1     3     2     9

通过使用 toeplitz 为卷积构建循环矩阵来执行离散时间的循环卷积。

定义周期性输入 x 和系统响应 h

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

构建列向量 c 以创建循环矩阵,其中 length(c) = length(h)

c = [x(1) fliplr(x(end-length(h)+2:end))]
c = 1×5

     1     5     2     3     8

x 构建行向量 r

r = x;

使用 toeplitz 构建卷积矩阵 xConv。使用 h*xConv 求卷积。

xConv = toeplitz(c,r)
xConv = 5×5

     1     8     3     2     5
     5     1     8     3     2
     2     5     1     8     3
     3     2     5     1     8
     8     3     2     5     1

h*xConv
ans = 1×5

    52    50    73    46    64

如果您有 Signal Processing Toolbox™,则可以使用 cconv (Signal Processing Toolbox) 函数求循环卷积。

通过使用 toeplitz 为卷积构建数组,执行离散时间卷积。

定义输入 x 和系统响应 h

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

通过用 0 填充 x 构建 rr 的长度是卷积长度 x + h - 1

r = [x zeros(1,length(h)-1)]
r = 1×7

     1     8     3     2     5     0     0

构建列向量 c。将第一个元素设置为 x(1),因为该列确定对角线。填充 c,因为 length(c) 必须等于卷积的 length(h)

c = [x(1) zeros(1,length(h)-1)]
c = 1×3

     1     0     0

使用 toeplitz 构建卷积矩阵 xConv。然后,使用 h*xConv 求卷积。

xConv = toeplitz(c,r)
xConv = 3×7

     1     8     3     2     5     0     0
     0     1     8     3     2     5     0
     0     0     1     8     3     2     5

h*xConv
ans = 1×7

     3    29    51    37    31    29    10

使用 conv 检查结果是正确的。

conv(x,h)
ans = 1×7

     3    29    51    37    31    29    10

输入参数

全部折叠

托普利茨矩阵的列,指定为标量或向量。如果 cr 的首个元素不同,toeplitz 将使用列元素作为对角线。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
复数支持:

托普利茨矩阵的行,指定为标量或向量。如果 cr 的首个元素不同,则 toeplitz 将使用列元素作为对角线。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
复数支持:

详细信息

全部折叠

托普利茨矩阵

托普利茨矩阵是对角线为常量的矩阵,这意味着沿对角线的所有元素都具有相同的值。对于托普利茨矩阵 A,Ai,j = ai–j,结果的形式如下:

A=[a0a1a2a1na1a0a1a2a1a0a2a0a1an1a2a1a0].

扩展功能

C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。

版本历史记录

在 R2006a 之前推出

另请参阅

|