メインコンテンツ

フィルター設計

ライブ エディターでのデジタル フィルターの設計

R2021b 以降

説明

[フィルター設計] を使用すると、デジタル フィルターを対話的に設計することができます。このタスクは、digitalFilter オブジェクトを使用してフィルターを設計するための MATLAB® コードを自動的に生成します。DSP System Toolbox™ がインストールされている場合、タスクは dsp.FIRFilter (DSP System Toolbox) オブジェクトおよび dsp.SOSFilter (DSP System Toolbox) オブジェクトを使用してフィルターを設計および実装する MATLAB コードを生成できます。これらの System object はストリーミング信号をフィルター処理します。 (R2023b 以降)

最初に、フィルター応答を選択します。このタスクでは、フィルター応答のタイプに応じてフィルター パラメーターの指定が制御されます。指定できるフィルター パラメーターには次のものがあります。

  • サンプル レート

  • フィルター次数

  • 周波数制約

  • 振幅の制約

  • 設計法

表示オプションのリストから選択して、生成されたフィルター応答と追加のフィルター情報を可視化します。フィルターの制約、設計法、設計法パラメーターの詳しい説明については、designfilt のドキュメンテーションを参照してください。

ライブ エディターのタスクの詳細については、ライブ スクリプトへの対話型タスクの追加を参照してください。

Design Filter Live Editor task showing Lowpass FIR filter response

タスクを開く

[フィルター設計] タスクを MATLAB エディターのライブ スクリプトに追加するには、以下のようにします。

  • [ライブ エディター] タブで [タスク]、[フィルター設計] を選択します。

  • スクリプト内の任意のコード ブロックで、designfiltfilterlowpass など、該当するキーワードを入力します。提示されるコマンド補完の候補から [フィルター設計] を選択します。

すべて展開する

この例では、ライブ エディターで "フィルター設計" タスクを使用してデジタル フィルターのコードを生成する方法を説明します。このタスクを使用して、デジタル フィルターの対話的な設計、フィルター応答の表示、コードの生成を行うことができます。

信号の作成または読み込み

ライブ エディターで、ノイズを含んだ心電図 (ECG) 信号を MATLAB® ワークスペースに読み込みます。データをプロットします。

load noisyecg
plot(noisyECG_withTrend)

Figure contains an axes object. The axes object contains an object of type line.

ノイズを含んだ ECG 信号が表示されます。信号に影響を与えるノイズの発生源はいくつかあり、たとえば、動きのアーティファクト、高周波数ノイズ、電源干渉などがあります。対話的にフィルターを設計してノイズを信号から除去します。[ライブ エディター] タブで [タスク] リストを展開し、Design Filter を選択してタスクを開きます。

ローパス FIR フィルターの設計

高周波数ノイズを除去するには、最初に [ローパス FIR] フィルターを選択し、[次数]20 を指定します。周波数、振幅、アルゴリズムのパラメーターに使用可能なオプションは、選択したフィルター応答タイプとフィルター次数によって異なります。

Lowpass FIR filter response selected in Design Filter live task

ローパス フィルターは、入力信号から、指定したしきい値を超える望ましくない周波数成分を除去します。[周波数パラメーターの指定] セクションで、[周波数制約] リストから Cutoff (6dB) frequency を選択します。サンプル レートがわかっている場合は、[周波数単位] リストから Hz を選択できます。[サンプル レート] オプションが表示されたら、ワークスペース内の変数からサンプル レートを選択できます。この例ではサンプル レートは不明であるため、正規化されたカットオフ周波数、0.5 ラジアン/サンプルを指定します。

Frequency parameters in Design Filter live task

FIR ローパス フィルターの場合は、[振幅パラメーターの指定] セクションで、通過帯域リップル量と阻止帯域の減衰量を制御する制約を指定できます。[振幅の制約] リストから Passband ripple and stopband attenuation を選択します。振幅の制約とフィルター次数は、フィルターの遷移幅にも影響する場合があります。

Magnitude parameters in Design Filter live task

FIR constrained least-squares 設計法を選択します。アルゴリズムのオプションは既定の設定のままにします。

Algorithm parameters in Design Filter live task

[フィルター応答の表示] セクションで Magnitude & phaseGroup delay を選択して、設計したフィルター応答を可視化します。振幅プロットでは、阻止帯域の減衰量のレベルが 60 dB であることが確認できます。群遅延プロットは、10 サンプルの遅延と、フィルターが線形位相であることを示しています。

Filter response options in Design Filter live task

Frequency and group delay responses output of Design Filter live task

[コードの表示] セクションの下にある矢印をクリックして、設計したフィルターの生成コードを表示します。コマンド ライン上でコードのコピーや貼り付けを行うことで、フィルター設計仕様を手動で編集できます。

Output code in Design Filter live task: Design a digital filter

ノイズを含んだ ECG 信号に設計したフィルターを適用します。フィルターによって生じた遅延を考慮して結果をプロットします。

load designedFilter
filteredECG = filter(designedFilter,noisyECG_withTrend);
delay = grpdelay(designedFilter);
mdelay = mean(delay);
filteredECG(1:mdelay) = [];

