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

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

デルタシグマ変調の原理。敗着は初手にあり。

 信号のデジタル化には、サンプリングに際して必然的に発生してしまう不要な高い周波数を如何にして取り除くかという問題が、どれだけの量子化ビットが必要かという話も含めて常に付きまとう。音声の分野で最初に始まったのは、概念としては理解しやすいPCM方式。これはあまりサンプリング周波数は考えない。標本化定理の少し上ぐらいなら良かろう、程度で終り。CDの44.1kHzのように。

 

 替りに、量子化ビットには拘った。16ビットは当時の技術水準からすると、過剰品質。ADCは勿論、DACも家庭用として価格的に実用的なものはなかった。PCM の性として、そっちに拘ってしまう傾向があるので、そこまで頑張ったんだと思う。現実のアナログ素子としては、今も16ビットはほぼ限界。単調増加を保証しているマルチビットの16ビットDACは、そんなに多くない。

 

 そんなPCMの原理的宿命を回避するのがDelta_Sigma_Modulation、所謂DSM。DSMはあまり大きなビット数を必要とせず、おそらく製造上のプロセスの関係からデジタルフィルターなどのデジタル素子との親和性も高いので、アナログプロセスの必要なマルチビットと比べて、安く高性能にできる。問題は、些かその理論的背景が複雑なので、PCM程には直感的理解が難しい事になっている。

 

 それは元々DSMが、1ビットで出来ているデルタ変調に源があって、多くの場合は1ビットで語られることが大きな要因。更には、どうして1ビットでまともな音が出るのかという、DSMの根源的な問いに対して直観的で明確な答がないという事。PCMのどうしてナイキスト周波数はたったの2倍で良いのか、よりもハードルは高い。

 

 PCMですら、デジタルのギザギザでアナログの音は出ないと未だに拒否感があるので、更にDSMの1ビットと来るならば、黒船扱いされるのも致し方なし。とはいえ、今はDSM以外のDACはとても稀なマニア向けになってしまっているのも事実。DSMが難しいかというならば、必ずしもそうではない。直感的に理解していると思っているPCMの方が、実は複雑と言っても嘘でない。

 

 それは、初めに1ビットなし。DSMの歴史は1ビットに始まっているけれど、原理的にはそうではないので。1ビットを止めてしまうと少し話は分かり易くなる。1ビットもあるけれど、今のDSMDACは6ビットぐらいが多い。解析する時も、その位が宜しい。これは単に量子化器の問題なので、ビット数はあまり関係がない。必ず出てくるノイズシェービングという一種の積分器の数は、3か5か7かで大きく変わってしまうのだけれど。

 

 下の図は大抵の教科書に出て来る、基本的な一次のDSM。但し問題なのは、ほとんどの場合は触れられてないけれど、この図は4通り存在する。入力と出力がアナログなのかデジタルなのか。アナログ(入力)-デジタル(出力)、デジタル(入力)-デジタル(出力)という按配で4種類が存在する。前者はDSMのADCで、後者はPCMからDSMへの変調器で、良く使われるのはこの2つ。この図は後者のDSM変調器で、ここではこれ以外は扱わない。ほとんど全ての教科書は、この4つを断りなく混在させるので、読む方は全く分からなくなる。おそらく、書いている人だって分かってない。分かっているならば、必ず断りを入れる。そうでないと、本人でも分からなくなる。

f:id:xx3stksm:20180914150352j:plain

 この図をとっつきにくくしているのは、Z^(-1)というやつ。俗にz変換と言われるが、これは単純に1クロック分の遅延。74HC374というICと同じもの。デジタルの話なので(ここでは全てのデータがデシタルの場合しか扱わない)、v(n)の一つ前のデータはv(n-1)で、v(n-1)=z^(-1)*v(n)が成り立つ。なので、z^(-1)がなくてもこの回路図の入力と出力の関係は数式化できる。

 

 出力のv(n)を1クロック遅らせたものを入力のu(n)から引いて(u(n)-v(n-1))、これに量子化器の入力であるy(n)の1クロック遅延を足したのがy(n)。

つまり、 y(n)=u(n)-v(n-1)+y(n-1)

知りたいのは入力のu(n)と出力のv(n)の関係なので、量子化器の入力のy(n)は些か邪魔だけど、量子化器という線形でないものを含むので多分これは仕方ない。

 

 この数式が全てのDSMの基本であるけれど、これが何を意味するのかは全く分からない。元々DSMも、デルタ変調に積分器を入れてみたら上手く行った、という偶然の要素から生まれているのので、これは結果オーライしてしまった。

 

 そこで少しばかり発想を変える。このようにして出力を入力に戻すと、これはOPアンプのNFBのように機能する。量子化器のために出力は入力と同じになる事はない。つまり必ず歪は存在する。しかしNFBなので、量子化器で決まるある一定値を超えて出力が入力に外れる事はない。なので誤差つまりは歪は、そんなに大きくならないのではと期待できる。ならばと、デジタルの単純なNFBを考える。こんな具合。

f:id:xx3stksm:20180914150410j:plain

 量子化器の入力y(n)と出力v(n)の差であるy(n)-v(n)を1クロック遅延させてから入力のu(n)に足し、これを量子化器の入力y(n)とする。量子化器で発生する誤差を入力にNFBするだけ。これは1クロックの遅延がミソ。この遅延がないと、デジタルの回路はNFBであっても発振してしまう。エクセルでは、巡回参照のエラーとなる。

 

 この場合のy(n)は、

y(n)=u(n)+y(n-1)-v(n-1)となる。これは前述の

y(n)=u(n)-v(n-1)+y(n-1)と同じ結果。つまり、デルタ変調から発生したDSMの基本回路とは、単純なデジタルのNFB以外の何物でもない。一次のDSMとは、量子化器で発生する誤差を入力にNFBさせているだけの事。

 

 この2つの図は機能的には同じ。最初のは積分器というのが入っているので、さてこれは何だろうかと引っかかる。積分器なので、入力が直流であるとかならず飽和する。積分器とは足し算なのだから。なので符号を変えて足している。所謂NFB。2つ目はならばとNFBを考えただけで、積分器だとかDSMだとかノイズシェービングとかは一切考えていない。必要もない。 

 

 この数式は、z変換とも無縁な単なる漸化式なのでシミュレーションは容易。エクセルで簡単にできる。今はmatlabとかpythonが主流で、エクセルはお子様ランチみたいな感なきにしもあらず。でも漸化式を視覚的に一つ一つ追いかけるのであれば、表計算に勝るものなし。こんな具合に視覚化できるのが一番良い。

