最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

欠損サンプルのある信号の周期性の検出

うるう年の 2012 年に (ポンド単位で) 記録された特定の人の体重について考えます。この人は自分の体重を毎日は記録していませんでした。いくつかのデータ点は欠損していますが、信号の周期性を調べるものとします。

データを読み込み、測定値をキログラムに変換します。欠損している読み取りが NaN に設定されます。いくつの点が欠損しているかを判定します。

load(fullfile(matlabroot,'examples','signal','weight2012.dat'))

wgt = weight2012(:,2)/2.20462;

fprintf('Missing %d samples of %d\n',sum(isnan(wgt)),length(wgt))
Missing 27 samples of 366

信号が周期的かどうかを周波数領域で解析して判定します。Lomb-Scargle アルゴリズムは欠損サンプルのあるデータや不定間隔でサンプリングされたデータを処理するように設計されています。

周期の期間を週数で測定し、求めます。

[p,f] = plomb(wgt,7,'normalized');

plot(f,p)
xlabel('Frequency (week^{-1})')

該当者の体重が週次でどのように変動したかに注目します。週単位で注目すべきパターンがあるでしょうか。年の最後の 2 日間は 52 週にするため消去します。曜日別に測定値を並べ替えます。

wgd = reshape(wgt(1:7*52),[7 52])';

plot(wgd)
xlabel('Week')
ylabel('Weight (kg)')

q = legend(datestr(datenum(2012,1,1:7),'dddd'));
q.Location = 'NorthWest';

データのサブセットを低次多項式に近似するフィルターを使用して、変動を滑らかにします。特に、7 日間のセットを 3 次多項式に近似するように設定します。

wgs = sgolayfilt(wgd,3,7);

plot(wgs)
xlabel('Week')
ylabel('Smoothed weight (kg)')

q = legend(datestr(datenum(2012,1,1:7),'dddd'));
q.Location = 'SouthEast';

該当者は、週末に他の曜日よりも多く食べるため体重も増加する傾向があります。日次平均値を計算して確認します。欠損値を計算から除外します。

for jk = 1:7
    wgm = find(~isnan(wgd(:,jk)));
    fprintf('%3s mean: %5.1f kg\n', ...
        datestr(datenum(2012,1,jk),'ddd')',mean(wgd(wgm,jk)))
end
Sun mean:  76.3 kg
Mon mean:  75.7 kg
Tue mean:  75.2 kg
Wed mean:  74.9 kg
Thu mean:  75.1 kg
Fri mean:  75.3 kg
Sat mean:  75.8 kg

参考

| |

関連するトピック