デジタルオーディオあれこれ

半田ごての人。紙と鉛筆だけではちょっと。

リンギング(プリエコー)と言う虚仮にコケちゃわないように。

 今時のDACには必ず入っているオーバーサンプリングフィルターは、何故それが入っているかの理由に誤解があるし、その特性に関してもリンギング(プリエコー)

という謂れのない汚名を着せられている。たぶんデジタル嫌いの昭和前半の世代が、アンプの発振に似ている波形からそんな事を言い出したんだと思う。デジタルは数字の世界なので、リンギングというような感覚的表現は相応しくない。

 

 人の耳はほぼ100%FFTと同じ反応をするので、位相情報に意味はなくて振幅のみに反応する。例えばレコードからのリッピングデータを、スクラッチノイズ他を取って綺麗に仕上げる場合、時間軸の波形とかFFTでの位相は音質に全く影響しない。振幅情報を変えるのみで、信じられない程の音質に生まれ変わる。

 

f:id:xx3stksm:20190505185901j:plain

 この図の上の波形(L)は普通方形波と言うけれど、正確には三種類の正弦波の合成という意味しかない。何故かと言うと、見た所全く別物の下の波形(R)と上の波形は同じ音にしか聞こえない。両者は同じFFT結果なので、聞こえる音も同じという理屈。LとRは同じなので、FFTでは重なって見える。FFTを見ない限り、二つが同じ音とは想像すらできない。でも同じ。基本波の位相が45度違うだけ。

f:id:xx3stksm:20190505190720j:plain

これの上は典型的なリンギングと言われる波形。でも同じ音の下の波形をリンギングとは多分言わない。これもやっぱり、物理的には三種類の正弦波の合成と言う他仕方がない。たまたま上だけをリンギングと言ってしまうと、感覚的ではあるけれど、本質からは外れてしまうし、物事は解決しない。数字の世界のデジタルにリンギングと言う文学的表現は的外れ。文学に数式が登場しないように。

 

帯域制限していない違法な方形波を線形位相のFIRフィルターに通すと、マネーロンダリングのように違法部分をこそげ落とすので、合法に帯域制限された成分だけが残る。この場合だと、違法な6kHzの方形波が合法化されると、上のような三種類の正弦波だけが残る(40kHzぐらいのカットオフ)。波打っている事には、音として何の意味もない。違法な帯域を合法化すると、些か目立つとしても実害はない。実害があるのは、違法な振幅の場合。

f:id:xx3stksm:20190505192116j:plain

この6kHzの正弦波は、デジタル的に上が合法で下は違法。何故かと言うと、上は-3dBFSなのに下は+0.5dBFSだから。プラスと言うのは、1を超えているという意味で、デジタルではオーバーフローしてしまい表現不能音声編集ソフトは、32bitのフロートなので仮想的にちゃんと表示しているし、これを48kHzの元々のサンプリング周波数で扱う限りは、フロートでなくても扱える。但し、潜在的違法状態。

 

悪事が露見するのは、オーバーサンプリングした時。大抵のDACでは不都合が起きる。Inter Sample Peakとかトゥルーピーク と呼ばれる現象。違法帯域は、現実の音楽信号には存在しないし、あったとしても実害はない。違法振幅はほぼ全てのCDに存在して、悪事露見は程度の差はあるとしても音質劣化になる。数字的には、どえりゃーな変化となる。どうしてリンギングと言う虚仮に拘って、トゥルーピークというオーバーフローを無視するのかは不明。

 

副産物的事実として、このオーバーフローに対応しているDACは存在するし、中々評判が良いらしい。特にCD再生では。ベンチマークのDAC3であるとか、たぶんChordのような独自に1bitDSMで再生しているような機器(PSaudioというのもたぶんそう)。これまた謎だけど、ESSとかAKは、最小位相フィルターとかいうのは付けているのに、オーバーフローしないフィルターには無関心。DAC3はESSだけど、外部で補正している。

 

1bitDSM(DSD)は、構造的に振幅の制限が必ず必要になるので、アホな所に入れていないのであれば、自動的にオーバーフローはしなくなる。DAC3はかなり詳しく説明している。

https://benchmarkmedia.com/blogs/application_notes/intersample-overs-in-cd-recordings

英語だけど、グーグルの翻訳でそこそこは分かる。ロシア語だったとしても、半分は。

 

スティーリー・ダンの「two against nature」は2000年ぐらいのリリースなのに、1秒で3.7回もイッちゃうらしい。今の海苔全盛のソースならば、もっとイキまくってるはず。こういうのを聞いている人にとって、DAC3は福音になる。先の6kHzを4倍にオーバーサンプリングすると、32bit-floatならば正しく変換される。こんな按配。

