FIRフィルターチャンネルデバイダの作成【10】FIRフィルター実装(フィルター係数計算)
マルチアンプシステム向け、FIRフィルター搭載チャンネルデバイダー(チャンデバ)自作に関連する記事の一覧はこちら!
今回は、FIRフィルターを実装してみましょう。
前回までで、
こんな感じで、まったく何の処理もしないDSPプログラミンを行いました。
今回は、これにFIRフィルターを搭載していきます。
FIRフィルターの準備
まずは、FIRフィルター係数を準備しないといけません。
ここでは、ここの記事で紹介した、rePhaseを使っていきます。
このページの上記のリンクからダウンロード、インストールをしてください。
そして起動してみましょう!
そうすると、
こんな画面がでるはずです。
フィルタ係数の作成
早速、フィルタ係数を作成していきましょう。
とはいっても、いきなりマニュアルで・・・はムヅカシイので、、、
まずは、左半分から、Linear-Phase Filters、を選択して、目指すフィルター形状を作成します。
shapeの部分で、いろいろなフィルターが作成できます。おなじみの、Linkwits-Rileyとかもありますね。
まずはウーハーとして急激なフィルターを目指し、Reject high、96db/oct、800Hzで作成してみます。
かなり、急激な減衰となります。
ちなみに、Linkwits-Riley 48db/oct(一般的なチャンネルデバイダーでも急激な方) だと、
こんな感じ。だいぶ減衰の仕方とか違いますね。
さて、次に実際のフィルター係数を作成していきます。
今回は以下のようにしてみました。設定多いですが、そんなに面倒ではないはずです。
タップ数(taps):2000
窓関数(windowing):hann
サンプリング周波数(rate):96000
出力フォーマット(format):テキスト形式
ファイル名(filename):LOW
出力場所(directory):C:¥fir
これらを設定して、generate、ボタンを押しましょう。
指定されたフォルダに、LOW.txt、というファイルが生成されているはずです。
ファイルの中身を見てみると、
こんな感じの少数が延々と(今回は2000行=2000taps)並んでいるはずです。
FIRのtap数は基本は奇数なので、1999とかが本来あるべきですが、ファイルの内容を確認すると先頭に0が1個余計に入っているだけで、実際には無視してもDSPの1サイクルが無駄に使われるだけ、、、というオチですので、見やすい2000とかの数字でもよいかと思います。
また、rePheseのメイン画面では、
こんな感じで、赤い線で、作成したFIRフィルター係数の特性が表示されています。
ほぼほぼ、元の青い線と同じようになっているはずです。点線は、位相となり、フィルターがかかっている領域においては位相ズレはしていない事がわかります。
あくまでも音声データとして位相ズレしていないという事で、実際にスピーカーで出力するとユニットの特性に応じで位相はズレていきます。
この青い線と、赤い線、をどこまで近づけるかとか、そもそも青い線の基準となるフィルターをどのように設計するかは、各自の好みとなるかと思いますので、先に記載した、
タップ数(taps):2000
窓関数(windowing):hann
このあたりをいろいろいじってみると、どんな変化があるのか分かるかと思いますので、いろいろいじってみてください!
FIRフィルターは、かなり自由度高くフィルター設計ができ、かつ位相ずれが発生しない、というメリットが大きくあることがおわかりになられたかと思います。
次回は、実際にDSPに組み込んでいきます。
![にほんブログ村 音楽ブログへ](https://b.blogmura.com/music/88_31.gif)
にほんブログ村
![にほんブログ村 その他趣味ブログへ](https://b.blogmura.com/taste/88_31.gif)
にほんブログ村