読者です 読者をやめる 読者になる 読者になる

ぬうぱんの備忘録

技術系のメモとかいろいろ

作った曲一覧はこちら

フツーの DAW 上で行うゼロ位相フィルタリング

この記事は

いたって普通な DAW 上でゼロ位相フィルタリングを行う方法の紹介記事です。

フィルタとか位相とか何の話?

フィルターは EQ 全般だと思ってください。 典型的にはローパスフィルタとかハイパスフィルタとかの事を指しますが、EQ でよくあるピーキング(特定の周波数帯だけを上げ下げする)もフィルタの一種です。 以下全部、特定の周波数帯をゴニョゴニョする時のお話です。

で、位相と言うのはココでは音の遅れの事を指します。 ただ、遅れと言っても「波形が300ミリ秒遅れる」みたいな話ではなくて「波形が崩れる」という話です。

位相とか波形が崩れるとか何言ってんの?

まず、位相というのは「一定周期で繰り返すような音」の「遅れ」を「ディグリー(度)」で表したものです。 0 [deg] なら遅れなし、180 [deg] なら波形のちょうど半分だけズレる、360 [deg] なら一周まわって遅れてないように見える、って感じです。 今言ったのは「波形全体がまるごと XXX [deg] 分だけ遅れた」時の事を指します。

ところで、波形に EQ をかけると、この位相の遅れは発生します。 周波数ごとに遅れ方が異なりますが。 例えば、ローパスフィルタの場合なら、カットオフ周波数よりも高い周波数の帯域は位相が(あんまり)遅れませんが、カットオフ周波数よりも低い周波数帯になると周波数の低さに比例して位相の遅れが大きくなります。 こういう、フィルターの「周波数による位相の遅れ具合」のことを位相特性とか呼んだりします。

さて、この位相特性によっては周波数帯によって音が遅れたり遅れなかったりするので、そんなことをすれば当然波形が崩れます。 こうやって、位相特性によって波形が崩れる事を位相がおかしいだの崩れるだのと言ったりします。 例えば、ある波形にローパスフィルタをかけた場合、位相が崩れていなければ、単純に元波形のピークを落として滑らかにしたような波形が出てきますが、位相が崩れると波形のピークのいちが変わります。 もっと露骨な例で言えば、純粋なノコギリ波は完全に位相が揃った状態なのですが、倍音成分の位相だけをランダマイズするとノイズみたいな波形になり(sytrus なんかの加算合成シンセだと簡単に再現出来ます)、聴感上でもなんだかノイズっぽい音になります。

結局ゼロ位相フィルタとは

なので、基本的には位相が崩れるのは(意図してなければ)あまりうれしくないわけです。 できれば位相が変化せず、振幅だけが変化するフィルタがほしいわけです。こういうフィルタの事をゼロ位相フィルタと言います。

線形位相フィルタ

ゼロ位相ではありませんが「波形の形を保ったまま波形全体が遅れる」みたいなフィルタもあります。 こいうフィルタの事を線形位相フィルタといいます。 位相特性をプロットした時に直線が出て来るので線形位相って言います。 なんで線形位相なら波形が崩れないのか? みたいな話は、実際に試してみるとたしかにそうなります(暇な人はやってみよう!)

波形全体が遅れるのなら、遅れた分を補正すればゼロ位相じゃん! っていうやり方も出来ますが、世の中の線形位相 EQ はどういうわけかカットオフがゆるいです。 特定周波数でシュッとカットオフとか苦手です。 うーん困った。

どうやってゼロ位相フィルタリングするのか

ということで本当に位相の遅れが発生しないフィルタリングの方法の紹介です。

  • 元波形を A とします
  • 波形 A に EQ を普通にかけます(波形 B)
  • 波形 B をリバースします(逆再生です、波形 C)
  • 波形 C に もっかい EQ をかけます(波形 D)
  • 波形 D をリバースします

おめでとうございます! これでゼロ位相フィルタの完成です! 原理は本当にめちゃくちゃ簡単で「位相が遅れるんなら逆再生にして同じだけ遅らせれば良いじゃない!」ってことです。

元ネタは

scipy.signa.filtfilt()関数です。 これ最初見た時全く意味がわからなかったんですが、ある日突然意図に気づきました。

