Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

fir1

ウィンドウベースの FIR フィルターの設計

説明

b = fir1(n,Wn) はハミング ウィンドウを使用し、線形位相をもつ n 次のローパス、バンドパスまたはマルチバンド FIR フィルターを設計します。フィルター タイプは、Wn の要素数によって異なります。

b = fir1(n,Wn,ftype)ftype の値および Wn の要素数に応じてローパス、ハイパス、バンドパス、バンドストップまたはマルチバンド フィルターを設計します。

b = fir1(___,window) は、window で指定したベクトルと前の構文の任意の引数を使用してフィルターを設計します。

b = fir1(___,scaleopt) では、フィルターの振幅応答が正規化されているかどうかを追加で指定します。

メモ: 任意の周波数応答をもつウィンドウを適用したフィルターを設計するには、fir2 を使用します。

すべて折りたたむ

通過帯域 0.35πω0.65π ラジアン/サンプルをもつ 48 次の FIR バンドパス フィルターを設計します。その振幅応答と位相応答を可視化します。

b = fir1(48,[0.35 0.65]);
freqz(b,1,512)

Figure contains 2 axes objects. Axes object 1 with title Phase, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Phase (degrees) contains an object of type line. Axes object 2 with title Magnitude, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Magnitude (dB) contains an object of type line.

chirp.mat を読み込みます。ファイルに含まれている信号 y のパワーの大部分は、Fs/4 (ナイキスト周波数の半分) を超えています。サンプル レートは 8192 Hz です。

34 次の FIR ハイパス フィルターを、Fs/4 より低い信号成分を減衰させるように設計します。カットオフ周波数 0.48、30 dB のリップルをもつチェビシェフ ウィンドウを使用します。

load chirp

t = (0:length(y)-1)/Fs;

bhi = fir1(34,0.48,'high',chebwin(35,30));
freqz(bhi,1)

信号をフィルター処理します。元の信号とハイパス フィルター処理された信号を表示します。両方のプロットに同じ y 軸のスケールを使用します。

outhi = filter(bhi,1,y);

subplot(2,1,1)
plot(t,y)
title('Original Signal')
ys = ylim;

subplot(2,1,2)
plot(t,outhi)
title('Highpass Filtered Signal')
xlabel('Time (s)')
ylim(ys)

同じ仕様でローパス フィルターを設計します。信号をフィルター処理し、結果を元の信号と比較します。両方のプロットに同じ y 軸のスケールを使用します。

blo = fir1(34,0.48,chebwin(35,30));

outlo = filter(blo,1,y);

subplot(2,1,1)
plot(t,y)
title('Original Signal')
ys = ylim;

subplot(2,1,2)
plot(t,outlo)
title('Lowpass Filtered Signal')
xlabel('Time (s)')
ylim(ys)

0.4π ラジアン/サンプル未満および 0.6π0.9π ラジアン/サンプルの正規化周波数を減衰させる 46 次の FIR フィルターを設計します。これを bM とします。その周波数応答を計算します。

ord = 46;

low = 0.4;
bnd = [0.6 0.9];

bM = fir1(ord,[low bnd]);
[hbM,f] = freqz(bM,1);

bM を再設計し、減衰させていた帯域を通し、他の周波数を停止させるようにします。この新しいフィルターを bW とします。フィルターの周波数応答を表示します。

bW = fir1(ord,[low bnd],"DC-1");

[hbW,~] = freqz(bW,1);
plot(f/pi,mag2db(abs(hbM)),f/pi,mag2db(abs(hbW)))
legend("bM","bW",Location="best")
ylim([-75 5])
grid

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent bM, bW.

ハン ウィンドウを使用して bM を再設計します。("DC-0" はオプションです。)ハミングによる設計とハンによる設計の振幅応答を比較します。

hM = fir1(ord,[low bnd],'DC-0',hann(ord+1));

hhM = freqz(hM,1);
plot(f/pi,mag2db(abs(hbM)),f/pi,mag2db(abs(hhM)))
legend("Hamming","Hann",Location="northwest")
ylim([-75 5])
grid

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Hamming, Hann.

テューキー ウィンドウを使用して bW を再設計します。ハミングによる設計とテューキーによる設計の振幅応答を比較します。

tW = fir1(ord,[low bnd],'DC-1',tukeywin(ord+1));