f:id:xx3stksm:20180914151512j:plain

 これは5ビットの量子化器を使っている。どうもハードウエア化する場合、6よりも5のほうが上手く行くので。カラムのEが量子化器の出力。入力を16ビットで6kHzにして48kHzでサンプリング。64倍のオーバーサンプリングで計算。どうしてオーバーサンプリングかという問いは、誤差であるカラムFをグラフ化すると、感覚的に理解できる。 

f:id:xx3stksm:20180914152139j:plain

 青が量子化器の出力v(n)。ほとんど重なって見えないけれど、緑が入力のu(n)。赤が量子化器での誤差であるy(n)-v(n)。もしも青が緑と同じであれば、赤はゼロで誤差がないという事。赤のFFTをとればこのNFB回路、つまりは一次のDSM変調器の歪が分かる。赤を、カラムFを小さくすれば、この5ビットDSMの歪は減るという話。

 

 縦軸の電圧方向は単純。量子化器のビット数を上げれば小さくなる。今は5ビットなので1/32ぐらいの最大値となっている。但し、問題は音声帯域内での歪なので、あまり電圧方向は効果がない。このコサイン波形は6kHzなので、赤の時間軸方向の解像度はかなり高い。解像度の高さは高い周波数成分を意味するので、全体のレベルは高くても音声帯域での歪成分は小さい筈。つまりは、音声帯域では低く帯域外では上がる、所謂ノイズシェービングが自動的にかかっている。

 

 さらに2倍して128倍にしたならば、更に高い周波数成分を意味するので音声帯域の歪は減る。電圧方向(量子化ビット)よりも、周波数方向の対策(オーバーサンプリング)が有効だという事を赤は言っている。実際のFFT結果はこう。

f:id:xx3stksm:20180914153657j:plain

 こんな単純なデジタルNFBでも-66dB(0.05%)ぐらいの歪。16ビットのPCMの場合も、同じように入力と出力と誤差をグラフ化するとこう。

f:id:xx3stksm:20180914154048j:plain

 

 言うまでもなく、赤のPCMでの誤差はかなり大きい。電圧方向は16ビットあるのでほぼ無視できるけれど、時間軸での歪が大きいので。8点しかサンプリングできないので当然と言えば当然。DSMでの赤とはかなり違う。但し誤差のスペクトル(対域外に無限に出るイメージ)は、サンプリング周波数の整数倍の両脇に大きなピークが出来るので、デジタルフィルターやアナログフィルターで取り易い。

 

 FFTから分かるように、ナイキスト間隔内では圧倒的にPCMが有利。16ビットの理論値とほぼ同じで0.001%ほど。しかし42kHzと54kHzには、10%を超える歪が出る。更に上の所にも無限に出る。いくら電圧方向に拘っても、PCMには限界がある。これは標本化定理の要求する理想フィルターとも通じる。時間軸方向を考えないと無意味。

 

 DSMは電圧方向は最初から捨てている。その方が製造上のメリットがあり、尚且つ帯域内での歪も減らせるので。両者の誤差の赤の波形が意味する所は大きい。少し想像力を働かせると、何故にデジタルフィルターのタップ数が理想フィルターとしては全く無力かの答がある。

 

 オーバーサンプリングしないならば、横方向の解像度は6kHzを48kHzサンプリングすると、8しかない。縦は65536あったとしても、これは65536x8の解像度で、緑のような滑らかな曲線が書けるかという問題で、勿論無理。DSMは前提としてオーバーサンプリングするので、この場合は32x512の解像度で緑を描けという話になる。これはほぼ描けるので、つまりはタップ次第。オーバーサンプリング無しのPCMでは原理的に不可能。タップは無関係。

 

 後は一次の積分器でも-66dBの歪なので、積分器の次数を上げて五次ぐらいまで増やせば、帯域内の歪は64倍のオーバーサンプリングでも、-140dBぐらいになる。これは入力に24ビットを想定すると、もう上がり。デジタルの領域での歪はないと言える数字。現実の世界では些かの制約が出るけれど、-120dBぐらいの歪は特に難しくない。これはPCMでは絶対に不可能な数字。

 

 単純な一次のDSMを5ビットぐらいで量子化し、その誤差を視覚化するとその中身はPCMよりもずっと元の入力信号に近く、本質的な意味合いが分かる。1ビットに拘ってしまうと、尚且つ歴史的経緯に沿った回路で解析しようとすると、もうお手上げ。物理的な意味合いがまるで分らない。DSMとは基本的にデジタルのNFB回路にしか過ぎないけれど、次数を上げた実用的な回路から元の意味合いを辿るのは難しい。

 

 最後に参考までに1ビット。こうなってしまうので、これでは元も子もなし。頼りになるのは数式だけで直感はきかない。理学的にはアリとしても、工学的にはなし。これが使い物になるとは到底思えないけれど、意外と帯域内での歪は小さくて、 -49dB。DSMと1ビットを結びつけるべきではない。初めの1手を間違えているので、もうにっちもさっちも行かなくなる。敗着は初手にあり。これをやってしまうと、もうDSMは数式の闇の彼方に消えて行くのみ。

f:id:xx3stksm:20180914182707j:plain

 

