整流化されたデータか​ら任意の閾値以下かつ​100以上連続するデ​ータの抽出方法を知り​たいです

18 次查看(过去 30 天)
和希 吉川
和希 吉川 2022-5-2
イメージはこの図におけるT1です。このT1はThreshold以下で連続する100個以上のデータです。特に”連続する100個以上のデータ”の部分について詳しく知りたいです。

回答(1 个)

Hernia Baby
Hernia Baby 2022-5-2
まずはサンプルを作ります
t = 0:1/1e3:8;
x = sin(t+5).^3+cos(2*pi*(t+5))+3;
threshold = 3.95;
n = 200;
一度図示していきましょう
figure
hold on
plot(t,x,'Color',[.4 .4 .4])
yline(threshold,'--r')
hold off
今回は、上図の閾値以上でn=200より連続点が大きい部分を抜き出します
こちら を参考にして正負ともにカウントしていきます
そのあと差分をとり、カウントがリセットされるまでの場所を探します
idx = x >= threshold;
cells = cell2mat(arrayfun(@(t)1:t,diff(find([1 diff(idx) 1])),'un',0)).*idx;
idx1 = find([diff(cells) 0] < 0)
idx1 = 1×4
1044 2170 3228 4069
ここで n = 200点より多い配列を抽出します
idx1 = idx1(cells(idx1) > n);
num = cells(idx1)
num = 1×2
281 483
for ii = 1:length(idx1)
start = idx1(ii)-num(ii)+1;
fin = idx1(ii);
T{ii} = t(start:fin);
X{ii} = x(start:fin);
end
さて後はXを見ればいいのですがせっかくなので、図示してみましょう
figure
hold on
plot(t,x,'Color',[.4 .4 .4])
yline(threshold,'--r')
cellfun(@(t,x) plot(t,x), T,X)
hold off
  2 个评论
和希 吉川
和希 吉川 2022-7-14
编辑:和希 吉川 2022-7-14
丁寧な回答ありがとうございます。
算出したいデータがthreshold以下であったため、以下のように書き換えて自らのデータにあてはめました。
idx = x <= threshold;
cells = cell2mat(arrayfun(@(t)1:t,diff(find([1 diff(idx) 1])),'un',0)).*idx;
idx1 = find([diff(cells) 0] < 0)
idx1 = idx1(cells(idx1) > n);
num = cells(idx1)
for ii = 1:length(idx1)
start = idx1(ii)-num(ii)+1;
fin = idx1(ii);
T{ii} = t(start:fin);
X{ii} = x(start:fin);
end
すると、オレンジ、黄色の部分は算出されたのですが、右端のグレーの部分がXとして出てきませんでした。このグレーの部分も算出するためにはどうすればよいのか、教えていただけると幸いです。
Hernia Baby
Hernia Baby 2022-7-15
编辑:Hernia Baby 2022-7-15
最後の点を認識しないようにしているからです
データ量は増えますが、以下のようにするとうまくいくと思います
clear,clc,close all;
t = 0:1/1e3:8;
x = sin(t+5).^3+cos(2*pi*(t+5))+3;
threshold = 3;
n = 200;
figure
hold on
plot(t,x,'Color',[.4 .4 .4])
yline(threshold,'--r')
hold off
以下の部分を書き換えました
idx = x > threshold;
cells = cell2mat(arrayfun(@(t)1:t,diff(find([1 diff(idx) 1])),'un',0)).*idx;
idx1 = find([diff(cells) 0] <= 0); %ここ
後は同じです
idx1 = idx1(cells(idx1) > n);
num = cells(idx1)
num = 1×7
481 636 790 547 440 441 251
for ii = 1:length(idx1)
start = idx1(ii)-num(ii)+1;
fin = idx1(ii);
T{ii} = t(start:fin);
X{ii} = x(start:fin);
end
figure
hold on
plot(t,x,'Color',[.4 .4 .4])
yline(threshold,'--r')
cellfun(@(t,x) plot(t,x), T,X)
hold off

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 シミュレーション条件の構成 的更多信息

产品


版本

R2021a

Community Treasure Hunt

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

Start Hunting!