FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

「サンプリング定理」その復元プロセスを可視化する

18/08/05初稿

 最近、故あってサンプリング定理の理解を再確認しています。
 その過程で「原信号復元プロセス」につきやっと解った気がするのですが、カンタンには自信は持てません(爆)。
 そこで、PCのソフトウェアで理解の裏取りをやってみました。

 個人的には意味があると思ってやってみたことですが、合ってる保証はありませんのであくまでも参考まで。


 「LPF」はLow Pass Filterの略です。
 「OSDF」はOver Sampling Digital Filterの略です。


■サンプリング定理はいかに「原信号を完全に復元」しているのか

 サンプリング定理を勉強していた時、非常にタメになった資料があります。
 東京電機大の「ディジタル信号処理の基礎」です(大変感謝しています。ありがとうございます)。
 今回も当該資料を読み込んだのですが、表題に関連する記述を抜粋引用してみます。

・波形の復元 (補間) は、パルス列波形と sinc関数との たたみ込み(= 理想ローパスフィルタ に通す )
・理想パルスが出力できない
・理想ローパスが存在しない
・最近の変換器 (オーバーサンプリング、∑Δ)では特性が改善された。(理想パルス+理想ローパスフィルタを ディジタルフィルタで近似実現したため)

出典:http://www.asp.c.dendai.ac.jp/ASP/DSPseminar14.pdf P.10~11

#「理想パルス」と「理想ローパス」については、理想DAC(sinc関数畳み込みによる復元を理想的に実践するDAC)が存在しえないことの説明として用いられています。
 ですので、本稿でも「理想ローパス」は理想DACの機能の意味で用います。

 上記を代表とする情報から、まずは以下のように理解しました。

・数学的な原信号復元は「サンプル値とsinc関数を畳み込む」処理である
・理想パルス(インパルス)や理想ローパスは存在しないので、上記数学的処理をそのままDACチップに実装することはできない
・理想処理にはならないが、現在のDACチップはOSDFなる信号処理としてそれをシリコン実装している

 …しかし、これだけでは“まだまだ”だと思いますので、もうちょっと突っ込んで考えます。


■復元プロセスを可視化する

・シミュレーションできるのではないか
 例えば、「sinc関数を畳み込む」とは具体的にどういうことでしょう? そして、それをDACチップが近似的に実現しているとは?
 がんばって具体的に記してみます。

・「パルス列波形と sinc関数との たたみ込み」とは、「サンプル値に対応するsinc関数の波形」を「各サンプル分全部合成」すること

・「サンプル値に対応するsinc関数の波形」とは、「サンプル値のインパルス応答波形」のこと

・「OSDF=インパルス応答するもの」である
 DACチップのOSDF特性としてインパルス応答波形が用いられている(*)ことなどから。
*:https://www.phileweb.com/review/closeup/akemd-ak4399/

・つまり、OSDFはsinc関数畳み込みを行っている(もちろん数式通りではない。もちろんそれがOSDFのすべてではない)

#本Blogでの「インパルス」「インパルス応答」の意味付けは、あくまでもPCMオーディオ理解用としてのものです。

 ここでひとつ思い付いたことがあります。
 当Blogでは、PCのプレーヤソフトなどで行われる「アップサンプリング」はDACチップのOSDFと同処理であると考えています。以下の通り、アップサンプラーはOSDFと同じようにインパルス応答しますしね。
 上記の噛み砕き内容が正しく、かつOSDF=アップサンプリング説も正しいとすると、PCソフトによるアップサンプリングによって「数学的な復元プロセス=sinc関数の畳み込み」をシミュレートできるのではないでしょうか?
 可能なら、大変具体的にプロセスをイメージすることができるでしょう。
 そして、それが成立するなら上記の理解内容の確認にもなるでしょう。

・手法
 ということで、以下の手順でやってみました。

1.≪WaveGene 1.50≫で44.1kHzサンプリングの14.7kHz/-3dBサイン波を生成
 1周期に3サンプルです。リコンストラクションのシミュレート記事と同じく見た目に印象的なサンプル位置にするため30°ズラしていますが、データをいじりやすくするため&CD規格に準ずるためこちらは16bitで。

2.≪Sound Engine Free 5.02≫で6サンプル分(2周期)のみにカット
 あまりサンプル多いとメンドクサイので2周期分に。

3.バイナリエディタで1~6番目までの1サンプルのみに書き換えたファイルを6個作成
 他の5サンプルを0000hに書き換えたものです。

4.≪foobar2000 v1.3.8≫のResampler-V 3.2で8倍アップサンプリング
 Convert機能で6個の「各サンプルのインパルス応答波形ファイル」を出力。
 8倍なのはDACチップのOSDF性能に合わせたものです(先の記事と同じ)。

5.8倍した波形ファイル6個を≪Wavosour 1.0.8.0≫のPaste&mixで全部合成
 ≪Wavosour≫は編集結果以外の改変もしてしまいますが、今回はざっくり波形が見られればよいので良しとしました。

・結果
 上図・・・1644の6サンプルしかないデータ
 中図・・・そのインパルス応答波形を全部合成したもの(中間プロセスは別図あり)
 下図・・・再現すべき14.7kHz/-3dBサイン波(比較用)

