ideas to smooth a sharpe corner of a graph?
49 Ansichten (letzte 30 Tage)
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 am 21 Mai 2015
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.
Weitere Antworten (3)
Thomas Koelen am 22 Mai 2015
Bearbeitet: Thomas Koelen am 22 Mai 2015
Image Analyst am 22 Mai 2015
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.