【发布时间】: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