mcpField
M
matlab-prepare-signal-data

matlab-prepare-signal-data

github.com/matlabデータ・データベース1.2k62 回インストール1 日前に更新
リポジトリ

matlab-prepare-signal-data について

MATLAB Signal Processing Toolbox で信号を前処理するためのワークフローガイドです。信号のクリーニングや学習データ作成を行うユーザー向けに、欠損修復、チャネル整列、フレーミングから `trainnet` への受け渡しまでを案内します。

主な機能

  1. 01欠損サンプルの修復と外れ値処理
  2. 02信号のトレンド除去・平滑化・ノイズ除去
  3. 03チャネル整列または均一レートへのリサンプリング
  4. 04データストアの読み込みとラベル作成
  5. 05フレーミング・分割と `trainnet` への受け渡し

活用シーン

  1. 01欠損やドリフトのある信号の整備
  2. 02サンプルレートが異なるチャネルの整列
  3. 03学習用のラベル付き信号データセットの準備

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/matlab/matlab-agentic-toolkit --skill matlab-prepare-signal-data

インストール後、Claude Code で/matlab-prepare-signal-dataを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

manifest.yaml
references/
fn-countlabels.md
fn-detrend.md
fn-filenames2labels.md
fn-fillgaps.md
fn-fillmissing.md
fn-filloutliers.md
fn-folders2labels.md
fn-framelbl.md
fn-framesig.md
fn-hampel.md
fn-labeledsignalset.md
fn-labelspectrogramoptions.md
fn-medfilt1.md
fn-partition.md
fn-resample.md
fn-retime.md
fn-sgolayfilt.md
fn-signaldatastore.md
fn-signallabeldefinition.md
fn-signalmask-getmask.md
fn-smoothdata.md
fn-splitlabels.md
fn-subset.md
fn-synchronize.md
fn-wdenoise.md
wf-align-channels.md
wf-custom-readfcn.md
wf-denoise.md
wf-detrend-smooth-deoutlier.md

詳細

Signal データの準備

まず Signal Processing Toolbox を確認してください。 ここにあるコンディショニング、ラベリング、分割、フレーミング、パーティショニング用のヘルパーは、Stats & ML Toolbox や汎用的な MATLAB の文字列ユーティリティではなく、Signal Processing Toolbox にあります。

この流れでは、未加工の信号をコンディショニング(クリーニング)し、フォルダーをデータストアに読み込み、ラベル付けして、分割/フレーミングした後、trainnet に引き渡します。各段階はワークフローファイルにまとめられています。このページを参考に、適切なファイルを選んでください。

使用する場合

  • 解析の前に単一の信号をクリーニングする場合:欠損箇所の補完、ドリフトの除去、外れ値の除去、ノイズ除去、等間隔な時間軸への変換、複数チャネルの位置合わせ。
  • ML 学習用の信号データを読み込んで準備する場合:データストア、ファイル名やフォルダーからのラベル付け、層化分割、フレーミング、並列処理。
  • 構造化ラベリングを行う場合:Signal Labeler 用の labeledSignalSet、すべてのラベルタイプ。

使用しない場合

  • Audio Toolbox が利用可能な状態で、生の .wav 音声を分類する場合。 正規の方法は audioDatastore です(このスキルのカスタム ReadFcn ワークフローで .wav を扱うのは、Audio Toolbox がない場合に限ります。 references/wf-custom-readfcn.md)。
  • 周波数選択フィルターの設計(帯域分離、ノッチ、カスタム FIR/IIR) — matlab-design-digital-filter スキルを参照してください。このスキルのコンディショニングは、フィルターの設計ではなく、クリーニングを目的としています。
  • すでにコンディショニング済みの信号からフレームごとの特徴量(RMS、クレストファクター、スペクトル/帯域幅、時間周波数特徴量)を計算する場合 — matlab-extract-signal-features スキルを参照してください。このスキルの framesig/framelbl は、手動でウィンドウ単位のラベリング/教師付けを行うためのものであり、特徴量テーブルを作成するためのものではありません。signal*FeatureExtractor オブジェクトは内部でウィンドウ処理を行い、テーブルを出力します。

