繁体   English   中英

在Matlab中进行卷积

[英]Convolution in Matlab hands on

我得到了下面的矩阵:

 9 18 27 36 45
 0  0  0  0  0
 0  0  0  0  0
 0  0  0  0  0
 0  0  0  0  0

和内核:

-0.5+0.8662i 1 -0.5-0.8662i

我正在尝试使用有效模式执行卷积:

ans = conv2(matrix,kernel,'valid');

matlab返回:

0.0000+15.5916i 0.0000+15.5916i 0.0000+15.5916i

我的问题是如何实现像matlab一样的结果。 我试图在第一点的matlab中做,但结果是不同的。

a =     matrix(1,1) * kernel(1);
a = a + matrix(1,2) * kernel(2);
a = a + matrix(1,3) * kernel(3);

Result: 0-15.5916i

由于某种原因,使用卷积,虚构的符号是正的。 为什么?

我认为卷积通常是通过“翻转”内核(左 - 右,上 - 下)然后在矩阵中滑动来执行乘法的总和来执行的。

换句话说,matlab实际上是在计算:

a =     matrix(1,1) * kernel(3);
a = a + matrix(1,2) * kernel(2);
a = a + matrix(1,3) * kernel(1);

在卷积过程中,内核被翻转 所以你必须在支票上翻转它; 也就是说,swap kernel(1)kernel(3) ,如下所示:

>> a =     matrix(1,1) * kernel(3);
>> a = a + matrix(1,2) * kernel(2);
>> a = a + matrix(1,3) * kernel(1)
a =
  27.0000 +15.5916i

这符合卷积的结果:

>> A = conv2(matrix,kernel,'valid');
>> A(1,1)
ans =
  27.0000 +15.5916i

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM