ideas to smooth a sharpe corner of a graph?
조회 수: 84 (최근 30일)
I'm trying to smooth a sharpe corner of a graph similar to what I've shown in the image below:
Can anyone give me some ideas how to handle this case? Should I use specific filters? interpolation techniques? etc,...
If it helps, my original case is 2D and for simplification I've drawn a 1D case above. Thanks
Adam 2015년 5월 21일
Something like a mean smoothing filter should do the job if you convolve it with your graph function.
You can specify to only do so at the sample within a certain distance of a corner assuming you can identify the corner location.
추가 답변 (3개)
Thomas Koelen 2015년 5월 22일
편집: Thomas Koelen 님. 2015년 5월 22일
Image Analyst 2015년 5월 22일
One way is to use conv() to smooth/blur the signal:
windowWidth = 9; % Some odd number.
kernel = ones(1, windowWidth) / windowWidth;
smoothedSignal = conv(signal, kernel, 'same');
That is basically fitting the output element to the mean of elements in the sliding window. If you want it to follow the signal less closely, you can use a wider window.
Or you can use a Savitzky-Golay filter, done by sgolayfilt() in the Signal Processing Toolbox. I'm attaching a demo for you Mona. This is similar to conv() in that it does a fit in a sliding window, but you can specify some order of polynomial to fit to data in the window. For example, you can fit a quadratic or cubic function to the data in the window and assign the middle element to the fitted value. So with this filter, it's still a local filter but you have more control over how much you want to smooth or follow the original signal.