How to prevent envelope crossing through function.

1 Ansicht (letzte 30 Tage)
Ali
Ali am 10 Jul. 2019
Beantwortet: Akira Agata am 11 Jul. 2019
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)

Akzeptierte Antwort

Akira Agata
Akira Agata am 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)
envelope.png

Weitere Antworten (0)

Kategorien

Mehr zu Interpolation finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by