0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ADCの分解能計算とサンプリングについて考えてみた

Last updated at Posted at 2024-10-20

目次

  1. はじめに
  2. ADC is 何
  3. 分解能について
  4. サンプリングについて
    1. 標本化定理(サンプリング定理)
    2. ナイキスト周波数
    3. エイリアシング
    4. オーバーサンプリング
    5. アンダーサンプリング
  5. おわりに

はじめに

ADCの使い方全然わからん。。。
そもそもサンプリング定理の理解もおぼつかない。。。

となったので、ADCの分解能とサンプリング定理について調べてまとめてみました。

ADC is 何

Analog to Digital Converter 略して、ADC。

アナログの電気信号をデジタルの電気信号に変換してくれる回路のことを指します。

ADCの信号の受けにはオペアンプがいまして、コンパレータとして使用されます。

コンパレータは、反転入力端子と非反転入力端子に入力された信号を見て High か Low を出力するのですが、端子に入力される信号を電圧ごとに区切ってやることで、複数bitの信号出力が可能となります。

この「コンパレータを使ってアナログ信号を特定の電圧ごとに区切って複数bitの信号に変換を行う回路」のことを、一般にADCと呼んでいるわけです。

アナログ信号はデジタル回路に直接入力することができないので、ADCを用いて量子化を行い、デジタル信号に変換してから入力しています。

センサーや無線信号なんかはアナログ信号ですから、ADCを使ってデジタル信号に変換してやることで、データとして解釈が可能となるわけですね。

分解能について

ADCはサンプリング時のbit数によって分解能が決まっています。

例えば、0V~5Vの入力で10bitのサンプリングを行うADCの場合、5Vを $2^{10} = 1024$ 通りに分割して解釈します。

このとき、「00_0000_0001」のことを1LSBなんて言ったりすることがあります。

(1LSBは1bitとは違います。6LSB だとか 114LSB だとか 386LSB などの10bitの中で好きな値を取るときに用いる表現で、bit数とは考え方が異なります。)

ここで問題になるのが、割る数を 「1024とする」 のか 「1023とする」 のかです。

もちろんADCの構造によるので、どちらの方が正しいと言い切ることはできませんが、ADCに構造的な制約がないと仮定した場合に「1024とする」のと「1023とする」のはどちらが正しいか、という話です。

1024とする場合は、0も含めて0~1023まで分割するつもりで計算しています。

対して1023とする場合は、デジタル表現の最大値が「11_1111_1111」(10進数で1023)であることから、「マイナスの0を省いて考えるから1023通りじゃん!!」と解釈する、または「0は0であって幅を持つのはおかしい」と解釈して、1023で割るつもりで計算しています。

\frac{5[V]}{1024} = 4.8828... [mV]
\frac{5[V]}{1023} = 4.8875... [mV]

どちらが正しいか、ちゃんと考えてやればわかりますが、

正解は 「1024」 で割るのが正しいです。

10bitADCの「00_0000_0000」と「00_0000_0001」の間は、電圧を持ちます。ADCの0というのは、0Vのみを指す値ではなく、$0V ~ 4.8828... [mV]$ 未満の電圧値を表します。

考え方としては、数学的に言えばガウス記号を使ってグラフ上にプロットしています。工学的に言えばスレッショルド電圧みたいなもので、1bitのON/OFFの問題だと思います。
1023で割ってしまうと0の扱いがおかしいので、間違いに気が付くと思います。

ただインターネットを見ると、1023で割るのか1024で割るのか、解釈が人によって分かれていますね。。。

サンプリングについて

アナログ信号を一定時間毎に量子化することを「サンプリング」と言います。
ADCは、アナログ信号をサンプリングしてデジタル信号の列に変換しています。

とても良い参考↓
やる夫で学ぶディジタル信号処理

サンプリングした波形を以下に示します。

サンプリングする点が少ないほど波形はギザギザになります。

4点くらいであっても、元の波形のHighかLowかくらいしか判別できなさそうです。

標本化定理(サンプリング定理)