f:id:xx3stksm:20180914182726j:plain

 

 1ビットの場合は、多ビットの比較上1と-1で二値化。1ビットでは、二次までこのシミュレーションが可能。三次以上は必ず不安定になるので無理。その理由は意外と単純。1ビットDSMのDSDに関しては、信号を疎と密で表すと説明されることがある。嘘ではないけれど、実用的にそれはあり得ないので、そういうものは実験室以外には存在しない。

 

 確かに上の図で、信号が最大値や最小値に近い所では出力にほとんど変化がなくて、疎になっている。二次でもだいたいこうなる。しかし3次以上では不安定。3次以上とは別の言い方をするならば、ノイズシェービングで歪をより高い周波数に持っていくという意味。そうすると一次の時のように、出力がずっと同じ状態にとどまる事は出来ない。高次のノイズシェービングとは、常に変化する密の状態でないと成り立たない。高い周波数とは、常に変化している状態。

 

 疎は無くなって密ばかりになる。だから高い周波数に歪成分を動かせる。3次以上のDSMには密しかない。それが変調度の制約になる。1ビットの高次DSMに、50%を超える変調度はない。密を維持するために出力は常に変化している。最大値を出したい時も、1、1、1、1というような並びはなくて、1、1、-1、1のように4つのうち一つは-1を混ぜる必要がある。密のゴリ押し。

 

 結果として、最大値は(1+1+1+1)/4=1ではなくて、(1+1-1+1)/4=0.5にしかならない。最小値も-0.5で、出せる最大振幅は2ではなくて1。その制約下で入力が絶対値で0.5以上のレベルになると、もう股裂き。忠ならんと欲すれば考ならず。腸捻転でもがいた挙句、発振するしかなくなる。帰還の係数の問題でなく、原理的に変調度は50%まで。

 

 1ビットの3次以上が不安定になりやすいというのは嘘で、50%を超える変調度は原理的に不可能。入力のレベルを50%以下に制限しないと、高次の1ビットは機能しない。制限すれば問題なく動作する。自分で試さないと、この問題の本質は分からない。そのためか1ビットの変調度の制約に関する話は、ほとんど見かけない。5ビットぐらいあると、勿論この問題はほとんどなくなる。

 

 現実論としては、量子化ビット数はあまり歪に関係しないので、5次であれば1ビットも変調度に気を付ければデジタル領域では実用になる。アナログにまで変換するのであればまずは無理。市販のDACチップはモノリシックで、内部にアナログ回路が入っているから実用になる。それと同じ性能を、外付けのハイブリッドで出すのは無理。

 

 1ビットにDACの精度は不要なので、ロジックICをDACとして使うことも可能。これを更に発展させて、アナログのFIRフィルターと組み合わせると、そこそこは行く。でも色々な問題があって、数字としては90dBぐらいのSNが限界でCDには届かない。実用的には問題がないので、これは結構人気があるのも事実。

 

 多ビット型のDSMであれば、110dBぐらいのSNは可能。これはほとんど市販のDACチップと同じ数字。FPGAと高速のRF用DACで実現可能。この組み合わせであれば、1ビットでも同じSNを確保できる。この場合は、敢えて1ビットにする理由もなくはないので。 

 

 

 

 

 

 

リンギングしない(プリエコーなし)FIRフィルターの意味合いとは。 

 標本化定理のために必要な理想フィルターとは、FIRフィルターのタップ長さはそこそこで良くて、必須なのは高いサンプリング周波数であるというのが前回の結論。そこから少し藪の中に入り込んでみるのが趣味の世界。分け入っても分け入っても藪の中かも知れず、思いの外、高台からの良い眺めに巡り合うことも。銀閣を建て始めた時、後世に金閣を超える日本文化の象徴になるとは 、きっと誰も思わなかったように。

 

 理想フィルターはその性質上、どうしても急峻な特性が必要になる。一番初めのCDの時代は特に。一般的には20kHzから落として、22kHzでは-120dBぐらいの減衰量が欲しい。所謂ブリックウォール、煉瓦塀特性が必要。これは今ではFIRフィルターで実現可能で、尚且つアナログでは有り得なかった直線位相になっている。初期のアナログ多段フィルターと比べれば、完璧。一つケチがつくのは、方形波などでリンギングを起こす事。

 

f:id:xx3stksm:20180805211509j:plain

こんな具合に、方形波やインパルスに対して発振しているようなリンギングが出る。これはアンプの発振とは違って、単にFIRフィルターの係数に由来する。アナログ時代こういう波形は嫌われたので、今に至ってもリンギングにはアレルギーがある。感情論的に、後に出るリンギングはアナログフィルターでも出るので構わないが、前に出るのは気に入らない、というのもある。

f:id:xx3stksm:20180805211928j:plain

 周波数特性としてはこんな按配で、典型的な煉瓦塀。実測なので測定器のスプリアスの関係で、65dBぐらいしか落ちていないように見えるけれど、本来は42kHzまでが通過帯域で、46kHz以上は-120dB以上落ちている(96kHzサンプリング)。オーバーサンプリングで思いっ切りサンプリング周波数は高いので、アナログフィルターなしでもそのまま使える。こんな基板。近々うちのシステムはこれに更新の予定。

f:id:xx3stksm:20180805212431j:plain

 このリンギングをどう考えるかは中々に難しい。多分、問題はないと思う。リンギングの一番の原因はおそらくギブス現象にある。特定の周波数帯域で制限することは、デジタルの世界では暗黙の了解事項。これがないと標本化定理は成り立たず、つまりはデジタル化が出来ないので、CDであればどう足掻いても22kHzぐらいが上限になる。結果として、方形波の振動は避けられない。

 

 FIRフィルターの側から言うと、一般論としてその係数は振動している。1024の係数があると、プラスの値とマイナスの値の両方を取りながら大きくなって行き、最大値から後はやはり振動しながら段々と小さくなる。インパルスに対する応答は、そっくりそのまま係数の値を並べる事になるので、係数の振動は応答の振動を意味する。従って、振動しないFIRフィルターは稀。稀ではあるが零ではない。

 

 これは経験法則で理論的裏付けはない。つまり工学的回答はあるのだけれど、理論的な証明はひとまず横に置く。論より証拠でこんなの。上の基板での実測データ。FIRフィルターで直線位相。タップ数は1024に収まる。

f:id:xx3stksm:20180805214013j:plain

 下のインパルスが振動せず単調に上がって行って、最大値の後は単調に落ちるので、方形波に対しても勿論振動はしない。周波数応答には少し難がある。なんでも良い事ばっかしではないので。

f:id:xx3stksm:20180805214345j:plain

 96kHzサンプリングなので、基本的には煉瓦塀のように48kHz以上は-120dBぐらい落としたいし、通過帯域も40kHzぐらいまでは欲しい。これは21kHzで-3dBぐらい落ちる。48kHzではまだ18dBぐらいしか落ちない。21kHzぐらいまでを使う積りになると、実質的に不要な高調波は、折り返してくる75kHz以上となる。それより上は完全に落ちるので(88.4-42)=46.4dBの減衰量が最悪値。

 

 あんまり褒められた特性ではないけれど、俗に言うNOSというものは完全な高調波垂れ流しだし、多くのDACに乗っているslowのフィルターを44.1kHzで使うともっと悪い。勿論これも、96kHzで使うのがミソ。実際に20kHzと30kHzを出してみると、20kHzではほとんど残留高調波の影響はない。30kHzでは少し見える。青が30kHz。

