プロが教えるわが家の防犯対策術!

お世話になっております。

掲題の件ですが、
現在VHDLを使ってFIRフィルタを設計しておりますがbit演算に困っています。
FIRはxilinxのcoreを使っており、係数の設計はMATLABのFDATOOLを使っています。
フィルタを通すデータビット幅は14bit(-4096~4095)、
フィルタ係数も14bit、
フィルタ出力も14bitを考えています。

MATLABでフィルタを設計し、はきだされる係数は1未満の小数点でした。
データ入力(14bit)×係数(14bit)=データ出力28bit→丸めて14bit
となりますが、1未満の係数をどうやって14bitに表すか、
28bitをどうやって丸めるか悩んでいます。

係数をデータ入力に揃える為に、係数に4096を掛けて、小数点以下を四捨五入して丸めて、その整数部を14bitに直してデータ入力に掛けて、
データ出力28bitは1/4096して12bitビットシフトして、マイナスもあるため先頭bitを移動すれば宜しいのでしょうか?

よろしくお願いします。

A 回答 (1件)

>係数をデータ入力に揃える為に、係数に4096を掛けて、小数点以下を四捨五入して丸めて、その整数部を14bitに直してデータ入力に掛けて、


>データ出力28bitは1/4096して12bitビットシフトして、マイナスもあるため先頭bitを移動すれば宜しいのでしょうか?

それで良いと思います。
ただ係数はわざわざデータ入力にそろえる必要は無いので、
係数=符号1bit+小数部13bit ⇒ 最後に13bit右シフト で良いのではないでしょうか?
僅かですが精度も上がりますし。
(係数用ROM+乗算器MULT18X18S で組むなら係数を18bitにしてもっと精度を上げても良さそうな気はしますが・・・)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!