MATLAB は次のように述べています。「関数 fir2 は、ウィンドウ化された FIR フィルターも設計しますが、任意の形状の区分的線形周波数応答を使用します。これは、標準のローパス、ハイパス、バンドパス、およびバンドストップ構成でフィルターのみを設計する fir1 とは対照的です。」
fir1 コマンドで fir フィルター係数を見つけ、次のように freqz を使用して周波数応答を取得します。
b1=fir1(M,wn,'high') % b1:highpass FIR filter coefficients
hd=freqz(b1,1,w) %FIR filter frequency responses with respect to b1
次に、この周波数応答 (hd) を次のように fir2 に渡します。
b2=fir2(M,w,hd) % get FIR filter coefficient from same frequency samples(w) and frequency responses(hd)
MATLAB によれば、b1 は b2 と等しくなければなりませんが、次数 13 の FIR フィルターの場合、次
の結果になります。
b1=0.0042 0.0063 -0.0000 -0.0403 -0.1221 -0.2103 0.7470 -0.2103 -0.1221 -0.0403 -0.0000 0.0063 0.0042
b2=0.0017 -0.0044 0.0180 -0.0937 0.2075 -0.1097 -0.0012 0.0105 -0.0081 0.0050 -0.0025 0.0010 -0.0005
b1 は b2 と等しくありません。これは理論的には正しいはずです。何が問題なのかわかりません。