f:id:xx3stksm:20180805215646j:plain

 

 

 

f:id:xx3stksm:20180805220004j:plain

 実際の使用として96kHzサンプリング以上であれば、このぐらいの緩い特性でも音楽信号の再生に問題はないのかなあと思う。リンギングの有無に関して、あまり積極的な意味合いは感じないとしても、煉瓦塀とリンギングレスの両方を選べるのであれば損はなかろうと。

 ここでの実測値は、特記のない限りアナログのフィルターの前で測っている。位相云々とかリンギングあれこれを言うならば、アナログフィルターの後では意味がない。

ほとんどの場合、DACには12db/oct以上のアナログフィルターが入る。これは当然位相が回る。リンギングみたいな様相を呈するので、どこに原因があるかはもう分からなくなる。

f:id:xx3stksm:20180805220756j:plain

 これはリンギングレスFIRをアナログフィルターに通した結果。黄色は12db/octで青は6db/oct。6db/octは信者がいるように、ほとんど見た目の変化はない。と言っても、最大で90度は回っている。直線位相は一切回らない。12db/octは180度回るので、なんか角が立っている。これはSPICEでシミュレーションしても、ほぼ同じ結果になる。

 

 振幅特性は平坦でも、位相特性の乱れで角が立ってしまう。あんまりアナログフィルターには期待せず6db/octにして、高いオーバーサンプリングでデシタル処理するのが賢い。コストが安く再現性もある。

 

 リンギングレスのFIRは、係数が単調増加か単調減少であれば宜しい。幾つか可能性はあると思うけど、ここで使っているのは移動平均フィルター。単純な移動平均では、下の紫のように全く高い方で落ちないので、アナログフィルターが必須となり好ましくない。幾つかの移動平均を組み合わせて96kHzや192kHzに零点が来るようにして使う。下図では一目盛が3kHz。

 

f:id:xx3stksm:20180805221842j:plain

 192kHzサンプリングで20kHzまでを使うのであれば、図の赤なので20kHzで-1dB。不要高調波も最悪値で-60dB以上は落とせる。流石にそこまでの無駄遣いはアレなので、96kHzサンプリングで何とかしたい。煉瓦塀と移動平均の中間というのも可能で、これは両者の中間の特性になる。少しリンギングするけれど、高調波の漏れはほとんど出ない。

 リンギングレスの利点は、些かギブス現象を超越してしまう所。常識的には、帯域を制限されてしまうデジタルのシステムでは、必ず方形波はリンギングする。さはさりながら、リンギングレスは違う落とし所を用意している。リンギングレスの実測値は、FIRフィルターで完全に帯域制限されている。しかしギブス現象を起こしていない。振動しない方形波になっている。何処かに勘違いがないかは簡単に確かめられる。

 

 実測値は黄色の特性で96kHzに零点があるフィルター。これを実現するには192kHzサンプリングが必要。話を単純化するには96kHzサンプリングのシステムで、48kHzに零点があるフィルターを想定した方が楽。仮に6kHzの方形波を出すとすると、6kHz、18kHz、30kHz、42kHz の四つのサイン波で方形波を作る事になるので。192kHzサンプリングだと八個必要になる。

 

 素のままの方形波の場合、6kHzを-3dbとすると、18kHzは-12.5dB、30kHzは-17dB、42kHzは-20dBのサイン波の合成。48kHzに零点のあるリンギングレスフィルターは18kHzで-5dB、30kHzで-17dB、42kHzで-40dBの減衰。結果として、6kHzを-3dbとすると、18kHzは(-12.5-5)dB、30kHzは(-17-17)dB、42kHzは(-20-40)dBのサイン波の合成。

両者を並べて表示するとこうなる。

f:id:xx3stksm:20180805225427j:plain

 42kHzは-60dBになるので影響なしとして無視。省略して三つでの合成。素のままの方形波は確かに振動してしまう。帯域制限されたシステムでの見慣れた風景としてこうなる。下はちょっと驚きの結果。リンギングレスフィルターの面目躍如。帯域制限からの立ち上がりのなまりは仕方ないとしても、全く振動していない。

 当然と言えば当然。リンギングレスフィルターの係数は振動していない。なのでインパルスであれ方形波であれ、計算結果つまりはフィルターの出力が振動することはない。理論的にはそうなるしかないので振動はしない。しかし方形波を三つだけのサイン波に制限してしまうので、ギブス現象の影響を受けそうだが受けない。

 係数で決まる減衰量で三次と五次のサイン波を落とす結果、振動しない方形波が出来上がる。これは勿論192kHzサンプリングでも同じ結果となる。その場合は足しているサイン波の数が増えるので、それなら不思議ない感じもするけれど、96kHzサンプリングはたったの三つで出来てしまうのが驚き。

 結論として、リンギングレスにあまり積極的意味合いは感じないとしても、自然界の音は上の波形のようにリンギングしたりはせず、下のようになだらかになるだけと思う。なので、デジタルシステムの都合としての帯域制限が、結果として多くの場合は不自然なリンギングにつながる。

 リンギングレスフィルターのような帯域制限は、高調波の漏れからして常識的には掟破りであるけれど、20kHz帯域に対して少し広めの96kHzサンプリングや、ゆるゆるの192kHzサンプリングに意味はあるのでなかろうか。ハイレゾというのは、20kHz以上の蝙蝠帯域は無意味としても、不自然な帯域制限を避けるという観点で意味がある。20kHz帯域に対して96kHzサンプリングしていると、それなりの利点はあるという事。

 

 

 

 

 

 

