クロックジッタが与えるADCの有効分解能について

ADCにはサンプリングするクロックが存在します。

ADCが正弦波の信号をサンプリングするとき、クロックのタイミングが毎回同じであれば、サンプリング定理を満たしている限り、アナログからデジタルに変換した結果は歪のない正弦波となります。

しかし、ジッタによって、クロックのタイミングがブレてしまうと、ADCの入力信号は歪のない正弦波であるにも関わらず、デジタル変換した結果が歪のある正弦波となってしまいます。

 

既知のジッタ時間Tjと信号の周波数fを使用して、ワーストケースのSNR(SN比のこと)を算出します。

ワーストケースのSNR-20log(2πft_j)となります。

 

最もジッタの影響を受けやすいのは、信号が最大の傾きの時なので、入力信号を微分して、最大の傾きを算出した値にジッタ時間をかけた値がノイズNになりますを

例えば、入力信号がsin(2πft)であれば、信号ゼロクロス時が最大の傾きなので、

sin(2πft)微分して得られた2πfcos(2πft))にt=0を代入して、最大の傾き2πfを得ます。その傾きにジッタ時間tjをかければノイズNになります。

 

ワーストケースのSNR-20log(2πft_j)なので、入力信号の周波数が高く、ジッタ時間が長いほど、SNRは大きくなります。

視覚的には下記になります。sin(ωt)とその周波数が10倍高いsin(10ωt)を用意した時、当然といえば当然であるが、sin(10ωt)のほうがノイズが大きいことが分かります。

f:id:keeptrigger:20200814221144p:plain

 

 

ADCの分解能とジッタ時間によるSNRを下記に示します。

f:id:keeptrigger:20200814232125p:plain


ADCの分解能が16bit、入力信号の周波数が2MHzで、ADCの1LSBまで正しく使用したい場合は、クロックジッタの許容値は1ps以下であることが求められます。ただし、ジッタに対する要求値が案外厳しそうに思えますが、ジッタ時間によるSNRはワーストケースで考えられているため、ジッタの分布頻度や入力信号の緩やかな傾き部分を考慮した上、ひずみ率で考えて目を瞑ることを考えると、ジッタに対する要求値は緩和されます。

また、ADCの下位2,3ビット程度はおまけと言われています。もし使用したいのであれば、ソフトで十分に平均化する必要があるでしょう。 

パッシブ素子(抵抗,コイル,コンデンサ)のE系列について

パッシブ素子はE系列の等比級数を丸めた標準数を使用しています。

たとえば、1kΩ、3.3kΩ、4.7kΩというような半端な数値です。

半端な数値を使用することで、限りある値の少ない組み合わせで、目的の値を作りやすい利点があります。

素子の組み合わせを利用しやすいパッシブ素子には経済的有効であるため、E系列が採用されています。

 

E3 E6 E12 E24   E48
10 10 10 10 100 105
      11 110 115
    12 12 121 127
      13 133 140
  15 15 15 147 154
      16 162 169
    18 18 178 187
      20 196 205
22 22 22 22 215 226
      24 237 249
    27 27 261 274
      30 287 301
  33 33 33 316 332
      36 348 365
    39 39 383 402
      43 422 442
47 47 47 47 464 487
      51 511 536
    56 56 562 590
      62 619 649
  68 68 68 681 715
      75 750 787
    82 82 825 866
      91 909 953

 

第1種のベッセル関数

搬送波cos(ωct)をωmで位相変調します。

g(t) = Acos(ωct + ΔΦcosωmt)

 

周波数ごとに整理します。

g(t) = Ac [

 J0(ΔΦ)*cos(ωct)

+ J1(ΔΦ) { cos(ωc+ωm)t - cos(ωc-ωm)t }

+ J2(ΔΦ) { cos(ωc+2ωm)t + cos(ωc-2ωm)t}

+ J3(ΔΦ) { cos(ωc+3ωm)t + cos(ωc-3ωm)t}

+・・・ ]

 

この時のベッセルJnを下記に示します。

f:id:keeptrigger:20200802223326p:plain

ベッセル関数Jn

このグラフが読み取れることは下記になります。

ΔΦが十分小さい場合は、スペクトルがJ0のみ。

ΔΦが大きくなるにつれて、J1以降のスペクトルが増え、大きくなる

ΔΦが約1を超えると、J0よりもJ1以降の成分が強くなり、人がJ0を判別するのは至難の業になる。

 

S/Nの見方でとらえれば、SがJ0、NがJ1以降となる。J1以降の影響を抑えたい場合は、ΔΦが10度以下の条件が望ましいこととなる。

MATLABでの標準分布発生方法

MATLAB記述

r = randn([1,10000])

 

●randnで出力rを解析

 

項目
平均値μ -0.012
最小値 -3.458
最大値 3.858

 

  点数 確率
標準偏差σ 0.988 6834 68.3%
標準偏差 1.977 9546 95.5%
標準偏差 2.965 9969 99.7%

 

標準偏差

f:id:keeptrigger:20200725233739p:plain

借用元

https://www.researchgate.net/figure/Normal-distribution-plot-with-indication-of-sigma-s-levels-and-corresponding-percentage_fig16_307477421

 



matlab AD変換

matlabでのAD変換の記述方法。

simulinkはよく見かけるが、matlabのコマンド入力はなかなか見かけません

 

●概要

正弦波±1をn bitでAD変換します。

 bitの数値を変更することで、任意の分解能に変更が可能です。

 

●コード

fs=1000;

t=0:1/fs:1;

bit = 3;

y=0.5*sin(2*pi*1*t)+0.5;

digi_y = (1/(2^bit-1)*round((2^bit-1)*t-0.5)*2;

plot(digi_y);

●結果

青グラフはsin(2*pi*1*t)を後から追加しました。

f:id:keeptrigger:20200719221010p:plain

±1正弦波を3bitAD変換した結果