以下、本実施形態について説明する。なお、以下に説明する本実施形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また本実施形態で説明される構成の全てが、本発明の必須構成要件であるとは限らない。
1.本実施形態の手法
まず本実施形態の手法について説明する。サンプリングレート変換処理とは、入力されるデータ周波数を異なる周波数に変換して出力する処理である。入力クロックの周波数(入力サンプルレートn)と、出力クロックの周波数(出力サンプルレートm)の比M=n/mは、周波数の変換率を示す。
例えば、n=1000からm=500に変換する場合、M=1000/500=2となり、間引きを2で行う。言い換えれば、2つの入力データに対して、1つのデータを等間隔に選択することで、出力データを生成できる。しかし、n=1000からm=900に変換する場合、M=1000/900=1.11…となる。この場合、Mが非整数であるため、このままでは等間隔での間引きができない。
これに対して、例えば特許文献1の手法のように、入力データに対してインターポーレーションを行うことが考えられる。上記例の場合、nとmの最小公倍数が9000であるため、an=9000=a×1000として、an=9000にインターポーレーションした後、m=900に変換する。このようにすれば、M=an/m=9000/900=10となるため、間引きを10で行えば出力データを生成できる。
なお、上記のインターポーレーションは、a=9であるため、入力データ列に0を8個挿入するアップサンプリングを行った後、不要な周波数帯を除くフィルター処理を行えばよい。このフィルター処理と、間引きにおける折り返しを防止するためのフィルター処理を共通化する(例えば1つのローパスフィルターで実現する)ことも可能である。
上記のような間引きによるサンプリングレート変換を行う場合、間引き間隔の変動がノイズ要因となる。例えばM=2であれば、間引き間隔は2で一定となる必要があり、間引き間隔が2以外の値に変動してしまうと、ノイズが発生する。図6を用いて後述する例では、間引き間隔は4となるべきところ、3や5に変動してしまっている。これにより、図7を用いて後述するように、入力データは正弦波状であったのに対して、出力データでは、当該正弦波から外れるデータが生じてしまう。
リアルタイムの処理が必要なシステムでは、入力クロックと出力クロックが同期しない場合がある。また、外部からタイミングを同期させるクロックが入力される場合もある。この場合、間引き間隔変動に起因するノイズが発生しうる。
例えば、IMU(inertial measurement unit)や加速度センサー、或いはその他のセンサーにおけるデジタル信号処理では、センサー信号をA/D変換したのち、種々の信号処理(補正処理や変換処理など)を経て、ホスト演算処理器に出力する。この入力クロックのタイミングと、出力クロックのタイミングが重なる場合、時間的な前後関係によって間引き数が変動する。
図1は、入力クロックと出力クロックの関係を説明する図である。なお、図1では間引き間隔D=4を想定しているため、4つの入力データを単位として表記している。具体的には、入力データを時系列順にd1,d2,d3,d4とし、d4の次の入力データをd1と表記している。この表記は、あくまで間引き間隔との対応関係を明示するためのものであり、所与のタイミングでの入力データd1と、別のタイミングでの入力データd1は、同一のデータを表すわけではない。d2〜d4についても同様である。また、入力データをd1〜d4を用いて表す点は、図2等の他の図においても同様とする。
入力クロック及び出力クロックは、理想的には所与の周波数で安定したクロックであるが、現実には位相誤差(ジッタ、クロックジッタ、ワンダ)を含む。図1におけるt1及びt2は、それぞれ入力クロックと出力クロックのジッタ時間幅を表す。図1の例では、t1に示した時間幅のうちのいずれかのタイミングで入力データが入力され、t2に示した時間幅のうちのいずれかのタイミングで出力データが出力される。
入力クロックと出力クロックが同期しない場合、図1のように入力クロックと出力クロックのタイミングが重なることがあり得る。そのため、入力及び出力のタイミングによって、d4の入力データの入力完了後、出力データが出力される場合もあれば、d4の入力データの入力前に、出力データが出力される場合もある。
一般的な間引き処理としては、出力クロックのタイミングにおいて、最新の入力データを出力する処理を行えばよい。しかし図1の例では、入力クロックと出力クロックの関係によって、d3が最新データの場合もあれば、d4が最新データの場合もあり得る。所与の出力タイミングでd4が出力され、次の出力タイミングでd3が出力された場合、間引き間隔Dは3に変動する。また、所与の出力タイミングでd3が出力され、次の出力タイミングでd4が出力された場合、間引き間隔Dは5に変動する。このように、間引き間隔Dは、所定値J(ここではJ=M=4)に対して±1の範囲で変動する。この場合、出力データは出力クロックに同期しているが、データ自体は1/mの一定周期ではなく、1入力サイクルクロック分(±1/nだけの時間)変動したデータとなってしまう。
図2は、入力クロックと出力クロックの関係を説明する他の図である。例えば、入力クロックと出力クロックが同期している場合は、図2に示すように、出力クロックのタイミングが、入力クロックが示す入力データの更新タイミングに重ならないように設定できる。図2の例では、必ず入力更新タイミング間に出力クロックが発生する位相関係となっている。出力クロックは、入力データの更新タイミングと干渉しないので、d4を安定して出力でき、間引き間隔Dの変動によるノイズは発生しない。
以上で説明したように、入力クロックと出力クロックが非同期であり、特にクロックジッタ等の位相誤差の影響を考慮した場合には、間引き間隔Dの変動によるノイズが発生してしまう。入力クロックと出力クロックの周波数比Mが整数の場合、図1のようにノイズが常時発生する場合もあれば、図2のようにノイズが発生しない場合もある。非同期クロックの場合でも、システムの起動時に無作為に入力クロックと出力クロックの位相が決まるため、状況によっては図2のケースとなることもあり得るためである。しかし、非同期である以上、図1と図2のいずれになるかを制御できず、ノイズの低減を行うことが望ましい。
また周波数比Mが非整数の有理数である場合、図13を用いて後述するように入力クロックと出力クロックの時間差が周期的に変化する。そのため、入力クロックと出力クロックが重なる期間と、入力クロックと出力クロックが重ならない期間とが周期的に現れる。
図3は、Mが非整数の有理数である場合のノイズの大きさの時系列変化を示す図である。図3に示したように、Mが非整数である場合、入力クロックと出力クロックが重なる期間(A2)ではノイズが大きく、入力クロックと出力クロックが重ならない期間(A3)ではノイズが小さくなる。そして、A2+A3=A1を1周期として、同様の傾向のノイズが周期的に発生することになる。つまりMが非整数である場合、間引き間隔Dの変動によるノイズの発生を回避することは困難であり、ノイズの低減を行うことが望ましい。
特許文献1の手法は、最小公倍数の周波数へのインターポーレーションを行うことで、クロックの周波数比Mを整数とし、間引き間隔D(=M)による間引きでサンプリングレートを変換する手法を開示している。しかし特許文献1等の従来手法では、クロックが非同期である場合に、図1に示したようにジッタ等に起因して間引き間隔Dが変動することを想定していない。そのため、間引き間隔Dが変動することによるノイズの発生、及び当該ノイズの低減についても想定していない。また、特許文献1の手法はインターポーレーション等を行うため、処理負荷が大きい。そのため、ハードウェアにより実現する場合には構成が複雑となるし、ソフトウェアにより実現する場合には処理性能の高いプロセッサーを用いる必要が生じてしまう。
これに対して、本実施形態の電子機器(サンプリングレート変換装置100)は、図4に示すように、第1のクロックでデータが取り込まれ、少なくとも第1のクロックの複数クロックサイクル分の各データを、複数のアドレスの各アドレスに対応づけて保持する記憶部120と、第2のクロックの1クロックサイクル分の、第1のクロックのクロック数をカウントするカウント部130と、カウント部130のカウント値CNTに基づいて、記憶部120の複数のアドレスのうちのいずれかのアドレスを選択する判定部140と、判定部140により選択されたアドレスのデータを、第2のクロックで出力する出力部150と、を含む。
なお、ここでの第1のクロックは、具体的には入力クロック(入力更新クロック)であり、第2のクロックは出力クロックである。カウント部130によるカウントは、例えば所与の出力クロックから、次の出力クロックまでの間の期間に入力された、入力クロック数をカウントすることにより行われる。カウント部130は、例えば入力クロックによりインクリメントされ、出力クロックにより初期値(例えば0)にリセットされるカウンターにより実現できる。カウント部130は、ハードウェアのカウンターでもよいし、ソフトウェアのカウンターでもよい。
また、記憶部120は、第1のクロックで取り込まれるデータを、複数保持する。以下の説明では、第1のクロックが入力クロックである場合を想定して、第1のクロックで取り込まれるデータを入力データと表記する。同様に、第2のクロックで出力されるデータを出力データと表記する。ここで、出力クロックの1クロックサイクル分の入力データの数と、記憶部120で保持するデータ数(アドレス数)は、一致してもよいし、一致しなくてもよい。即ち、記憶部120は、出力クロックの1クロックサイクル分の入力データを全て保持してもよいし、そのうちの一部を保持してもよいし、出力クロックの1クロックサイクル分を超える数の入力データを保持してもよい。以下で説明するように、記憶部120は2つの入力データを保持することで、十分なノイズ低減効果を実現することが可能であるが、3つ以上の入力データを保持することは妨げられない。
本実施形態では、記憶部120において、最新の入力データだけでなく、過去の入力データも保持しておく。そして、出力クロック間での入力クロック数をカウントし、カウント値CNTに基づいて、複数の入力データのうちのいずれを出力するかを判定する。仮に最新の入力データを出力する場合、ここでのカウント値CNTは、間引き間隔Dに相当する情報となる。図1の例であれば、カウント値CNTは4で安定して欲しいところ、3や5に変動する可能性がある。
本実施形態では、カウント値CNTをカウントすることで、間引き間隔Dが変動してしまうか否かを判定できる。その上で、間引き間隔Dが変動してしまう場合には、記憶部120から読み出す入力データを適切に選択することで、間引き間隔Dを調整する。詳細については図8等を用いて後述するが、記憶部120がAD0,AD1の2アドレスを有する場合、読み出すアドレスをAD0からAD1(AD1からAD0)に変更することで、間引き間隔を+1(−1)することが可能である。つまりカウント値CNTが3となってしまった場合、読み出すアドレスをAD0からAD1に変更すれば、間引き間隔Dを4に補正できる。同様に、カウント値CNTが5となってしまったら、読み出すアドレスをAD1からAD0に変更すれば、間引き間隔Dを4に補正できる。
言い換えれば、本実施形態の手法は間引き間隔Dが変動するか否かの結果を得てから(カウント値CNTをカウントしてから)、出力データを決定することで、間引き間隔Dの変動を抑制している。これは、記憶部120に複数の入力データを保持しておき、過去の入力データの出力を許容する、即ち、入力データに対する出力データの遅延を許容することで実現される。
本実施形態の手法は、カウント部130(カウンター)と、記憶部120(バッファメモリー)というシンプルな構成により実現できる。そのため、例えば本実施形態の電子機器(サンプリングレート変換装置100)をプロセッサーとメモリーを用いてソフトウェアにより実現することも容易である。
上述したように、本実施形態における第1のクロックと第2のクロックは非同期であることを想定している。非同期である場合、図1に示したように間引き間隔Dの変動が生じるおそれがあり、本実施形態の手法によるノイズ低減効果が大きい。
また、第1のクロックと第2のクロックの周波数の比Mは2以上の有理数であってもよい。本実施形態の手法では、複数の入力データ、より具体的には図8を用いて後述するように、1出力クロックサイクル分の入力データのうちの複数の入力データを記憶部120に保持しておく。そのため、1出力クロックサイクル分の入力データが1つの場合には、選択するデータ(アドレス)を変更できず、ノイズ低減効果が低くなってしまう。例えば、上述したM=1.11…の場合、1出力クロックサイクル分の入力データが1つである場合が大半であり、複数の入力データのうちのいずれかを選択するという処理は困難である。つまり本実施形態によるノイズ低減の効果は、クロックの周波数比Mが2以上の有理数である場合に顕著である。
以下、本実施形態の電子機器(サンプリングレート変換装置100)や、物理量検出装置200の構成例について説明し、その後、具体的なサンプリングレート変換手法を説明する。なお、説明をわかりやすくするために、まず周波数比Mが整数の場合の例について説明し、その後、Mが非整数(小数且つ有理数)の場合について説明する。
2.システム構成例
図4は、本実施形態のサンプリングレート変換装置100のシステム構成例を示す図である。図4に示したように、サンプリングレート変換装置100は、入力部110と、記憶部120(バッファメモリー)と、カウント部130(カウンター)と、判定部140と、出力部150と、周波数比検出部160を含む。ただし、サンプリングレート変換装置100は、図4の構成に限定されず、これらの一部の構成要素を省略したり、他の構成要素を追加するなどの種々の変形実施が可能である。例えば、周波数比検出部160を省略してもよいし、入力部110と記憶部120との間に不図示のアップサンプリング部を追加してもよい。
入力部110(入力回路)は、第1のクロック(入力クロック)により、データ(入力データ)を取得する。入力部110は、サンプリングレート変換装置100の外部からのデータを取得するインターフェースとして実現されてもよい。ここでのインターフェースは種々の形式により実現可能であり、SPI(Serial Peripheral Interface)であってもよいし、UART(Universal Asynchronous Receiver Transmitter)であってもよいし、他の形式であってもよい。
記憶部120は、複数の入力データを記憶するもので、その機能はRAM(Random Access Memory)等のメモリーやHDD(Hard Disk Drive)などにより実現できる。また、記憶部120は、サンプリングレート変換装置100の各部(判定部140等)のワーク領域として用いられてもよい。
カウント部130は、出力クロックの1クロックサイクル分の、入力クロック数をカウントする。カウント部130は、ハードウェアのカウンターにより実現されてもよいし、ソフトウェアカウンターにより実現されてもよい。
判定部140(判定回路)は、カウント部130のカウント値CNTに基づいて、記憶部120のアドレスを選択する。具体的には、複数の入力データがそれぞれ複数のアドレスのいずれかのアドレスに対応付けて保持されているため、判定部140は、複数のアドレスのいずれかのアドレスを選択することで、複数の入力データのうちのいずれかの入力データを選択する。
出力部150(出力回路)は、判定部140により選択されたデータ(出力データ)を、第2のクロック(出力クロック)で出力する。出力部150は、サンプリングレート変換装置100の外部装置とのインターフェースとして実現されてもよく、SPI,UART等、種々の形式を利用可能である。
周波数比検出部160は、第1のクロックと第2のクロックの周波数の比Mを検出する。判定部140は、カウント値CNTと、周波数比検出部160で検出された周波数比Mに基づいて、記憶部120のアドレスの選択を行う。図5を用いて後述するように、第1のクロック及び第2のクロックの一方或いは両方が、外部からのクロック(或いは外部からのクロックに基づいて生成されるクロック)である場合があり得る。この場合、外部クロックの特性(周波数の値)は設計上既知であることが想定されるが、実際のクロック周波数が設計通りの信頼できる値であるとは限らない。
よって周波数比検出部160(周波数非検出回路)により、入力クロックと出力クロックの周波数比Mを求め、求めたMを判定部140に対して出力してもよい。ただし、外部クロックが信頼できる場合等には、周波数比検出部160を省略してもよい。
また本実施形態の手法は、上記のサンプリングレート変換装置100と、物理量を検出するセンサー210と、を含む物理量検出装置200に適用できる。センサー210の出力レートと、センサー210の出力に基づく物理量の利用レートが異なる場合も多く、物理量検出装置200では、サンプリングレートの変換が重要となる。
例えばセンサー210が加速度センサーであり、検出された加速度を慣性航法に利用する場合を考える。加速度センサーの出力レート(第1のクロックの周波数)は比較的大きく、例えば4kSPS(4kHz)程度となる。一方、慣性航法による処理は、カルマンフィルターの演算等、処理負荷が大きい。そのため、慣性航法の演算をセンサーの出力レートと同等のレートで行うことは難しく、加速度の利用レート(第2のクロックの周波数)は、例えば1kSPS(1kHz)程度となる。その他、センサー210の出力をどの程度の頻度で利用するかは、ホスト装置(外部装置300)側での処理形態等に依存して異なるため、種々の周波数比Mでのサンプリングレート変換が必要となる。
図5は、本実施形態の物理量検出装置200のシステム構成例である。物理量検出装置200は、サンプリングレート変換装置100と、センサー210と、A/D変換回路220と、フィルター部230(フィルター回路)と、物理量変換部240と、フォーマット変換部250と、発振器260(TCXO,temperature compensated crystal oscillator)とを含む。ただし、物理量検出装置200は、図5の構成に限定されず、これらの一部の構成要素を省略したり、他の構成要素を追加するなどの種々の変形実施が可能である。
センサー210は、物理量に応じたセンサー信号を出力する。ここでのセンサー210は、加速度を検出する加速度センサーであってもよいし、角速度を検出する角速度センサー(ジャイロセンサー)であってもよい。或いは、センサー210は、方位センサー、気圧センサー、温度センサー、圧力センサー、照度センサー等、他の物理量を検出するセンサーであってもよい。また、センサー210が撮像センサー(撮像部、カメラ)等を含むことも妨げられない。ここでのセンサー210は、物理量トランスデューサーと検出回路を含む構成であってもよいが、これには限定されない。
A/D変換回路220は、センサー210からのセンサー信号(アナログ信号)に対してA/D変換を行い、デジタルデータを出力する。A/D変換には逐次比較方式、ΔΣ方式、周波数カウンター等の種々の方式が知られており、本実施形態のA/D変換回路220は、それらを広く適用可能である。
フィルター部230は、A/D変換回路220の出力に対するフィルター処理を行う。フィルター部230は、狭義にはアンチエイリアシングフィルターであるが、他のノイズ低減用フィルター等を含むことは妨げられない。
サンプリングレート変換装置100(狭義にはそのうちの入力部110)は、フィルター部230によるフィルター処理後のデータを、第1のクロックにより入力データとして取得する。サンプリングレート変換装置100(狭義にはそのうちの出力部150)は、入力データのうちの選択されたデータを、第2のクロックにより出力データとして出力する。
物理量変換部240(物理量変換回路)は、サンプリングレート変換装置100によりサンプリングレートが変換されたデータ(出力データ)を、物理量に変換する処理を行う。センサー210からの出力は、例えば物理量に対応したアナログ電圧信号であり、入力データ及び出力データは、当該アナログ電圧信号に基づくデジタルデータである。物理量変換部240は、当該デジタルデータを、加速度や角速度といった物理量を表すデータに変換する。具体的には、物理量変換部240は、出力データに対して所与の係数(感度)を乗じる処理や、オフセット補正、ゼロ点補正等の補正処理を行い、処理結果を出力する。
フォーマット変換部250(フォーマット変換回路)は、物理量変換部240の出力(物理量データ)に対して、フォーマット変換を行う。例えば、物理量データを利用する外部装置300に合わせて、ビット長変換等の処理を行う。
なお、図5ではサンプリングレート変換装置100と、物理量変換部240及びフォーマット変換部250とを異なる構成として図示した。しかし、サンプリングレート変換装置100が、物理量変換部240やフォーマット変換部250を含んでもよい。例えば、サンプリングレート変換装置100がプロセッサーとメモリーにより構成される場合、メモリーに記憶されるプログラムにより、プロセッサーが物理量変換部240やフォーマット変換部250として動作してもよい。この場合、例えば物理量変換部240やフォーマット変換部250を含むサンプリングレート変換装置100が、ワンチップとして実装される。
発振器260は、物理量検出装置200で用いられるクロック(内部クロック、システムクロック)を生成する。発振器260は、TCXOにより実現される。ただし、TCXOとは異なる発振器を用いることも妨げられない。
以上のサンプリングレート変換装置100、或いは物理量検出装置200において、第1のクロック及び第2のクロックは、クロック信号そのものには限定されず、外部からの割り込みを含んでもよい。
また、第1のクロックは、図5に示したように、A/D変換回路220でのA/D変換のクロックであってもよい。A/D変換のクロックは、発振器260に基づくクロック(内部クロック)であってもよいし、外部装置300からのクロック(外部クロック)に基づくクロックであってもよいし、その両方に基づくクロックであってもよい。また、センサー210が振動子を有する場合、当該振動子によるクロックを内部クロックとして、A/D変換のクロックに利用してもよい。例えば、センサー210がジャイロセンサーである場合、角速度トランスデューサー(振動子、振動片)の振動に基づくクロックを内部クロックとしてもよい。
また、第2のクロックは、物理量検出装置200の外部装置300から入力されるクロック、又は、物理量検出装置200が有する周波数源(発振器260)からのクロックであってもよい。ここでの外部装置300は、例えば物理量データを用いた処理を行うホスト装置である。
以上のように、第1のクロック及び第2のクロックは、種々の変形実施が可能である。なお、実施形態によっては同一のクロック源に基づいて第1のクロックと第2のクロックが生成されることが考えられる。この場合も、クロックにノイズが重畳し第1のクロックと第2のクロックの少なくとも一方が、相関しないで揺らぐことがある。よって同一のクロック源を用いる場合であっても、第1のクロックと第2のクロックは非同期となり得るため、図1を用いて上述した間引き間隔の変動によりノイズは発生しうる。
また、本実施形態のサンプリングレート変換装置100、物理量検出装置200等は、その処理の一部又は大部分をプログラムにより実現してもよい。この場合には、CPU等のプロセッサーがプログラムを実行することで、本実施形態のサンプリングレート変換装置100、物理量検出装置200等が実現される。具体的には、非一時的な情報記憶装置に記憶されたプログラムが読み出され、読み出されたプログラムをCPU等のプロセッサーが実行する。ここで、情報記憶装置(コンピューターにより読み取り可能な装置、媒体)は、プログラムやデータなどを格納するものであり、その機能は、光ディスク(DVD、CD等)、HDD(ハードディスクドライブ)、或いはメモリー(カード型メモリー、ROM等)などにより実現できる。そして、CPU等のプロセッサーは、情報記憶装置に格納されるプログラム(データ)に基づいて本実施形態の種々の処理を行う。即ち、情報記憶装置には、本実施形態の各部としてコンピューター(操作部、処理部、記憶部、出力部を備える装置)を機能させるためのプログラム(各部の処理をコンピューターに実行させるためのプログラム)が記憶される。
また、本実施形態のサンプリングレート変換装置100、物理量検出装置200は、プロセッサーとメモリーを含んでもよい。ここでのプロセッサーは、例えば各部の機能が個別のハードウェアで実現されてもよいし、或いは各部の機能が一体のハードウェアで実現されてもよい。例えば、プロセッサーはハードウェアを含み、そのハードウェアは、デジタル信号を処理する回路及びアナログ信号を処理する回路の少なくとも一方を含むことができる。例えば、プロセッサーは、回路基板に実装された1又は複数の回路装置(例えばIC等)や、1又は複数の回路素子(例えば抵抗、キャパシター等)で構成することができる。プロセッサーは、例えばCPU(Central Processing Unit)であってもよい。ただし、プロセッサーはCPUに限定されるものではなく、GPU(Graphics Processing Unit)、或いはDSP(Digital Signal Processor)等、各種のプロセッサーを用いることが可能である。またプロセッサーはASICによるハードウェア回路でもよい。またプロセッサーは、アナログ信号を処理するアンプ回路やフィルター回路等を含んでもよい。メモリーは、SRAM、DRAMなどの半導体メモリーであってもよいし、レジスターであってもよいし、ハードディスク装置等の磁気記憶装置であってもよいし、光学ディスク装置等の光学式記憶装置であってもよい。例えば、メモリーはコンピューターにより読み取り可能な命令を格納しており、当該命令がプロセッサーにより実行されることで、サンプリングレート変換装置100、物理量検出装置200の各部の機能が実現されることになる。ここでの命令は、プログラムを構成する命令セットの命令でもよいし、プロセッサーのハードウェア回路に対して動作を指示する命令であってもよい。
3.周波数比Mが整数の場合の例
まず入力クロックと出力クロックの周波数比Mが整数である場合について説明する。なお、図1、図2に示したように、入力クロックと出力クロックの少なくとも一方に位相誤差がある(理想周波数を基準としてジッタ分だけ実際の周波数が揺れる)。そのため、各クロック周期で考えた場合、厳密には周波数比Mは整数にならない。ここでの「周波数比Mが整数」とは、入力クロックと出力クロックの理想的な周波数を考えた場合に、当該理想的な周波数の比Mが整数となることを示している。
図6は、図1のようにM=4であって、入力クロックと出力クロックが重なる場合の間引き間隔Dの変動例を示す図である。図6に示したように、間引き間隔Dは4を中心として、±1だけ変動する(3或いは5となる)。
図7は、図6に示した変動が生じた場合の、入力データと出力データの波形例である。図7では、入力データは正弦波状のデータとなっている。常時d4が出力され、間引き間隔Dが4で安定すると仮定すれば、出力データの波形も、入力データと同じ正弦波状のデータとなることが期待される。特にここでは、図1のように入力クロックと出力クロックが重なっており、d4のタイミングと出力タイミングの時間差が充分小さいことを想定しているため、出力データの波形はほぼ入力データの正弦波に重なる正弦波となることが期待される。
しかし、図6に示すような間引き間隔Dの変動が生じることで、出力データには正弦波から外れるデータが出てきてしまう。例えば、図7のB1では、間引き間隔Dが3となってしまうことで、出力タイミングに比べて1入力クロックサイクル分だけ前の入力データ(d3)が出力対象となってしまう。結果として、出力データの波形は、入力データ(正弦波)に対して誤差が生じてしまうことになる。
図8は、上記課題を解決するための本実施形態の手法を説明する図である。図8の横軸は時間を表し、C1は入力を表し、C2はバッファメモリー(記憶部120)の動作を表し、C3は出力を表す。より具体的には、C11が入力クロックのタイミング(入力データの更新が行われるタイミング)を表し、C12が更新された入力データを表す。C21はバッファメモリーの2つのアドレス(AD0、AD1)に記憶されるデータを表し、C22は入力データの更新に伴って、バッファメモリーから削除(デキュー)されたデータを表す。C31は、出力クロックのタイミングを表し、C32は当該タイミングで出力される出力データを表す。
図8に示すように、記憶部120は、FIFO(First In, First Out)メモリーであり、記憶部120の複数のアドレスの第1のアドレスAD0に格納されるデータは、複数のアドレスの第2のアドレスAD1に格納されるデータに比べて時系列的に前のデータである。
即ち、記憶部120はFIFOメモリー(キュー)により実現でき、少なくとも2つのアドレスAD0,AD1を有する。FIFOメモリーは、ソフトウェアとして実現してもよいし、ハードウェアとして実現してもよい。ハードウェアを用いる場合、入力データのビット数分のフリップフロップを、アドレス数に対応する段数だけ並べればよい。
記憶部120は、入力データが更新された場合、最新の入力データをFIFOメモリーの第2のアドレスAD1に記憶(格納、エンキュー)する。これに伴い、それまで第2のアドレスAD1に格納されていた入力データ(狭義には1タイミング前の入力データ)は、第1のアドレスAD0に記憶される。さらに、それまで第1のアドレスAD0に格納されていた入力データ(狭義には2タイミング前の入力データ)は、記憶部120から削除(デキュー)される。
このような動作により、入力データとしてd4が入力された場合、記憶部120の各アドレスのデータは(AD0,AD1)=(d3,d4)となる。以下、(AD0,AD1)=(d3,d4)との表現は、第1のアドレスAD0にデータd3が記憶され、第2のアドレスAD1にデータd4が記憶されていることを表す。同様に、入力データとしてd3が入力された場合、(AD0,AD1)=(d2,d3)となる。入力データとしてd2が入力された場合、(AD0,AD1)=(d1,d2)となる。入力データとしてd1が入力された場合、(AD0,AD1)=(d4,d1)となる。
図8も、図1と同様の状況を想定しており、出力クロックのタイミングでd4の更新が完了している場合と、完了していない場合がある。例えば図8のC4に示した出力タイミングでは、d4の更新が完了しており、記憶部120のデータは、(AD0,AD1)=(d3,d4)となっている。一方、C5に示した出力タイミングでは、d4の更新が完了しておらず、記憶部120のデータは、(AD0,AD1)=(d2,d3)となっている。上述してきたように、単純に最新の入力データ、即ち第2のアドレスAD1のデータを出力したのでは、C5の出力での間引き間隔Dは3となってしまう。
そこで、本実施形態では、カウント部130でのカウント値CNTに基づいて、判定部140によるアドレスの選択を行う。カウント値CNTは、出力クロック間(1出力クロックサイクル分)の入力クロック数である。図8のC5のタイミングであれば、C6に示したd1〜d3に相当する入力クロックをカウントするため、CNT=3である。つまり判定部140では、CNT=3と周波数比M=4を比較することで、間引き間隔Dが少ない側に変動するおそれがあると判定できる。
よって本実施形態では、第1のクロックと第2のクロックの周波数比Mにより決定される所定値をJ(Jは2以上の整数)とした場合に、判定部140は、カウント値がJ−1である場合は、選択するアドレスを、複数のアドレスの第1のアドレスAD0から第2のアドレスAD1へ変更する。
ここで、所定値Jは、間引き間隔Dの基準となる値であり、図1や図8等の例であればJ=4である。Mが整数である場合、J=Mとすればよい。また、後述するようにMが非整数である場合、JはMに最も近い整数を用いればよい。例えば、M=3.1であればJ=3であるし、M=3.9であればJ=4である。
図8の例であれば、C4のタイミングではd4の更新まで完了しているものの、判定部140は、あえて第1のアドレスAD0に記憶されている1タイミング前のデータd3を出力データとして選択する。そして、C5のタイミングでカウント値CNTが所定値Jに比べて小さいと判定できたため、判定部140は、第2のアドレスAD1に記憶されている最新のデータを出力データとして選択する。
上述したように、第1のアドレスAD0のデータは、第2のアドレスAD1のデータに比べて時系列的に前のデータであり、図8の例であれば1入力クロックサイクル分前のデータである。つまり、第1のアドレスAD0を出力している状態から、第2のアドレスAD1を出力する状態へ移行することで、2つの出力データ間の間隔を1入力クロックサイクル分だけ長くすること、即ち、間引き間隔Dを+1することが可能になる。ただし、本実施形態では後述する周波数比Mが非整数の場合のように、間引き間隔Dの変動を許容してもよい状況があり得る。そのため判定部140は、CNT=J−1となった場合に、常に選択するアドレスを第1のアドレスAD0から第2のアドレスAD1へ変更する必要はない。CNT=J−1でも選択アドレスを変更しない例については、図20を用いて後述する。
図8のC5の例であれば、カウント値CNT=3である場合とは、d4の入力が完了しておらず、(AD0,AD1)=(d2,d3)の状態である。ここで第2のアドレスAD1のデータを選択することで、出力データはd3となる。つまり、C4とC5のタイミングの両方でd3が出力対象となり、間引き間隔Dを4に維持することが可能になる。
以上が本実施形態の基本的な手法である。本実施形態では記憶部120の複数のアドレスのうち、選択対象となるアドレスをカウント値CNTに基づいて切り替えることで、間引き間隔Dが所定値Jとなるように調整を行う。図8はカウント値がJ−1となる例について説明したが、以下、より詳細に説明する。
図9は、記憶部120(バッファメモリー)の状態に着目した場合の状態遷移図である。入力クロックと出力クロックが図1のように重なっている場合、最新の入力データはd3かd4かのいずれかとなる。つまり、バッファメモリーの状態は、(AD0,AD1)=(d3,d4)又は(AD0,AD1)=(d2,d3)のいずれかと考えられる。以下、前者を状態S0、後者を状態S1とする。なお、システム起動時等には、クロックやサンプリングレート変換装置100の各部の動作が安定しないため、上記以外の状態が現れる可能性もあるが、ここでは上記2状態のみを考慮して説明する。
上述したように、カウント値CNT=3(広義にはCNT=J−1)の場合には、選択するアドレスを第1のアドレスAD0から第2のアドレスAD1に切り替えればよい。一方、カウント値CNT=5(広義にはCNT=J+1)の場合には、逆の動作をすることで間引き間隔を−1できる。
即ち、判定部140は、カウント値がJ+1である場合は、選択するアドレスを、複数のアドレスの第2のアドレスAD1から第1のアドレスAD0へ変更する。このようにすれば、カウント値CNTが所定値Jに比べて大きい場合にも、選択するアドレスの変更により、間引き間隔Dを調整することが可能になる。なお、図20を用いて後述するように、CNT=J+1でも選択アドレスを変更しない場合があることは妨げられない。
またカウント値CNT(本実施形態の手法による調整を行わない場合の間引き間隔D)は、図6に示したように変動する。図6に示したように、実際のカウント値CNTの変動を考えた場合、CNT=3となった次のタイミングでCNT=5となる。つまり、CNT=3とCNT=5は、隣り合うタイミングで対となって発生すると考えてよい。この場合、図9に示したように、CNT=4は、S0においてのみ発生し、判定部140は、CNT=4の場合には第1のアドレスAD0を選択すればよい。
図9の例では、状態S0はカウント値の総和が期待値(J×出力クロック数の総和)に等しい平常状態であり、状態S1はカウント値の総和が期待値よりも減少している状態と考えることができる。言い換えれば、図9は、平常状態(S0)においてまずCNT=3となり、その次のタイミングでCNT=5となることで平常状態に戻る例である。
しかし、平常状態においてまずCNT=5となり、その次のタイミングでCNT=3となることで平常状態に戻る場合も考えられる。この場合、状態S1を平常状態と考えればよい。
図10は、状態S1を平常状態とした場合の状態遷移図である。なお、図9では記憶部120の状態を特定したが、入力データをd1〜d4により表現するのは、間引き間隔Dと周波数比M(所定値J)との対応関係を説明する便宜上のものである。判定部140では、入力データや選択する出力データがd1〜d4のいずれであるかを識別する必要はない。よって、図10、及び後述する図12、図20等では、記憶部120に記憶されるデータを任意とし、選択するアドレスに応じて状態(S0、S1等)を決定するものとする。
図10に示したように、CNT=4が維持されている場合は、判定部140は第2のアドレスAD1を選択する。そして、CNT=5となった場合に、S0に遷移し、選択するアドレスを第2のアドレスAD1から第1のアドレスAD0に変更する。またS0でCNT=3となった場合に、選択するアドレスを第1のアドレスAD0から第2のアドレスAD1に戻す。
図9、図10に示したように、カウント値CNTの変動が、3→5の順序であっても、5→3の順序であっても、選択するアドレスを適切に変更することで、間引き間隔Dを4に安定させることが可能になる。
図11は、図9の処理を説明するフローチャートである。この処理が開始されると、まず初期設定が行われる(ステップS101)。初期設定とは、具体的には、間引き間隔Dの基準となる所定値Jの設定、カウント部130のカウント値CNTの初期化、記憶部120(バッファメモリー)の初期化を行う。例えば、周波数比Mに基づいて所定値Jを設定し、CNT=0,(AD0,AD1)=(0,0)とする。ステップS101の処理は、例えば判定部140により実行される。また、変形例として後述するようにフラグ情報を処理に用いる場合、ステップS101の処理でフラグ情報の初期化も行うとよい。
次に、入力更新要求が行われたか否かを判定する(ステップS102)。ステップS102の処理は、クロック信号が入力されたか否か、或いは入力更新の割り込みが行われたか否かを判定すればよい。図1の例であれば、入力クロックのジッタ幅(t1)のいずれかのタイミングに対応して、ステップS102がYesと判定される。
ステップS102でYesの場合には、入力データが更新される(ステップS103)。具体的には、入力部110は最新の入力データ(更新データ)を取得する。そして、記憶部120の第2のアドレスAD1に記憶されていたデータを、第1のアドレスAD0に記憶し、更新データを第2のアドレスAD1に記憶する。さらに、カウント部130は、カウンター(カウント値CNT)をインクリメントする。
ステップS103の処理後、又は、ステップS102でNoの場合には、出力要求が行われたか否かを判定する(ステップS104)。図1の例であれば、出力クロックのジッタ幅(t2)のいずれかのタイミングに対応して、ステップS104がYesと判定される。
ステップS104でNoの場合、即ち出力要求がない(出力タイミングでない)場合は、ステップS102に戻り処理を継続する。
ステップS104でYesの場合には、出力データを出力する。具体的には、判定部140は、カウント部130のカウント値CNTの値を判定する(ステップS105)。判定部140は、CNT=3の場合には第2のアドレスAD1のデータを出力にセットし(ステップS106)、CNT=5の場合には第1のアドレスAD0を出力にセットする(ステップS107)。
また、ここでは図9のように状態S0を平常状態と考えているため、判定部140は、CNT=4の場合には、第1のアドレスAD0を出力にセットする(ステップS108)。
ステップS106〜S108の処理後は、出力部150は、セットされたアドレスのデータを出力し、カウント部130は、カウント値CNTを0にリセットする(ステップS109)。ステップS109の処理後は、ステップS102に戻り処理を継続する。
図10の処理を行う場合は、状態S1が平常状態なるため、図11のステップS108において、第2のアドレスAD1を出力にセットすればよい。
ただし、図9〜図11を用いて上述した例では、平常状態がS0かS1かで異なるため、平常状態の設定に応じてCNT=4の際の処理(図11のステップS108)を変更しなければならない。
これに対して、本実施形態では記憶部120(バッファメモリー)として、3つ以上のアドレスを有するFIFOメモリーを用いてもよい。具体的には、記憶部120は、第1〜第3のアドレスAD0〜AD2を有し、格納されるデータは、AD0が最も過去のデータであり、AD2が最も新しいデータとなる。
図12は、3アドレスのFIFOメモリーを用いる場合の状態遷移図である。図12に示したように、AD0が選択される状態をS0、AD1が選択される状態をS1、AD2が選択される状態をS2とし、S1を平常状態とする。即ち、CNT=4はS1で発生し、判定部140はCNT=4の場合には第2のアドレスAD1を選択する。
判定部140は、S1においてCNT=3となった場合には第3のアドレスAD2を選択して状態S2に遷移する。状態S2においてCNT=5となった場合には、第2のアドレスAD1を選択して状態S1に戻る。これは図9に対応する遷移である。
また判定部140は、S1においてCNT=5となった場合には第1のアドレスAD0を選択して状態S0に遷移する。状態S0においてCNT=3となった場合には、第2のアドレスAD1を選択して状態S1に戻る。これは図10に対応する遷移である。
図12に示したように、3アドレス以上の記憶部120を用いることで、平常状態からまずCNT=3となる場合と、まずCNT=5となる場合のいずれの場合についても、平常状態を共通化することが可能になる。
4.周波数比が非整数の場合の例
次に周波数比Mが非整数(小数)の有理数である場合について説明する。
図13は、周波数比Mが非整数である場合の入力クロックと出力クロックのタイミング例を表す図である。図13の横軸は時間を表す。図13では、m=120、n=42であり、M=120/42=2.857…である。この場合、所定値J=3であるため、入力データをd1,d2,d3,d1,d2…と表記している。また図13では説明を簡略化するため、ジッタ幅については考慮していない。
図13の例では、出力クロックのタイミングと、d1の入力更新タイミングが一致している状態から開始されている。Mが整数(M=3)であれば、出力クロックとd1に対応する入力クロックが重なる状態が維持される。しかし図13ではMは3に充分近いが、M<3であるため、出力クロックのタイミングはd1に対応する入力クロックのタイミングに対して、時間的に早い方向にずれていく。
そして、出力クロックサイクルが継続することで、出力クロックは徐々にd3に対応する入力クロックに近くなり、出力クロックとd3に対応する入力クロックが重なる状態となる。図13には不図示であるが、さらに時間が経過することで、出力クロックのタイミングは、d2とd3の間の状態→d2の入力クロックと重なる状態→d2とd1の間の状態→d1の入力クロックと重なる状態→…と遷移していく。
図1を用いて上述したように、入力クロックと出力クロックの前後関係が変化してしまったとき、即ち一方が他方を追い越してしまったときに、間引き間隔Dが変動して誤差が発生する。その点、図13のように周波数比Mが非整数である場合、ジッタによる影響がなかったとしても一方のクロックによる他方のクロックの追い越しが発生してしまう。
図14、図15は、実際の入力クロック数(カウント値CNTの総和)と、入力クロック数の期待値(所定値J×出力クロック数)の差の変動を示す図である。図14、図15の横軸は時間であり、A1〜A3は図3に示した区間を表す。
図14は周波数比Mが整数の場合の例である。入力クロックと出力クロックが重なる期間A2では、ジッタの影響により、入力クロック数が期待値よりも減少し(CNT=J−1)、その後、入力クロック数が期待値に戻る(CNT=J+1)という変化を繰り返す。周波数比Mが整数であれば、A2の期間においてCNT=J−1とCNT=J+1は必ず対になって現れる(出現回数が同じ)ため、A2の期間終了時に、入力クロックの実数と期待値との差は0に戻る。
一方、周波数比Mが非整数の場合、図13を用いて上述した例のように、周期的な追い越しが発生する。そのため図15に示したように、期間A2は、CNT=J−1で終了し(E1)、入力クロックの実数は期待値よりも1減少した状態が確定する。さらに次の期間A2が開始されると(E2)、ここでもまずCNT=J−1となる。さらにこの期間A2も、CNT=J−1で終了し(E3)、入力クロックの実数は期待値よりもさらに1減少した状態が確定する。この入力クロック数の減少(クロック遅れ)が、上記の追い越しを表している。
本実施形態では、このようなMが非整数の場合の追い越し(間引き間隔Dの変動)については許容する。即ち、Mが非整数であることで必然的に発生してしまう間引き間隔Dの変動については無理に補正を行わない。ただし、ジッタ等の影響を考慮した場合、本来1回ですむはずの追い越しが、複数回発生してしまうおそれがある。
図15の例であれば、A2に示した期間では、カウント値CNTの変動により、間引き間隔Dが頻繁に変動してしまう。よって本実施形態では、周波数比Mが整数の場合を用いて上述した例と同様に、出力クロックが入力クロックと重なる状態(期間A2)において、図8を用いて上述した手法により、間引き間隔DがJとなるように補正する。このようにすれば、間引き間隔Dの変動を、所定周期(A1)に1回、必然的に発生してしまうものに限定でき、ノイズの発生を抑止できる。以下、図1等と同様にJ=4の場合を例にとって詳細に説明する。
図16〜図18は、図1と同様に出力クロックと入力クロックのタイミングを表す図であり、各図の横軸は時間を表す。ここでは、M<4であり、出力クロックのタイミングは、徐々に1入力クロックサイクル分前の入力クロックに近づいていく例を示している。
図16は、出力クロックのタイミングがd4に対応する入力クロックとd1に対応する入力クロックの間にある状態を表す図である。この場合、出力クロックのタイミングはd4の入力更新後となるため、記憶部120の状態は(AD0,AD1)=(d3,d4)で安定する。よって判定部140は、図9の平常状態S0と同様に、第1のアドレスAD0を選択し、d3を出力データとして出力する。
図16の状態からさらに時間が経過すると、図17に示したように、出力クロックとd4に対応する入力クロックが重なる(図15の期間A2)。この場合、記憶部120の状態は(AD0,AD1)=(d3,d4)と、(AD0,AD1)=(d2,d3)のいずれも起こりうるため、間引き間隔Dを安定させる必要がある。具体的には、図9と同様であり、判定部140は、CNT=3の場合に状態S1に遷移して第2のアドレスADを選択し、CNT=5の場合にS0に戻り第1のアドレスAD0を選択する。このようにすれば、図17に示す状態でも、安定してd3を出力できる。
ただしここでは周波数比Mが非整数であるため、CNT=3で期間A2が終了する(図15のE1)。そして、期間A3ではカウント値CNTは4で安定する。つまり期間A2から期間A3へと切り替わる際に、カウント値CNTは3から4へ変化することになる。
図11のフローチャートに従えば、CNT=4の場合、判定部140は第1のアドレスAD0を選択する。また期間A3では、記憶部120の状態は、(AD0,AD1)=(d2,d3)で安定している。つまり、期間A2から期間A3に切り替わる際に、選択するアドレスは第2のアドレスAD1から第1のアドレスAD0に変更され、出力されるデータはd2に変化する。出力データがd3→d2と変化するため、間引き間隔Dが3に変動するタイミングが存在してしまっているが、これは、図15のE1に示した追い越しによるものであるため、本実施形態では問題としない。
図18では、(AD0,AD1)=(d2,d3)で安定するため、第1のアドレスAD0を選択する状態を維持すればよい。これ以降も同様であり、図11のフローチャートと同様の処理により、周波数比Mが非整数の場合にも間引き間隔Dの調整が可能である。
図19は、本実施形態の手法を用いた場合のノイズの時系列的な変化を説明する図である。従来手法を用いた場合、図3に示したように、出力クロックと入力クロックが重なる期間(A2)においてノイズが大きくなる。その点、本実施形態では、周波数比Mが非整数であることに起因する間引き間隔Dの変動は発生するものの、それ以外の間引き間隔Dの変動を抑制可能である。結果として、図19に示したように、ノイズの増大を1周期(図3のA1=A2+A3)当たり1回にすることができ、図3に比べてノイズを低減することが可能になる。
また、以上では図11のフローチャートに従った処理を順次実行することで、図15のE1での追い越しに対応可能な例について説明した。ただし、本実施形態では、フラグ情報を用いて追い越しを管理することも可能である。
具体的には、判定部140はCNT=3(J−1)の場合にフラグ情報をF=1(第1の状態、例えば第1の論理レベル“1”)とし、CNT=5の場合にフラグ情報をF=0(第2の状態、例えば第2の論理レベル“0”)とする。またCNT=4の場合には、フラグ情報は、1タイミング前の状態を維持する。
図14のように、追い越しが発生しなければ、CNT=3とCNT=5は必ず対になって同数発生する、言い換えれば、CNT=4を無視した場合、CNT=3とCNT=5が交互に発生する。これに対して、図15のように追い越しが発生する場合、所与の期間A2の終了時(E1)でCNT=3となった後、次の期間A2の開始時(E2)でCNT=3となり、その間の期間A3ではCNT=4となる。つまり追い越し発生時には、CNT=3となった後、CNT=5が出現しないまま、再度CNT=3となる(CNT=4を無視した場合、CNT=3が連続する)。
よって判定部140は、フラグ情報が第1の状態(F=1)において、CNT=3が検出された場合に、クロックの追い越しが発生したと判定できる。即ち、フラグ情報により追い越しの発生タイミング、或いは発生周期等を検出できる。なお、次回以降の追い越し検出を考慮すれば、F=1でCNT=1となった場合、判定部140は、フラグ情報Fを第2の状態(F=0)にリセットするとよい。
フラグ情報を用いることで、例えば、追い越しを考慮せずに間引き間隔Dを常に一定にさせる第1のモジュールと、追い越し時の間引き間隔調整を行う第2のモジュール(或いは単なるリセットモジュール)の組み合わせにより本実施形態の処理を実現することも可能である。この場合、通常時は第1のモジュールを実行し、追い越し検出時に第2のモジュールを実行すればよい。この例では、追い越しの非発生時と発生時で処理を分けることができ、モジュールの実装や変更が容易となる。
また、図16〜図18では、J=4であり、且つM<4の場合の例を示した。そのため、出力クロックと入力クロック(入力クロックに対応する入力データ)との対応関係は、時間の経過とともにd4→d3→d2→d1→d4…の順に変化していった。これに対して、同じJ=4の場合であっても、M>4(例えばM=4.1等)であれば、変化傾向は逆転する。即ち、出力クロックと入力クロック(入力クロックに対応する入力データ)との対応関係は、時間の経過とともにd1→d2→d3→d4→d1…の順に変化していく。
この場合、平常状態からまずCNT=5(J+1)となり、その後CNT=3(J−1)で平常状態に戻る。また、クロックの追い越しが発生することで、CNT=5となった後、CNT=3が出現しないまま、再度CNT=5となる(CNT=4を無視した場合、CNT=5が連続する)となる。図9を周波数比Mが非整数の場合に拡張できたように、Mが非整数且つM>Jの場合についても、図10や図12を拡張して考えることが可能である点は、当業者であれば容易に理解できるであろう。
5.変形例
以下、幾つかの変形例について説明する。
5.1 CNT=Jの場合の処理の変形例
上述した例では、対となるCNT=3とCNT=5は、連続するタイミングで発生するものとした。そのため、CNT=4は平常状態(図9であればS0)で発生し、異なる状態(図9であればS1)での発生は、クロックの追い越しに対応する期間A2から期間A3への切り替えタイミングのみを考慮していた。
しかし、対となるCNT=3とCNT=5の間で、CNT=4が発生する可能性を考慮した場合、図9等の処理では間引き間隔Dの調整が不十分となる。なぜなら、本来カウント値CNT=4の場合とは、入力クロック数が適切であり、選択アドレスの変更による間引き間隔Dの調整は不要なためである。例えば、対となるCNT=3とCNT=5の間でCNT=4が発生し、カウント値CNTが3→4→5と変化したとする。この場合、3→4への変化の際に選択するアドレスをAD1→AD0に変更してしまうことで、間引き間隔Dは+1されてしまう。さらに、4→5の変化の際に選択するアドレスがAD1で維持されることで、間引き間隔Dはさらに+1されてしまう。
この点を考慮すれば、カウント値CNT=4の場合には、固定のアドレスを選択するのではなく、前のタイミングで選択していたアドレスを再度選択するとよい。
例えば判定部140は、カウント値CNTがJ−1である場合に、フラグ情報F’を第1の状態(F’=1)とし、カウント値がJ+1である場合に、フラグ情報F’を第2の状態(F’=0)とする。ここでのフラグ情報F’は、上述したクロックの追い越しを検出するフラグ情報Fとは異なる情報であってもよいが、アルゴリズムによっては共通化することも可能である。そして判定部140は、カウント値がJである場合は、フラグ情報F’に基づいて、記憶部120の複数のアドレス(AD0,AD1)のうちのいずれかのアドレスを選択する。
より具体的には、判定部140は、カウント値がJであり、且つ、フラグ情報がF’=1である場合は、記憶部120の第2のアドレスAD1を選択する。また判定部140は、カウント値がJであり、且つ、フラグ情報がF’=1である場合は、記憶部120の第1のアドレスAD0を選択する。
このようにすれば、フラグ情報F’に基づいて状態S0と状態S1を識別できるため、カウント値CNT=4(広義にはJ)の場合にも、適切なアドレスを選択することが可能になる。
ただしこの場合、CNT=4の場合に選択するアドレスが変更されないため、クロックの追い越しによる間引き間隔Dの変動は、異なるタイミングで実行されることになる。
図20は本変形例の状態遷移図である。上述したように、図9の例とは異なり、S1でCNT=4の場合、S0に遷移するのではなくS1に戻る。これにより、カウント値CNTが3→4→5と変化するような場合にも間引き間隔Dを維持できる。
また図20に示したように、S1においてCNT=3となる場合を想定する。これは、CNT=3となった後、CNT=5が出現しないまま、再度CNT=3となった場合(図15の期間A2開始時)に発生する。この際には、間引き間隔Dが3に減少してもよいため、選択するアドレスを維持すればよい。具体的には、S1でCNT=3となった場合に、再度S1に戻り、第2のアドレスAD1の選択を継続する。このような遷移を行った場合、結果として間引き間隔Dは1回だけ3(J−1)となる。つまり図20に従って処理を行うことで、クロックの追い越しによる間引き間隔Dの変動を許容しつつ、他の場面での間引き間隔Dを一定に維持することが可能になる。
また、図20に示したように、S0においてCNT=5となる場面を想定し、その場合にS0に戻って、第1のアドレスAD0の選択を維持するようにしてもよい。図20の状態遷移図に従うことで、M<JとM>Jのいずれの場合も対応可能である。
5.2 アップサンプリング
本実施形態では、記憶部120のデータのうち、第1のアドレスAD0に対応するデータが出力される可能性がある。図8の例であれば、出力クロックのタイミングは、ほぼd4に対応する入力クロックに等しいが、出力対象となるデータは、1入力クロックサイクル分だけ前のデータd3である。つまり出力データは、入力データに対して約1入力クロックサイクル分だけの時間差(位相差、遅延)が発生するおそれがある。
システムによっては、上記時間差が問題とならない場合も考えられる。例えば、リアルタイムでの処理が不要なシステムであれば、上記時間差として遅延が発生することが許容できる場合も多い。出力データを利用するホスト装置(外部装置300)において、遅延が発生しても処理精度の低下等が生じない、或いは遅延を補正する処理で対応可能な場合が考えられる。しかし、システムによっては時間差をできるだけ小さくすることが望ましい場合もある。
そこで本変形例では、入力データに対してアップサンプリング(インターポーレーション)を行ってもよい。具体的には、サンプリングレート変換装置100は、データ(入力データ)を第1のクロックでサンプリングする入力部110と、入力部110でサンプリングされたデータをアップサンプリングするアップサンプリング部(アップサンプリング回路、図4には不図示)を含む。そして記憶部120は、アップサンプリング部によりアップサンプリングされたデータが取り込まれる。
図21は、本変形例の手法を説明する図である。入力データに対してアップサンプリングを行うことで、入力データに比べてサンプリングレートの高いアップサンプリングデータが取得される。図21の例であれば、4倍のアップサンプリングが行われており、所与の入力データ(例えばd3)と次の入力データ(d4)との間のタイミングに対応する3つのデータ(d32,d33,d34)が追加されている。
上述した手法では、出力対象はd3であるため、出力クロックのタイミングとの時間差T1(遅延)は、1入力クロックサイクル分の時間となる。それに対して、アップサンプリングデータを用いた場合、出力対象をd32〜d34からも選択可能となる。例えば、記憶部120がd34を記憶し、判定部140がd34に対応するアドレスを選択した場合、出力クロックのタイミングとの時間差T2(遅延)は、1入力クロックサイクルの1/4の時間となる。図21では4倍のアップサンプリングの例を示したため、T2=T1/4となったが、k倍のアップサンプリングをすることで、T2=T1/kとすることが可能である。
なお、アップサンプリングデータは出力データとして選択される可能性がある以上、単純に所与の値(例えば0)を挿入するだけでは不十分である。ここでのアップサンプリング部は、所与の値のデータの挿入処理、及びフィルター処理により、入力部110でサンプリングされたデータのアップサンプリングを行うとよい。このようにすれば、アップサンプリングデータ(例えばd32〜d34)として、実際の入力データ(例えばd3までに取得された入力データ)に基づく意義のある値を設定することが可能になる。
図22は、本変形例の手法を説明する図である。図8と比較した場合、k倍のアップサンプリング及びフィルター処理(LPF処理)が追加される。これにより、アップサンプリング部は、所与のタイミングまでの入力データdj(図22の例であれば、jは1〜4のいずれかの整数)に基づいて、所与のタイミングよりも後のタイミングに相当するデータdj2〜djkを生成するk倍のアップサンプリングを行う。例えば入力データd3が取得された場合には、d3とd4の間のタイミングに対応するアップサンプリングデータd32〜d3kが取得される。
記憶部120では、d3及びd32〜d3kのうちの複数を記憶してもよいが、記憶領域を大きくする必要があるし、アドレスの選択処理も複雑化するおそれがある。よって図22に示すように、アップサンプリングを行う場合にも、バッファメモリーのアドレスはAD0とAD1の2つとしてもよい。
そして、dji(iは2≦i≦k−1を満たす整数)に比べてdji+1が時系列的に後のタイミングに対応するデータである場合に、記憶部120は、アップサンプリングされたデータdj2〜djkのうちのdjkが取り込まれる。例えば、入力データd3の更新に基づいてアップサンプリングデータd32〜d3kが取得された場合、そのうちのd3kを記憶部120に記憶する。d3以外の入力データに対しても同様であり、記憶部120にはd1k〜d4kが記憶されることになる。このようにすれば、アップサンプリングによりデータ数がk倍に増えたとしても、記憶部120(バッファメモリー)の容量を大きくする必要がない。
図23は、k=2の場合の入力クロックと出力クロックのタイミング例を示す図である。図24は、k=10の場合の入力クロックと出力クロックのタイミング例を示す図である。このように、入力クロックと出力クロックが重なる状態では、djkを記憶し、出力データとすることで、出力クロックのタイミングとデータ(djk)との時間差(遅延)を、1入力クロックサイクルの1/kにすることが可能になる。
図23、図24の状況であれば、kが大きいほど時間差を小さくすることが可能である。しかし本実施形態での選択アドレスには種々の変形実施が可能であるため、出力クロックと入力クロックが重ならない状況(例えば図16や図18)で、最新の入力データ(第2のアドレスAD1)が選択対象となる実施形態も考えられる。
図25は、図18と同様に出力クロックがd3とd4の間にある場合であり、且つ、k=2によるアップサンプリングが行われた場合の入力クロックと出力クロックのタイミング例を示す図である。本変形例のようにk倍のアップサンプリングを行った場合、d3に対応するd3kが第2のアドレスAD1に記憶されており、出力データとして選択される。アップサンプリングデータは入力クロックで生成されているため、出力クロックよりも(概念上)後のタイミングであっても、アップサンプリングデータは既に存在する。そのため、図25に示したように、出力クロックよりも後のタイミングに対応するアップサンプリングデータd3kを、出力データとして選択することもある。
また、時間差のさらなる低減を考慮する場合、出力クロックよりも細かいカウンターであるサブカウンターを用いた処理を行ってもよい。サブカウンターは、出力クロックの周期内のさらに細かいカウンターであり、理想的には1出力クロック周期において、k個の分解能を持つ(k通りのカウント値をカウント可能である)。サブカウンターを用いることで、仮想的な時間軸上のk個のデータ列のどのタイミングで、出力クロックが入力されたか(リサンプリングタイミングが来たのか)を計測できる。判定部140は、サブカウンターに基づいて、リサンプリングタイミングの直前のデータを特定し、特定されたデータを選択、出力する。
また、サブカウンターの分解能pは、kに限定されず、kより大きい値であってもよい。その場合、リサンプリングタイミングでのカウント値qは、所与のアップサンプリングデータと次のアップサンプリングデータの間のタイミングに対応する場合もある。一例として、k=6、p=12、q=3であり、qが0からカウントを開始する場合を考える。この場合、1データ当たりのカウント値はp/k=2となる。q/(p/k)=3/2=1.5となるため、リサンプリングタイミングは、元データ(例えばd3)を起点として1つ次のデータ(例えばd32)とさらに次のデータ(例えばd33)の間のタイミングである。よってこの場合、出力データとしてd32又はd33を選択すればよい。
また、p/k>2の場合、少数部分の値が0.5を超えるか否かに応じて、リサンプリングタイミングが前のアップサンプリングデータに近いか、後のアップサンプリングデータに近いかを判定することも可能である。その他、アップサンプリングデータの選択については種々の変形実施が可能である。
以上、本発明を適用した実施形態およびその変形例について説明したが、本発明は、各実施形態やその変形例そのままに限定されるものではなく、実施段階では、発明の要旨を逸脱しない範囲内で構成要素を変形して具体化することができる。また、上記した各実施形態や変形例に開示されている複数の構成要素を適宜組み合わせることによって、種々の発明を形成することができる。例えば、各実施形態や変形例に記載した全構成要素からいくつかの構成要素を削除してもよい。さらに、異なる実施の形態や変形例で説明した構成要素を適宜組み合わせてもよい。また、明細書又は図面において、少なくとも一度、より広義または同義な異なる用語と共に記載された用語は、明細書又は図面のいかなる箇所においても、その異なる用語に置き換えることができる。このように、発明の主旨を逸脱しない範囲内において種々の変形や応用が可能である。