FIRフィルタでサンプルレート変換

by K.I
2017/01/16〜2017/01/31

Index


概要

きっかけ


[top]

DSPlinks

DSPlinksの使い方


1機会があれば弄ってみたいな〜。
2DSPlinksで計算可能なタップ数は最大400らしい。
3基本的にはタップ数から減衰率が決まるが、減衰率からタップ数を決めたい場合に設定して、TapCountEstimationするようだ。
4設定しない場合は、係数は浮動小数点になる。

[top]

FIRフィルタ

FIRフィルタのプログラム

FIRプログラムの仕様

動作確認

カットオフ部分の拡大

係数ビット幅を広げる

インパルス応答の表示


5かなり適当に読んでるので、フォーマットが変わると読めなくなるかも。
6単に、2^(ビット幅ー1)を掛けてから、係数を整数化しているだけなので、まぁ目安みたいなもの。
7DSPlinksの係数が32bitなので、それ以上は無意味。
864bit環境のgccによるコンパイルを前提としている。longが64bit、intが32bitであることを確認しておくこと。
9なにより擬似ホワイトノイズ生成に時間が掛かりすぎる。

[top]

サンプルレート変換

タップ数

元の周波数 処理 変換後の周波数 周波数間隔 FIRタップ数
48000 Up7 336000 20000-28000 308
336000 Down5 67200
67200 Up7 470400 20000-47200 126
470400 Down4 117600
117600 Up3 352800 20000-97600 30
352800 Down8 44100

係数を求める


10少なくとも、DSPLinksの計算できる最大タップ数400を超えてしまう。
11というか前段のアップサンプリング後のフィルタがあるので。
121段目は、FPGAマガジンの記事のままだけど。

[top]

サンプルレート変換してみる

1段目

2段目

3段目

サンプルレートコンバータのインパルス応答

曲を変換してみる


13CICフィルタより速いけど、これはPCで計算しているからというか、自分のCICプログラムの問題で、実際はCICフィルタの方が簡単な回路なので速いはず。
14まぁ、悪くはなっていない。むしろ良くなったように聞こえなくもない。音量の所為かもだけど。
15自分は、そもそも高音が再生されていないことに、しばらく気がつかずにいました。

[top]

まとめ


[top] [プログラムの部屋に戻る]

comments powered by Disqus