mcpField
M
matlab-design-digital-filter

matlab-design-digital-filter

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

matlab-design-digital-filter について

信号処理向けの MATLAB スキルです。デジタルフィルターの構成選定、コード作成、数値による検証を支援します。

主な機能

  1. 01FIR・IIR構成の選定
  2. 02ローパス、ハイパス、バンドパス、バンドストップ、ノッチ設計
  3. 03ストリーミングとオフラインの処理
  4. 04フィルター比較と応答検証

活用シーン

  1. 01信号のノイズや干渉の除去
  2. 02フィルター設計候補の比較
  3. 03狭い遷移帯域のフィルター設計
  4. 04リアルタイムまたはバッチ処理パイプラインの構築

MCP 対応

ワークフローでは MCP を介して入力データのスペクトル、信号長、干渉位置を分析します。

インストール

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

$npx skills add https://github.com/matlab/matlab-agentic-toolkit --skill matlab-design-digital-filter

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

同梱ファイル

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

manifest.yaml
references/
best-practices.md
efficient-filtering.md
filter-analyzer.md
INDEX.md
multirate.md
multistage-ifir.md
patterns.md
references/quick-ref/
designfilt.md
efficient-filtering.md
filter-analyzer.md
general-iir-fir.md
multirate-offline.md
multirate-streaming.md
multistage-ifir.md

詳細

MATLAB でデジタルフィルターを設計する

Signal Processing Toolbox と DSP System Toolbox を使用して、デジタルフィルターを設計、実装、検証します。適切なアーキテクチャ(単一段構成と効率的な代替方式)を選び、正しいコードを生成して、プロットと数値で結果を確認します。

使用する場合

  • ローパス、ハイパス、バンドパス、バンドストップ、ノッチフィルターを設計する場合
  • ノイズの多い信号を整えたり、干渉を除去したりする場合
  • FIR と IIR のフィルターアーキテクチャを比較して選ぶ場合
  • Filter Analyzer でフィルター設計を比較する場合
  • ストリーミング(リアルタイム)またはオフライン(バッチ)のフィルタリングパイプラインを構築する場合
  • マルチレート方式または IFIR 方式で狭い遷移帯域に対応する場合

使用しない場合

  • 適応フィルタリング(LMS、RLS) -- Signal Processing Toolbox のドキュメントを直接参照してください
  • オーディオ固有の処理(イコライゼーション、ルーム補正) -- Audio Toolbox を使用してください
  • 画像フィルタリング(2D 畳み込み、モルフォロジー演算) -- Image Processing Toolbox を使用してください
  • フィルタリングを目的としない一般的なスペクトル解析 -- FFT/ピリオドグラムのドキュメントで十分です

主なルール

  • フィルター設計コードを書く前に、必ず references/INDEX.md を読みます。
  • 必ず .m ファイルに書き込みます。 複数行の MATLAB コードを evaluate_matlab_code に直接記述してはいけません。.m ファイルに書き込み、run_matlab_file で実行し、エラーが発生した場合は編集します。
  • MATLAB を呼び出す前に必ず事前確認します。 INDEX.md に記載された関数を呼び出す前に、必要なクイックリファレンスを読みます。応答の先頭に Preflight: [files] と記載します。
  • 重要な要件を推測してはいけません。 モード(ストリーミングかオフラインか)または位相要件が示されていない場合は、質問してください。
  • Fs なしで Hz 設計をしてはいけません。 Fs が不明な場合は処理を中断して質問します(ユーザーが正規化周波数を明示的に希望している場合を除きます)。
  • サンプルレートを必ず指定します。 designfilt(..., SampleRate=Fs) と freqz(d, [], Fs) を使用します。
  • IIR の安定性: SOS/CTF 形式を優先します(高次の [b,a] 多項式は避けます)。
事前確認の手順
  1. 呼び出す MATLAB 関数を列挙します
  2. references/INDEX.md でそれぞれを確認します(関数レベルとタスクレベルの表)
  3. 必要なクイックリファレンスファイルを読みます
  4. 応答の先頭に次のように記載します:Preflight: quick-ref/filter-analyzer.md, quick-ref/designfilt.md(または Preflight: none required)

ワークフロー

フェーズ 1:信号解析
  • MCP を介して入力データを解析します(スペクトル、信号長、干渉位置)
  • trans_pct を計算し、干渉の特性を特定します
