1
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?

FPGAでレート変換を実装するときの効率的な実装テクニック

Last updated at Posted at 2025-02-20

目的

最近、リサンプリング(レート変換)をFPGAに効率的に実装するテクニックを知ったので、備忘録がてらまとめておきます。
この記事は実装上の嬉しさにのみ言及しており、原理については記載しておりません。そちらについては専門書をご覧ください。

背景

ワイヤレスや、音声信号処理のアプリケーションにおいて、レート変換をしたい、というときが有るかと思います。例えば、ワイヤレスのアプリケーションにおいて、ADコンバータではサンプリング周波数が10GSPSであっても、実際に変調されたベースバンド信号のレートが低い場合、レートを下げて処理することでリソース消費量を減らしたい、といったことが有るかと思います。この時、単純に間引きをしてしまうとエイリアシングが発生してしまうので、事前にフィルタを使って高い周波数成分を取り除き、そのあと間引きを行います。

こちらの記事が分かりやすいです。
https://edn.itmedia.co.jp/edn/articles/1208/10/news093.html

このような「フィルタ」+「間引き」が一体になった処理をデシメーションといいます。
さて、このような処理を実装するにあたって、高いレート変換比が必要であるとき、フィルタのタップ数が多くなってしまい、多くのリソースを消費してしまいます。

ソリューション

このような場合、フィルタを多段に分割することで、リソース消費量を大きく減らすことが出来ます。
例えば、サンプリングのレートを1/50にする場合を考えます。
この時、1ステージで1/50とするよりも、1/5⇒1/5⇒1/2とすることで、リソース消費量を減らすことが出来ます。
Simulinkにて、Decimationというブロックがあるので、こちらを使って単純比較してみました。

  • 作ったモデルとリソース消費量の比較
    スクリーンショット 2025-02-20 152410.png

  • 単段のデシメーションフィルタ
    スクリーンショット 2025-02-20 152057.png

  • 単段のデシメーションフィルタの結果
    スクリーンショット 2025-02-20 152758.png

  • 多段のデシメーションフィルタ
    スクリーンショット 2025-02-20 152105.png

  • 多段のデシメーションフィルタの結果
    スクリーンショット 2025-02-20 152835.png

結果を見ると、なにも考えず縦に分割して繋いだだけでも、同じような特性が出ていることが分かります。

合成した結果を抜き出すと、下記の通りとなりました。

Resource Usage(1stage) Usage(Multistage)
CLB LUTs 3556 4212
CLB Registers 5866 4873
DSPs 288 80
Block RAM Tile 0 0
URAM 0 0

結果を見ると、特にDSPの消費量を大きく抑えられていることが分かりました。
一方、LUTの消費量は増大しているようです。DSPの代わりにロジックブロックが割り当たっているのかもしれません。

1
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
1
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?