FIRフィルター(その3)

画像rePhaseによるFIRフィルター作成簡易マニュアルを作成しました。

 トップにも載せましたが、rePhaseを使ってminiDSPによるFIRフィルター(チャンデバ)を中心に作る上でポイントの覚えを整理してみました。FIR実装は大分先かと思っていましたが生むが易しでやってみるものですね。

 音の方も僅かですがやはりそれなりに良さそうです。自然さが感じられ、余韻も更に良く出るようになりました。ルビでもかなり良くなったと思いましたが、比較すると良く分かります。

 こうなるとスピーカユニットの特性も含めた補正もやってみたくなりますね。次回はその辺もトライしてみたいです。

追伸:当初マニュアルが見えず失礼しました。直しましたのでご覧ください。29日20時

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 1

ナイス

この記事へのコメント

関澤@池袋
2018年07月29日 20:25
 SharkDPSでのFIRフィルターのチャンデバは、長年の夢でした。
 素晴らしいです。これでパソコンとおさらば出来そうです。
ケン
2018年07月29日 21:16
 以前からFIRは良いとは思っていましたが、よいのものが無かったのですが、miniDSPは福音ですね。
 是非試してみてください。
mikami_audio
2018年07月30日 09:24
私はSHARC評価キット(EZ-KIT)でFIRチャンデバ組んで遊んでいますが、一点確認を希望します。

★帯域ごとにtap数を変えた場合、
 出音のタイミングがどの程度ずれるでしょうか?

直線位相型FIRは必ず係数列が左右対称となるため、仮に係数列1が"000010000"、係数列2が"00100"とした場合、見かけ上係数列1が2サンプル遅れて見えます。
minisharcプラグイン内部で各係数の長さに応じて自動的にゼロ詰めしてくれていたら回避できますが、直線位相でない場合は無意味なので、そのような実装はされていないと推測します。
(ユーザ側の対策は簡単で、全ch係数列のtap数を同じにすればよいだけ。)
もしお時間ありましたらご検討いただけるとありがたいです。
ケン
2018年07月30日 19:15
mikami-audioさん初めまして。

 ご質問有難うございます。問い合わせの件ですが、勿論各chタップ数が違うとディレイも異なりますね。マニュアルにも書いた様にその差分は通常のminiSHARK専用のチャンデバソフト(miniSHARC-4x8-96k)のディレイ値で補正、あわせ込んでいます。なので各chのタップ値が異なっても対応できています。
 その遅れは理由は良く分かりませんが、rePhaseでは2タップで1サンプリング、96kHzサンプリングなら実測でもそうですが、計算で分かるとおり5.2μS/Tapほどになります。

 ところでFIRフィルタ以外でディレイが調整できないというのはmikami_audioさんは専用ソフトは使われていないのでしょうか?
mikami_audio
2018年07月30日 20:47
ご回答ありがとうございます。
rephseで算出されるdelay値に応じて、(人間が)各chに適宜delayを設定する、という方法なのですね。

私はminisharcではなく、アナログデバイセズのDSP開発キット(ADSP-21489_EZKIT)を購入して自分でプログラミングしてます。
1ボードにDSPチップとCODECチップetcが実装されていて、アナログ4入力8出力。

ご存知だったら恐縮ですが、FIRのtap数が異なるとdelay値が異なるのは比較的簡単に感覚的に理解していただけると思います。

000010000 ←9tapの全帯域通過FIR係数の例
00100  ←7tapの全帯域通過FIR係数の例

下の例の係数の先頭にゼロを2個追加したら、実質同じ係数になるのは分かりますか?原理としてはコレだけです。(笑)

<字数制限のため続く>
mikami_audio
2018年07月30日 20:48
ところで"FIRフィルタ以外でディレイが調整できない"とは、私の記述のどういった部分を指していますでしょうか?
もし"直線位相でない場合は無意味"の部分だとすると、誤解を与えたかもしれません。
直線位相FIRの場合は係数列が左右対称になります(例:0123210)が、直線位相でなかったら左右対称になりません(例L0123410)。これらの係数にインパルス信号を入力すると、振幅のピークが、前者なら"3"の位置に、後者なら"4"の位置にきます。なので、同じtap数でも見かけ上delayが異なることになります。なので、機械的に自動的にdelay調整は困難になります。
000010000と00100なら、tap数の違いから機械的にゼロ追加できますよね?

ちなみに、FIRは直線位相を実現できることが大きな特徴の一つですが、それ以外も実現できます。IIRやら通常のアナログフィルタの伝達関数を、振幅/位相含めて実現できます。

すみません、ややこしい事になって。
とりあえずminisharcプラグインは自動でdelay調整するのではなく、ユーザ側が使いこなす必要があることが分かりました。
ありがとうございました。
ケン
2018年07月30日 21:00
 早速のご返事有難うございます。
 私はこの辺は初心者なので残念ながら折角の解説が良く分かっていません。まあゆっくり勉強させていただきます。
 ともかく疑問点はクリアになったようですから、良かったです。またよろしく。
mikami_audio
2018年07月30日 21:13
はい、私も素人趣味なので記述も怪しいところ満載、眉に唾して読み飛ばしていただければ、ははは。
masuda
2018年07月31日 15:58
FIR デジタル信号処理ですね。三上さんが専門家かもしれませんが、当方は苦手です.

この記事へのトラックバック