« ET/IoT 2021に行ってきました | トップページ | 鋭いパルスを作る回路 »

2021.11.19

等価サンプリングの一般化

高速ADCを使った等価サンプリング回路を作っています。

ADCのサンプリング周期がTだとすると、ある時刻にADCでサンプリングした後の2回目のサンプリングタイミングは2Tです。3回目は3T・・・となっていきます。

ここで、10000Tで1周するような周期的な波形を考えます。ただし、10000Tぴったりで一周するのではなく、信号源の周波数とADCの周波数が少しだけずれていて、10000.14Tで一周するとします。

すると、2周目の最初の時刻は10000.14Tになります。3周目は20000.28Tになります。

 

Eqs_20211123194301

この信号が周期10000Tで一周する信号であれば、サンプリング周期よりも短い0.14Tという刻みで信号を測定することができるようになるはずです。

実際にこのようなプログラムを組む時に2週目はどれだけずれるから・・と考えてn番目のデータは時刻何nsに相当するのかというプログラムを組もうとすると非常にややこしかったのですが、C#のListとSortを使って並べ替えをすることで非常に楽にできました。

まず、時刻とデータの組となるクラスを作ります。

public class EqSamplingTime
{
public Int64 time;
public ushort data;
public EqSamplingTime(ushort data,Int64 time)
{
this.time = time;
this.data = data;
}
};

そして、このクラスのリストを作り、サンプリングしたデータを次々と登録していきます。

List<EqSamplingTime> est = new List<EqSamplingTime>();
for(int i=0;i< K * 10000; i++){
est.Add(new EqSamplingTime(buf[i], (Int64)((sampling_period * i) % 100000000)));
}

そして、最後に

est.Sort((a, b) => (a.time == b.time) ? 0 : ((a.time > b.time) ? 1 : -1));

で一発で時刻どおりに並べ替えてソートです。

実際にやってみましょう。

まずは1倍サンプリングです。

Eqs1

100MHzでサンプリングしているので、サンプリング間隔は10nsです。

次は2周分の波形を合成します。細かい部分が約1.5nsとなりました。

Eqs2

次は3周分

Eqs3

次は4周分を合成。

Eqs4

5周分

Eqs5

6周期

Eqs6

7周期でほぼ点がつながりました。

今回は送信側周波数と受信側周波数が14ppmずれていて、10000ポイントのサンプリングなので7周期ということになるのでしょう。このへんの計算は割り算したりあまりを取ったりということでややこしいです。

Eqs7

7回でほぼ一周するので、サンプリング周波数は等価的に700MHzになりました。

 

8周期目になると最初の点と8回目の点が非常に近くなるので、

Eqs8

等価的に時間差は200ps前後になります。

Eqs8s

これでサンプリング周波数が5GHzになったかというと、そうではなくて、誤差の積み重なり(計算アルゴリズムの間違いかも)によって波形がガタガタになります。

Eqs24

 

今回は、信号を送信する波形のクロック周波数と受信するクロック周波数が14ppmずれていて、7倍の等価サンプリングが可能でした。

この周波数のずれ小さいほど高い倍率での等価サンプリングが可能になります。水晶の温度が変わったりすると倍率も変わってくるので、ある意味、運任せといえます。

 

|

« ET/IoT 2021に行ってきました | トップページ | 鋭いパルスを作る回路 »

コメント

コメントを書く



(ウェブ上には掲載しません)




« ET/IoT 2021に行ってきました | トップページ | 鋭いパルスを作る回路 »