卷积后MatLab中-1的偏移

时间:2014-11-18 20:16:26

标签: matlab convolution

我注意到在使用conv函数在MatLab(R2011b)中进行卷积时,移位为-1,我不明白为什么。我正在使用相同的'卷积函数的选项,因为我的信号和我正在卷积的函数的长度是N个像素,我希望我的结果也是N个像素。

这种转变只发生在我的N值为偶数时。

我写了这个简短的脚本来说明问题。它将一个带有脉冲响应的矩形脉冲卷积起来,所以我不希望我的结果发生任何变化。

%% Set up rectangle pulse

N = 21;

signal = zeros(N, 1);

% Designate some pixels in the signal as 1's to make rectangle pulse

signal(9:11) = 1;

%% Set up impulse for convolution

impulse = zeros(N, 1);

impulse(round(N/2)) = 1;

%% Convolution

convolutionResult = conv(signal, impulse, 'same');

%% Plot Results - not shown

当N为奇数时,结果看起来没问题,即矩形脉冲在像素9,10和11处的值为1,如预期的那样,与卷积前相同。

N is odd

但是如果N是奇数,那么矩形脉冲在像素8,9和10处的值为1,所以我不会得到-1的偏移。提前谢谢。

enter image description here

有人理解为什么会这样吗?

1 个答案:

答案 0 :(得分:4)

对于w = conv(u,v,'same');,它说,

  

相同:返回与u相同大小的卷积的中心部分。

当两个信号的Nevensame时,卷积结果包含2N - 1个样本,即odd,因此在尝试选择时even长度为N的中心,central part表达式失去意义。

如果时间轴对您很重要,请不要使用same选项。