ttl_weblabo

TNJ-015:ADCやDACの変換動作と信号演算処理である畳み込みや掛け算との関係を考える

2015年11月2日公開

この資料をPDFでダウンロード

 

はじめに

ADコンバータDAコンバータは実時間連続信号と離散信号(デジタル値)の間で変換動作がなされています。この技術ノートではその辺の理論的な考え方について説明していきます。あわせてADCのクロック・ジッタとSNR(Signal to Noise Ratio; SN比)の関係がどうなるのかと、DACのクロック・ジッタとSNRの関係がどうなるのか、こんな話題も考えてみたいと思います。

さて、図1はデジタル信号処理の超定番の書籍、A. Oppenheim, R. Schafer; Digital Signal Processing, Prentice Hall.です。この写真に付箋が見えますが、この本のp.26、1.7 Sampling of Continuous-Time Signalsのところにしおりとして挟んでおりました。ここでは実時間信号をどのように離散信号に数学的に変換していくのかが、複数の式で説明されていますが、どうも釈然としません。そんな話題を示してみたいと思います。

このネタは技術ノート「TNJ-013:高速差動アンプの構築とそこで生じた負性抵抗の解析」や「TNJ-014:DACの妙技「MIX MODE」をデジタル信号処理の理論的視点から考える」でも若干踏み込んで説明しています。それと関連した話題の技術ノートだと考えてください。

 



図1. デジタル信号処理の超定番の書籍
Digital Signal Processing

ADCのサンプリングは時間軸での掛け算?畳み込み?(答えは時間軸では「掛け算」)

以前、あるエンジニアの方とのディスカッションで、図1の本ではない他書(邦書のデジタル信号処理の本)を参考にして、「ADCのサンプリングで得られた値というのは、時間軸でのインパルス信号列と実信号との畳み込みですよね」とお話させていただいていました。

しかし、その方からは「時間軸では掛け算じゃないの?」というコメントをいただいたのでした。理想的なADCのサンプリングとしては、デルタ関数δ(t)を用いた、時間tの変数として表される等間隔のサンプリング・インパルス列


TNJ015_EQ1

と実信号の積ではないか?(ここでT_sはサンプリング周期)というお話なのでした。この式(1)と「実信号との積」という話を、図2として図式化してみました。このときのディスカッションはそれで終了。その会合は散会となったのでした。

さてその日は帰りの電車でも、自分のサル知恵では「うーむ、これは分からん…」ということであり、それ以降も長い間、ずーっと考えていました。結果的には自身の辿り着いたところでは、このエンジニアの方にお詫びと訂正をしなければなりません…。



図2. 式(1)を図式化してみる

 

別のエンジニアの方からのお話…ADCのサンプリングは時間軸では「掛け算」なんだ!

別のときに別のエンジニアの方とお話する機会がありました。さきの話題を出したところ、その方は以下のように説明していただけました…。「AD変換において、このサンプリング・インパルス列sp(t)のフーリエ変換対Sp(ω)もまた、周波数軸上でのインパルス列になるんですよ」「またサンプリング動作を『時間軸で掛け算』だと考えると、ADCのサンプリング結果を周波数軸上で見てみると、元の実信号のスペクトルとサンプリング・インパルス列のスペクトルSp(ω)との畳み込みになって、結果的にサンプリング周波数の整数倍の周波数の上下に実信号のスペクトルが見えるようになるんですよね」

なるほど…。ということでこの様子も図3に図式化してみました。なお畳み込みの概念については、TNJ-013でも説明していますし、拙書の「合点!電子回路超入門」[1]でも説明しています。

その方のお話は続きました…。「こう考えるとナイキスト周波数より高い周波数の部分がオーバーラップする(折り返される)ことも綺麗に説明できますよ」

 
図3. サンプリングの説明を時間軸と周波数軸で図式化してみる
(実信号がサンプリング・インパルスのフーリエ対、
簡単にいえばサンプリング周波数の複数倍で折り返された形でみえる)

 

A/D変換は時間軸では掛け算なんだ!

なるほど…。最初の話のように、私は今まで長いあいだ、「A/D変換のサンプリング動作というのは、時間軸で畳み込み」だとばっかり思っていたのでした…。私が見た(これまで見たなかですが)デジタル信号処理の書籍にも、サンプリング動作を畳み込みで説明されているものがあり、それでずっと「畳み込みなのね」と思っていたのでした。

