在Matlab中对N维表面与向量进行卷积

6
我正在尝试将任意N维表面与向量进行“卷积”。更具体地说,我正在尝试获取N阶Volterra核的输出(参见http://www.scholarpedia.org/article/Volterra_and_Wiener_series,方程1)。
因此,对于一维核,输出是第一阶核与过去输入时期的简单滑动卷积。它实际上将过去输入时期中的每个值乘以一个系数/权重。
二阶核的输出是一个2D矩阵与信号的“卷积”。该核加权了过去每对点的乘积。
三阶核是一个3D矩阵,加权了过去记忆时期中的每个三元组。
另外,我不知道核的维度/阶数。这是一个输入参数。
我知道我可能可以通过逐点使用几个for循环非常笨拙而缓慢地完成这个任务,但我想知道是否有一种在Matlab中非常快速和优雅地完成这个任务的方法?
谢谢。

你看过 convn 命令吗? - undefined
我有这个函数,但是我不确定它的作用是什么。每当我尝试使用它将一个表面与一个向量进行卷积时,我得到的是一个表面输出,而不是我所期望的向量输出;因此,我认为它并不是我所需要的... - undefined
1
OP想要一个Volterra风格的非线性系统。这将线性卷积推广到每个点,生成输入信号与内核的每个维度的乘积的(标量)积分 - 请参阅OP中链接的页面。所以,向量x n-dim -> 向量是正确的,但隐含的定义不是你可以从帖子中猜测出来的! - undefined
4
你可能会发现这个链接有用:http://www.mathworks.com/matlabcentral/fileexchange/32248-fast-volterra-filtering - undefined
另一种实现方式:http://www-home.fh-konstanz.de/~mfranz/Code.html - undefined
显示剩余3条评论
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接