f:id:xx3stksm:20190505194516j:plain

サンプリングの白い点が4倍になって、下の波形では1以上が隠れているけれどちゃんとした値になっているので、正しい。750Hz毎のスペクトルは、周波数特性を確認するため。でも現実のDACの出力は、大抵の場合は1でクリップするのでこんなんになる。

f:id:xx3stksm:20190505194838j:plain

 

上は元々が-3dBFSで合法振幅なので、問題はない。下はメチャクソ。オーバーサンプリングフィルターには何の落ち度もない。振幅が違法(+0.5dBFS)なのでこうなってしまう。pcm179xだと、実際にこんなになる。これは最大値の+3dBFSを入れているので、更にメチャクソしてる。下の青。上の黄は-3dBFSの合法振幅。

f:id:xx3stksm:20190505195244j:plain

+0.5dBFSの場合でも、1%を少し超える程度の歪が出てしまう。救いは、元が3kHzになると、もう出ないかと思う。+3dBになるのは12kHzの時で、+0.5dBが6kHZの時。なのでこれより少し低い周波数になると、もうでない筈。CDの44.1kHzだと少しだけ条件は厳しいが。DAC3の評価の高さは、数字的にも裏付けできる。

 

この問題の解決方法は、幾つかある。その一は、海苔音源を使わない事。違法な振幅は、普通に音声編集するならば発生しない。例えば、レコードからの自録り。これが一番まとも。その二は、所謂NOS。オーバーサンプリングしないならば、如何なる海苔音源であろうとも発生しない。NOS命の人は、オーバーサンプリングでコケるのが嫌なのかも。こけちゃいました!、ってのは昭和だったか平成だったか。

 

その三がDAC3とか、Chordの1bitDSM。ここまでが、NOSはケモノ道であるけれども、ひとまずは正統派の解決法。その四は、ソフトでのアップサンプリング。例えば、RX4には、post-limiterというオプションがある。これはさっきのクリップを防いでくれる。これを使うと、こんなんになる。

f:id:xx3stksm:20190505201252j:plain

およよっ、という感じ。下の方も少なくともクリップはしなくなる。周波数特性は少し暴れるようだけど、室内の特性と似たようなもんなので許容範囲か。何もしないのよりは、ずっと良い。こそっと隠れているようなオプションなのに、秘めた補正能力は高い。どんなアルゴリズム使ってるんだろか。RX4凄い。拍手拍手。

 

そこで、うちにある僅かばかりの音楽CDで少し海苔しているのを、RX4のpost-limiterで四倍にアップサンプリングするとこうなった。

f:id:xx3stksm:20190505201814j:plain

上のLがpost-limiterなしで、大抵のDACだとこうなってしまう。下のRがpost-limiterあり。22kHz以下の周波数特性がフラットなのかどうかは分からない。大量に出てしまう高調波が抑えられている感じ。勿論、クリップはしなくなる。ソフトでアップサンプリングしたファイルの再生の方が良い音、と言っている人は時々いる。海苔のCDであれば、ソフト次第でその可能性は十分にある。まぁ、海苔波形が全ての根源であって、その尻拭いさせられているって話だけど。

 

そして上海雑技団というのかユジャ・ワンの超絶技巧と言うのか、ここで打ち止めと思ったら、その五というのもなくはないとつい最近分かった。その五はハードウエアのみでの展開だから、ソフトでの実装は不可。世の中は思っているよりも狭い。デジタルの世界も。

 

違法帯域の方形波をロンダリングしつつ、最初に出したリンギングしない方形波に変えるリンギングレスフィルター(それ自体は無意味)と言うのも、実は少しばかり周波数特性を変える事でオーバーフローは起こさないのだと分かった。その四のRX4に近い。オーバーフローしない事と、周波数特性を変える事は等価で、これが足枷と言うか或いは利点。それ故リンギングレスフィルターは、煉瓦塀のような特性には決してならない。

 

つまり、リンギングしない方形波を出せる事に意味はないけれど、リンギングレスフィルターはオーバーフローしないという点で、利用価値がある不思議な特性という結論。RX4のpost-limiterが少しばかり周波数特性を変えるように、何度か出しているリンギングレスフィルターも少しばかり高い方がだらだらと落ちる。ひとまず20kHzで3dB程度は。でも致命的なオーバーフローは起こさない。高域を落とす事でオーバーフローを抑える結果になっている。これはその五の方法だから、詳細もその後。