FPGAで作る任意波形発生器(4/4 ページ)
生物医学などの分野で用いられる機器に対しては、信号の周波数を正確かつ高精度に設定したいという要求がある。そうした用途に適用可能な任意周波数/波形発生器を実現するには、FPGAを利用すると便利である。本稿では、任意周波数発生器の基本原理やその実現方法、任意波形発生器への展開方法を具体例を基に示す。
ジッターの大きさ
図2のシステムでは、波形精度にサンプリングクロックのジッターが影響を及ぼす。サンプリングクロックのジッターとは、時間軸上で見て、サンプリングクロックパルスが本来あるべき位置から変動する現象である。ジッターが過大になるとD-Aコンバータ出力の波形が歪(ひず)むことになる。では、位相アキュムレータを用いたクロック発生器のジッターはどのようになるのだろうか。
先ほど示した20MHzのクロックを基に出力周波数を生成する例について検討してみよう。なお、話を簡略化するために、20MHzのクロック自体にはジッターは存在しないものと仮定する。
最初の例では周波数10MHzのクロックを生成した。理想的には出力クロックパルスは100ns周期になる。表1に示したように、24ビットの位相アキュムレータは、クロック入力ごとにカウント値が838万8608だけ増え、MSBの値が1→0または0→1のいずれかに変化する。その結果、ジッターのない正確な10MHzの周波数信号が出力される。
一方、2つ目の例では、位相アキュムレータのカウント値がクロックごとに838万8607だけ変化することによって、9.999998808MHzの周波数が生成される。表2において、2個目のクロックから周期が始まると仮定すると、MSBは1つ目の例と同じように、1→0または0→1の遷移を正確に繰り返すことになる。この場合、MSBの変化は、理想値である50.00000596ns周期にはならず、50ns周期となる。つまり、遷移が当初の設計より少しだけ速まるわけだ。この実際の値と理想値の差である0.596×10−14sがジッターとなる。表2に示すように、838万8608個目のクロックのタイミングで、蓄積されたジッターが入力クロックの1周期分である50nsになる。表2に赤字で示した個所のように、入力クロック1個に対してMSBの遷移が1回スキップすると、MSBの遷移に対応する出力パルス列は50nsだけ遅延することになる。以上のように、位相アキュムレータのジッターは入力クロックの周波数によって決まり、これによりサンプリングクロックの誤差が決まる。クロック周波数が高くなるほどジッターは小さくなる。
周波数変調信号
次に、任意波形発生器から周波数変調信号を得る方法について考えてみる。周波数変調波が得られれば、心拍がゆっくりと、あるいは急激に変化するような症状を模擬できることになる。そのため、高機能なECG擬似信号発生器が実現できる。
周波数変調の原理は簡単である。これを実現するには、マイクロコントローラがカウントするΔNの値を周期的に変更してFPGAに送出する。FPGAは、変更されたΔNの値を受け取ると、その値に対応して位相アキュムレータのカウント値を進ませる。これに即応して出力周波数が変化するという仕組みだ。
本稿で述べたように、FPGAを使用すれば、位相アキュムレータ方式の任意周波数/波形発生器を容易に構成することができる。周波数の事前設定や動的な変更も簡単である。この方式は、出力信号の周波数分解能が明瞭に把握でき、ジッターも小さくかつ見通しが容易であるという特徴を備えている。こうしたことから、多くの用途に適した方式だと言える。
Copyright © ITmedia, Inc. All Rights Reserved.