標本化定理を満たす、現実の理想フィルターとは如何なるものか。

 標本化つまりはデジタル化をした場合の欠点は、不要な高調波が無限に発生してしまう事。もっと本質的に考えるならば前回書いたように、不要な高調波を付け加えると特定のサンプリング周期での標本化で、取り込んでいない所のデータも含む全ての信号の再現が可能になる利点がある。その特定のサンプリング周期が、元の信号の持っている帯域の少なくとも二倍以上という制約。という訳なので、デジタル化した信号からは不要な高調波を取り除く必要がある。これが所謂ポストフィルターで、この性能がとても大事となる。

 

 数学的な解決法はとても単純。理想フィルターというものを使う。仮に音声用の20kHzのカットオフであるならば、0から20kHzまでが通過帯域で、20kHzから上は阻止帯域。遷移帯域はない。これは数学的には実現可能。96KHzでサンプリングしているのであれば、それに合わせたsinc関数を計算し、デジタル化した信号と畳み込み積分を行うと、出て来るのは0から20kHzまでの信号となり、不要な高調波は全て取れる。

 

 現実論としてこれは不可能であるし、全然実用的ではない。遷移帯域のない理想フィルターを必要とする応用例はまずないのだから。音声用であれば、遷移領域が6dB/octであるのか12dB/octであるのかに、かなりの意味がある。理想フィルターは、色気のない芸者のようなものでまずお座敷がかからない。ところが多くのフィルターに関する本は、この理想フィルターを原型としているのでほとんど実用には適さない。多分、実際の機器を設計する人は使ってない。

 

 もう少し実用的なソフトであったり、自分の用途に適したソフトを自作している筈。少なくとも、理想フィルターの延長で12dB/octとか24dB/octの特性は作れない。数学的な意味での理想フィルターは、現実論としては全くの役立たず。ここでのフィルターとは、基本的にデジタルフィルターの事。畳み込みは必ずしもデジタルである必要はないけれど、計算はDSPやFPGAを使うので、結果的にデジタルフィルターを使って不要な高調波を取り除く実用的な方法論、という意味。

 

 sinc関数は問題が山積するので無視して、普通に考える。初めにデジタルありき。sinc関数はフーリエ変換から始まって最終的にデジタル化する。この過程に問題が多過ぎて使い物にならず、徒に話がややこしくなる。初めからデジタルの逆DFFTを使えば、多くの問題は回避できて尚且つとても簡単。

 

 まずは必要な周波数特性のグラフを書く。24dB/octの特性が欲しければそのまま描く。ローパスであろうがバンドパスであろうがノッチフィルターであろうが関係ない。とにかく必要な特性を周波数軸で書く。唯一つ、サンプリング周波数とデジタルフィルターの次数で決まる解像度の制約のみがある。一般的に120dBの減衰量はゼロと考えて差し支えない。1024ぐらいの次数でそのぐらいは落ちるので、普通の音声用の理想フィルターは1024の次数で作れる。

 

 96kHzのサンプリングとするならば、解像度は96000/1024≒96Hz。実用的にはこれでほとんどの場合は足りる。標準的なFPGAの場合、無理なく2048までは上げられる。その上も FPGAの容量次第でどうにでもなるけれど、4096で足りない場合には、足りないのは工夫と考えるのが妥当。普通は1024で十分に理想フィルターになる。

 

 96Hzの解像度で必要なグラフを描いたなら、これは周波数軸の信号なので 逆DFFTで時間軸に変換すると、俗に言うインパルス応答というものが出て来る。このインパルス応答は当然ながら1024の係数になっている。細かく言うと、直線位相フィルターしか扱わないので1023なんだけど、足りない一個はゼロで埋めるので1024の係数。

 

 この係数が必要なデジタルフィルターの係数そのまんま。どうしてそうなるのかは、デジタルフィルターの本に数学的証明が乗っている。この逆DFFTはsinc関数を無理矢理窓関数で切り取るのと、基本的には同じだと思う。工学的数学は、純粋数学に薩摩の守だから、証明はしない。結果的に正しい事が証明と言えば証明。欲しいフィルターの特性に対して逆DFFTすれば良し。それだけのこと。例えばこんなの。

f:id:xx3stksm:20180712190044j:plain

 これは96kサンプリングで、20kカットオフのローパス。20.8kでは126dBも落ちるので、特性的には問題なし。sinc関数由来は、おそらく窓関数の関係で阻止帯域に山と谷が出来て好ましくない。ここまでスパッと落とすのもなかなか難しいと思う。普通に逆DFFTすれば、簡単に作れて勿論FPGAに実装できる形になっている。しかし、一件は全然落着していない。これは単なる初めの一歩。

 

 理想的なデジタルフィルターが出来たのだから、不要な高調波は快刀乱麻を断つと思いきや、実は何も解決していない。このフィルターを通すと、デジタル化された青の波形から不要な高調波が消えて元の赤になるはずが、全くならない。

 

f:id:xx3stksm:20180712190103j:plain

 求めた1024の係数と青のデジタル化された信号を畳み込むと、理論的には元の赤になる。それは嘘ではないけれど、実際に計算してみるとこうなる。ほんの少しだけ、申し訳程度のスズメの涙でゼロの所で僅かな差はあるものの、畳み込みの御利益はない。現実として何の変化も出ないのは正しい。

 ただ、これはシミュレーションなので、おそらく変化があったとしても赤と青のレベルの差が分かるだけで、その意味までは本質論として分からないと思う。この理想フィルターを通しても、ほとんど信号に変化がないので高調波の除去は無理であろうと言えるだけ。この辺りはちょっと数学の話になるので突っ込まない。とにかく、効果はゼロであるという事だけは間違いない。

 

f:id:xx3stksm:20180712195324j:plain

前に出てきた、青の96kサンプリングの12kの波形のスペクトルはこうなっている。96kサンプリングなので、この倍数の所に延々と高調波が連なる。レベルが落ちていくのは、DACの出力が零次ホールド特性で、本来の標本化関数の規定する波形とは異なるため。標本化関数は、下のスペクトルのように一瞬だけ存在するもので、DACの出力のように同じ値を保持しない。但し、この差が問題になる事はほとんどないので、気にする必要はない。延々と続く高調波という所がキモ。

 