「離散的な信号を連続的な信号に変換する」または「連続的な信号を離散的な信号に変換する」ことを考えると、「元の信号の情報が跡形もなくなっているのに、元に戻すことなんて可能なのか?」という疑問が出てきます。

その疑問に数学的に答えた定理が 標本化定理(サンプリング定理) となります。

これのすごいところは、この定理さえ守っていれば、「連続的な変化を離散的な変化に変換すること」、「離散的な変化を連続的な変化に変換すること」を許している、ということです。

概要はこちら↓

要は、サンプリングで基準としている時間の2倍の時間を超えた信号であれば完全に復元できると言っています。

例えば、1秒ごとにサンプリングしているのであれば、2秒よりちょっと長い時間信号を保持すれば、サンプリング前の信号を復元できるというわけです。

工学的には、基準信号の周波数で考えるので、逆数を取ることになります。1Hzの信号は、2Hzを超える基準信号でサンプリングすることで、復元が可能となります。

これを守らないとどうなるかというと、

「エイリアシング」という現象が発生して、元の波形を復元することができなくなります。

ここで、サンプリングに使用する基準信号の周波数「サンプリング周波数」 と名前を付けます。

ナイキスト周波数

ナイキスト周波数というのは、サンプリング周波数の半分の周波数のことを言います。

サンプリング定理を満たす周波数というのは、ナイキスト周波数がサンプリングしたい信号の周波数よりも大きくなければいけません。

結構重要な概念ですね。

エイリアシング

サンプリング定理を守らなかった結果発生する信号の歪みです。
エイリアシングが発生すると、どうあがいても元に戻せません。

ここに書かれていますね↓
やる夫で学ぶディジタル信号処理_5. 離散時間フーリエ変換
やる夫で学ぶディジタル信号処理_10. サンプリング定理

サンプリングすると、周波数領域に周期的なスペクトルが現れるので、サンプリング定理を守ってやればエイリアシングは原理上発生しない、というわけですね。

つまり、

アナログ信号の情報を持つデジタル信号は、周波数領域に周期的なスペクトルを持つ信号

ということになりますね。1

オーバーサンプリング

ナイキスト周波数を信号の周波数よりも大きくすると、エイリアシングしなくなる、という話をしました。

じゃあ、ナイキスト周波数をもっと大きくしていったらどうなるかというと、元の波形を細かくサンプリングしていくことになりますから、量子化で発生する誤差は小さくなっていきます。したがって、元の波形を復元した時に発生するノイズは小さくなっていくことになります。

これを オーバーサンプリング と言います。

アンダーサンプリング

では、ナイキスト周波数を信号の周波数よりも小さくしていったらどうなるでしょうか?

「サンプリング定理があるのだから、考えるだけ無駄。エイリアシングが発生して元の信号が復元できなくなるだけでは?」

などと考えてしまいますが、違います。

ここ↓ に書かれていますが、周波数領域では繰り返しが発生しています。
やる夫で学ぶディジタル信号処理_10. サンプリング定理

つまり、サンプリング定理を満たすようにサンプリング周波数を設定してやり、そのサンプリング周波数の半分であるナイキスト周波数を整数倍に設定してやれば、エイリアシングが発生しない関係性を保ったまま、サンプリング周波数を高くしたり低くしたりすることができるってわけです。元の信号の周波数を変えずに、復元される信号の周波数を変更することができます。

これはすごいことです。インチキです。

例えば、100MHzの信号をサンプリング周波数50MHzの基準信号でサンプリングしてもエイリアシングが発生せずに復元可能と言っています。

これを聞くと、サンプリング定理の「信号の周波数よりも基準信号の周波数(サンプリング周波数)を高く設定しましょう」という話はなんだったのかと問いただしたくなります。

…まあ、サンプリング定理の理解が雑なんですよね。

「信号の周波数よりも基準信号の周波数(サンプリング周波数)を高く設定しましょう」というのは、元の信号の周波数がサンプリング周波数まで の限定的な範囲のお話だったわけです。

復元後の信号の周波数まで、元の信号の情報を残したいと考えるのであれば、「信号の周波数よりも基準信号の周波数(サンプリング周波数)を高く設定しましょう」で良いわけですが、「復元後の信号の周波数が変わっても相似な波形が取り出せれば良い」 と考える人は、考え方を変える必要があります。

