【问题标题】:Convolution of N-dimensional surface with vector in matlab在matlab中N维曲面与向量的卷积
【发布时间】:2013-07-19 07:32:16
【问题描述】:

我正在尝试对任意 N 维曲面与向量进行“卷积”。更具体地说,我正在尝试获取 N 阶 Volterra 内核的输出(参见 http://www.scholarpedia.org/article/Volterra_and_Wiener_series,eq.1)

因此,对于一维内核,输出是一阶内核与过去输入时期的简单滑动卷积。它本质上将过去输入时期中的每个值与一个系数相乘/加权。

二阶内核输出是二维矩阵与信号的“卷积”。这个内核用一个系数对过去每一对点的乘积进行加权。

三阶内核,一个 3d 矩阵,对过去内存时期的每个三元组点进行加权。

另外,我事先不知道内核的维度/顺序。它是一个输入参数..

我知道我可以通过逐点执行几个 for 循环来非常不雅而缓慢地做到这一点,但我想知道是否有一种方法可以在 matlab 中快速而优雅地做到这一点?

谢谢

【问题讨论】:

  • 你看过convn命令吗?
  • 我有,但我不确定它的作用。每当我尝试使用它将曲面与向量进行卷积时,我都会得到一个曲面输出,而不是我正在寻找的向量输出;因此,我认为这不是我需要的......
  • 这与我现在正在做的事情非常相关,可以使用尽可能多的信息。开始赏金。
  • OP 想要一个 Volterra 风格的非线性系统。这概括了线性卷积,以在每个点生成输入信号与内核每个维度的乘积的(标量)积分 - 请参阅 OP 中链接的页面。所以,vector x n-dim -> vector 是对的,但是隐含的定义不是你能从帖子中猜到的!
  • 您可能会发现这很有用:mathworks.com/matlabcentral/fileexchange/…

标签: matlab multidimensional-array signal-processing convolution


【解决方案1】:

您可以使用ndims(array) 检查变量的维度,并对所需维度进行卷积:conv()conv2() 分别用于一维和二维。如果需要在更高维度上进行卷积,可以使用reshape 命令重塑变量,然后使用前面的命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 1970-01-01
    • 2018-04-09
    • 2013-07-19
    • 1970-01-01
    相关资源
    最近更新 更多