f:id:xx3stksm:20180712195331j:plain

 フィルターを通しても意味がないとは、上の高調波が全て通過帯域にあるという意味。しかし1024次のフィルターは、既に20.8kHzで126dBの減衰量になっている。矛盾は何処に。これは謎。こうなってしまうのはデジタルフィルターでは当たり前の話。その当たり前の話を書いている本は見た事がない。畳み込みという言葉の魔術に引っかかっているのでないかと思う。或いは、現実のデジタルフィルターを作った事がない。おそらくは両方。

 

 最初に出した1024次のフィルターの特性は、畳み込みという世界観の中では多分正しい。これは96kサンプリングなので、定義されているのは-48kHzから48kHzまで。通常マイナスの周波数は扱わないので、ゼロから48kHzまで。畳み込みという方法論でフィルターの効果を確かめようとすると、どうもここまでしか表示できない。何か方法はあると思うけれど。

 

 現実に96kサンプリングされた信号は、上のFFTで見るように、或いは標本化定理の原理からも明らかなように、無限の高調波を含む。それが角張ったデジタル特有の波形となる。なので例え96kサンプリングであったとしても、無限の帯域を持っているのだから、ゼロから48kHzまでという制約は当てはまらない。

 

 1024次のフィルターは12kHzの元信号を完全に通す。これは本来の目的。しかしその上の高調波の96kHz±12kHzも、2*96kHz±12kHzも、3*96kHz±12kHzも全て通してしまう。つまりは、全ての高調波も通過帯域。1024次のフィルターの正しい周波数特性はこうなっている。0±20kHzの他に、96kHz±20kHz、2*96kHz±20kHz、3*96kHz±20kHzも通過帯域。

f:id:xx3stksm:20180712201637j:plain

 デジタルフィルターは基本的に周期関数にしかならない。デジタルフィルターの伝達関数は、直線位相の場合はコサインの関数。コサインは周期関数なので、当然の事デジタルフィルターもそうなる。その周期がサンプリング周波数になっている。こんな簡単な移動平均を考えると、その特性が周期的に繰り返すことが分かる。ローパスのデジタルフィルターは、アナログのローパスのように落ちっぱなしにはならない。この当たり前の事実は何故かあまり知られていない。

f:id:xx3stksm:20180712203327j:plain

 

 こんな勘違いは、机の前に座って紙と鉛筆の人になっていると必ず起きる。半田ゴテを持って計測器を見ているならば、実際の現象と矛盾するので、すぐに間違いに気付く。なのでここからは実物の世界。実際にFPGAに実装したデジタルフィルターでの実測値。実物の96kサンプリングの12kの波形とはこんな感じ。下が実物のFFTでいつも正しいのはこっち。ちょっと見辛いけれど、96k毎に幾つも並んでしまうので込み合った感じになる。先に出した12kのFFTの実物版。 

 

f:id:xx3stksm:20180712203713j:plain

f:id:xx3stksm:20180712203720j:plain

 

 そこで疑問。デジタルフィルターは必然的に周期関数になってしまう。ならばデジタルフィルターというものは、理想フィルターとして使えないのでは。モーマンタイというのか、メイウェンティというのか、ノープロブレム。問題なく使える。サンプリング周波数を上げれば良い。実際に八倍に上げるとこう。

f:id:xx3stksm:20180712204801j:plain

f:id:xx3stksm:20180712204809j:plain

 

 下のFFTが最初の96kサンプリングと比べると、随分とスキスキになっている。これは周期が八倍になって768kHzでの繰り返しとなり、通過帯域が0±20kHz、768kHz±20kHz、2*768kHz±20kHz、n*768kHz±20kHzになったため。そのお蔭で、元の波形もかなり角が取れてアナログに近くなっている。まだまだ角張っているのは確かだけど。普通の音声用DACはここまで。それ以上は対応していないので、残った高調波は、アナログのローパスで取っている。

 

 ほとんどのDACチップにはこんなデジタルフィルターが入っている。オーバーサンプリングフィルターというもの。後続のアナログフィルターの負担を軽くするためというのが定説で、嘘ではない。しかしデジタルフィルターを意味あるものにするためには、少なくとも八倍ぐらいのオーバーサンプリングで、サンプリング周波数を上げないと全く機能しないから上げている、とみるのが正しい。

 

 更に八倍上げて6.144MHzにすると、こうなる。

f:id:xx3stksm:20180712205735j:plain

f:id:xx3stksm:20180712205743j:plain

 

 標本化定理に従って、最初の高調波は6.144MHzの所。それはほとんど無視できる程度の周波数なので、DACの出力はもうほとんど元のアナログ。かすかに角があるかないか。現実的には、これを以て理想フィルターの完成と言って嘘ではない。768kではまだ少し角がある。

 

 上海雑技団の如く、上には上があるので更に四倍上げて24.576MHz。10MHzスパンのFFTではもう高調波は見えないので省略。アナログ波形のみ。ほぼ完璧に角はなし。ここらで一件落着。理想フィルターの完成。sinc関数などでは、とてもとてもここまではこれない。実用的な方法論として、sinc関数は有り得ない。

 

f:id:xx3stksm:20180712210222j:plain

 

 結論として、デジタルフィルターの次数は1024もあれば良し。但し、サンプリング周波数は思いっきり上げる必要がある。24.576MHzぐらいまで。256倍のオーバーサンプリング。理想フィルターの話として、無限の次数が必要というのは机上の話。必要なのは高いサンプリング周波数であって、次数はそこそこで良い。

 

 高いサンプリング周波数は、ある意味で大きな次数を意味するけれど、この24.576MHzの波形は、1024と128の二つのデジタルフィルターの組み合わせで出来ている。大抵の場合、足りないのは次数ではなくて工夫の方。理想フィルターにとって不可欠なのは、高いサンプリング周波数。これなくしては、デジタルフィルターが機能しない。

 

 理想フィルターというのは、その応用例に対して若干の修正が必要になるとしても、存在する。音声用であれば、1024次のデジタルフィルターで24.576MHzのサンプリング周波数。これは説明し易いようにマルチビットで出力している。今は主流のDSMの場合、話は少し違ってくる。標本化での高調波とは別に、DSM固有の量子化ノイズが出る。

 

 5ビットの量子化器で24.576MHzのサンプリングの場合、120dBを基準にすると400kHzぐらいから固有の量子化ノイズが出る。この場合は、デジタルフィルターのみで不要な高調波は取れない。しかし固有の量子化ノイズは、標本化定理の理想フィルターとは関係がないし、これはこれで全く別の一つの話。無視は出来ないし、先程のFPGAはDSMの出力も可能なので、いずれはそちらの話も。

 

