メインコンテンツ

フィルターの必要条件と仕様

フィルター設計とは、特定のフィルター処理の必要要件を満たすフィルター係数を作成するプロセスのことです。フィルターの実装では、特定のフィルター構造を選択して、これらの係数に適用します。設計と実装の両方が行われてはじめて、データをフィルターできます。本章では、Signal Processing Toolbox™ ソフトウェアでのフィルターの設計と実装について説明します。

フィルター設計の目的は、データ シーケンスに周波数に依存した変更を加えることにあります。必要条件の例としては、1000 Hz でサンプリングしたデータ シーケンスから 200 Hz を超えるノイズを除去することが考えられます。より厳密な仕様では、通過帯域リップルの最大変動量、阻止帯域の減衰量、または、遷移幅が条件となる場合もあります。また、非常に厳密な仕様では、最小のフィルター次数で性能的な目標を達成することが求められたり、任意の振幅の形状が要求されたり、あるいは FIR フィルターが必要になったりすることも考えられます。フィルター設計法は主として、性能をどのように設定するかによって異なります。

フィルターを設計するため、Signal Processing Toolbox ソフトウェアでは 2 つの方法を提供しています。最初の方法は関数 designfilt を使用します。例として、200 Hz の周波数で 3 dB の 5 次ローパス バタワース フィルターを設計し、実装します。サンプル レートは 1 kHz だと仮定します。フィルターを入力データに適用します。

Fs = 1000;
fc = 200;
time = 0:1/Fs:1;
x = cos(2*pi*60*time)+sin(2*pi*120*time)+randn(size(time));

d = designfilt('lowpassiir','FilterOrder',5, ...
    'HalfPowerFrequency',fc,'DesignMethod','butter', ...
    'SampleRate',Fs);
yd = filter(d,x);

もう 1 つの方法では、butterfirpm のような関数を使用してフィルターを実装します。これらすべての標準的なフィルター設計関数は、正規化された周波数で機能します。Hz の周波数仕様を正規化周波数に変換して、これらの関数を使用します。Signal Processing Toolbox ソフトウェアでは、正規化周波数を、閉区間 [0, 1] 内の値をとるものと定義します。ここで 1 は π ラジアン/サンプル単位を表します。たとえば、π/2 ラジアン/サンプル単位の正規化周波数を指定するには、0.5 と入力します。

Hz から正規化周波数に変換するには、Hz の周波数に 2 を乗算し、サンプリング周波数で除算します。たとえば、butter を使用して、200 Hz の周波数で 3 dB の 5 次ローパス バタワース フィルターを設計します。

Wn = fc/(Fs/2);

[b,a] = butter(5,Wn,'low');
yb = filter(b,a,x);

2 つのフィルター処理された信号をプロットします。

plot(time,yd,time,yb)
legend('designfilt','butter')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent designfilt, butter.

参考

| |