find index of missing data point/ extrapolatation

5 ビュー (過去 30 日間)
Akhtar Rind
Akhtar Rind 2020 年 7 月 24 日
コメント済み: Star Strider 2020 年 7 月 27 日
I want fo find time and index when current is 90% of peak value during rise and fall.
Its easy to find rise but during fall, current drop quickly and there is no data point/index available at 90% of peak value.
How can I get index and time at 90% fall/drop value? probably by extrapolation or data fiting. please help.
Thanks
A1= load('data.txt');
T=A1(:,1); %Time
I=A1(:,2); %Current
[Imx,iImx]=max(I); %locate peak value and index in current
i90=find(I>=Imx*0.9,1,'first'); % First 90% of Peak during rise.
ii90=find(I>=Imx*0.9,1,'last'); % Last/second 90% of peak during fall
T90R=T(i90);
T90F=T(ii90);
plot(T,I,'.'); hold on
plot(T(i90),I(i90),'bs','LineWidth',2 ,'MarkerSize',6)
plot(T(i90),I(i90),'bs','LineWidth',2 ,'MarkerSize',6)
hold off

採用された回答

Star Strider
Star Strider 2020 年 7 月 24 日
編集済み: Star Strider 2020 年 7 月 24 日
Another option:
A1= load('data.txt');
T=A1(:,1); %Time
I=A1(:,2); %Current
[Imx,iImx]=max(I); %locate peak value and index in current
i90 = find(diff(sign(I-0.7*Imx))); % Finds Both Crossing Indices (Does Not Need To Be Exact)
for k = 1:numel(i90)
idx = i90(k)+[-2 2];
I90(k) = interp1(I(idx), T(idx), 0.9*Imx, 'linear','extrap'); % Interpolate To Find More Precise Times
end
figure
plot(T,I)
hold on
plot(I90, 0.9*Imx*[1 1],'bs')
hold off
grid
xlabel('Time')
ylabel('Current')
producing:
Note that this will not find the indices, because there are no indices corresponding exactly to the 90% values. It will find the approximate corresponding times (within the precision limits of the data) for both of those points.
EDIT — (24 Jul 2020 at 12:53)
Corrected typographical error.
  4 件のコメント
Akhtar Rind
Akhtar Rind 2020 年 7 月 27 日
Thank you very much for this explaination.
Star Strider
Star Strider 2020 年 7 月 27 日
As always, my pleasure!

サインインしてコメントする。

その他の回答 (1 件)

John D'Errico
John D'Errico 2020 年 7 月 24 日
編集済み: John D'Errico 2020 年 7 月 24 日
Use the intersections code, written by Doug Schwarz, found for download from the file exchange.
I90 = 0.9*max(I);
[Tint,Iint] = intersections(T,I,[min(T),max(T)],[I90,I90])
Tint =
4.118e-05
4.78765517241379e-05
Iint =
69.49044
69.49044
Note that intersections uses linear interpolation to locate the points.

カテゴリ

Help Center および File ExchangeMathematics についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by