ベストプラクティス

  • 成果物は、ユーザーが保存、バージョン管理し、再実行できる、実行可能な .m スクリプトです。 ワークスペースの状態ではありません。
  • 目的を達成できる最も高水準の関数を優先してください。 detrend/smoothdata/fillmissing/resample は読みやすく、専門家でなくても理解しやすい関数です。高水準の呼び出しでは制御できない調整が必要な場合や、ユーザーが求めた場合に限り、より低水準で設定可能な方法(designfilt と filtfilt、手作業で構築する AR モデル、名前付きプリミティブ)を使用してください。まず読みやすさを重視し、デフォルトで低水準の方法に移るのではなく、必要な場合に切り替えます。
    • 高水準の呼び出しでも、必要だと思われる制御ができることがよくあります。特に、smoothdata(x, "sgolay", fl) はフレーム長 fl を引数として受け取るため、これは隠されていません。そのため、sgolayfilt を直接呼び出すよりもこちらを優先してください。ディスパッチャーでは対応できない機能(dn による微分出力や、一般的でない多項式次数)が必要な場合に限り、sgolayfilt を使用してください。

0. よくある思い込み

最初に次のいずれかを思いついた場合は、すぐ下に定番の代替手段があります。

思い込み定番の方法詳細
なだらかなドリフトを除去するために、ハイパスフィルター/designfilt を手作業で設計するdetrend(x, n) — フィルターを使う前に、まず n を 1 -> 2 -> 3 と増やします。多項式デトレンドでは通過帯域のゲインが 1 になりますreferences/fn-detrend.md
ギャップ補間関数を独自に作る(regularizeNaNs、inpaintn — 実在しません)短いギャップには fillmissing(補間)、振動信号の長いギャップには fillgaps(SPT、AR)を使いますreferences/wf-repair-missing.md
チャネルを整列するために、retime + シフト + retime + 結合を手作業で行うsynchronize(A, B, ...) — 共通のグリッドに 1 回の呼び出しで整列しますreferences/wf-align-channels.md
.csv 用に独自の ReadFcn を作るsignalDatastore の既定のリーダーと SignalVariableNames を使いますreferences/fn-signaldatastore.md
データストアの分割に cvpartition を使うsplitlabels + subset(ds, idx{k}) を使いますreferences/fn-splitlabels.md
ファイル名からラベルを取得するために regexp / extractBefore / fileparts を使うfilenames2labels(sds, Extract=...) を使いますreferences/fn-filenames2labels.md
サブフォルダーからラベルを取得するために regexp / ネストした fileparts を使うfolders2labels(sds.Files) を使いますreferences/fn-folders2labels.md
(i-1)*hop+1 を使ったフレーム分割ループを手作業で作るframesig(x, fl, OverlapLength=...) を使いますreferences/wf-frame-and-label.md
containers.Map を使って ROI からフレームへの投票処理を手作業で作るframelbl(rois, ...) を使いますreferences/wf-frame-and-label.md
ファイル内のラベル変数を読み込むために for ループで load(file) を実行するsignalDatastore(folder, SignalVariableNames=["x","label"]) を使いますreferences/fn-signaldatastore.md
Signal Labeler との相互運用が必要なときに signalMask を使うROI ラベルを含む labeledSignalSet を使います(signalMask はインポートできません)references/fn-labeledsignalset.md
signalLabeler(lss) でセットを引数として渡す引数なしで signalLabeler を起動し、「インポート」->「ワークスペースから」または「ファイルから」を選びますreferences/wf-label-and-export.md

SPT に特化した関数があります。独自に作らず、活用しましょう。 fillgaps(AR ギャップ補間)、medfilt1 / hampel(インパルス処理)、 sgolayfilt / smoothdata(...,"sgolay")(特徴を保持した平滑化)は Signal Processing Toolbox にあります。

1. ワークフロー

各ワークフローファイルがエントリーポイントで、使用する関数を一覧にしています。まずはこちらから始めてください。