最初のエンジニアの方とのディスカッションの中で「A/D変換は掛け算では?」というお話をいただいていて、それから自分も「?」とかなり長いあいだ考えていたものです。ましてや、その方とのディスカッションのあとに、図1の本をあらためて読んでみましたが、これがまた記述が曖昧でよくわからず…。

背理法的に考えてみる

最終的に別のエンジニアの方のインプットをベースに、「背理法的」に考えてみました。もしサンプリング動作が時間軸で畳み込みなのだとすれば、それは周波数軸上では乗算になるはずです。しかしそのような論理展開では「サンプリング周波数の整数倍の周波数の上下に」元の実信号のスペクトルが配置されることが説明できません(この背理法での説明はTNJ-014にもう少し詳しく説明してあります)。

これにより漸く(今更)本質のところに辿りつくことが出来ました。ひとつ大きな山を越えた感じがしました。

 

アナログ・デバイセズのアプリケーション・ノートにも

なおA/D変換のサンプリングが、式(1)でのサンプリング・インパルス列であるデルタ関数δ(t)との掛け算なのは、たとえばアナログ・デバイセズのアプリケーション・ノート

AN-756:サンプル化システムに及ぼすクロック位相ノイズとジッタの影響 (英語版:Sampled Systems and the Effects of Clock Phase Noise and Jitter

にもp. 2にも以下のような記載があります。

“While the sampling process can be considered a multiplication in time and convolution in the frequency domain,”

ここでconvolutionは「畳み込み」という意味です。

しかし某所でも「論文とか本とかも間違いが結構多い」という著名な方の発言もあり、「うーむ(汗)」とも思っていました(笑)。このエンジニアの方からも「このあたりは、理学あるいは数学と工学の谷間なのか、判りやすく書かれた本が少ないように思います」というコメントもいただきました。

 

一方DACは時間軸では畳み込みで、周波数軸では「掛け算」

ADCでのサンプリング動作は「時間軸ではサンプリング・インパルス列との掛け算で、周波数軸では畳み込み」というのはここまで説明してきたとおりです。

一方でDACについてはこれが逆で、図4のように「時間軸では(DAC出力値で重みづけされた)サンプリング・インパルス列とテンプレート波形との畳み込み、周波数軸では掛け算」になります。この詳しい説明については、TNJ-014に記載してありますので、是非そちらをご覧いただきたいと思います(この技術ノートでは深く説明しません)。

すくなくとも「A/D変換もD/A変換も、コンバータ信号処理としてはアナログ領域とデジタル領域間を変換しているわけだが、振る舞いとしてはだいぶ異なるもの」と言えるかと思います。

ということで、ADCとDACの変換動作と信号演算処理である畳み込みや掛け算との関係を紐(ひも)解くことができました。つづいてこの話を、サンプリング・クロックのジッタと信号波形や変換値との関係に広げてみたいと思います。

 

図4. DACは時間軸ではサンプリング・インパルス列
との畳み込みで、周波数軸では掛け算

 


サンプリング・クロックのジッタとADCやDACの信号波形や変換値の関係を考える

次にサンプリング・クロックのジッタとA/D変換値やD/A変換信号波形との関係を、この掛け算と畳み込みと関連付けて考えてみたいと思います。

 

A/D変換の場合は信号周波数でジッタによるSNRが変化する

A/D変換におけるサンプリング・クロック(ここまで言うところのサンプリング・インパルス列)がクロック・ジッタを持っていると、A/D変換した結果のSNRが低減します。クロック・ジッタのrms量(単位はラジアン)をσ[radian]、クロック周波数fC [Hz]、A/D変換のアナログ信号周波数をfA [Hz]とすると、SNRは


TNJ015_EQ2

で表されます。これはアナログ・デバイセズのアプリケーション・ノートAN-741に詳しい説明がありますので[2]、是非ご覧ください。

この式(2)から分かることは、サンプリングされた信号のSNRは、クロックとアナログ信号の周波数比によって変わります。アナログ信号周波数が高くなるにつれてSNRは低下します。つまりアンダー・サンプリング(信号周波数がナイキスト帯域よりも上となり、その折り返しをA/D変換結果として得る変換方法)の方がベースバンド・サンプリング(ナイキスト帯域内で動作させる変換方法)よりもはるかに良い位相ジッタを持つクロックが必要になるわけです。

実はこのAN-741の説明、そして式(2)が得られる過程としては、ADCでのサンプリング動作は「時間軸ではサンプリング・インパルス列との掛け算」という考えを使っています。それによりA/D変換した信号のSNRが低下することになります。

 

D/A変換の場合は信号周波数が変わってもジッタによるSNRがしない

一方でD/A変換におけるサンプリング・クロックのクロック・ジッタによる影響は、A/D変換と比較して低くなります。AN-741では(若干式変形してみましたが)

TNJ015_EQ3

と表されており、「したがって、DAC からの位相ノイズは高周波数では増加しません」と書いてあります。実はこれはD/A変換では「時間軸では(DAC出力値で重みづけされた)サンプリング・インパルス列とテンプレート波形との畳み込み、周波数軸では掛け算」ということと関係しています。

時間軸でのジッタというのが、そのまま源信号データ列(に相当する信号波形)と畳み込みされていることにより、こうなります。このAN-741は非常に良いアプリケーション・ノートなのですが、説明が難解というところも一方であるので、別途、私もこの技術ノート・シリーズで詳細に解説してみたいと思っています。

 

(余談)これまでの素朴な疑問を開陳してみる

どうも現実と数学の繋がりというのは、なんとも難しいところもありますね。馬シカをさらすつもりで(笑)、自分のこれまでの(過去からの)時間領域と周波数領域との関係に関する疑問を以下に書いてみます…。アカデミックな分野の方々には「コイツわかってねーな」と言われそうですが(汗)。

 

パーセバルの定理と時間軸・周波数軸それぞれで見たエネルギー

パーセバルの定理(Parseval's theorem)からすれば、時間領域エネルギーと周波数領域エネルギーは一緒…とあります(たとえばwikipedia)。

インパルス関数は時間軸で積分すると"1"、周波数軸ではp(ω) = 1ですからω→∞で積分すると発散しますよね。インパルス関数が超関数だから良いのでしょうか?

このネタには先のエンジニアの方からも「いやぁ、みんな同じ疑問を持つんだなぁ~」というコメントを頂けたことも大変うれしいものでした(笑)。

インパルス関数はいろいろな定義ができるようですが(たとえば、松尾博; やさしいフーリエ変換 [3])、ここではsinc関数で考えてみました。図6は時間軸としてのsinc関数(の自乗 = 瞬時電力)波形、図7はsinc関数のフーリエ変換対(rectangular…つまり矩形形状、Y方向は補正なし)です。この左の時間軸が極限になっていくと、右側の周波数軸が極限まで伸びていく、というかたちでインパルス関数を定義する(ひとつの考えの)ようですね。

この図6や図7のままだと、時間領域と周波数領域のエネルギーはt → ∞やω → ∞でそれぞれ収束しています。ここでsincパルスの時間での極限を考えると…ということでしょうか?でも、そうすると周波数領域上で周波数方向にパルスに矩形形状が引き伸ばされていくわけですから、これでは任意のωでp(ω) = 0になっていくわけで、本来のインパルス関数である「周波数軸ではどこでもp(ω) = 1」ではないですね…。

 

図5. 時間軸としてのsinc関数(の自乗 = 瞬時電力)波形

 


図6. sinc関数のフーリエ変換対(rectangular…つまり
矩形形状)Y軸は正しい大きさとして補正していない

 


関係ないがクーロンの法則とマクスウェルの方程式

全然関係ないのですが、クーロンの法則

TNJ015_EQ4 

は「実験式」だそうですね!距離r2はぴったり自乗ではなく、2+δの未知数が(未だに)あるのだとか…(電磁気学の教科書に記載があります)。でもガウスの定理などはぴったり2として考えていますし、それからマクスウェルの電磁波が導かれて、高精度な理論が成り立っていますが、さて、この「δ」と二つの公式はどう繋がるんだろうか?とも思ったりしています。

 

0.9が1なのは気持ち的に受け入れがたい(?)が…

数学では0.999…で無限に9が続く「0.9」は = 1だそうですね。これもデンキ屋としては、やはりどうも気持ちが受け入れてくれません…。とか言いつつ、「過渡現象で十分時間が経てば最終値」とか何とか言ってますね…(笑)。

 

 

この資料をPDFでダウンロード

ttl_weblabo