Simple question about plotting a convolution

조회 수: 74 (최근 30일)
aurc89
aurc89 2015년 3월 25일
편집: Bruno Luong 2019년 9월 26일
I have two sets of data (x,y1) and (x,y2).I need to calculate the convolution between y1 and y2 and plot it vs x. Is it correct to do simply like this?
convol=conv(y1,y2);
plot(x,convol)
I've never used the command conv and I'm not sure about it. Thanks!

채택된 답변

Andrew Newell
Andrew Newell 2015년 3월 25일
편집: Andrew Newell 2015년 3월 25일
Your code will give you a vector of length length(y1)+length(y2)-1, so you'll get an error if you plot it against x (which is presumably the same length as y1 and y2). Instead, use
convol = conv(y1,y2,'same')
which gives you the central part of the convolution of the same size as y1. Then you'll be able to plot it.

추가 답변 (1개)

Hamza OUDICH
Hamza OUDICH 2019년 9월 25일
Be careful, the amplitude given by conv is not correct, it should be multiplied by the step difference in x since conv is an summation approximation of the integral in Matlab. Besides, 'same' removes the first elements to get a list with the same length as x..... so you lose SO MUCH information which can give you complete false result.
  댓글 수: 2
Bruno Luong
Bruno Luong 2019년 9월 25일
편집: Bruno Luong 2019년 9월 26일
+1, if the data does not have constant step, using CONV gives incorrect result.
You probably need to interpolate the y data with a constant step, THEN apply conv.
Can't believe such answer was accepted.
Hamza OUDICH
Hamza OUDICH 2019년 9월 25일
true! i forgot that one as well thanks!

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Mathematics에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by