我注意到在使用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是奇数,那么矩形脉冲在像素8,9和10处的值为1,所以我不会得到-1的偏移。提前谢谢。
有人理解为什么会这样吗?
答案 0 :(得分:4)
对于w = conv(u,v,'same');
,它说,
相同:返回与u相同大小的卷积的中心部分。
当两个信号的N
为even
且same
时,卷积结果包含2N - 1
个样本,即odd
,因此在尝试选择时even
长度为N
的中心,central part
表达式失去意义。
如果时间轴对您很重要,请不要使用same
选项。