필터 지우기
필터 지우기

pks array going from 2 arguments to 1

조회 수: 3 (최근 30일)
Alvin
Alvin 2017년 8월 7일
댓글: Alvin 2017년 8월 7일
clear
g1 = 1;
g2 = 0;
k1 = 0.2;
k2 = 0.1;
n1 = 0;
n2 = 0;
nm = 0;
D = 1;
O = -1;
gam = 0.2;
alph = 0;
C2 = (4.*(abs(g2).^2))./(k1.*k2);
w = (-10:0.1:10);
Pa = (-1i.*w) + (k1/2).*(1+C2);
Pb = (-1i.*w) + (gam/2);
Y1 = (-1i.*g1.*sqrt(k1))./(Pa.*Pb + g1.^2);
Y2 = (-g1.*sqrt(k1.*C2).*exp(1i.*alph))./(Pa.*Pb + g1.^2);
Y3 = (Pa.*sqrt(gam))./(Pa.*Pb + g1.^2);
AY1 = abs(Y1).^2;
AY2 = abs(Y2).^2;
AY3 = abs(Y3).^2;
Sbb = 2*pi.*((abs(Y1).^2).*(n1 + 0.5) + (abs(Y2).^2).*(n2 + 0.5) + (abs(Y3).^2).*(nm + 0.5));
[pks,locs] = findpeaks(Sbb);
Diff = abs(w(locs(1))-w(locs(2)));
figure(1)
plot(w,Sbb)
Running the code above generates a plot with 2 peaks. But as g2 increases, the peaks slowly vanishes/merges into one peak. I intend to find the peak separation as a function of g2 and this is shown in my Diff that I defined.
My issue is of the following: As g2 increases and eventually turns from two peaks into one, Diff cannot be computed since there is only one peak. So I get an error saying Index exceeds matrix dimensions. How can I resolve this by just letting the Diff = 0 the moment it has turn into one peak? (since there are no longer two peaks and so the peak separation should be 0)
I hope my question is clear and I would appreciate any help. Thank you in advance.

채택된 답변

Kevin Xia
Kevin Xia 2017년 8월 7일
Try the following:
[pks,locs] = findpeaks(Sbb);
if numel(pks)==2
Diff = abs(w(locs(1))-w(locs(2)));
elseif numel(pks)==1
Diff=0;
end
figure(1)
plot(w,Sbb)

추가 답변 (0개)

카테고리

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

Community Treasure Hunt

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

Start Hunting!

Translated by