matlab-design-digital-filter について
信号処理向けの MATLAB スキルです。デジタルフィルターの構成選定、コード作成、数値による検証を支援します。
主な機能
- 01FIR・IIR構成の選定
- 02ローパス、ハイパス、バンドパス、バンドストップ、ノッチ設計
- 03ストリーミングとオフラインの処理
- 04フィルター比較と応答検証
活用シーン
- 01信号のノイズや干渉の除去
- 02フィルター設計候補の比較
- 03狭い遷移帯域のフィルター設計
- 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.yamlreferences/best-practices.mdefficient-filtering.mdfilter-analyzer.mdINDEX.mdmultirate.mdmultistage-ifir.mdpatterns.mdreferences/quick-ref/designfilt.mdefficient-filtering.mdfilter-analyzer.mdgeneral-iir-fir.mdmultirate-offline.mdmultirate-streaming.mdmultistage-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]多項式は避けます)。
事前確認の手順
- 呼び出す MATLAB 関数を列挙します
references/INDEX.mdでそれぞれを確認します(関数レベルとタスクレベルの表)- 必要なクイックリファレンスファイルを読みます
- 応答の先頭に次のように記載します:
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 - Fpasstrans_pct = 100 * trans_bw / FsM_max = floor(Fs/(2*Fstop))(ローパスベースのマルチレート方式でのみ意味があります)
判定ルール:
trans_pct > 5%-- 通常は単一段 FIR または IIR で問題ありません2% <= trans_pct <= 5%-- 単一段方式も可能です。計算コストやレイテンシーが重要な場合は、効率的な代替方式にも言及しますtrans_pct < 2%-- 処理を止め、狭い遷移帯域に適した方式を比較します(references/quick-ref/efficient-filtering.mdを参照)
設計と検証
- 実現可能性の確認 --
designfiltに最小次数を選ばせてから、filtord(d)を実行します。必要に応じて、FIR の長さの見積もりにkaiserord/firpmordを使用します。 - 設計候補の作成 --
Rp/RsとSampleRate=Fsを明示してdesignfilt()を使用します。ストリーミング IIR にはSystemObject=trueを使用します。オフラインのゼロ位相処理にはfiltfilt()を使用できますが、振幅応答が二乗されることを明記します。 - 視覚的に比較 -- 2 つ以上の設計を比較するには
filterAnalyzer()を使用します。最初にreferences/quick-ref/filter-analyzer.mdを確認します。最低限、振幅と群遅延を表示します。 - 数値で検証 -- 最悪ケースの通過帯域リップルと阻止帯域減衰量を仕様と比較します。
filtfilt()の場合は、実効応答(振幅の二乗)を検証します。 - 出力を提示 -- 仕様の要約、導出した指標、選択したアーキテクチャとその理由、MATLAB コード、検証用スニペットと結果、実装形式を提示します。
主な関数
| 関数 | 用途 |
|---|---|
designfilt() | 主要なフィルター設計(FIR および IIR、すべての応答タイプ) |
filterAnalyzer() | 2 つ以上のフィルター設計の視覚的な比較 |
freqz()、grpdelay() | 周波数応答と群遅延の解析 |
filtfilt() | オフラインのゼロ位相フィルタリング |
dsp.SOSFilter | SystemObject=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.
コメント
Markdown 対応