0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

VHDLによる簡単なディジタルフィルターの実験 / その4 / FIRフィルター / 移動平均

0
Last updated at Posted at 2022-01-09

1. 概要

前回まででやっとディジタルフィルターの実験をする準備が整った。前回素通りさせた経路にFIRフィルターモジュールを挟み込む。

FIRフィルターモジュールは、Digi-Key TechForumにあったこれをほぼそのまま使う。計算結果がオーバーフローしないようビット拡張したあと定義どおりに積和演算をしているだけである。

まずはすべてのタップを同じ係数で重み付けして移動平均をとってみる。一種のローパスフィルターである。周波数特性が見たいだけなので、係数は全タップとも同じであればとりあえず何でもよい。タップ数は16、係数は16ビット長(signed)、サンプリング周波数は40 kHzにした。

2. 移動平均のためのVHDL

下のVHDLをコンパイルしてMAX10 FPGAに書き込む。

ファイル一式: https://github.com/ti-nspire/VHDL_for_Quartus_Prime/tree/main/fir_filter_experiment_moving_average

係数は、トップレベルエンティティfir_filter_experiment.vhdの下の部分に記述する。

constant coeffs_list : coefficient_array := (
	16b"1",16b"1",16b"1",16b"1",
	16b"1",16b"1",16b"1",16b"1",
	16b"1",16b"1",16b"1",16b"1",
	16b"1",16b"1",16b"1",16b"1"
);
-- 係数は全部1にしたので乗算でビット幅は変化しない。
-- 計算結果に必要なビット数はceil(log2((10ビット最大値1023) * (タップ数16))) = 14
constant BITS_NEEDED : natural := 14;

↓ こういう回路がFPGAの中に作られる。
image.png

3. 全体の接続図

このときと同じ。

4. 実行結果

ファンクションジェネレーターから正弦波を入力して出力の周波数特性を見てみる。単なる移動平均なので帯域の制御はできないが一往ローパスの特性を示してはいる。
scope_58.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?