htW = freqz(tW,1);
plot(f/pi,mag2db(abs(hbW)),f/pi,mag2db(abs(htW)))
legend("Hamming","Tukey",Location="best")
ylim([-75 5])
grid

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Hamming, Tukey.

入力引数

すべて折りたたむ

フィルター次数。整数スカラーで指定します。

ハイパスおよびバンドストップの構成に対し、fir1 は常に偶数のフィルター次数を使用します。奇数の次数の対称 FIR フィルターはナイキスト周波数で 0 ゲインをもたなければならないため、次数は偶数でなければなりません。ハイパスまたはバンドストップ フィルターに奇数の n を指定した場合、fir1n を 1 だけ増やします。

データ型: double

周波数制約。スカラー、2 要素ベクトルまたは多要素ベクトルとして指定します。Wn のすべての要素は厳密に 0 より大きく、かつ厳密に 1 より小さくなければなりません。ここで、1 はナイキスト周波数に相当し、0 < Wn < 1.ナイキスト周波数はサンプル レートの 1/2、つまり π ラジアン/サンプルです。

  • Wn がスカラーの場合、fir1 は、カットオフ周波数 Wn をもつローパス フィルターまたはハイパス フィルターを設計します。カットオフ周波数は、フィルターの正規化ゲインが –6 dB となる周波数です。

  • Wn が 2 要素ベクトル [w1 w2] (ここで、w1 < w2) の場合、fir1 は低域カットオフ周波数 w1 および高域カットオフ周波数 w2 をもつバンドパス フィルターまたはバンドストップ フィルターを設計します。

  • Wn が多要素ベクトル [w1 w2 ... wn] (ここで、w1 < w2 < … < wn) の場合、fir1 は帯域が 0 < ω < w1, w1 < ω < w2, …, wn < ω < 1 である n 次のマルチバンド フィルターを返します。

データ型: double

フィルターの種類。次のいずれかとして指定します。

  • 'low' はカットオフ周波数 Wn をもつローパス フィルターを指定します。'low' はスカラー Wn の既定値です。

  • 'high' はカットオフ周波数 Wn をもつハイパス フィルターを指定します。

  • Wn が 2 要素ベクトルの場合、'bandpass' はバンドパス フィルターを指定します。'bandpass' は、Wn が 2 要素をもつときの既定値です。

  • Wn が 2 要素ベクトルの場合、'stop' はバンドストップ フィルターを指定します。

  • 'DC-0' は、マルチバンド フィルターの最初の帯域が阻止帯域であることを指定します。Wn に 3 つ以上の要素がある場合は 'DC-0' が既定の設定です。

  • 'DC-1' は、マルチバンド フィルターの最初の帯域が通過帯域であることを指定します。

ウィンドウ。ベクトルとして指定します。ウィンドウ ベクトルの要素数は n + 1 でなければなりません。window を指定しない場合、fir1 はハミング ウィンドウを使用します。利用可能なウィンドウのリストについては、ウィンドウを参照してください。

次数が奇数のハイパスまたはバンドストップ フィルターを設計しようとする場合、fir1 が自動的に window の長さを増やすことはありません。

例: kaiser(n+1,0.5) は、形状パラメーター 0.5 のカイザー ウィンドウを n 次のフィルターで使用するように指定します。

例: hamming(n+1) は、ウィンドウを指定しない場合と同じです。

データ型: double

正規化オプション。'scale' または 'noscale' として指定します。

  • 'scale' は、通過帯域の中心でフィルターの振幅応答が 1 (0 dB) になるように係数を正規化します。

  • 'noscale' は係数を正規化しません。

出力引数

すべて折りたたむ

フィルター係数。長さ n + 1 の行ベクトルとして返されます。係数は Z 変換変数 z の降べきの順に並べ替えられます。

B(z) = b(1) + b(2)z + … + b(n+1)z–n.

アルゴリズム

fir1 は、最小二乗近似を使用して、フィルター係数を計算し、window によりインパルス応答を平滑化します。

参照

[1] Digital Signal Processing Committee of the IEEE Acoustics, Speech, and Signal Processing Society, eds. Programs for Digital Signal Processing. New York: IEEE Press, 1979, Algorithm 5.2.

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2006a より前に導入