计算输入序列XY的卷积。通过连线数据至XY输入端可确定要使用的多态实例,也可手动选择实例。


icon

一维卷积

信号x(t)和y(t)的线性卷积定义如下:

其中,符号*表示线性卷积。

算法direct,VI使用下列等式进行离散线性卷积,获取X * Y的元素。

i = 0, 1, 2, … , M+N–2

hX * Y

NX中元素的数量、 MY中的元素数、 XY 的范围之外的索引元素等于零,如以下关系所示:

xj =0, j <0,或 jN

yj =0, j <0,或 jM

算法frequency domain,VI按照下列步骤计算线性卷积:

  • 首先,按照下列公式,VI在XY的结尾填充0,使其长度为M + N – 1,如下等式所示:
  • 然后,VI按照下列公式对X'和Y'进行傅立叶变换。
X'(f) = FFT(x') Y'(f) = FFT(y')
  • 最后,VI将X'(f)乘以Y'(f),并计算乘积的反傅立叶变换。结果为XY的线性卷积,如下列等式所示。
X * Y = IFFT(X'(f) · Y'(f))

该VI计算线性卷积,而不是圆周卷积。然而,由于 x(t) * y(t)NX(f)Y(f)是一个傅里叶变换对,其中 x(t) * y(t)Nx(t)和 y(t)的循环卷积,你可以创建一个循环卷积的版本。使用下图所示的程序框图计算圆周卷积。

二维卷积

算法direct时,该VI使用下列方程计算输入矩阵XY的二维卷积。

i = 0, 1, 2, …,M1+M2–2,j = 0, 1, 2, … , N1+N2–2

hX * Y

M1 是矩阵 X的行数、 N1 是矩阵 X的列数、 M2 是矩阵 Y的行数、 N2 是矩阵 Y的列数、 XY 的范围之外的索引元素等于零,如以下关系所示:

x(m,n), m < 0 或 mM1n < 0 或 nN1

y(m,n) , m < 0 或 mM2n < 0 或 nN2

算法frequency domain,VI按照下列步骤计算二维卷积:

  • 首先,该VI用0填充XY的末尾,使信号的大小满足(M1 + M2 – 1)行(N1 + N2 – 2)列。如下列方程所示。
  • 然后,VI按照下列公式对X'和Y'进行傅立叶变换。
X'(f) = FFT(x') Y'(f) = FFT(y')
  • 最后,VI将X'(f)乘以Y'(f),并计算乘积的反傅立叶变换。结果为XY的二维卷积,如下列等式所示:
X * Y = IFFT(X'(f) · Y'(f))

输出大小可确定输出矩阵X * Y的大小。如下图所示。

  1. full

    输出矩阵X * Y为(M1+M2–1)行(N1+N2–1)列。

  2. size X

    适用于图像处理。如X是要滤波的图像,Y为小矩阵,称为卷积核。X * Y是滤波后的图像,大小和图像X相同。输出大小full时,M1*N1输出矩阵是输出矩阵的中心部分。

  3. compact

    输出大小fullsize X,计算X * Y的边缘元素要求零填充。如输出大小compact,LabVIEW将删除此类边缘元素。如输出大小size X,(M1M2+1)*(N1N2+1)输出矩阵是输出矩阵的中心部分。

范例

请参考LabVIEW附带的下列范例文件。

  • labview\examples\Signal Processing\Signal Operation\Edge Detection with 2D Convolution.vi