標本化定理を、振幅変調の無限級数と解く。

 信号のデジタル化の話は、標本化定理に始まる。中身は、デジタル化したい信号の含んでいる帯域の二倍以上でサンプリングしろという事で、まぁそんなもんかと納得の行く範囲ではある。フェルマーの最終定理のようで、中身は分かるが何故それが正しいかという話になると、内容は揮発する。草原という言葉を聞くと、私の思考は気体になると司馬遼太郎が何処かに書いていた記憶がある。デルタ関数とか畳み込みという言葉は、同じく気体になって何処かに消えて行く。

 常々思うのは、科学には数学的な紙と鉛筆の世界つまりは理学と、半田ごてと基板の物理的実体を扱う工学があって、定理の証明は理学の分野なので中々半田ごての人には理解が難しい。半田ごての人は、現物の物理世界と付き合う過程での経験から、ちょびっとだけ理論的世界を垣間見るしか手はない。気体にならずに地面に留まるにはそれしかないのかなあと。

 という訳で、経験法則の側から標本化定理を眺めてみると、これはつまり、振幅変調の無限級数だなとの結論に至る。数学的厳密性には欠けるんだと思うけれど、今の所自分にとって必要な回路設計並びにFPGAでの演算に関しては矛盾はない。工学的には十分に実用になるので、当面はこの路線で良いかと思ってる。何かしらの矛盾が出たならば、その時に修正すれば良いのだから。

 デルタ関数にFFTをかけると、そのスペクトルは均一になる。拘っても仕方ないながら、これは多分数学的な厳密性には欠ける。つまり何処かで矛盾の起きる可能性が残る。一言でFFTと言うけれど、今はほぼ全てがPC上でのDFFTを称してFFTと言っている。FFTとDFFTは、かなり根本的に別物。イギリスとキリギリス程ではないにしろ。

  DFFTは離散時間でのFFTの意味。デジタル化された数字のみを扱うので、必ず有限個の数しか扱えない。実際、PCでは有限の計算しかできない。それはFFTが意味する高速フーリエ変換という言葉に矛盾する。フーリエ変換は無限の数を扱うのだから。なのでこういう矛盾点は基本的に無視する。おそらくは致命的欠陥になる可能性は小さいという事で。でも間違いなく、デルタ関数にFFTをかけると、そのスペクトルは均一になる。つまり、全ての周波数を均一に含んでいる。

 ちょっと調べてみたら、デルタ関数の例として、sin(nx)/πxが出て来る。これはデルタ関数の定義を満たしている。でもちょっと工学的には使いづらい。何故かというと、これはおそらく無限界の住人なので、必ず有限になる現実の物理世界との相性が良くない。有限界的には、全ての周波数を均一に含んでいる、という方向で考えた方が良い。全ての周波数を均一に含む関数、で代用すれば良しという話。こういうの。

 

f:id:xx3stksm:20180514192508j:plain

 

具体的には、48kHzでサンプリングすることを考えて、48kHz,2*48kHz,3*48kHz・・・という無限級数を考える。この理屈で10倍の480kHzまでの十個を足してしまうと、こんな感じ。

f:id:xx3stksm:20180514193006j:plain

本来のデルタ関数は、0と仮想的な1しか存在しないので、この例のようにうねうねと0でない部分があるのは問題。でもそれは足していく数を増やして、そこそこ無限かと思える程度にすれば工学的には問題がない。これをデルタ関数と黙認してサンプリングをしてみるとこうなる。

f:id:xx3stksm:20180514193401j:plain

 

少し位相をずらしたsin波(薄い灰色)、この場合は48kHzのサンプリング周波数で16の点があるので、3kHzのsin波。デルタ関数もどきと3kHzのsin波を、単純に掛け算した結果がこれ。通常良く見る正式なデルタ関数での図とは、やはりまがい物だけあって些か違う。でもサンプリングっぽいのは確か。そこで足し合わせるcosの数を40にするとこれ。

f:id:xx3stksm:20180514193908j:plain

 

当然ながら、仮想の1でない時のうねうねがだいぶ減る。でもまだ少しばかりお里が知れている感が無きにしも非ず。そこで更に倍にした80個のcosがこれ。

f:id:xx3stksm:20180514194054j:plain

 

 もうここまで来れば、標本点のx0からx15以外は0だと思ってもまあ良いかという按配。少なくとも工学的には問題ないので、これをもってデルタ関数の代用としてしまう。標本化にとってのキモは標本化に使うデルタ関数にある。しかしこれは超関数と言われるぐらいに現実世界からは遊離しているので、工学世界に引きずり降ろすのは難しい。なので些かの誤差は本質論に影響しないので無視して、実を取る。たかだか80個のcosの和で、超関数は有限世界の住人になって、お話が通じるようになるという寸法。

 この図は結構な意味を持っている。この黄緑のサンプリングされたように見える波形はアナログで出来ている。元々の被変調波に相当する3kHzに、48kHz,96kHz,・・・、3840kHz(48kHz*80)までの和を掛け算しただけなので。その周波数スペクトルは、FFTするまでもないけれど、グラフ化のために計算するとこう。勿論、昔ながらの振幅変調のように、直流分での3kHzの次は3kHzと48kHzの掛け算なので三角関数の定理から45kHzと51kHzで、その上も簡単にFFTなしで求まる。そして一番上は、3837kHzと3843kHz。