フェーズ 2:意図の確認

信号解析後、指定されていない場合はモードと位相を質問します:

  • モード:ストリーミング(因果的)|オフライン(バッチ)
  • 位相:ゼロ位相|線形位相|指定なし

アプローチの比較や概要を提示する前に、回答を待ちます。

フェーズ 3:アーキテクチャの選択
  • trans_pct < 2% の場合は references/efficient-filtering.md を開きます
  • モードと位相の制約を踏まえ、実現可能な候補のみを提示します
  • 除外する方式を、その理由とともに一文で明示します
  • Filter Analyzer を使用して視覚的に比較します

設計時の確認事項

必須の信号および周波数仕様(これらがないと進められません)
  • Fs(Hz)
  • 応答タイプ:ローパス/ハイパス/バンドパス/バンドストップ/ノッチ
  • Hz 単位のエッジ周波数

いずれかの項目が不足している場合は、質問してください。

アーキテクチャ選択に必要な意図(不明な場合は質問)
  • モード:ストリーミング(因果的)|オフライン(バッチ)
  • 位相:ゼロ位相|線形位相|指定なし
  • 振幅制約:Rp_dB 通過帯域リップル(既定値 1 dB)、Rs_dB 阻止帯域減衰量(既定値 60 dB)

モードまたは位相が不明な場合は、確認の質問を1~2個して処理を止めます。

アーキテクチャの確認ポイント

アプローチを確定する前に、以下を計算して提示します:

  • trans_bw = Fstop - Fpass
  • trans_pct = 100 * trans_bw / Fs
  • M_max = floor(Fs/(2*Fstop))(ローパスベースのマルチレート方式でのみ意味があります)

判定ルール:

  • trans_pct > 5% -- 通常は単一段 FIR または IIR で問題ありません
  • 2% <= trans_pct <= 5% -- 単一段方式も可能です。計算コストやレイテンシーが重要な場合は、効率的な代替方式にも言及します
  • trans_pct < 2% -- 処理を止め、狭い遷移帯域に適した方式を比較します(references/quick-ref/efficient-filtering.md を参照)

設計と検証

  1. 実現可能性の確認 -- designfilt に最小次数を選ばせてから、filtord(d) を実行します。必要に応じて、FIR の長さの見積もりに kaiserord/firpmord を使用します。
  2. 設計候補の作成 -- Rp/Rs と SampleRate=Fs を明示して designfilt() を使用します。ストリーミング IIR には SystemObject=true を使用します。オフラインのゼロ位相処理には filtfilt() を使用できますが、振幅応答が二乗されることを明記します。
  3. 視覚的に比較 -- 2 つ以上の設計を比較するには filterAnalyzer() を使用します。最初に references/quick-ref/filter-analyzer.md を確認します。最低限、振幅と群遅延を表示します。
  4. 数値で検証 -- 最悪ケースの通過帯域リップルと阻止帯域減衰量を仕様と比較します。filtfilt() の場合は、実効応答(振幅の二乗)を検証します。
  5. 出力を提示 -- 仕様の要約、導出した指標、選択したアーキテクチャとその理由、MATLAB コード、検証用スニペットと結果、実装形式を提示します。

主な関数

関数用途
designfilt()主要なフィルター設計(FIR および IIR、すべての応答タイプ)
filterAnalyzer()2 つ以上のフィルター設計の視覚的な比較
freqz()、grpdelay()周波数応答と群遅延の解析
filtfilt()オフラインのゼロ位相フィルタリング
dsp.SOSFilterSystemObject=true によるストリーミング IIR
designMultirateFIR()マルチレートのデシメーター/インターポレーター設計
ifir()サンプリングレート一定で狭い遷移帯域を実現する補間 FIR
cost()DSP System オブジェクトの MPIS(入力サンプルあたりの乗算回数)
kaiserord()、firpmord()FIR の次数見積もり

規則

  • designfilt() では常に SampleRate=Fs を指定し、freqz(d, [], Fs) を使って Hz 単位でプロットします
  • 複数のフィルターを比較する場合は、独自の freqz/grpdelay プロットではなく filterAnalyzer() を使用します
  • IIR には SOS 形式を使用します(次数が 8 を超える場合は [b,a] を避けます)
  • 複数パネルの図には tiledlayout/nexttile を使用します(subplot は使用しません)

Copyright 2026 The MathWorks, Inc.


コメント