(57)【要約】【課題】高い周波数の信号を生成でき、量子化誤差も少なく、スペクトル純度特性に優れ、省リソースを実現できるようにした数値制御発振器を提供する。【解決手段】  ５項間の漸化式ループを利用してクロック周期毎に関数値を生成する数値制御発振器であって、２クロック周期前に生成した関数値に乗数Ｍ−＝２｛cos（２Δω）−cos（Δω）｝を乗算する１クロックレイテンシの乗算器２１と、該乗算器２１の出力と１クロック周期前の関数値と３クロック前の関数値とをそのまま加算し且つ４クロック周期前の関数値を正負を反転して加算する加算器３１とを有する発振回路と、前記乗数Ｍ−を生成して該発振器に供給する乗数生成回路とを備える。【選択図】図３
2011193304.tif 000002
【特許請求の範囲】
【請求項１】
ｉ項間（ｉは３以上の整数）の漸化式ループを利用して、クロック周期毎に関数値を生成する数値制御発振器であって、
ｊクロック周期前（ｊは２以上ｉ−１以下の整数）に生成した関数値に乗数を乗算するｋクロックレイテンシ（ｋは１以上ｊ−１以下の整数）の乗算器と、
該乗算器の出力と、１クロック周期前からｉ−１クロック周期前までに生成した関数値のうちの、前記ｊクロック周期前に生成した関数値を除く少なくとも１つの関数値とを加算して、現在のクロック周期の関数値を生成する加算器とを有する発振回路と、
前記乗数を生成して前記発振器に供給する乗数生成回路と、
を備えたことを特徴とする数値制御発振器。
【請求項２】
前記発振回路が、さらに、前記現在のクロック周期の関数値を順に１クロック周期ずつ遅延させるｉ−１段の遅延素子を含み、前記遅延素子のうちのｊ−ｋ段目の遅延素子の出力を前記乗算器に入力することを特徴とする特徴とする請求項１記載の数値制御発振器。
【請求項３】
前記乗数生成回路は、前記乗数を、前記発振回路の乗算器が必要とする所望ビット長の値に冗長ビット長の値を加えて生成するものであり、
前記冗長ビット長の値に基づいて、前記発振回路が前記関数値の生成を行う間の誤差の蓄積を評価して補正値を生成し、該補正値を用いて前記所望ビット長の値を補正した補正済み乗数を前記乗算器に供給する、補正回路をさらに備えることを特徴とする請求項１または２記載の数値制御発振器。
【請求項４】
前記発振回路をＬ個（Ｌは２以上の整数）備え、該Ｌ個の発振回路で、順にΔωだけ異なるΔω＊Ｌの位相ごとの関数値を生成し、該発生した関数値をインターリーブすることによりΔωの位相ごとの関数値を生成することを特徴とする請求項１ないし３のいずれかに記載の数値制御発振器。
【請求項５】
前記発振回路に初期値を与え、該初期値からの関数値の生成を開始させるとともに、該関数値が前記初期値に戻るべきクロック周期にいたったときに、前記発振回路に前記初期値を再び与え、該初期値からの関数値の生成を再開させる初期値生成回路をさらに備えたことを特徴とする請求項１ないし４のいずれかに記載の数値制御発振器。
【請求項６】
前記発振回路が、必要とされるビット長を超えるビット長で前記関数値を生成するものであり、前記発振回路が生成した関数値を必要なビット数に丸め込んで出力する丸め込み回路をさらに備えることを特徴とする請求項５記載の数値制御発振器。
【請求項７】
ｉ＝５、ｊ＝２であり、前記発振回路がΔωもしくはΔω＊Ｌの位相ごとの正弦関数値を生成するものであり、
前記乗数がＭ−＝２｛cos（２Δω）−cos（Δω）｝であり、前記加算器が、１クロック周期前の関数値と３クロック周期前の関数値とをそのまま加算し、４クロック周期前の関数値を正負を反転して加算するか、もしくは、
前記乗数がＭ＋＝２｛cos（２Δω）＋cos（Δω）｝であり、前記加算器が、１クロック周期前の関数値、３クロック周期前の関数値、および、４クロック周期前の関数値を正負を反転して加算する、
ものであることを特徴とする請求項１ないし６のいずれかに記載の数値制御発振器。
【請求項８】
前記乗数生成回路が、複数の算出式から所望の発振周波数に応じて選択された算出式を用いて、前記乗数を生成することを特徴とする請求項１ないし７のいずれかに記載の数値制御発振器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ｉ項間（ｉは３以上の整数）の漸化式ループを利用して、１クロック周期（標本化周期）毎に関数値を生成する数値制御発振器に関する。
【背景技術】
【０００２】
デジタル変復調通信システムなどのシステムにおいて、スペクトル純度が高く周波数可変な正弦波信号の需要は高い。この正弦波信号の発生源としては、アナログ回路で実現する周波数シンセサイザＰＬＬ（フェーズロックトループ）内にあるＶＣＯ（電圧制御発振器）はよく知られる技術であるが、半導体集積回路の微細化において、アナログ回路は面積的なスケーリングの恩恵を受けにくく、また電源電圧の低下に伴い設計自体も難しくなってきている。
【０００３】
一方で、デジタル回路は微細化による面積的なスケーリングの恩恵を受けることと、電源電圧低下による設計の難度変化が比較的緩やかなため、正弦波信号の発生をデジタル回路で実現するＮＣＯ（数値制御発振器）の注目が高くなってきている。
【０００４】
電圧制御発振器は与えられた入力電圧値に対して特定の周波数の正弦波を出力するのに対して、数値制御発振器は与えられた入力数値に対する可変の周波数を持つ離散デジタル値で表現される正弦波を出力するというものである。また、数値制御発振器に用いられる信号処理アルゴリズムは、ハードウエア上の実装だけでなくソフトウエア上のアルゴリズムとしても実現できるため、応用例は多い。
【０００５】
しかしながら、数値制御発振器は時間的な離散信号しか扱えないため、ロジック回路のスピードやソフトウエア上の計算スピードに制限を受け、高周波の信号が出しにくいという弱点がある。離散信号における標本化定理に基づくと、現行の半導体集積回路のクロック周波数においては、せいぜい数１００ＭＨｚ程度までの正弦波しか発生できない。また、正弦波発生アルゴリズムの内部では量子化数値で演算が行われるため、演算上の量子化誤差の蓄積により、理想のアナログ信号的な正弦波からかけ離れた正弦波が発生しうるという弱点もある。
【０００６】
＜第１の従来例（テーブル参照法）＞
これは、正弦波の要素値をルックアップテーブルにストアしておき、１クロックごとにポインタを更新し、ポインタの指し示すアドレスにストアされている値を読み出していくという、もっとも単純な構成法である。つまり、求める正弦波の１クロックごとの角度の増分をΔωとすると、cos（０）、cos（１＊Δω）、cos（２＊Δω）、cos（３＊Δω）、・・・の一連の値をルックアップテーブルにストアしておき、１クロックごとにアドレスを増加させて読み出していき、１周するとアドレス初期値から再び繰り返し読み出していく方法である。
【０００７】
＜第２の従来例（ＣＯＲＤＩＣアルゴリズム）＞
１標本化周期あたりの回転角度Δωは、式（１）のように分解できる。
2011193304.tif 000003
このとき、ｃｋは１または−１であり、ｗｋ＝arctan（１／２ｋ）である。このように分解されたｗｋを用いると、Δωの回転を表す回転行列は式（２）のように表すことができる。
2011193304.tif 000004
もとの座標ベクトル（cosω、sinω）に対して次の座標（cos（ω＋Δω），sin（ω＋Δω））を生成するには、式（２）をもとの座標に乗算するということに相当する。
【０００８】
これをデジタル回路もしくはソフトウエア上で実現するには、式（２）におけるcosｗｋの掛け算の項を除いては、１回のビットシフト演算と１回の加算／減算のセットをｍ回分することに相当する。回転角の分解能を向上させるためにはｍの値を大きくとればよい。ｍをこの演算を１標本化周期ごと繰り返し、cos（０）、cos（１＊Δω）、cos（２＊Δω）、cos（３＊Δω）、・・・・の一連の値を座標ベクトルの例えばｘ座標をもとに生成することである。なお、式（２）におけるcosｗｋの項については、ｍが決定されれば、一意的に乗算する値が決定されるので、そのことを考慮して最後に１回の乗算による補正を行えばよい。
【０００９】
＜第３の従来例（引用文献１）＞
これは、式（３）などで表される三角恒等式が成り立つことによるループを利用した方法である。
2011193304.tif 000005
ただし、ｎ≧１である。Ｍ＝２cos（Δω）、ａｎ＝cos（ω＋ｎΔω）と置き換えると、式（４）のような３項間漸化式として表すことができる。
2011193304.tif 000006
式（４）は、ｎ−１番目とｎ番目の正弦波値と定数Ｍを使って、ｎ＋１番目の正弦波値を算出することができることを示している。式（４）を信号処理システムとしてブロック図で表すと図１のようになる。図１において、１１、１２は１標本化時間遅延素子、２１は乗算器、３１は加算器、４１は丸め込み回路である。ハードウエア上に実装する場合は、遅延素子１１、１２をフリップフロップに置き換えればよい。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００７−５３５００号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
第１の従来例のテーブル参照法によると、例えば１００ＭＨｚの標本化周波数で１０ＭＨｚの正弦波を表現しようとすれば、cos（２π＊０／１０）＝１、cos（２π＊１／１０）、cos（２π＊２／１０）、cos（２π＊３／１０）、・・・、cos（２π＊９／１０）の１０種類の値を持ったルックアップテーブルを準備しておけばよいことになる。
【００１２】
しかしながら、このように単純な周期性を持った量子化正弦波のスペクトルを考えると、周期的な量子化誤差により、基本波の２倍、３倍、・・・の周波数に高調波成分を持った不純な正弦波信号となることが知られている。このような高調波を伴う正弦波はデジタル変復調システムなどのアプリケーションに使用しづらいものとなる。
【００１３】
逆に、例えば同じく１００ＭＨｚの標本化周波数で９ＭＨｚの正弦波を表現しようとすれば、cos（２π＊０／１０）＝１、cos（２π＊１＊９／１００）、cos（２π＊２＊９／１００）、cos（２π＊３＊９／１００）、・・・、の９００種類の値を持ったルックアップテーブルを持つ必要がある。この場合、周波数ドメインで見ると、前例と比較すれば、量子化誤差の周期性が緩和され、高調波の大きさはデジタル変復調システムなどのアプリケーションに使用しやすくなる。
【００１４】
しかしながら、量子化誤差繰り返しの周期が長くなればなるほど、ルックアップテーブルの規模が大きくなり、リソースの増大に繋がる。なおかつ、数値制御発振器では任意の周波数の正弦波を発生させることが目的となるため、任意の度合いに従ってルックアップテーブルの規模を大きくさせなければならないという問題がある。
【００１５】
第２の従来例のＣＯＲＤＩＣアルゴリズムでは、ｍの値を大きくとれば、１標本化時間の回転角Δωを任意にとることができるため、第１の従来例における量子化誤差の周期性による高調波の問題は防ぐことができる。
【００１６】
しかし、ＣＯＲＤＩＣアルゴリズムによると、次の正弦波値を算出するためは、式（２）の回転行列で表されるように、現在の正弦波値に対して１回のビットシフト演算と１回の加算／減算のセットをｍ回および１／cosｗｋの係数をキャンセルするための乗算１回を計算しなければならない。また、座標ベクトル（cosω、sinω）を用いているため、正弦・余弦の両方の値を必要とし、１標本化間隔内での計算量が多くなる。つまり、計算をこなすために標本化周波数を低くする必要があり、離散信号における標本化定理に基づくと、出力正弦波周波数も同時に低くする必要がある。このようにＣＯＲＤＩＣアルゴリズムは、ある特定の角度を持った正弦値または余弦値を算出するのは得意とするところではあるが、数値制御発振器の目的としては適用しづらい。
【００１７】
また、出力正弦波周波は量子化信号であり、ＣＯＲＤＩＣアルゴリズムでは現在の正弦波値をもとに回転行列を掛け合わせることにより次の正弦波値を算出することを繰り返しており、このような場合、量子化誤差の蓄積により、出力正弦波の変動が起こり、所望の一定の振幅をとらない場合が発生する。
【００１８】
図１に示した第３の従来例の特許文献１で示されたループを使用すれば、省リソースが実現でき、また１標本化時間の回転角Δωも任意にとることができるので、量子化誤差の周期性による高調波の問題もおきない。
【００１９】
しかしながら、図１の曲線矢印で示されたパスにおいて、１回の乗算と１回の加算／減算が行われるが、これは１標本化周期内で行わなければならない。この場合、例えばハードウエア上で実施する場合、せいぜい２００ＭＨｚ程度のクロックが上限となる。離散信号における標本化定理によると、出力正弦波の上限は１００ＭＨｚ程度となってしまう。
【００２０】
また、出力正弦波周波は量子化信号であり、第２の従来例と同じく、過去の正弦波値を使用して次の正弦波値を算出している点で、量子化誤差の蓄積の問題が発生する。
【００２１】
本発明は以上のような点に鑑みてなされたものであり、その目的は、高い周波数の信号を生成でき、また量子化誤差も少なく、且つスペクトル純度特性に優れ、省リソースを実現できるようにした数値制御発振器を提供することである。
【課題を解決するための手段】
【００２２】
上記目的を達成するために、請求項１にかかる発明は、ｉ項間（ｉは３以上の整数）の漸化式ループを利用して、クロック周期毎に関数値を生成する数値制御発振器であって、ｊクロック周期前（ｊは２以上ｉ−１以下の整数）に生成した関数値に乗数を乗算するｋクロックレイテンシ（ｋは１以上ｊ−１以下の整数）の乗算器と、該乗算器の出力と、１クロック周期前からｉ−１クロック周期前までに生成した関数値のうちの、前記ｊクロック周期前に生成した関数値を除く少なくとも１つの関数値とを加算して、現在のクロック周期の関数値を生成する加算器とを有する発振回路と、前記乗数を生成して前記発振器に供給する乗数生成回路と、を備えたことを特徴とする。
【００２３】
請求項２にかかる発明は、請求項１記載の数値制御発振器において、前記発振回路が、さらに、前記現在のクロック周期の関数値を順に１クロック周期ずつ遅延させるｉ−１段の遅延素子を含み、前記遅延素子のうちのｊ−ｋ段目の遅延素子の出力を前記乗算器に入力することを特徴とする特徴とする。
【００２４】
請求項３にかかる発明は、請求項１または２記載の数値制御発振器において、前記乗数生成回路は、前記乗数を、前記発振回路の乗算器が必要とする所望ビット長の値に冗長ビット長の値を加えて生成するものであり、前記冗長ビット長の値に基づいて、前記発振回路が前記関数値の生成を行う間の誤差の蓄積を評価して補正値を生成し、該補正値を用いて前記所望ビット長の値を補正した補正済み乗数を前記乗算器に供給する、補正回路をさらに備えることを特徴とする。
【００２５】
請求項４にかかる発明は、請求項１ないし３のいずれかに記載の数値制御発振器において、前記発振回路をＬ個（Ｌは２以上の整数）備え、該Ｌ個の発振回路で、順にΔωだけ異なるΔω＊Ｌの位相ごとの関数値を生成し、該発生した関数値をインターリーブすることによりΔωの位相ごとの関数値を生成することを特徴とする。
【００２６】
請求項５にかかる発明は、請求項１ないし４のいずれかに記載の数値制御発振器において、前記発振回路に初期値を与え、該初期値からの関数値の生成を開始させるとともに、該関数値が前記初期値に戻るべきクロック周期にいたったときに、前記発振回路に前記初期値を再び与え、該初期値からの関数値の生成を再開させる初期値生成回路をさらに備えたことを特徴とする。
【００２７】
請求項６にかかる発明は、請求項５記載の数値制御発振器において、前記発振回路が、必要とされるビット長を超えるビット長で前記関数値を生成するものであり、前記発振回路が生成した関数値を必要なビット数に丸め込んで出力する丸め込み回路をさらに備えることを特徴とする。
【００２８】
請求項７にかかる発明は、請求項１ないし６のいずれかに記載の数値制御発振器において、ｉ＝５、ｊ＝２であり、前記発振回路がΔωもしくはΔω＊Ｌの位相ごとの正弦関数値を生成するものであり、前記乗数がＭ−＝２｛cos（２Δω）−cos（Δω）｝であり、前記加算器が、１クロック周期前の関数値と３クロック周期前の関数値とをそのまま加算し、４クロック周期前の関数値を正負を反転して加算するか、もしくは、前記乗数がＭ＋＝２｛cos（２Δω）＋cos（Δω）｝であり、前記加算器が、１クロック周期前の関数値、３クロック周期前の関数値、および、４クロック周期前の関数値を正負を反転して加算する、ものであることを特徴とする。      
【００２９】
請求項８にかかる発明は、請求項１ないし７のいずれかに記載の数値制御発振器において、前記乗数生成回路が、複数の算出式から所望の発振周波数に応じて選択された算出式を用いて、前記乗数を生成することを特徴とする。
【発明の効果】
【００３０】
本発明によれば、乗算器による演算に時間的余裕を持たせることができるので、発振する信号の上限周波数拡張が可能となる。また、初期値の再入力や量子化誤差の蓄積を評価して乗数の補正を行うことにより、量子化誤差を少なくすることができ、スペクトル純度特性に優れた信号を発振できる。また、Ｌ個の発振回路で順にΔωだけ異なるΔω＊Ｌの位相ごとの関数値を生成しインターリービングすることで、発振する信号の更なる上限周波数拡張が可能である。
【図面の簡単な説明】
【００３１】
【図１】従来例の数値制御発振器のブロック図である。
【図２】図１の数値制御発振器を改善した数値制御発振器のブロック図である。
【図３】本発明の第１の実施例の数値制御発振器のブロック図である。
【図４】本発明の第２の実施例の数値制御発振器のブロック図である。
【図５】第２の実施例の数値制御発振器の動作のタイミングチャートである。
【図６】第２の実施例の数値制御発振器において初期値挿入の問題点の説明図である。
【図７】本発明の第３の実施例の数値制御発振器における乗数補正回路のブロック図である。
【図８】本発明の第３の実施例の数値制御発振器における乗数補正の効果を示す波形図である。
【図９】本発明の第４の実施例の数値制御発振器のブロック図である。
【図１０】本発明の第４の実施例の数値制御発振器におけるダイナミック乗数補正回路の効果を示す特性図である。
【発明を実施するための形態】
【００３２】
本発明では第３の従来例のように三角恒等式を使った漸化式ループを利用する。この場合の１つ目の大きな欠点は、演算の量による標本化周波数の上限、すなわち出力正弦波の周波数の上限が限られてしまうことであった。式（４）および図１から分かるように、ここでの根本的な原因は、ｎ＋１番目の正弦波値ａn+1を算出するためにｎ番目の正弦波値ａｎを使用していることである。この算出の際に、乗数Ｍとの１回の乗算と１回の加算／減算を行わなければならないが、ハードウエア上ならこの計算に必要とする組み合わせ回路の段数が、ソフトウエア上なら計算スピードが、出力正弦波の周波数の上限を決めるものとなる。逆に、値ａn+1を算出するための値ａｎに対する演算が多くなることを避けることが、出力正弦波の周波数の上限の拡大に直結することを意味する。
【００３３】
ここで式（３）の三角恒等式の代わりに、式（５）または式（６）の三角恒等式を利用することを考える。
2011193304.tif 000007
2011193304.tif 000008
ただし、ｎ≧３である。次の式（５）および式（６）は、それぞれ式（７）および式（８）の５項間漸化式として見ることができる。
2011193304.tif 000009
2011193304.tif 000010
ここで、Ｍ−＝２｛cos（２Δω）−cos（Δω）｝、Ｍ＋＝２｛cos（２Δω）＋cos（Δω）｝、ａｎ＝cos（ω＋ｎΔω）である。式（７）、式（８）の要点は、乗数Ｍ−、Ｍ＋の被乗数である。つまり、式（３）においてはａｎが被乗数であったのに対し、式（７）、式（８）ではａｎ-1が被乗数となる。このことにより、図１で見たような１回の乗算を含む演算パスを、１標本化時間で実行する必要はなく、最大２標本化時間の猶予が与えられることを示唆している。
【００３４】
式（４）に対する図１に習い、式（７）、式（８）を率直にブロック図として表すと、図２のようになる。図２において、１１〜１４は１標本化時間遅延素子、２１は乗算器、３１は加算器、４１は丸め込み回路、５１、５２は演算器である。演算器５１、５２では、式（７）を使用する場合は「＊１」、式（８）を使用する場合は「＊（−１）」の演算となり、乗算器２１に入力する定数Ｂは、式（７）を使用する場合は「Ｍ−＝２｛cos（２Δω）−cos（Δω）}」であり、式（８）を使用する場合は「Ｍ＋＝２｛cos（２Δω）＋cos（Δω）}」である。しかしながら図２では、なおも乗算を含む演算パスを１標本化時間で実行しなければ、式（７）および式（８）の三角恒等式を表現していない。
【００３５】
＜第１の実施例＞
そこで、図２を図３のように改良することを考える。図２の数値制御発振器では、２段目の遅延素子１２の出力を乗算器２１の入力としているのに対して、図３の数値制御発振器では、１段目の遅延素子１１の出力を乗算器２１の入力としている。これにより、乗算器２１に被乗数ａn-1を入力するタイミングが、図２の場合に比較して１標本化時間だけ早くなる。従って、図３の場合は、乗算器２１を含む演算パスを２標本化時間で実行すれば式（７）および式（８）の三角恒等式を表現していることになる。これにより、乗算の実行に１標本化時間分猶予ができる（逆に、１標本化時間で実行は不可となる）。ハードウエア上では、図３の乗算器２１を１クロックレイテンシのパイプライン化（つまり乗算を２ステージに分け前半ステージ演算後の結果をフリップフロップで１度受けてから後半ステージ演算）を行うことになる。１標本化時間あたり１ステージの演算可能量を同じと仮定すれば、乗算器２１の１クロックレイテンシのパイプライン化によって演算量をおよそ２倍とできる。逆に演算量が同じであればクロック周波数を２倍にできる。このように式（７）、式（８）の三角恒等式を利用し１標本化時間を短くし、出力正弦波の上限周波数の拡張を図ることができる。
【００３６】
ここでは、式（３）ではなく式（５）、式（６）の三角恒等式を利用することにより、式（４）の３項間漸化式ループから式（７）、式（８）の５項間漸化式ループへ引き上げ、乗算を含むパスの演算時間を２倍稼ぐ改善をした。同様に、三角恒等式を利用する４項間以上の漸化式ループなら、演算時間を稼ぐ目的に適用できる。例えば、７項間漸化式ならば式（４）の３項間漸化式ループに比較して３倍の演算時間を稼ぐことができる。しかしながら、これらのような漸化式には、「その特性方程式の全ての複素解の絶対値が１以下でなければ数列は発散する」という定理（１）が知られている。例えば式（７）であれば式（９）、例えば式（８）であれば式（１０）が特性方程式となり、それぞれの５つの複素解の絶対値が全て１であることが、発振回路が安定して動作する条件となる（式（９）、式（１０）の５つの解がすべて１以下になることは有りえない）。従って、式（７）、（８）が発振回路として安定して動作する範囲は、−２≦Ｍ−≦０、−２≦Ｍ＋≦０となる。
2011193304.tif 000011
2011193304.tif 000012
【００３７】
広い発振周波数範囲を必要とする用途に適した数値制御発振器では、乗数Ｍ＋、Ｍ−を可変にして、標本化周波数の半分の周波数（離散信号の標本化定理においてナイキスト周波数と呼び、出力正弦波の上限周波数となる）以下の周波数を網羅することが望ましい。しかし、式（９）単独、もしくは式（１０）単独ではナイキスト周波数以下を網羅することはできない。すなわち、出力正弦波周波数をＦOSC、ナイキスト周波数をＦNYQとすれば、式（９）の場合、−２≦Ｍ−≦０の条件を満たすＦOSCは、式（１１）のようになる。
2011193304.tif 000013
同様に式（１０）の場合、−２≦Ｍ＋≦０の条件を満たすＦOSCは、式（１２）のようになる。
2011193304.tif 000014
ただし、式（１１）を満たす範囲と式（１２）を満たす範囲の条件を合わせれば、ＦNYQ以下の周波数を全て網羅できる。従って、数値制御発振器として望ましいのは、式（７）と式（８）とを所望出力正弦波周波数に従い切り替えて使用する、つまり図３のブロック図の構成をそのまま実装することである。６項間以上の漸化式として表現できる三角恒等式では、上記定理（１）の発振器の安定条件を満たすＦOSCの実現範囲が狭まる。しかし、ＦNYQ以下の周波数を全て網羅できることができなくてもよいアプリケーションであれば実装可能である。
【００３８】
＜第２の実施例（図４、図５）＞
数値制御発振器では入力数値によって出力正弦波周波数と振幅が可変になる。例えば、式（４）の漸化式の場合、乗数Ｍおよび初期値ａ0，ａ1がそれぞれ出力正弦波周波数と振幅とを決めるパラメータとなる。同様に、式（７）、式（８）では乗数Ｍ−またはＭ＋とａ0，ａ1，ａ2，ａ3がそれらとなる。漸化式を利用した数値制御発振器では、この乗数と初期値だけはあらかじめ入力数値に対するルックアップテーブルに保持しておく必要があるが、多項間漸化式になればその分だけ初期値の数も増加する。これに伴ってルックアップテーブルに必要なリソースが増大し、さらに出力正弦波周波数の可変ステップを細かくすればさらにその分だけリソースを必要とする。
【００３９】
しかしながら、ほとんどのアプリケーションでは、数値制御発振器のスタートアップ時間はある程度許容される。このため、本発明ではスタートアップ時間やその他のアプリケーション上の空き時間を利用した低速の初期値生成回路を提案する。例えば、式（７）の漸化式をメインの発振器として使用する場合、式(３）を利用して、Ｍ-，ａ0，ａ1，ａ2，ａ3を低速で計算する回路を初期値生成回路として使用すればよい。すなわち、ａ0＝cos０＝１、ａ1＝cos（Δω）のみをルックアップテーブルにあらかじめ保持しておき、ａ2＝cos（２Δω）、ａ3＝cos（３Δω）はこの初期値生成回路でスタートアップ時間を使用して計算・保持させる。Ｍ-は２＊（ａ2−ａ1）を低速で計算すればよく、これらの低速で計算・保持された数値を使ってメインの発振器の高速発振を開始させればよい。
【００４０】
複数のメイン発振回路の出力をインターリーブすることによって、さらなる出力正弦波周波数の向上が図れる。すなわち、例えば式（７）の漸化式を用いた、順にΔωだけ異なるΔω＊Ｌの位相ごとの関数値を生成するＬ個のメイン発振器を標本化周波数ＦSAMPで動作させれば、出力信号のナイキスト周波数がＬ＊ＦNYQとなり、同時にこれが出力正弦波周波数ＦOSCの上限となる。この際、Ｌ個の発振器全てにおいて乗数Ｍ-は共通でよく、１つ目の発振回路では初期値ａ0、ａL、ａ2L、ａ3Lが必要となり、２つ目の発振回路では初期値ａ1、ａL+1、ａ2L+1、ａ3L+1が必要となり、・・・、Ｌつ目の発振回路では初期値ａL-1、ａ2L-1、ａ3L-1、ａ4L-1が必要となる。これらの初期値合計４＊Ｌ個はあらかじめルックアップテーブルに保持しておく必要はない。前述の初期値生成回路を利用して低速で、スタートアップ時間などに計算・保持すればよい。インターリーブにより、１つ１つの発振回路の動作周波数は向上させる必要はなく、ほぼインターリーブ数Ｌ倍のリソースで出力正弦波の上限をＬ倍に向上させることができる。前述の多項間漸化式を用いた出力正弦波周波数の向上法とインターリーブを用いたそれとは、組み合わせで使用できる。具体的な組み合わせ形態は、許容できるリソースと所望の出力正弦波周波数レンジによって決定されればよい。
【００４１】
第３の従来例の問題点として挙げたように、漸化式を用いた正弦波生成の方式の第２の大きな弱点として、量子化誤差の蓄積の問題がある。無限大の分解能を持った数列ａnと乗数ＭやＭ−、Ｍ＋の演算では、数学的に必ず式（３）や式（５）、式（６）の三角恒等式が成り立つため、このような問題は起こらない。しかし、実際のハードウエアやソフトウエアでは、有限の分解能を持った、すなわち量子化された演算の繰り返しループとして実装される。このため、過去の正弦波値の近似値を使用して次の正弦波値の近似値を算出しているため、丸め込みによる誤差が蓄積され、真に求める正弦波値から平均して値がずれていく可能性がある（連続的にずれるわけではない）。つまり、（ｘ〜、ｙ〜）を（cosω、sinω）の近似値とすると、無限大の分解能を持った理想的な発振器では（ｘ〜、ｙ〜）は常に単位円上にあるが、量子化された演算では（ｘ〜、ｙ〜）は平均して見ると単位円上から外れていく傾向がある。この単位円上から外れていく傾向は、一般にランダムウォーク現象として知られる現象で理論的に説明でき、Ｎ標本化時間後（Ｎ回の演算後）では√Ｎに比例した値だけ（ｘ〜、ｙ〜）プロットが平均的に単位円上からの距離が離れていく。直感的には、標本化時間が経過するにしたがい単位円周プロットが“ぼやけ”ていくと考えられる。
【００４２】
この間題に対処するために、特開２００７−５２０１３８では、（ｘ〜、ｙ〜）がゼロ値条件を、すなわち（１，０）などになることを検出するたびに、初期状態からもう一度発振器を再動作させるという方法が提案されている。このことで、量子化誤差の蓄積による単位円周プロットの“ぼやけ”をリセットすることができる。しかし、この場合には、ゼロ値条件を満たしたことを検出する検出回路が必要である。
【００４３】
一方で本発明では、定期的に初期値を発振回路に再入力することにより単位円周プロットの“ぼやけ”をリセットすることを提案する。例えば、１００ＭＨｚの標本化周波数にて９ＭＨｚの正弦波を生成する場合において、理想的な無限の分解能を持った演算では、正弦波数列は１００標本化時間の周期性を持つ。このとき、数列の項ａ0とａ100、ａ1とａ101などは正確に一致することが好ましいが、量子化された演算では量子化誤差の蓄積により、演算の繰り返しで得られたａ100、ａ101などは正確にａ0やａ1と一致しない可能性がある。ａ200，ａ201なども同様である。そこで、演算の繰り返しで得られたａ100、ａ101、・・・やａ200，ａ201、・・・の代わりに、本発明では初期値生成回路であらかじめ計算・保持している初期値を漸化式ループへ再入力することで、量子化誤差の蓄積の問題を解決する。
【００４４】
この再入力法を含め、式（７）、式（８）の漸化式を用いた発振回路（図３）を改めたブロック図を図４に示す。図３の発振器と比較して、図４の発振器は、初段の遅延素子１１の入力にセレクタ６１が設けられる。そして、初期値入力期間識別信号ＩＮＩＴ＿ＩＮＪによって決定されたタイミングで初期値生成回路で計算・保持された初期値ＩＮＩＴ＿ＶＡＬを漸化式ループに取り込む。それ以外の期間では、加算器３１の出力をセレクタ６１で選択して遅延素子１１に入力し、漸化式ループによる数列生成を行う。
【００４５】
出力正弦波数列の周期長を一般化してＥ標本化周期であるとし、インターリーブ無しの図４の構成を実装した場合の発振シーケンスのタイミングチャートを図５に示す。ただしハードウエアに実装した場合、図４の中の符号１１〜１４はフリップフロップである。図５に示されるように、最初に、初期値入力期間識別信号ＩＮＩＴ＿ＩＮＪがハイレベルになり、初期値ａ0，ａ1，ａ2，ａ3が入力される。その後、ＩＮＩＴ＿ＩＮＪがローレベルになり、関数値の生成が継続される。そして、関数値ａE-1までの生成を終え、初期値に戻るべきクロック周期にいたったときに、再びＩＮＩＴ＿ＩＮＪがハイレベルになり、最初と同一の初期値が入力される。初期値再入力の時間的位置を決定する初期値入力期間識別信号ＩＮＩＴ＿ＩＮＪはＥの値が既知であれば単純なバイナリアップカウンタなどによって容易に生成できる。
【００４６】
なお、図３の説明においては省略したが、図３および図４の発振回路は、漸化式ループの出力を、さらに、丸め込み回路４１による丸め込みを行ってから、正弦波出力として出力している。すなわち、図３および図４の発振回路では、漸化式ループによって生成する関数値ａnは、正弦波出力として必要なビット長よりも大きなビット長を有しており、丸め込み回路４１によて必要なビット長に丸められてから、出力される。Ｅが大きくなれば、初期値再入力の頻度が下がリ、問題となる“ぼやけ”は初期値再入力直前では大きくなる。しかし、これを加味した上で所望出力正弦波値の表現ビット長よりも数列ａnのビット長を大きくしておき、正弦波出力の直前で丸め込みを行えば、所望の正弦波出力には“ぼやけ”が現れなくてすむ。この丸め込みで長い周期性を持つ数列ａnで表現される所望出力周波数を持つ正弦波を表現できることになる。
【００４７】
＜第３の実施例（図６、図７、図８）＞
上記のように、本発明では量子化誤差の蓄積の問題を定期的な初期値再入力にて解決するが、この解決策を用いると新たに問題が発生する。量子化乗数による周波数誤差よる問題である。式（４）におけるＭや式（７）、式（８）におけるＭ−、Ｍ＋が量子化された数値であることに起因する所望の出力正弦波周波数からの量子化誤差分のわずかな周波数ずれの積み重ねが、発振器への初期値再入力によってキャンセルされ、そのキャンセルにより、再入力直前後の出力正弦波値にギャップを生じさせてしまうことである。
【００４８】
この問題を図６に模式的に図示する。出力正弦波値数列の周期長をＥ標本化周期とすれば、発振の開始からＥ標本化周期後の初期値再入力直前の正弦波値は、無限大の分解能を持つ理想的な乗数が表す１標本化周期分の位相変化量ΔωIDEALに対する、量子化された乗数のΔωの差ΔωERRのおよそＥ倍だけ平均的に理想値から外れている。つまり、Ｅ標本化周期後のトータルのギャップの平均値をωGAPとすれば、例えば式（４）の漸化式内のＭを考えた場合、Ｍの理想値をＭIDEALとして以下の式（１３）で表すことができる。
2011193304.tif 000015
このωGAPは、式（１３）から分かるように、ΔωがどれだけΔωIDEALからかけ離れているか、つまり乗数を何ビット長で表現するかによってその総量は変化する。また乗数のビット長が固定されたとしても出力周波数によって変化する。さらに式（１３）から分かるように、Ｅが大きくなればωGAPも増加する傾向にある。しかし、Ｅを小さくすると、その分小さな周期長を持つ正弦波値数列しか表現できないため、アプリケーションによっては不利になる。
【００４９】
この問題を解決するために、乗数に対してΣ△変調を適用してダイナミックに乗数に補正をかける乗数補正アルゴリズムを提案する。図７に乗数補正回路を図示する。図７において、７１はΣΔ変調器、３２は加算器である。所望乗数ビット長ＮMSに冗長なビット長分ＮLSの精度を下位ビットに追加したビット長ＮRED＝ＮMS＋ＮLSを持つ量子化値ＭRED＝Ｍ＋ＭLSを乗数補正回路の入力とし、ビット長ＮMSを持つ乗数補正アルゴリズムの出力ＭMODを補正済みの乗数とし乗算器２１へ入力させる。
【００５０】
乗数補正回路内部では、ＭREDの上位ビットＭと上位ビットＭLSとを分離し、量子化値ＭLSをＮLSビットデジタル値から１ビットデジタル値に変換させるΣΔ変調器７１へ入力する。ΣΔ変調器７１は乗数ＭREDの下位ＮLSビットの値ＭLSを内部の積分器で積分し、その積分結果を内部の比較器で閾値と比較して、「＋１または０」（又は、「０または−１」）を１ビットで出力する。このΣ△変調器７１の１ビットの出力と分離しておいたＮMSビットの乗数Ｍを加算器３２で加算し、補正された量子化値ＭMEDにする。これにより、冗長ビット長の値ＭLSに基づいて、発振回路が関数値の生成を行う間の誤差の蓄積を評価した１ビットの補正値が生成され、この補正値を用いて乗数Ｍの値を補正した補正済み乗数ＭMODが乗算器２１に供給される。
【００５１】
この乗数補正アルゴリズムの効果を図８に図示する。乗数補正アルゴリズム無しの場合、所望出力正弦波周波数が決まってしまえば、ある固定の量子化誤差を持つ一定のＭを常に乗算器２１に入力しているため、１標本化時間あたりの位相変化誤差ΔωERRが正なら常に正の方向のみへ、負なら常に負の方向のみへ蓄積していき、Ｅ標本化時間後の累積誤差はＥ＊ΔωERRとなってしまう。乗数補正アルゴリズム有りの場合、ΔωERRが正であっても負であっても、ある程度誤差が蓄積されると、逆方向へ誤差に補正をかける効果をもっているため、Ｅ標本化時間後の累積誤差はゼロまたは微小に緩和することができる。なお、乗数補正アルゴリズム内のΣΔ変調器の動作周波数は、必ずしもメイン発振器の動作周波数と一致していなくてもある程度の効果が得られるため、動作周波数をＦSAMP／Ｒのように落として動作させてもよい。乗数更新標本化周期Ｒは任意の１以上の有理数である。
【００５２】
＜第４の実施例（図９、図１０）＞
図９に、上述してきた、４項以上の三角恒等式を漸化式として使ったパイプライン化乗算器を含む高速正弦波メイン発振器１００１〜１００Ｌ、スタートアップ時などの時間を利用した低速初期値発生・保持ブロック２００、漸化式ループを複数個実装したインターリービング方式、およびΣΔ変調器を適用した、ダイナミック乗数補正アルゴリズム３００を伴う初期値再入力方法の全てを適用した本発明における高速数値制御発振器の実装例を示す。４００はインターリーブ選択信号でメイン発振器１００１〜１００Ｌの出力を選択するセレクタである。
【００５３】
具体的に下記の列挙したパラメータを用いて本発明実施を試み、その出力正弦波のスペクトル純度について離散フーリエ変換（ＦＦＴ）を適用することにより評価する。ただし、離散フーリエ変換（ＦＦＴ）の標本数は４０９６ポイントとし、ブラックマン窓をかけている。この際、ダイナミック乗数補正アルゴリズムの適用の効果が最も強調されるよう、正弦波値数列の初期値再入力直前後の正弦波値のギャップが窓関数の中心となるようにしている。ダイナミック乗数補正アルゴリズムの適用有無のスペクトルの比較を行い図１０に示す。
【００５４】
●図４の高速正弦波メイン発振器のインターリーブ数を２とする（Ｌ＝２）。
●メイン発振器１つあたりの標本化周波数を２００ＭＨｚ、合計で４００ＭＨｚとする。
●正弦波値数列ａnの量子化分解能を２２ビット（符号１ビットを含む）とし、−１から１までの数値を表現する。
●高速発振器内の乗算器に与える乗数Ｍ−またはＭ＋の量子化分解能を２４ビット（符号１ビットを含む）として−２から２まで（ただし安定発振条件は−２から０まで）を表現する。
●ダイナミック乗数補正アルゴリズム内のΣΔ変調器入力を４ビット（符号を含まない）で０から１までの数値を表現する。
●ダイナミック乗数補正アルゴリズムの更新レートを１／１６とする（Ｒ＝１６）。
●出力正弦波の出力正弦波値数列ａnの周期長を６３２００標本化周期とする（Ｅ＝６３２００）。
●出力正弦波周波数を４００×（１５７６１／６３２００）ＭＨｚ≒９９．７５ＭＨｚとなるよう数値制御発振器の入力数値を設定する。４００ＭＨｚの正弦波値更新レートに対して出力正弦波値数列の周期長は６３２００標本化周期となる。
●正弦波出力は、１２ビット（符号１ビットを含む）に丸め込んだものとする。
【００５５】
図１０で分かるように、ダイナミック乗数補正アルゴリズム無しの場合は、所望出力周波数を中心にスペクトルのすそのが広がる。その絶対量にもよるが、大半のアプリケーションではこの周波数成分の“もれ”が問題となる。ダイナミック乗数補正アルゴリズム有りの場合は、スペクトルのすそのの広がりが消えシャープな所望出力周波数スペクトルをもつ正弦波、つまり純度の高い正弦波が得られることが分かる。
【００５６】
＜その他の実施例＞
なお、以上の実施例では、cosを使った表現の漸化式（７），（８）を利用して、正弦波の生成を行った場合について説明した。しかし、sinを使った表現も可能である。例えば、式（３）の代わりに
2011193304.tif 000016
という式も可能である。この式（３’）は、式（３）の初期値の位相を９０度遅らせるだけである。従って、本明細書では、cosを使った表現の漸化式を使用する場合も、「正弦波を生成」と表現した。４項以上の漸化式についても同様である。
【００５７】
ここで、参考までに、７項間漸化式について詳しく説明する。基本的に、正弦波発振用の漸化式であれば、何項間であっても、三角関数の和積の公式で知られる以下の恒等式
2011193304.tif 000017
を利用し、加算/減算をすることによって生成させることができる。正弦波発振器用の７項間漸化式の４つの例を以下に示す。
【００５８】
第１の恒等式は、
2011193304.tif 000018
第１の漸化式は、
2011193304.tif 000019
である。ただし、
ａｎ＝cos（ω＋ｎΔω）
Ｍ7＋＋＝２｛cos（３Δω）＋cos（２Δω）＋cos（Δω）｝
である。
【００５９】
第２の恒等式は、
2011193304.tif 000020
第２の漸化式は、
2011193304.tif 000021
である。ただし、
ａｎ＝cos（ω＋ｎΔω）
Ｍ7＋-＝２｛cos（３Δω）＋cos（２Δω）−cos（Δω）｝
である。
【００６０】
第３の恒等式は、
2011193304.tif 000022
第３の漸化式は、
2011193304.tif 000023
である。ただし、
ａｎ＝cos（ω＋ｎΔω）
Ｍ7-＋＝２｛cos（３Δω）−cos（２Δω）＋cos（Δω）｝
である。
【００６１】
第４の恒等式は、
2011193304.tif 000024
第４の漸化式は、
2011193304.tif 000025
である。ただし、
ａｎ＝cos（ω＋ｎΔω）
Ｍ7--＝２｛cos（３Δω）−cos（２Δω）−cos（Δω）｝
である。
【００６２】
図３の数値制御発振器では、Ｍａn-1の項、すなわち、２標本化時間（遅延素子をフリップフロップで構成する場合であれば、２クロック周期）前に生成した関数値に乗数を乗算する項を含む式（７）もしくは式（８）の５項間漸化式を利用して正弦波生成を行うため、加算器３１の出力から遅延素子を１つ通過した出力を、クロックレイテンシが１の乗算器２１に入力した。一方、式（１６），（１８），（２０），（２２）の７項間漸化式を利用して正弦波を生成する場合には、Ｍａn-2の乗算が必要である。また、本発明の数値制御発振器は、定理（１）を満たすことを条件として、さまざまな漸化式を利用したさまざまな波形の生成に利用することができる。この場合には、Ｍａn-1もしくはＭａn-2以外の項の乗算が必要になることもありうる。また、必要とする発振器周波数によっては、２クロックレイテンシ、もしくはそれ以上のレイテンシの乗算器を利用することが必要な場合もある。本願においては、乗算が必要な項と、乗算器に必要なレイテンシに応じて、乗算器に入力する信号を選択する。
【００６３】
具体的には、例えば、図３の数値制御発振器では、加算器３１の出力から遅延素子を１つ通過した出力を、乗算器２１に入力している。この場合、乗算器２１がレイテンシ１の場合は、２標本化時間の前に生成した関数値をその乗算器２１に入力することになり、Ｍａn-1の項を含む漸化式による関数値生成が可能となる。乗算器２１がレイテンシ２の場合は、３標本化時間の前に生成した関数値をその乗算器２１に入力することになり、Ｍａn-2の項を含む漸化式による関数値生成が可能となる。乗算器２１がレイテンシ３の場合は、４標本化時間の前に生成した関数値をその乗算器２１に入力することになり、Ｍａn-3の項を含む漸化式による関数値生成が可能となる。
【００６４】
また、加算器３１の出力から遅延素子を２つ通過した出力を乗算器２１に入力する場合は、乗算器２１がレイテンシ１の場合は、３標本化時間の前に生成した関数値をその乗算器２１に入力することになり、Ｍａn-2の項を含む漸化式による関数値生成が可能となる。乗算器２１がレイテンシ２の場合は、４標本化時間の前に生成した関数値をその乗算器２１に入力することになり、Ｍａn-3の項を含む漸化式による関数値生成が可能となる。
【００６５】
また、加算器３１の出力から遅延素子を３つ通過した出力を乗算器２１に入力する場合は、乗算器２１がレイテンシ１の場合は、４標本化時間の前に生成した関数値をその乗算器２１に入力することになり、Ｍａn-3の項を含む漸化式による関数値生成が可能となる。
【符号の説明】
【００６６】
１１〜１４：１標本化時間遅延素子
２１：乗算器
３１，３２：加算器
４１：丸め込み回路
５１，５２：演算器
６１：セレクタ
７１：ΣΔ変調器
【図１】
2011193304.tif 000026
【図２】
2011193304.tif 000027
【図３】
2011193304.tif 000028
【図４】
2011193304.tif 000029
【図５】
2011193304.tif 000030
【図６】
2011193304.tif 000031
【図７】
2011193304.tif 000032
【図８】
2011193304.tif 000033
【図９】
2011193304.tif 000034
【図１０】
2011193304.tif 000035