Main Content

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

データのフィルター処理

差分方程式のフィルター処理

フィルターは、データ内の高周波変動を平滑化したり、データから特定の周波数の周期的なトレンドを除去したりできるデータ処理技術です。MATLAB® では、関数 filter は、タップ付遅延線形フィルターを表す次の差分方程式に従って、データ x のベクトルをフィルター処理します。

a(1)y(n)=b(1)x(n)+b(2)x(n1)++b(Nb)x(nNb+1)                 a(2)y(n1)a(Na)y(nNa+1)

この式で a および b は、フィルターの係数のベクトルで、Na はフィードバック フィルターの次数、Nb はフィードフォワード フィルターの次数です。n は、x の現在の要素のインデックスです。出力 y(n) は、x および y の現在の要素と前の要素の線形結合です。

関数 filter は、指定された係数ベクトル a と b を使用して、入力データ x をフィルター処理します。フィルターを表現する差分方程式の詳細については、[1]を参照してください。

交通量データの移動平均フィルター

関数 filter は、一般的なデータ平滑化手法である移動平均フィルターを実装するための 1 つの方法です。

次の差分方程式は、時間依存データを平均するフィルターを表しており、現在の時間から 3 時間前までのデータを対象としています。

y(n)=14x(n)+14x(n-1)+14x(n-2)+14x(n-3)

時間経過に沿った交通量を表すデータをインポートし、最初の列の車両数をベクトル x に代入します。

load count.dat
x = count(:,1);

フィルターの係数ベクトルを作成します。

a = 1;
b = [1/4 1/4 1/4 1/4];

データの 4 時間の移動平均を計算し、元のデータとフィルター処理されたデータの両方をプロットします。

y = filter(b,a,x);

t = 1:length(x);
plot(t,x,'--',t,y,'-')
legend('Original Data','Filtered Data')

データの振幅の変更

この例では、伝達関数を適用してデータのベクトルの振幅を変更する方法を説明します。

デジタル信号処理では、フィルターが伝達関数で表現されることがよくあります。差分方程式

a(1)y(n)=b(1)x(n)+b(2)x(n-1)+...+b(Nb)x(n-Nb+1)-a(2)y(n-1)-...-a(Na)y(n-Na+1)

の Z 変換は次の伝達関数になります。

Y(z)=H(z-1)X(z)=b(1)+b(2)z-1+...+b(Nb)z-Nb+1a(1)+a(2)z-1+...+a(Na)z-Na+1X(z)

伝達関数

H(z-1)=b(z-1)a(z-1)=2+3z-11+0.2z-1

を使用して、count.dat のデータの振幅を変更します。

データを読み込み、最初の列をベクトル x に代入します。

load count.dat
x = count(:,1);

伝達関数 H(z-1) に従って、フィルターの係数ベクトルを作成します。

a = [1 0.2];
b = [2 3];

フィルター処理されたデータを計算し、元のデータとフィルター処理されたデータの両方をプロットします。このフィルターは、主に元のデータの振幅を変更します。

y = filter(b,a,x);

t = 1:length(x);
plot(t,x,'--',t,y,'-')
legend('Original Data','Filtered Data')

参照

[1] Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck. Discrete-Time Signal Processing. Upper Saddle River, NJ: Prentice-Hall, 1999.

参考

| | | |

関連するトピック