« EdgeTech+2023に行ってきました | トップページ | X線3D CTスキャナを買いました »

2023.11.19

Cosmo-Z MiniにFIRフィルタを実装

あるお客様がCosmo-Z Miniで、波形データが流れるAXI StreamバスにFIRを実装したところ、カクカクしていてランダムな波形が出てきたという連絡がありました。

実際にやってみるとたしかにランダムでカクカクな波形が出てきます。

Noisy

その原因なのですが、お客様が使っていた係数でFIRフィルタを作ると出力が36bitになるのですが、そのまま使うと下位16bitだけが接続されてしまうため、このようなぐちゃぐちゃな波形になっていたようです。

XILILNXのFIRコアはデフォルトでは入出力のビット幅が異なるので、綺麗に接続するには上位16bitを取り出すことを明示的に指定するか、
下のダイアログのようにFull PrecisionからTruncated LSBを選んで16bitだけを取り出すようにします。

Trunc

なお、AXISのバス幅は8bit単位なので、計算の精度が36bit必要ということになっても40bitで出力されます。

それから、波形がカクカクしているのですが、おそらくFIRのclocksで示した部分を設定していないため、デフォルトのまま300MHzの速度で0.01MHzの信号を計算するという緩い仕様で作られてしまっています。

Clocks

これが実際にはそこまで緩くはならず、5クロックで1つの値を計算するという程度の速度で作られているため、カクカクした波形になってしまっていたようです。

スペクトラムを見ると、fs/2までにゼロになる点が4つほど見えています。だから5クロックで1つの計算なのです。

Spec_20240101185601

FIRフィルタのクロック設定を変えて、1クロックで1つの値を計算するようにしたところ、下の図のようにきれいな(茶色)スペクトラムとなりました。FIRなし(赤)のチャネルのノイズフロアを下回っていることが分かります。

Ch1_filter

 

|

« EdgeTech+2023に行ってきました | トップページ | X線3D CTスキャナを買いました »

コメント

コメントを書く



(ウェブ上には掲載しません)




« EdgeTech+2023に行ってきました | トップページ | X線3D CTスキャナを買いました »