Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

extractsigroi

信号の関心領域の抽出

説明

sigroi = extractsigroi(x,roilims) は、roilims で指定された ROI 範囲に基づいて、入力信号ベクトル x の関心領域 (ROI) を抽出します。

sigroi = extractsigroi(x,roilims,concat) は、concattrue に指定した場合に関心領域を抽出し、それらを連結します。

すべて折りたたむ

45 サンプルのランダムな信号が取り得る関心領域を表す 2 列の行列について考えてみます。関心領域に対応する信号サンプルを抽出します。

x = randn(45,1);
 
roilims = [5 10; 15 25; 30 35];

sigroi = extractsigroi(x,roilims);

信号をプロットし、関心領域を強調表示します。

plot(x)

hold on
for kj = 1:length(sigroi)
    plot(roilims(kj,1):roilims(kj,2),sigroi{kj})
end
hold off

オフィス ビル内の温度計が 4 か月間収集した一連の温度データについて考えてみます。温度計は 30 分ごとに読み取りを行っています。したがって、サンプル レートは 48 測定/日になります。温度を摂氏に変換し、データをプロットします。

load officetemp

tempC = (temp-32)*5/9;

fs = 48;
t = (0:length(tempC) - 1)/fs;

plot(t,tempC)
xlabel('Time (days)')
ylabel('Temperature ( {}^\circC )')

温度データを 30 日間に分割する関心領域の範囲を作成します。

roilims = [1 30;31 60;61 90;91 120];

関心領域を抽出します。各期間の平均温度を計算し、値を表示します。

sigroi = extractsigroi(tempC,roilims);

cellfun(@mean,sigroi)'
ans = 1×4

   23.7963   23.1481   23.4630   23.0741

45 サンプルのランダムな信号が取り得る関心領域を表す 2 列の行列について考えてみます。関心領域に対応する信号サンプルを抽出します。サンプルを単一のベクトルに連結します。

x = randn(45,1);

roilims = [5 10; 15 25; 30 35];

sigroi = extractsigroi(x,roilims,true);

信号をプロットし、関心領域を強調表示します。

plot(x)

y = NaN(size(x));

for kj = 1:size(roilims,1)
    roi = roilims(kj,1):roilims(kj,2);
    y(roi) = sigroi(1:length(roi));
    sigroi(1:length(roi)) = [];
end

hold on
plot(y)
hold off

オフィス ビル内の温度計が 4 か月間収集した一連の温度データについて考えてみます。温度計は 30 分ごとに読み取りを行っています。したがって、サンプル レートは 48 測定/日になります。温度を摂氏に変換します。

load officetemp

tempC = (temp-32)*5/9;

fs = 48;

少なくとも 24 時間の開きがある 5 つのランダムな 2 週間の期間に対応する関心領域 (ROI) の範囲を作成します。それらの日の温度測定値が観測対象になります。

r = 5;
w = 14*fs;
s = 1*fs;

hq = histcounts(randi(r+1,1,length(tempC)-r*w-(r-1)*s),(1:r+2)-1/2);
t = (1 + (0:r-1)*(w+s) + cumsum(hq(1:r)))';

roilims = [t t+w-1];

関心領域を抽出します。観測された各関心領域の平均温度を計算し、値を表示します。

sigroi = extractsigroi(tempC,roilims);

cellfun(@mean,sigroi)'
ans = 1×5

   22.8075   22.2586   22.4256   22.9018   23.1457

関心領域を再度抽出しますが、今回はサンプルを 1 つのベクトルに連結します。観測された領域全体での平均温度を計算します。

sigroic = extractsigroi(tempC,roilims,true);

avgTFc = mean(sigroic)
avgTFc = 22.7078

ROI 範囲をバイナリ シーケンスに変換し、マスクを作成します。時間を週で表します。

m = sigroi2binmask(roilims,length(tempC));

msk = signalMask(m,'SampleRate',fs*7,'Categories',"Audit");

データをプロットし、四角形のパッチで関心領域を可視化します。

plotsigroi(msk,tempC,true)
xlabel('Time (weeks)')
ylabel('Temperature ( {}^\circC )')

入力引数

すべて折りたたむ

入力信号。ベクトルで指定します。

例: chirp(0:1/1e3:1,25,1,50) は、1 kHz でサンプリングされたチャープを指定します。

データ型: single | double
複素数のサポート: あり

関心領域の範囲。2 列の正の整数の行列として指定します。roilims の i 番目の行には、信号の i 番目の関心領域の開始サンプルと終了サンプルに対応する非減少インデックスが格納されます。

例: [5 8; 12 20; 18 25] は、3 つの領域をもつ 2 列の関心領域行列を指定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

抽出した信号領域を連結するオプション。logical 値として指定します。

データ型: logical

出力引数

すべて折りたたむ

信号の関心領域。cell 配列またはベクトルとして返されます。

  • concatfalse に設定した場合、sigroi は cell 配列になります。sigroi の i 番目のセルには、roilims で指定された i 番目の関心領域に対応する信号サンプルが格納されます。

  • concattrue に設定した場合、sigroi は抽出した信号サンプルすべてを連結したベクトルになります。

拡張機能

R2020b で導入