元の信号の周波数がサンプリング周波数よりも高い周波数の場合、サンプリング定理をもう少し丁寧に見ていくと、「元の信号の帯域 の 2 倍を超える周波数でサンプリングすれば、元の波形を復元できる」となることがわかります。

要約すれば、「復元した後の信号の周波数がナイキスト周波数未満となるようにサンプリング周波数を設定する」 ということです。

というわけで、

「復元した後の信号の周波数がナイキスト周波数未満となるようにサンプリング周波数を設定する」ことができれば、サンプリング周波数の整数倍の範囲で元の信号の周波数を高くしたり低くしたりすること

ができます。23

この原理を使って、サンプリング周波数よりもはるかに高い周波数の元の信号をサンプリングすることを 「アンダーサンプリング」 と言います。

また、この技術はダイレクトコンバージョン方式の受信機に使われる技術となります。

以下に、エイリアシングの影響を無視して信号の周波数を上げていったときの例を示します。(追記_2024/10/31)

上図は、1周期32回のサンプリングで固定して、信号の周波数を2の累乗倍していった結果です。
したがって、ナイキスト周波数は16回となります。

信号の周波数を高くしていくと、復元後の信号の周波数が高くなっていて、サンプリング定理を満たせない周波数を設定するとエイリアシングが発生しています。

以下に、アンダーサンプリングの例を示します。(追記_2024/10/31)

上図は、1周期32回のサンプリングで固定して、信号の周波数を2の累乗倍していった結果です。
したがって、ナイキスト周波数は16回となります。

信号周波数の0倍~15倍までをひと固まりとして変化。
16倍~31倍までで、0倍~15倍を鏡写しにしたように変化する。
また、0倍と31倍は、直流信号となる。

グラフを見ると、ナイキスト周波数の半分未満の周波数に抑えると、歪みなく変換できそう。

また、周波数がマイナスの例を示します。

復元後の信号の位相が反転していますね。

つまり、

サンプリング周波数をマイナスに設定すると、復元後の信号は位相が反転する

わけですね。45

追記_2024/10/28

このあたりの内容を読むと、積極的に折り返しを発生させることで、アンダーサンプリングが行えると書かれています。

折り返しを発生させるとエイリアシングが発生する場合があるため、帯域制限フィルタを付けることでエイリアシングの影響を取り除きます。

エイリアシングが発生しないように、ADCの入力側にフィルタを付ける場合は、このアナログ側に設置するアナログフィルタを「アンチエイリアシングフィルタ」と呼びます。これに対して、ADCのデジタル側に付けるデジタルフィルタには特に名前がありません。

サンプリングする信号とサンプリングの基準信号によっては、デジタルフィルタを設置して帯域制限を行うことで、エイリアシングの影響を取り除くことができます。しかし、場合によってはデジタルフィルタで実装不可能なレベルの急峻な特性が求められることがあり、この場合はエイリアシングを完全に取り除くことができません。

つまり、「アンチエイリアシングフィルタ」というのは、「元の信号にノイズが混じった場合、フィルタで取り除けますよ」 ということが言いたいのであって、元の信号とサンプリング周波数の関係性によって発生するエイリアシングは、アンチエイリアシングフィルタによって取り除くことができません。 デジタルフィルタを用いて無理矢理エイリアシングの影響を除去することも考えられますが、デジタルフィルタの特性を考えると限度があります。

したがってこの場合は、サンプリングする信号とサンプリングの基準信号の関係を変えて、原理上エイリアシングが発生しないように、設定し直してやる必要があるわけです。

この「原理上エイリアシングが発生しない条件」が、「復元した後の信号の周波数がナイキスト周波数未満となるようにサンプリング周波数を設定する」ことができれば、サンプリング周波数の整数倍の範囲で元の信号の周波数を高くしたり低くしたりすることが可能 となるわけです。

おわりに

ここまで調査したのですが、ADCによってはマイナスの値を取ったときにMSBが 1 となるようにロジックが組まれているものもあります。
この場合、マイナスの0が生まれるので、10bitADCの場合1023で正しいわけです。
なので「ADCに構造的な制約がないと仮定した場合」と注釈が付きました。