f:id:xx3stksm:20180514194706j:plain

 

 それだけの161個の和がこの黄緑で、詰まる所、標本化定理の意味する真の姿。通常の振幅変調は、検波のしやすさから搬送波も含むので少し違うけれど基本的には同じなので、これを超振幅変調と称してもそれ程の嘘ではなし。ちょっと取りつく島のない離散化信号ではなくて、正真正銘のアナログ波形。なので、この信号をアナログ記憶したとしても、元の3kHzの信号を取り出すことは可能。それはあまりにも冗長であるけれど。それよりも何処か一つだけの振幅変調を電波で送る方が賢い。20倍の所であれば、960kHzで普通の中波放送になる。

 わざわざこんな振幅変調級数を持って来たのは、記憶するのであればもっとエレガントな方法があるから。デジタル化とも言える方法がある。このアナログの振幅変調級数は、何故か所謂サンプリング点以外、つまりはx0からx15以外は、ゼロで近似できる。80個なのでゼロとまでは言えないけれど、1000個にすればまずは問題がない。その時に起きる弊害は、48997kHzと48003kHzまでの高調波を含んでしまう事。でも元の3kHzを取り出すことに問題はない。

 そこでここで掌を反して、もうアナログ的な記憶はやめる。サンプリングのx0からx15のデータさえあれば、残りはゼロと決まっている。その16の数字とその間隔つまりはサンプリング周期(1000/48μS)さえ分かっていれば、元の振幅変調級数は復元できるし、本来の被変調波である3kHzを元に戻せる。振幅変調級数はアナログ波形であるけれど、記録するのであればデータ量はとても少なくて済むという話。黄緑の波形はそう言ってている。

 標本化定理で納得いかないのは、サンプリング点は良いとして、その他の部分例えばx0からx1の間にもアナログ信号はあるので、こいつらの存在をどうするのかという、尤もな疑問がある。いきなり無限界からやって来たデルタ関数に、無理矢理むげな扱いを受けている感を否めない。花は何処へ行ったでなくて、間は何処へ行った。どうやら、間は無に帰った。振幅変調級数という処理をすると、単純に掛け算しているだけなんだけど、間は全てゼロになってしまう。だから元の値には何の意味もない。教えによれば、情報量として寄与しているのは、実はサンプリング点だけで、間は虚仮にしかすぎなくて空である。般若心経ぽい。デルタ関数は肌感覚として、間が空であるとは教えてくれない。振幅変調級数であれば、その処理過程から間違いなく間は空なのだと悟れる。空はゼロなので普通は無視する。でも時々は空にも意味がある。アップサンプリングの時には、その空がゼロが深い意味を持って再び現れてくる。それは又別の話だけど。

 もう一つ標本化定理で引っかかるのは位相の話。同じ3kHzでも位相が違うとサンプリング値は変わる。しかしそれは本来の位相を本当に反映しているのかと。黄緑の波形を見ると、位相も正確に記憶されるのだと直感的に分かる。位相が異なればそれに応じた値が記憶されて、仮にLとRでステレオ信号のように位相差があれば、復調後の3kHzには正確な位相差が出て来る。位相なので、勿論二つ以上の信号は必要。 

 それから通常のDACの出力は、零次ホールド性という特性なので、ここでの話のようなデルタ関数でのサンプリングとは些か違う。でもこれはほんの少しだけ高い周波数でのスペクトルに違いが出るだけで、大勢に影響はない。一瞬だけ存在するような仮想的な出力を想定して解析しても、特に問題はない。

 

 本筋の何故二倍以上のサンプリング周波数が必要かという問いは、振幅変調級数のFFTを見れば自明。サンプリング点以外をゼロにするための処理を行うと、元の本来必要な帯域の上に、最初の振幅変調の側波帯が近付いてくる。それはこの図では、8の24kHzに相当する所が上限になる。この図では、FFTの都合で一目盛が3kHzに相当している。それはつまりサンプリング周波数の半分になる。そこまでは混信しないけれど、ここを超えると混信するのでもう再現は不能になる。

 

 その混信具合は図解すると明らか。被変調波の3kHzに21kHzも混ぜてみる。21kHzは24kHz以下なので混信はしない。薄い灰色が両者の和。

f:id:xx3stksm:20180514205137j:plain

 同じように80個のcosでデルタ関数を代用すると、黄緑のようになる。もちろん、サンプリング点以外は空になっている。つまりはゼロ。その下がFFT。元波形の青は混信しない境界の8より下にあるので復元可能。しかし黄緑は、かなり衝撃的な波形になっている。最初のサンプリング点と次の間は、そこそこ真っ直ぐなので、まあそうかなという感じ。しかしその次は、-0.5から0.13ぐらいまでの間を、ぐにゅっと曲線でつないでいる。これは不自然なようでいて、このつなぎ方以外は宇宙に存在しないと言っている。何故かと言えば、この薄い灰色は3kHzと21kHzのみで出来ている。そして黄緑は下のFFTのようなスペクトルを持つ。これは最初の変調波までしか表示していないけれど、実際には80番目までを含む。24kHzの所で切ってしまえば、残るのは3kHzと21kHzのみでこれは薄い灰色を意味する。つまり、高調波を多く含む黄緑から、24kHz以下のみという標本化定理の制限を実行すると、残るのは元の波形であり薄い灰色になるしかない。24kHz以下のみという切り札を出すと、この曲がったつなぎ方以外は存在しないという結論になる。他も全て同じ。薄い灰色のつなぎ方しか24kHz以下のみという制約下ではありえない。つまり、完全な復元が可能。

 

f:id:xx3stksm:20180514205052j:plain

f:id:xx3stksm:20180514210805j:plain

 ここまで来ると最後の〆。では復元できない時はどうなっているのか。工学的には実物で試す。21kHzではなく27kHzを混ぜてから、振幅変調級数をかけてみる。これです。下はFFT。青が3kHzと21kHzで上の図と同じ。赤が 3kHzと27kHz。理論的に、青は復元できても赤は復元できない。

f:id:xx3stksm:20180514212335j:plain

f:id:xx3stksm:20180514212605j:plain

 なにやら不可思議な事が起きている。青と赤が何処かで交差するのは当然としても、その交差点とサンプリング点が全て一致している。つまり、青でも赤でも関係なく、標本化したデータは両方とも同じ。ユナイテッドとシティーの区別がないという話。会社辞めたり離婚は日常茶飯としても、ユナイテッドからシティーの鞍替えはない。人格を疑われる所業。

 勿論FFTも同じになる。但し、赤と青を区別しなければ。それぞれのスペクトルは違うけれど、意味があるのは全体としてのものだから両者は同じ。23と25の位置が違うのは、最初の変調までしか表示していないため。二番目のまで表示すると、それは25と23の位置に出て来るので両者は同じになる。

 別の言い方をすると、この例の場合は27kHzの存在を許している。そのためにサンプリング点のつなぎ方が唯一つではなくなってしまった。24kHzまでという制限を入れるならば、最初の例のようにつなぎ方は唯一つで復元は可能。完全な復元のために24kHzまでという制限は、つなぎ方を唯一つにするための制約と考えた方が工学的。

 ナイキスト周波数を守らないと折り返し雑音が発生する。この例では、3kHzと27kHzをサンプリングしてから24kHz以上を切った。そうすると、出てきたのは3kHzと21kHzだったという話。これは中々に厄介な問題で、往々にしてどこからこの21kHzはやって来たのかと頭をひねる羽目になる。特に、SSRC等で44.1kHz系から48kHz系に変換した時などに良く出る。通常のデルタ関数の数学的解析では、まずその由来は分からない。泥臭く腹で押し込むボレーシュートみたいな工学的方法論でないと難しい。神の手はなし。それは偶然の産物で科学ではないのだから。