- 締切済み
FIRフィルタ 零点から係数を求める。
FIRフィルタの係数の求め方がわかりません。 測定した信号から特定次数の高調波をカットするフィルタを 設計したいのですが、 どのように計算したらよいのかわからず、困っています。 ちなみに、タップ数は10と決まっています。 カットしたい高調波は 1次調波・3次調波・5次調波・7次調波・・・ という具合に、4~6こ程度あるので、単にBEFやBPFでは思ったような 特性が得られません。 また、Re-Im軸の単位円上から零点としたいn数の調波の座標(an,bn)を 読み取り、 (x-a0-b0i)(x-a+Bi)(x-a1-b1i)… という式に代入し、xの0~2n+1乗までの係数を求めるという方法も あるようなのですが、こちらもよい特性は得られませんでした。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- ICE_FALCON
- ベストアンサー率56% (63/111)
#4です。 間違った。 > 1.0*z^-4 - (c0 + c1*z^-1 + c2*z^-1 + ... + c8*z^8) ↓が正解 1.0*z^-4 - (c0 + c1*z^-1 + c2*z^-2 + ... + c8*z^-8)
- ICE_FALCON
- ベストアンサー率56% (63/111)
#1です。 > 現在設計したいフィルタは、多数の高調波を含んだ信号から、 > 任意の高調波のみを取り出すというもです。 それなら別の方法があります。 例えば9タップで「取り出したい高調波だけををカットする」 対称型のフィルタを作成します。 対称型のフィルタの遅延はわかりますよね? 「高調波をカットしていない」元の信号を上のフィルタ と同じだけ遅延させます。 遅延させた信号からフィルタ出力を引き算します。 つまり 1.0*z^-4 - (c0 + c1*z^-1 + c2*z^-1 + ... + c8*z^8) [c0,... c8]は取り出したい周波数ごとに変更。
>測定した信号から特定次数の高調波をカット ..... 「測定した信号」の基本波周波数を可変し、かつ「特定次数も可変」なのですか? だとすると、適応フィルタの類いになりそう。 しかし、そんな「仕様」で良いのか? から再考せねばならないみたいですね。
「高調波カット」なら、これの「フィードフォワード型」などが向いてそうです。 ↓ http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%A0%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF >コムフィルタ (comb filter)
- ICE_FALCON
- ベストアンサー率56% (63/111)
やったことはないけど、 例えば、 周波数A、周波数Bがゼロ点となるFIRフィルタを 適当な次数で作っておいて、 コンボリューションした後、 窓関数を使って、タップ数を10に合わせれば、 比較的簡単にできると思いますよ。
補足
ご回答ありがとうございます。 早速試してみましたが、1つの零点をもつフィルタを複数合わせた後に タップ数を10にすると、特性が悪くなってしまい、カットしたい調波が それほど除去できなくなってしまいました。 タップ数が増やせれば解決できそうなのですが、ハード的にタップ数の変更が 不可能なので・・・。 ただ、零点が1つのFIRフィルタの次数について、まだ検討の余地が ありそうなので、もう少し試してみます。
補足
ご回答ありがとうございます。 コムフィルタは、カットしたい高調波が等間隔になってれば、いけないですよね? 説明が不足している部分があったようなので、付け足します。 現在設計したいフィルタは、多数の高調波を含んだ信号から、 任意のの高調波のみを取り出すというもです。 ですので、カットしたい高調波が、(例えば、3次調波を取り出すとすると) 1次調波(基本波)・5次調波・7次調波・9次調波 のように等間隔に並んではいないんす。