また、サンプリング定理の数学的な理解が追い付いていないので、アンダーサンプリングの理論的な説明が雑です。
どなたか、助言をいただけますと、助かります。。。

まあ、総評して「ADCよくわからん」!!

  1. …この 周波数領域に周期的なスペクトルを持つ信号 って時間領域に変換するとアナログ信号的にはどうなるんでしょうね?
    サンプリングした点を通るような信号が1周期以内であればどの周波数まで入っても復元可能とか…?
    …ん?それって、デジタル信号の1CLKは $0~2π$ の位相変化しか許されていないってことになるのでは…?
    そうなると、アナログ信号に変換した際に1周期以上位相をズラしたい場合は、デジタル信号で1CLK Delayする必要がある…?
    しかもそれってデジタルデータの加算だからフィードバックじゃね?
    よくよく考えたらそれ以降のデータも1CLK Delayするのだから、フィードバックは成り立たないですね。。。
    ただ、「1CLK前の情報を保持して次の周期に加算するとフィードバックとなる」という考え方は大切そうです。→デジタルフィルタ

  2. つまり、サンプリング定理というのは、「サンプリング前の信号の周波数 がサンプリング定理を満たしているか」ではなく、「復元後の信号の周波数 がサンプリング定理を満たしているか」を見ているわけですね。

  3. ちなみに、サンプリング定理を守った状態で、ある信号をサンプリング周波数fsでサンプリングしたときに、復元後の信号の周波数をfcとすると、
    第一ナイキストゾーンにあるべき信号の周波数は+fc
    第二ナイキストゾーンにあるべき信号の周波数は-(fs-fc)
    第三ナイキストゾーンにあるべき信号の周波数は+(fs-fc)
    第四ナイキストゾーンにあるべき信号の周波数は-(2fs-fc)
    となる。周波数設定の参考(第四ナイキストゾーンの周波数設定間違っていません?これ…)→ PG269
    つまり、100MHzの信号を低い周波数でサンプリングするのであれば、サンプリング周波数60MHzで20MHzの同相の信号にダウンサンプリングできる、と計算できます。
    第五ナイキストゾーンからのダウンサンプリングとなります。
    →計算やり直し中
    100MHzの信号を低い周波数でサンプリングするのであれば、サンプリング周波数60MHzで20MHzの逆相の信号にダウンサンプリングできる、と計算できますね。
    第四ナイキストゾーンからのダウンサンプリングでした。
    また、サンプリング周波数を40MHzに設定すると、サンプリング定理に引っかかって100MHzのサンプリングが出来なさそうですね。

  4. サンプリングすると、元の信号に対して、同相の信号のイメージと、逆相の信号のイメージができます。
    これは、サンプリング周波数を中心とした変調波のように信号ができるため、サンプリング周波数の整数倍の上と下にイメージがくっついて遷移します。
    この遷移してくる帯域を「ナイキストゾーン」と呼び、元の信号に近い周波数の側から、第一ナイキストゾーン、第二ナイキストゾーン・・・と呼びます。
    したがって、奇数側は同相、偶数側は逆相の信号となります。
    このとき、ナイキストゾーン1つ分の帯域幅が「ナイキスト周波数」となります。アナデバの MT-002 とか読みましょう。

  5. 今回はADCのお話を最初にしていたため、サンプリング定理についてもADCに内容を寄せました。
    ではDACの場合、アンダーサンプリングがどうなるかというと、サンプリング周波数を適切に設定すれば、元の波形を復元できるどころか、元の波形よりも高い周波数の信号を出力することが可能となります。
    アンダーサンプリングはアナログ信号を低い周波数でサンプリングすることによって、ダウンコンバートすることが肝なので、DACには適用されませんでしたね。。。間違っていました。申し訳ありません。
    DACはデジタル側で帯域制限してやれば、高い周波数も低い周波数も再生できます。したがって、高い周波数の信号を出力するには、高いサンプリング周波数で動作可能なDACが必要になりますね。(追記_2024/11/04)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?