How to prevent envelope crossing through function.

Ali (view profile)

on 10 Jul 2019
Latest activity Answered by Akira Agata

Akira Agata (view profile)

on 11 Jul 2019
Accepted Answer by Akira Agata

Akira Agata (view profile)

How can you stop the envelope of a sinc function crossing the function. I would like it to just skim the maxima points as shown by the drawn envelope in Sinc_envelope.jpg attached.
x = linspace(-20,20,500);
y = abs(sin(x)./(x)).*abs(sin(x)./(x));
[up,lo]=envelope(y,1,'peak');
plot(x,y)
hold on
%plot(x,up)
plot(x,up)

Tags

Answer by Akira Agata

Akira Agata (view profile)

on 11 Jul 2019

That is due to a characteristics of interpolation method (Spline) used in the envelope function. How about detecting peaks and interpolate them by "Shape-preserving piecewise cubic" ? The following is an example.
x = linspace(-20,20,500);
y = abs(sin(x)./(x)).*abs(sin(x)./(x));
[pk,loc] = findpeaks(y,x);
y2 = interp1(loc,pk,x,'pchip');
plot(x,y)
hold on
plot(x,y2)
legend({'Original','Envelope'},'FontSize',14) 