1. 概要
今度はバンドパスフィルターを試す。係数は前回と同じく、山口晶大, (2006), 『はじめてのDSP活用大全』, CQ出版, pp.155-160を参考にして簡易的に計算した。中心周波数は5 kHzにした。
タップ数は16、係数は16ビット長(signed
)、サンプリング周波数は40 kHz。
2. 簡易バンドパスフィルターのためのVHDL
下のVHDLをコンパイルしてMAX10 FPGAに書き込む。
ファイル一式: https://github.com/ti-nspire/VHDL_for_Quartus_Prime/tree/main/fir_filter_experiment_band_pass_simple
係数は、トップレベルエンティティfir_filter_experiment.vhd
の下の部分に記述する。
constant coeffs_list : coefficient_array := (
/*
0, sin( pi/4), 1, sin( pi/4),
0, sin(-pi/4), -1, sin(-pi/4),
0, sin( pi/4), 1, sin( pi/4),
0, sin(-pi/4), -1, sin(-pi/4),
↑これを下のようにsigned 16ビットに整数化する。
*/
16b"0",16x"5A82",16x"7FFF",16x"5A82",
16b"0",16x"A57E",16x"8001",16x"A57E",
16b"0",16x"5A82",16x"7FFF",16x"5A82",
16b"0",16x"A57E",16x"8001",16x"A57E"
);
-- 計算結果に必要なビット数はceil(log2(3 * (1023 * (0x5A82 + 0x7FFF + 0x5A82))))
constant BITS_NEEDED : natural := 28;
3. 全体の接続図
このときと同じ。
4. 実行結果
ファンクションジェネレーターから正弦波を入力して出力の周波数特性を見てみる。5 kHzを中心とするバンドパスになっている。