フィルターの必要条件と仕様
フィルター設計とは、特定のフィルター処理の必要要件を満たすフィルター係数を作成するプロセスのことです。フィルターの実装では、特定のフィルター構造を選択して、これらの係数に適用します。設計と実装の両方が行われてはじめて、データをフィルターできます。本章では、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 つの方法では、butter や firpm のような関数を使用してフィルターを実装します。これらすべての標準的なフィルター設計関数は、正規化された周波数で機能します。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')

参考
butter | designfilt | filter