最近のコメント

    アップサンプリングについて

    Abstract
    Wave File Player for Experimental には、既にUp Sampling機能が付属しています。
    ここでは、その効果となぜ倍サンプリングなのか、根拠を示しつつ解説します。

    Introduction
    古くからアナログソースに親しんできた方には、S/N比やダイナミックレンジを比べれば圧倒的にCDの方が優れているのにもかかわらず、現代のCDの音質に疑問を感じることも多いと聞きます。我々の開発している Wave File Player もそういった疑問を少しでも解消することを目的に作られていますが、現状の技術では解決できていないことが、一つ残されています。それがここで述べるD/A変換(離散値であるデジタル信号を、連続量を持つアナログ信号に復元)に纏わる問題です。

    1. 現行のD/Aコンバータでは、アナログ波を復元することは不可能
    情報化理論によれば、周期性のある波形をデジタル化する場合、それに含まれる最大周波数の二倍でサンプリングを行えば、元のアナログ波形を再現することが可能です。「周期性」と言う条件が付きますが、最悪一曲分の周期と考えれば、D/A変換による復元は原理的に可能です。
    しかしながら、理論的に可能であっても、現実的な物理デバイスを作れるとは限りません。もう少し具体的に言うと、(解析接続で)解析関数を復元するには集積点が必要ですが、有限の離散的な点であるサンプリングポイントからなるPCMデータにはそれがありません。先に述べた定理が成り立つのは、「サンプリング周波数の半分以上のスペクトルが含まれていない。」と言う条件が付いている為です。
    もうお解かりかと思いますが、現実のD/Aコンバータでは、この「サンプリング周波数の半分以上のスペクトルが含まれていない。」と言う条件を満たすことが出来ないのです。具体例を挙げて、もう少し詳しく説明します。
    今、周波数faの正弦波を、サンプリング周波数fsで、PCM化したとします。
    A/D変換の方は、現在の技術で問題なく実現可能ですが、復元の方は隣り合う標本点同士をどのように繋ぐかで、千差万別の出力波形が得られます。
    つまり、周波数faの正弦波だけでなく、fs±faの正弦波も、2fs±faの正弦波も、… も、総ての標本点を通るように振幅と位相を指定できるので、これらの成分の線形結合が一般的な結果になります。この、fa(信号)以外の成分をエイリアス(Alias)と呼びます。

    2. 本当の問題点
    これらの問題を解決(ごまかす)為に、例えばCD(fs=44.1KHz)では
    ①録音時にローパスフィルタを通して、22.05KHz 近辺のスペクトルを排除する
    ②再生時には、エイリアスを除去すると共に、信号をその分補正する
    ことで、対処しています。つまり
    エイリアスは、サンプリングの半分付近で顕著になるので、ソースから排除してしまうのが①ですが、標本点の接続法にもよりますが、faが14700Hz(fs/3)付近でも決して無視できません。
    更に、②はもっと深刻です。仮に、変換で生じたエイリアス成分を無視したとしましょう。
    しかしながら、コンバート時にエイリアスが含まれていたということは、信号の振幅は、その分だけ異なった値になっています。つまりfs/2に近い信号成分は多くのエイリアスを含みその結果、fs-faの成分が増え、その位置はfs/2を境にその反対側にあたります。
    実際には、シグナル側を補正(ブースト)しつつ、エイリアス側を徹底的に抑制しなければなりません。その為にも①が必要だった訳です。
    従って、①+②による復元は適当なレベルで妥協するしかありません。

    3. 解決法
    最も簡単な方法は、サンプリング周波数を現行よりはるかに高くしてしまうことです。
    CDと同じ分解能(16bit/44.1KHz)を前提にして、サンプリング周波数を65536倍にした、1bitサンプリングを考えて見ましょう。確かに先の問題は解決されそうですが、サンプリング周波数が、2.9GHzにもなってしまい、記録する情報量も4096倍になります。実際には、最大周波数成分が最大振幅になる筈もないので、その分サンプリング周波数を落としてもよさそうですが、やはり限度と言うものがあります。第一現行のCDという既存のソースに適応できなくては、解決とはいえません。
    このような例としては、1bit DSD (Direct Stream Digital)が挙げられます。
    (実際には1bit DSDを採用したSACDは48fs=2.8224 MHzで記録されています)
    しかしながら、サンプリング周波数を高くして、エイリアスを抑える方法は有効です。
    先に述べたように、理論的には復元可能ですから、PCを使って元の波形を算出することが出来ます。それを用いて任意のサンプリングに変更することは可能です。
    但し正確に復元するには、一曲分の周期を基本波とし、その高調波からな成るフーリエ展開式(但しサンプリング周波数の半分迄)を用意し、PCMのデータから総ての係数を逆解きしなければなりません。しかし、これでは次元が大きすぎて非実現的です。

    4. 妥協した解決法
    次元が大きすぎる原因は、対象とする標本点が多すぎる為なので、区間を設けてその数を計算可能な数まで減らしてみます。但し、こうすると周期性を失うことになるので、フーリエ展開式をあきらめ、最低次数の多項式で近似します。最低次数としたのは、少しでもエイリアスを含めないようにする為です。(フーリエ展開式ではないので、ゼロにはできない) つまり、ある標本点から次の標本点に至るまでの変化を、その前後にある適度な量の標本点を利用して再現した多項式で近似しようとする方法です。
    ところが、この方法で作成した関数は、確かに連続ではありますが、滑らかであることすら保障できません。計算に使用する標本点を多くすればかなり良くなるとは思いますが、処理時間も掛かります。(導関数が不連続とは物理的に速度が不連続!)
    そこで、分割のアイデアを生かしたまま、全体を連続且つ滑らかに繋ぐことにして、可能な限り簡単で有意そうな方法を考えてみました。
    計算式を確定する為に
    ① 計算に使う近傍の標本点を極力少なくする(D/A変換に組み込める程度)
    ② 区間の中点での値が近似できれば良しとする(倍サンプリング)
    ③ 区間の境界条件に傾きを取り入れる(滑らかにする)
    ④ 標本点を直線で繋ぐ方法に対して、良い補正式になる
    の4つを要請して、若干の考察の末、
    条件①を満たすものとして、2点を繋ぐ三次のペジエ関数を導入しました。境界の傾きはその両側の標本点の平均勾配で近似すれば、③も満足することが出来ます。
    以上の条件で、求める中点の値は、簡単に計算することができます。
    最終結果は、A+(A-B)÷8 と驚くほどシンプルになり、これは④を満足しています。・・・⑤
    ここで、Aは中点に隣接する二つの標本点の平均値であり、Bは更に外側の二つの標本点の平均値です。(結果の⑤式はとても興味深いと思います)

    5. なぜ「倍サンプリング」なのか
    先に、「②区間の中点での値が近似できれば良しとする」と書きましたが、それはなぜでしょうか。もし、元の波形が完全に復元できているのであれば、任意のfsが可能です。しかしながら、私たちの提案はあくまでも近傍値による近似値です。
    従って、オリジナルのデータを失ってまでの変換は、本末転倒です。逆に言うと、完璧に復元された波形を取得できなければ、48KHz系に変換すべきではありません。
    では4倍はどうなのでしょうか? 結論を先に言えば悪くなります。理由は境界で仮定した傾きの誤差がやや大きい為です。逆に後述するダブラーを二回使って作成した176.4Hz /24bitファイルがそれなりに良い結果を出していることから、中点での近似はかなり精度が高いと評価できます。

    6. 効果を試す
    どの程度の効果があるか試す為に、Wave File Player for Experimental のUp Samplingモードとして実装してみました。但しアプリ側なので、前処理としてPCMデータを予め変換しました。
    実験に使用したPC(Core2/Q9400)では、ファイルのロード時間より遥かに少ない為に、前処理による時間的な差異はあまり感じませんでした。
    また、オーバーフローに関しては、敢えてクリップ処理としました。(前処理なら全体のレベル調整が可能だが、DACで実時間処理させる場合を想定しているので…)
    残念ながら効果の程は、未だ結論できてはいません。しかしながら、少なくとも悪くなったと言う印象はありません。
    現在、Up Samplingモードは「隠し機能」で、チェックボックスが封印されていますが、 これは、通常のWindows環境では正当な評価ができないためです。
    そこで、他のOS或いは機器を利用してチェックできるよう、この変換モジュールを使ってWAVEファイルをコンバートするアプリ(doubler.exe)も作成して実験しています。

    7.なぜ通常のWindows環境では評価できないのか?
    WindowsVista以降のOSでは、ハイビット、ハイサンプリングの再生が可能となりました。
    通常のサウンドデバイスでは48kHz系は4fsまでの16ならびに24bitの再生が可能です。しかし、44.1kHz系は44.1kHz /16bitだけのサポートなのです。
    多くの方がデバイスの出力を96kHz /24bitに設定しているようですが、44.1kHz /16bit のWAVEファイルをUp Samplingした88.2kHz/24bitのデータはそのまま再生できません。OSでいい加減なサンプリング周期変換を行ったのでは、折角のUp Sampling効果を完全にスポイルしてしまいます。 (デバイスによっては88.2kHz /24bitが再生できるものもありますが・・)

    Conclusion
    CDの規格である44.1kHz /16bitのPCMデータは、全世界にCDアルバムを含め、膨大な量の音源があります。これを上手にD/A変換すれば、可聴領域の音を再生するのに充分なフォーマットだと言えます。 私たちの命題は、そのD/A変換のアルゴリズムを見つけ出すことであり、オーディオ仲間(生業としているメーカーの開発者も含め)で開発研究し、切磋琢磨して見つけ出すことであると確信します。

    2010年6月1日~2010年6月16日
    2010年7月2日 改定

    改定の理由及び場所
    2.本当の問題点の中で、「D/A変換による振幅の変化比率が自身の周波数のみの関数とは成らないので云々」と記述したのですが、「隣り合う標本点の間を線形に補間すれば重ね合わせ可能なので、自身の周波数のみの関数とできる」為、その部分を削除しました。

    福村 光治