ワークフロー使用する場面リファレンス
欠損サンプルの修復補間するNaNの欠損やドロップアウトがある場合。references/wf-repair-missing.md
トレンド除去、平滑化、外れ値除去1つの信号にドリフト、スパイク、または広帯域ノイズがある場合(平滑化/ノイズ除去はこちらで扱います)。references/wf-detrend-smooth-deoutlier.md
複数レート/オフセットのチャンネルを整列複数のチャンネルを共通の時間軸にそろえる場合。references/wf-align-channels.md
1つのチャンネルを均一なレートにする1つのチャンネルを指定したレートの均一なグリッドに変換する場合:時刻のジッターを整える場合、またはすでに均一だがレートが異なるため resample する場合。references/wf-uniform-rate.md
ウェーブレットノイズ除去(段階的な適用)調整済みの sgolayfilt では除去できない非定常/マルチスケールノイズがある場合:wdenoise(Wavelet TB)。references/wf-denoise.md
包絡線抽出振幅の輪郭(AM復調、ピーク包絡線)を求める場合。クリーニングには使用しません。references/wf-envelope.md
読み込み+ラベル付け+分割トレーニング用に、フォルダー内のファイルからデータストアを作成する場合。references/wf-load-and-split.md
長い信号のフレーミング+フレームごとのラベル付け信号が長く、ウィンドウごとに教師ラベルを付ける場合。references/wf-frame-and-label.md
ラベル付け+エクスポート(すべてのラベルタイプ)構造化ラベル(属性/ROI/ポイント/TF-ROI)を付け、Signal Labeler/DLにエクスポートする場合。references/wf-label-and-export.md
parpoolでの並列処理ワーカー間で信号ごとの処理を行う場合。references/wf-parallel-process.md
カスタムReadFcn(必要な場合のみ)ファイル形式が .mat/.csv 以外の場合、またはメタデータのプレリュードがある場合。references/wf-custom-readfcn.md
trainnetへの引き渡しデータストアの準備ができており、trainnet/combine用の形状にする場合。references/wf-handoff-to-dl.md

各ワークフローファイルには、使用する関数の fn- リファレンスページが記載されています。 関数の一覧ページは別途ありません。タスクに合ったワークフロー、または上記の早見表から始めてください。

2. 信号に複数の前処理ステップが必要な場合の順序

基本原則(これが実際のルールです): 後続の処理への入力を先行する処理が損なわないように、ステップの順序を決めます。スパイクは最小二乗フィッティングに偏りを生じさせ、フィルターやリサンプラーによって広がります。除去されていないトレンドは、平滑化によって信号に平均化されます。ほとんどの処理は NaN があると正常に動作しません。目の前の信号についてこの原則に基づいて判断し、固定の手順をむやみに適用しないでください。

基本的なヒューリスティック(良い出発点ですが、普遍的なルールではありません):

外れ値 -> トレンド除去 -> 平滑化。この原則に従って、欠損値の補間と整列を配置します。

  • 外れ値 -> トレンド除去 -> 平滑化は検証済みの基本順序です。多項式 detrend の前にスパイクを除去します(スパイクはフィッティングに偏りを生じさせます)。また、平滑化の前にも除去します(平滑化によってスパイクがウィンドウ全体に広がるためです)。さらに、平滑化がトレンドを含めて平均化しないよう、平滑化の前にトレンドを除去します。
  • 補間:欠損データを処理できないステップ(detrend、フィルター、ほとんどの平滑化処理)の前に、NaN を補間します。
  • 整列/リサンプリング: 信号を新しいグリッドに配置する(retime/synchronize)と、重複しない時刻に NaN が生成されるため、整列後に補間します。ただし、信号にスパイクがある場合は、リサンプリングの前に外れ値を除去します。resample のアンチエイリアスフィルターによって、除去されていないスパイクが広がるためです。つまり、整列と外れ値除去の順序は信号によって異なります。固定の順序ではなく、基本原則に従って判断してください。

すべての信号にすべてのステップが必要なわけではありません。該当するステップを見極め、基本原則に従って順序を決めてください。問題が実際には別の種類である場合に備えて、各ワークフローファイルには別の方法へ切り替えるための案内があります。


Copyright 2026 The MathWorks, Inc.


コメント