2014-11-18 3 views
2

conv 함수를 사용하여 MatLab (R2011b)에서 컨볼 루션 할 때 -1 시프트가 발생했는데 이유를 알 수 없습니다. 내 신호와 내가 convolving 오전 기능은 길이가 동일한 N 픽셀 및 결과 또한 N 픽셀 수 있기 때문에 회귀 함수를 '동일한'옵션을 사용하고 있습니다.Convolution 후 MatLab에서 -1의 시프트

이 이동은 내 값이 짝수 인 경우에만 발생합니다.

이 짧은 스크립트를 작성하여 문제를 설명했습니다. 그것은 임펄스 응답을 가진 직사각형 펄스를 뒤 틀므로, 결과에 어떤 변화도 기대하지 않습니다.

%% 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이 홀수 인 경우 결과가 OK, 즉 직사각형 펄스가 예상대로 픽셀 9, 10, 11 (1)의 값을 갖는다 보이는 컨벌루션 이전과 동일.

N is odd

하지만 N이 홀수이면, 직사각형 펄스가 픽셀 (8), (9, 10), I는 얻지 않는다 -1이므로, 시프트에 1의 값을 갖는다. 미리 감사드립니다. 이런 일이 발생하는 이유

enter image description here

아무도 이해합니까? 그것은 말한다 w = conv(u,v,'same');를 들어

+0

좋습니다. 필자는 필기를 한 후 필자의 충동에서 '1'값의 위치가 분명히 이유임을 알아 냈습니다. 걱정 마세요! – DukeOfMarmalade

답변

4

,

같은는 : 유와 같은 크기의 회선의 중앙 부분을 돌려줍니다.

N은 컨볼 루션의 결과 odd이다 2N - 1 샘플을 가지고 두 신호 evensame이고, 그래서 even 길이 N과 그 중앙을 선택하려고하면, 식 central part 그 의미를 잃는다.

시간 축이 중요하면 same 옵션을 사용하지 마십시오.

+1

감사합니다 Kamtal, 내 실수와 오해를 참조하십시오. 내가 너를 옳게 만들어 줄게. 옵션을 지정하지 않는 것보다 '동일'합니까? – DukeOfMarmalade

+1

@DukeOfMarmalade, 나는 그것이 낮은 메모리 소비의 장점을 가지고 있지만 여분의 부품을 삭제하는 데 더 많은 시간이 걸릴 것 같아요. – Rashid