AD7768の場合、とことん使い倒すためにはSSRCが必須。128kHzとか256kHzを96kHzに落とす必要がある(6/8倍と3/8倍)。6/8は3/4であるけれど、3/8との共用の関係で6/8にする。SSRCは、オーディオの迷信番付の関脇ぐらいには入ると思う。分数倍のSSRCは好ましくないという話がある。横綱は定在波とアースグランドで、ジッタとオーバーサンプリングが大関ぐらいかな。張り出しにインターサンプルオーバー(ISO)とプリエコーとか。
SSRCとは標本化定理の裏街道みたいなもので、表を知らないと裏では迷子になるのも道理。分数倍も整数倍も同じ。違うのは有理数か無理数か。無理数の場合をASRCと称しても、ほぼ問題なし。標本化定理は簡単じゃない。デルタ関数という超関数で説明されるのが普通だから。今はyoutubeで超関数の説明をしてくれる人がいて、中々分かり易い。
数学的には、デルタ関数は異界に存在するらしい。普通の関数の埒外にあるので超関数という分類を新設して、辻褄を合わせたらしい。ついでに、フーリエ変換のyoutubeも見た。工学では無限を扱わないので、というか扱えないので、フーリエ変換の出番は基本的にないと思ってる。FFTだってフーリエ級数にしかなりえないし、フーリエ級数だからトコトン周期に拘る必要がある。フーリエ変換ならば、周期という概念はない。そこでFFTに対する小結ぐらいの迷信も生まれる。
平たく言ってしまえば、確かに超関数だとかフーリエ変換は理論的説明には適しているし、かっこいい。華麗なボレーシュートみたいで。工学はもっと泥臭くて、泥沼亀次郎な腹で押し込む執念の一点。工学に超関数はいらない。それっぽいので代用した方が間違いがない。コサインの無限級数もどきで十分使える。百ぐらいの項があれば、何を意味しているかは分かる。こういうの。これで十分。少々のリンギングには目を瞑る。
AD7768の128kHzでのサンプリングとは、このナンチャッテδ関数と対象信号との掛け算。三角関数同士の掛け算なのでその周波数成分は、FFTしなくても差と和が出るのだなと分かる。δ関数は生真面目に無限にそれを繰り返しているだけで、本質は百ぐらいの項で十分に分かる。
この場合は元信号を16kHzとしているので、差と和のイメージが延々と繰り返す。FFTして確かめればこうなっている。全部出せないので途中で打ち切っているけれど、勿論、無限にこれが続いている。デジタルサンプリングとは、永劫に続く輪廻なので。これが、fs=128kHz時の周波数スペクトル。理論的には零次ホールドではないので、全ての成分は同じレベル。称して表街道スペクトル。
6/8倍のSSRCでは、まず6倍のオーバーサンプリングをする。つまり、128*6=768kHzサンプリング。この時、裏街道からスペクトルを眺めるとこう。両者は同じ。何も引かない、何も足さない。上の図は、fs=128kHz時の周波数スペクトルに間違いはないけれど、同時にfs=768kHz時の周波数スペクトルでもあるというのが、裏から見た標本化定理。一般的に言うならば、(n)*128kHz時の周波数スペクトル(nは整数)。768kHzはn=6の時。これだから。
両者の違いは、対象となっている周波数として現れる。fs=128kHz時は、16kHz。それはイメージの出方から推測できる。fs=768kHz時も、同じくイメージから推測できて、16kHz、112kHz、144kHz、240kHz、272kHz、368kHzの六個。何故かと言えば、fs=128kHz時は、128-16=112、128+16=144。fs=768kHz時は、768-16=752,768-112=656,768-144=624,768-240=528,768-272=496,768-368=400,768+16=784,768+112=880,768+144=912,768+240=1008,768+272=1040,768+368=1136。
実際のサンプリングではこうなる。
オレンジ色の-cos(x)がfs=128kHz時の対象信号。これに対して6倍のオーバーサンプリングのfs=768kHzとは、勿論点の数が6倍になって、その対象信号はもうオレンジではなくて薄い灰色の方に移る。何故移るのかは単純な理由。移らないと両者のスペクトルは同じにならない。fs=768kHzは6倍の密度になるので、点の数がx00,x01,x02,x03,x04,x05というように増える。ここもサンプリング対象になるので、ここではサンプリングする信号の方にゼロになって貰わないと、上の青のようなfs=128kHzと同じ波形、すなわち同じスペクトルにならない。
見ての通り、fs=128kHz(青の波形 )もfs=768kHz(青の波形 )も同じだからスペクトルは同じ。でもfs=768kHzにした時点で増えてしまったサンプリング点がゼロにならないと両者は同じ波形にならない。なので、実際にサンプリングしている波形はもう16kHzだけではなくなったとして、仮想的に辻褄を合わせる。スペクトルもそう言っている。
SSRCとは、完全に同じ周波数スペクトルを持ちながら、サンプリング周波数だけを変える操作。例えば、128kHzから768kHzに。128kHzと768kHzのサンプリングで、同じスペクトルを持たせることは上のFFTのように可能。では、その時に768kHzで増えた点にどんな値を持たせるかは、0しかないよ、という話。SSRCで増えた点にゼロを挿入するのは、そういう理由。同じスペクトルにするための、多分唯一の方法論。
見た目からして、同じスペクトルになるには、ゼロの挿入しかないというのも一つの理屈。或いは、fs=768kHzの側から見た対象信号(上のFFTのイメージで推測できる仮想信号)をサンプリングすると、やっぱり増えた点には0しか入らないのね、とも言える。不思議な事に、乱雑に足したように見えるcos(x)+cos(7x)+cos(9x)+cos(15x)+cos(17x)+cos(23x)というのは、fs=768kHzでサンプリングすると6回のうち5回はゼロになっている。表から見るか裏から見るかだけの違いなので当然ではあるけれど、やっぱり不思議。100倍のオーバーサンプリングしても、99回はゼロになる。
そういう訳で、6倍のオーバーサンプリングでもスペクトルは完全に維持される。ASRCでは維持されない。誤差はアナログでの熱雑音以下なので無視できるけれど。6倍になってしまったならば、もうほとんどSSRCは完成。欲しいのは fs=128kHz時の16kHzのみなので、cos(x)+cos(7x)+cos(9x)+cos(15x)+cos(17x)+cos(23x)からcos(x)、つまりは16kHzのみをデジタルのLPFで取り出せばよい。最終形が96kHzサンプリングなので、45kHzカットオフぐらいの線形位相のブリックウォールを使う。標本化定理に従って96kHzサンプリングで折り返しが出ないLPFという話。こうなる。
LPFを通すと、128kHzの6倍で96kHzの8倍のデータが揃っているので、単純に8個に1個の割合で間引いて行けば96kHzサンプリングになる。誤差の可能性は、LPFの精度のみ。入力の24bitに対して、普通は32bitぐらいの係数を使うから、完璧にサンプリング周波数のみが変わる。これはつまり、理想DACでfs=128kHz再生をして、理想ADCでfs=96kHzサンプリングをするのと同じ。それをデジタルの計算のみで実現するので、誤差の余地はない。処理がn/mの有理数である限り。160/147で44.1kHzを48kHzに上げるのも同じ話。
m=1で整数倍のSSRCは理想DACで、これが標本化定理での 信号複製に対する、工学的最終回答(所謂オーバーサンプリングフィルター)。やっている事は単純。まずは、ハードウエアが許す最大のnで、オーバーサンプリング。具体的には、(n-1)個のゼロの挿入。元のfsで想定される帯域での、デジタルの線形FIRのLPFを通す。それだけ。俗に言うsinc関数の出番はない。元々sinc関数は有限世界の住人ではないし。
sinc関数が出て来るのは、多分超ブリックウォールを想定しているから。超ブリックウォールとは、96kHzサンプリングならば、47.9999999999999kHzまでが通過帯域というような設定。現実的には、45kHzまでが通過帯域で何処からも苦情は来ないよ。つまり意味不明な超ブリックウォール、超関数と同じく現実世界の埒外な所に引っかかっているから、sinc関数が出てきてしまう。挙句には、だから元信号の再生は不可能なんて話になってしまう。
最初の問題設定を間違えているので、敗着は初手。そこからは何も生まれない。現実的な45kHzカットオフであれば、FIRは2k程度のタップで足りる。後は、可能な限りnを大きくする事。n=8で768kHzでは、圧倒的に足りない。n=256にすれば、ほぼ問題なし。輪廻からの解脱の完成。最初のイメージが24.576MHZ辺りになる。明示的に6dB/octのアナログLPFがなくても、DAC出力はもうアナログとしか見えない。2kを超えるタップは必要なくて、高いサンプリング周波数が正しい復元に必須の要件だと、SSRCは教えている。そういう意味で、デジタル処理のキモはSSRC。SSRCが全てを支配する世界。SSRCにルビを振るならば、デジタル輪廻世界閻魔大王。