plot(noisyECG_withTrend(1:end-mdelay))
hold on
plot(filteredECG)
legend(["Original","Filtered"])
hold off

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Original, Filtered.

等リップル バンドストップ FIR フィルターの設計

心電図モニターのような医療機器は、電磁干渉の影響を受ける場合があります。電源は、一般的に 50 Hz または 60 Hz の周波数で動作します。この例では、MIT-BIH Arrhythmia Database [1]から取得された ECG 信号に 60 Hz の正弦波をノイズとして追加しています。サンプル レートは 360 Hz です。このノイズを除去するために、[フィルター設計] タスクを開き、最小次数バンドストップ FIR フィルターを設計します。既定のフィルター名を bandstop60Hz に変更します。

Bandstop FIR filter response selected in Design Filter live task

[周波数単位]Hz を指定します。サンプル レートを指定するには、値を入力するか、リストからサンプル レート変数を選択します。サンプル レート変数をリストに表示するには、その変数をワークスペースに保存する必要があります。変数 fs を作成し、それが 360 Hz に等しくなるように設定します。その後で [サンプル レート] リストから fs を選択します。通過帯域と阻止帯域の周波数値を指定し、周波数を、60 Hz を中心とする 10 Hz ノッチ フィルターの 55 Hz から 65 Hz の範囲で減衰させます。

fs = 360;

Frequency parameters in Design Filter live task

[通過帯域リップル 2 (dB)]0.5 に設定し、[阻止帯域の減衰量 (dB)]80 に増やします。

Magnitude parameters in Design Filter live task

このタスクは、既定で等リップル設計法を使用します。フィルターの振幅応答と位相応答を表示します。

Filter response options in Design Filter live task

Output code in Design Filter live task: Visualize magnitude and phase responses

Frequency response output of Design Filter live task

[フィルター応答の表示] セクションから Filter information を選択して、設計したフィルターの詳細をさらに表示することもできます。

Filter response options in Design Filter live task

Output code in Design Filter live task: Get filter information

Filter information output of Design Filter live task

ecg60Hz をワークスペースに読み込みます。MAT ファイルには、ノイズが追加されている元の ECG 信号 (ecg60) と、フィルター処理された信号 (ecgFilt) が含まれます。両方の信号をプロットしてフィルター結果を可視化します。

load ecg60Hz
t = 0:1/fs:(length(ecg60)-1)/fs;
plot(t,[ecg60 ecgFilt])
legend(["Original";"Filtered"])

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Original, Filtered.

パラメーター

すべて展開する

フィルター応答タイプとして、以下のいずれかを選択します。

FIR 仕様

応答アイコン説明
ローパス FIR ローパス FIR フィルター
Highpass FIR ハイパス FIR フィルター
Bandpass FIR バンドパス FIR フィルター
Bandstop FIR バンドストップ FIR フィルター
Differentiator FIR 微分器 FIR フィルター
Hilbert FIR ヒルベルト FIR フィルター

IIR 仕様

応答アイコン説明
Lowpass IIR ローパス IIR フィルター
Highpass IIR ハイパス IIR フィルター
Bandpass IIR バンドパス IIR フィルター
Bandstop IIR バンドストップ IIR フィルター

詳細については、resp を参照してください。

正規化周波数を使用してフィルターを設計するか、サンプル レートをヘルツ単位で指定します。

詳細については、サンプル レートを参照してください。

最小次数フィルターを設計するか、フィルター次数を指定します。一部の応答では最小次数設計を使用できないことがあり、その場合はフィルター次数の値を指定する必要があります。

詳細については、フィルター次数を参照してください。

設計したフィルターが希望の動作を示す周波数を指定します。使用可能なオプションは、フィルター応答タイプとフィルター次数によって異なります。

詳細については、周波数制約を参照してください。

特定の周波数範囲におけるフィルター振幅応答の動作を選択します。使用可能なオプションは、フィルター応答タイプ、フィルター次数、周波数制約によって異なります。

詳細については、振幅の制約を参照してください。

フィルターの設計に使用されるアルゴリズムを指定します。使用可能なオプションは、フィルター応答タイプ、フィルター次数、周波数と振幅の制約によって異なります。一部の設計法では、追加で使用できるオプションが [アルゴリズム オプション] セクションにあります。

メモ

設計の一部のケースでは、モデル次数に制限があります。選択した設計法に偶数または奇数の制限があり、指定した次数が有効でない場合は、次数が 1 減らされます。

詳細については、設計法を参照してください。

フィルター応答タイプとして、以下のいずれかを選択します。

  • 振幅と位相

  • 群遅延

  • 位相遅延

  • インパルス応答

  • ステップ応答

  • 極-零点プロット

  • フィルター情報

詳細については、Analysis を参照してください。

ヒント

  • タスク ウィンドウの右上隅にある [自動実行] チェックボックスをオンまたはオフにすることで、自動実行オプションを有効または無効にできます。自動実行を有効にすると、変更を加えたときに、タスクを含む現在のセクションが自動的に実行されます。

参照

[1] Moody, G.B., and R.G. Mark. "The Impact of the MIT-BIH Arrhythmia Database". IEEE Eng in Med and Biol 20(3):45-50 (May-June 2001): 45-50.

バージョン履歴

R2021b で導入

すべて展開する