弱点

  • フィルタの2回重ねがけを強要されます。
    • 注意したいのは、例えば「-12dB/Oct のローパスフィルタを2回」=「-24dB/Oct のローパスフィルタを1回」は等価ではないです。
    • 大体似たような振幅特性になるのですが等価ではないので注意が必要です。
    • このあたりの解説はリンクウィッツ・ライリーフィルタを調べるとわかります。
      • ちなみに、リンクウィッツ・ライリーフィルタは同じフィルタを2回かける手法なので、このゼロ位相フィルタリングと相性が良いです。
      • そしてリンクウィッツ・ライリーフィルタはクロスオーバーに使われます。
      • つまり、位相を崩さずに、キレの良いマルチバンド処理ができます
  • リアルタイム処理は出来ません
    • 波形をリバース出来ないといけないので、録音済みの波形にしか適用出来ません。
  • 因果関係が崩れます
    • 例えば、スネアの音にこの方法を適用すると、なりはじめの前の無音部分に影響が発生します
    • つまり、未来の音が過去に影響を与えてしまいます!
  • 単純にめんどくさい
    • EQかけてリバースして…なんてぶっちゃけイチイチやってられない…

感想

こんな簡単なことにも気付かなかったなんて(KNN)

Markdown で書けるらしいっすね

たとえば

こんな感じに書ける。 連続する行は一行にまとめられる。 おのれアルファベット圏。

一行離せば改行される。

これはトップレベルの見出しで

これは一個深いレベルの見出しです

はてな記法で最高レベルの見出し使うと別記事扱いされた気がしますね?

レベル3

レベル4

見出しのレベルの違いわかりづらくね? CSS でカスタマイズしろってことか?

箇条書き

  • たとえば
  • こんなふううに
  • 箇条書き
  • ブラウザ上だと
    • タブ入力出来ないし
    • vscode とかで編集するのが前提かも

リンクだって貼れる

markdown 標準

ぬうぱんの備忘録

はてな記法も使える…?

nu-pan.hatenablog.com

センタリングは当然 html タグの div を使う

LaTeX の数式は?

<pre> [tex:{ y = ax2 + b2 }] </pre>

{
y = ax^2 + b^2
}

vscode 拡張の markdown tex 記法と互換性ないし type 数多くてしんどい。 $ 記号でくくりたい。

そのほか

markdown で使える記法ならなんでも使えそう

まとめ

tex の数式以外はまぁ満足。

FL 関連の最小分解能のすっごい雑なメモ

この記事は

FLとか付属のシンセとかで目盛り1個がどのくらいの長さになるのか? のお話です。
最近、音の長さの微調整ってめっちゃ大事じゃね? ってことに気づいてアレコレやってるんですけど、
作業のたびに大事な数字を忘れるので自分用にメモ。

何がどう大事なのか? みたいな話は追々しましょう(多分)

ノート打ち込む時

Snap to grid を (none) にした時の最小目盛り1個で 1/128 になる。

Sytrus とか harmor とかのエンベロープ書く時

デフォルトだと最小目盛り1個で 1/16 になる。
なので、ATT DEC REL のスケーリング系ノブを 12.5%(=1/8)に合わせれば、最小目盛り1個で 1/128 になる。
6.25% にすれば 1/256 になる。

slicex のエンベロープ書く時

ATT DEC REL のスケーリング系ノブを 12.5% に合わせた時、最小メモリ5個で 1/256 になる。
25% に合わせれば 1/128 になる。
コイツだけ分解能が妙なことになってるので注意。

AMM3

ヘロイン! 神ってる!

お ま た せ


f:id:NU_Pan:20170108161409p:plain

続きを読む

Youtube チャンネル作りました

しばらくは権利的にホワイトな曲だけ上げようかなぁって感じです。
Youtube はバンド演奏ですら音声止められますからね…。

何かのキーを押すたびに「ゲームバーを開きますか?」が出てきて死ぬほどイライラした話

この記事は

windows10 で「ゲームバーを開きますか」とかいう表示が突然出るようになってどのアプリでも作業が困難になったので、その解決方法についてです。
本当に MS は何をしてくれてるんだ。

続きを読む

2016 年のDTM的な成果を振り返る

はい、ということでね

2016 も残りわずかとなりまして、今年にもうこれ以上ね、投稿する予定もありませんのでね、えー、今年のね、活動を振り返ろうかなと、おもうわけなんですけども! はい。

続きを読む