インパルス加算実験:結果比較

 中図を見ると、確かにこの手順で上図から14.7kHzのサイン波=原信号の復元が進んでいるようです。6サンプル=2周期分しかないのでまだグネグネしていますが、逆に6サンプルしかないのにここまで復元できるのですね。
 サンプル数が増えればどんどん14.7kHzのサイン波に近づいていくであろうことが想像できます。そして、現実では扱えるサンプル数が有限な以上完全には(理想的には)復元しきれないであろうことも。

 おぉ、ということはつまり「sinc関数畳み込みによる原信号復元を近似するDACチップ処理」のシミュレーションになっているようです。

 また、「6サンプルしかない14.7kHzサイン波」ファイルを8倍アップサンプリングした波形は中図とニアリーになりましたので、「各サンプルのインパルス応答波形を全部加算する=アップサンプリング(OSDF)の基本」と考えていいでしょう。
 さらに、今回はインパルス応答波形を8倍アップサンプラーで生成しましたが、この倍数が高ければ高いほど応答波形は(サンプリング周波数で決まっている形は変えずに)滑らかさを増しますから、復元波形もより滑らかになる道理です。2倍より4倍、4倍より8倍の方が原波形に近づくことの別の見方とも言えますね。
 そして、「DACチップのOSDFはサンプリング定理の数学的復元処理をシリコンに実装したもの」とも言えるでしょう。もちろんコストなどに見合った実現可能な範囲で、です。
 ということで、

・最近の変換器 (オーバーサンプリング、∑Δ)では特性が改善された。(理想パルス+理想ローパスフィルタを ディジタルフィルタで近似実現したため
出典:http://www.asp.c.dendai.ac.jp/ASP/DSPseminar14.pdf

という、上述した大学資料の記述を「見える化」してみた結果、その考え方に矛盾はみられませんでした。
 また、このように復元するのですから、ナイキスト以下の周波数成分の集合体にしかならないのも納得です。

 そして、“畳み込む関数”が違えばインパルス応答結果も変わるワケで、それはOSDFやアップサンプリングの特性違いになることでしょう。


 なお、「なぜsinc関数をサンプルごとに畳み込むと原波形が復元されるのか」については、もはや数学の領域であって趣味のオーディオで扱う必要はないでしょう。
 ちょっとだけイメージで言うと、「インパルス応答は発音体の過渡特性なので、断続的に発生させて足し合わすと元波形になる」的な?


■中間プロセス資料

 プロセスの説明として、以下に6個のサンプルを1個ずつに分解してインパルスにした状態を添付します。
 左側の上から下へ進んで右側に移る順番です。

インパルス加算実験:6インパルス


 続いて、上図のインパルス応答波形(8倍アップサンプリング結果)を示します。対応する順番に並んでいます。
 これら6波形を全部合成(加算)したものが上の中図になります。

インパルス加算実験:6インパルス応答


 Resampler-Vの設定を記録しておきます。高性能DACを想定したものです。

インパルス加算実験:Resampler-V設定


■おまけ:CDフォーマットにおける“現実解”

 なんか思いついちゃいました。

 「サンプルは有限なので現実には復元しきれない」と記しましたが、そもそもサンプルは量子化されています。そしてインパルス応答値は中心から離れるとどんどん小さくなっていきます。ですので、中心からある程度以上離れれば、インパルス応答値の“理想との差分”は量子化誤差に埋もれちゃうのではないでしょうか。
 だとすると、“量子化されたサンプルを扱うのであれば”無限にインパルス応答を加算していく必要はなく、ビット深度に応じた“現実的限界”ってあるのかも知れません。もしかしてデジタルFIRフィルタの次数はこれで決めてるのでしょうか?

 ということで、音量0dBの最大インパルスファイルを作成し、それを上記8倍アップサンプリングし、1644=CDフォーマットにおける「インパルス応答限界」はどれくらいか見てみました。

インパルス量子化誤差


 下図が上図を同じ時間軸スケールで拡大したものですが、中央のインパルスから前後ともそれぞれ36サンプル分(プラスとマイナスのピーク-ピークがサンプル周期)あり、それ以降は量子化誤差以下(-96dBに満たないのでゼロ)となりました。
 つまり、前後とも37サンプル以上遠いサンプルのインパルス応答値は0になっちゃいますから、畳み込む必要はないということになります(ちなみに、これはFIRとかIIRとは関係ないハナシだと思ってます)。
 24bit精度で出力した場合も見てみましたが、36サンプルの後5サンプル有意でしたがその後は0になりました(-144dBまで分解した表示できないので振幅が収束した直後のサンプル値をバイナリエディタで確認)。
 これを見ると、CDフォーマットだったら前後合わせて100サンプルも畳み込めば十分?

 いやいや、当然実際にはもっといろいろな事情があるでしょう。例えば、Resampler-VのAttenuation性能を高くするとインパルス応答は長くなります。当然、24bitソースならもっと長く必要でしょう。
 が、CHORD社は「普通(のDACチップ)は200タップ程度」と言っているようです。
 DACチップで参照するサンプル数はそのくらいのスケール感なのかも知れません。


 以上、畳み込む関数のパラメータにもいろいろあるハズですから一例にすぎませんし、この考え方が合ってる保証もありません。
 けれど、CDフォーマットの場合は意外と身近に「理想の現実への落としどころ」があるのかも知れないな、と思いました。


メインメニューへ

テーマ : オーディオ
ジャンル : 趣味・実用

最新記事
ERIへようこそ

Author:らかせ
「最新記事」または
「メインメニュー」からどうぞ

・ファイルへの直接リンク以外はリンクフリー(連絡不要)です

・一応、拍手にコメント(非公開)付けられるようにしてあります

・DB的に利用しており、過去記事もガシガシ書き換えています。特に「最新記事」は初稿から一週間くらいは直してることが多く、大幅に変わっちゃうことも。ご了承ください

・ということもありますし、記すまでもないですが無断転載(ファイル含む)はご遠慮ください

・引用の考え方については「007:諸事」をご参照ください

・アフィリエイトは「Amazon.co.jpアソシエイト」のみです

・ハイパーリンクは当Blog記事のみです(054:節電記事のみ例外)

カテゴリ
検索フォーム
FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。