(57)【特許請求の範囲】
【請求項１】
入力インパルスに応答した信号を第１のサンプリング信号でラッチし、トーン信号として出力するＩＩＲフィルタと、
前記トーン信号を前記第１のサンプリング信号の周波数と異なる第２のサンプリング信号でラッチして出力トーン信号として出力する補正部と、
を備えることを特徴とするトーンジェネレータ。
【請求項２】
前記ＩＩＲフィルタは、
前記入力インパルスと第１の乗算結果と第２の乗算結果とを加算して、出力信号として前記トーン信号を生成する加算器と、
前記加算器の出力を前記第１のサンプリング信号でラッチする第１のラッチ回路と、
前記第１のラッチ回路の出力と第１の定数とを乗算し、前記第１の乗算結果を前記加算器に出力する第１の乗算回路と、
前記第１のラッチ回路の出力を前記第１のサンプリング信号でラッチする第２のラッチ回路と、
前記第２のラッチ回路の出力と第２の定数とを乗算し、前記第２の乗算結果を前記加算器に出力する第２の乗算回路と、
を備えることを特徴とする請求項１記載のトーンジェネレータ。
【請求項３】
前記ＩＩＲフィルタは、
前記加算器の出力を振幅調整して前記トーン信号として生成し、前記補正部と前記第１のラッチ回路とに出力するリミッター回路
を更に備える請求項２記載のトーンジェネレータ。
【請求項４】
更に、
クロック信号を１／ｎ（ｎは整数）分周して、前記第１のサンプリング信号を生成する１／ｎ分周回路と、
前記クロック信号を１／２分周して、前記第２のサンプリング信号を生成する１／２分周回路と、
を備えることを特徴とする請求項１〜３のいずれかに記載のトーンジェネレータ。
【請求項５】
入力インパルスに応答した信号を第１のサンプリング信号でラッチし、トーン信号として出力する工程と、
前記トーン信号を前記第１のサンプリング信号の周波数と異なる第２のサンプリング信号でラッチし、出力トーン信号を生成する工程とを備えるデジタルトーン生成方法。
【請求項６】
前記トーン信号を出力する工程において、ｋを正の整数とし、Ａ（ｋ）をｋ番目の計算の結果とし、Ｆを前記第１のサンプリング信号の周波数とし、前記トーン信号の信号値を時間ｔ（ｔ≧０）の関数ｖ（ｔ）とすると、
前記関数ｖ（ｔ）は、次式、
ｖ（ｔ）＝Ａ（ｋ），（ｋ−２）／Ｆ≦ｔ＜（ｋ−１）／Ｆ
で表される請求項５記載のデジタルトーン生成方法。
【請求項７】
前記出力トーン信号を生成する工程において、
ｋを正の整数とし、前記入力インパルスが入力後に最初に前記第２のサンプリング信号が入力された時刻をｔ＝ｔ２とすると、
前記出力トーン信号であるトーン信号ｙ（ｔ）は、前記関数ｖ（ｔ）を用いて、次式、
ｙ（ｔ）＝ｖ（ｋ＋ｔ２），（ｋ＋ｔ２＜ｔ≦ｋ＋１＋ｔ２）
で表される請求項６記載のデジタルトーン生成方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、トーンジェネレータ及びデジタルトーン生成方法に関し、特に、デジタル処理によりデジタルトーン信号を生成し、設定した周波数と発振したデジタルトーン信号の周波数との誤差の一層の低減が図られ得るトーンジェネレータ及びデジタルトーン生成方法に関する。
【０００２】
【従来の技術】
近代科学社「コンピュータの高速演算方式」に示されるウォルサーの統一アルゴリズムを用いたトーンジェネレータは、発振する正弦波の１波長を６４ワードで表現する回路である。そのトーンジェネレータ１００は、図７に示されるように、アドレス生成器１０１、第１補数回路１０２、第１セレクタ１０３、メモリ１０４、第２補数回路１０５、第２セレクタ１０６からなる。アドレス生成器１０１は、アドレスを生成する。メモリ１０４は、多数点においてサンプリングされた１／４周期の正弦波の振幅値を格納している。１波長６４ワードの１／４である１６ワードのデータを格納し、入力されたアドレスのデータを出力する。第１補数回路１０２は、アドレスの反転、非反転を行う。第２補数回路１０５は、メモリ１０４の出力の反転、非反転を行う。第１セレクタ１０３は、アドレスの反転、非反転を選択する。第２セレクタ１０６は、メモリ１０４の出力の反転、非反転を選択する。
【０００３】
アドレス生成器１０１は、６ビットのアドレスを生成する。アドレスの上位２ビットは、どの象限にあるかを表し、アドレスの残り４ビットは、１ワードのアドレスを表す。アドレスの上位２ビットを第１セレクタ１０３と第２セレクタ１０６とに出力し、アドレスの残り４ビットを第１補数回路１０２に出力する。１〜１６ワードは、アドレスをそのままメモリ１０４に与えて、メモリ１０４の出力をそのまま出力する。１７〜３２ワードは、アドレスを反転し、メモリ１０４の出力をそのままで出力する。３３〜４８ワードは、アドレスをそのままで、メモリ１０４の出力を反転し、出力する。４９〜６４ワードは、アドレスを反転し、メモリ１０４の出力を反転し、出力する。アドレス生成器１０１がアドレスを間引いて出力することにより、トーンジェネレータ１００は、正弦波を出力する。間引く幅を変えることにより所望の周波数のトーン信号が発生する。このようなトーンジェネレータは、大きな回路であるメモリを設ける必要がある。
【０００４】
特開平０６−０８６３３７に示される公知のトーンジェネレータは、出力振幅制御手段を持つ無限長インパルス応答（Ｉｎｆｉｎｉｔｅ  Ｉｍｐｕｌｓｅ  Ｒｅｓｐｏｎｓｅ）フィルタ（本明細書中で「ＩＩＲフィルタ」といわれる）を用いてトーンジェネレータを実現している。即ち、図８に示されるように、そのトーンジェネレータ２００は、加算器２０１、リミッター２０２、第１遅延器２０４、第２遅延器２０５、第１乗算器２０６、第２乗算器２０７、第３乗算器２０３からなる。
【０００５】
インパルス２１１は、加算器２０１に入力される。加算器２０１は、インパルス２１１、第１乗算器２０６の乗算出力、第２乗算器２０７の乗算出力とを加算し、リミッター２０２に出力する。リミッター２０２は、振幅レベルを所定のレベルに補正し、第３乗算器２０３と第１遅延器２０４に出力する。第１遅延器２０４は、１サンプル分の時間を遅延し、第１乗算器２０６と第２遅延器２０５とに出力する。第１乗算器２０６は、入力信号と乗算係数ｂ１とを乗算し、加算器２０１に出力する。乗算係数ｂ１は、設定周波数ｆとサンプリング周波数Ｆを用いて、ｂ１＝２×ｃｏｓ（２×π×ｆ／Ｆ）により求める。第２遅延器２０５は、１サンプル分の時間を遅延し、第２乗算器２０７に出力する。第２乗算器２０７は、入力信号と乗算係数−１とを乗算し加算器２０１に出力する。加算器２０１は、第１乗算器２０６と第２乗算器２０７の乗算出力を加算し、リミッター２０２に出力する。リミッター２０２は、振幅レベルを所定のレベルに補正し、第３乗算器２０３と第１遅延器２０４に出力する。第３乗算器２０３は、入力信号と乗算係数ｋとを乗算し、出力信号２０３がデジタルトーン信号となる。トーンジェネレータ２００は、入力信号としてインパルス２１１が加算器２０１に与えられ、遅延・加算・乗算を繰り返し行い、デジタルトーン信号を生成する。
【０００６】
このようなトーンジェネレータは、図９に示されるように、係数語長幅を１０ビットで表現した場合、乗算係数ｂ１がｂ１＝０となる設定周波数の、即ち、サンプリング周波数の０．２５の付近の周波数域における設定周波数と発振周波数の誤差と比較して、設定周波数がサンプリング周波数の０．２以下、または、０．４以上における誤差が大きくなる傾向がある。その周波数誤差は、通常数％程度におさめることが望まれる。係数語長幅を大きく取ることにより、誤差を低減することが可能である。係数語長幅を１６ビットにした場合、図１０に示されるように、周波数誤差を、低減させることができる。それでも、より低い周波数を設定した場合、大きな誤差が発生する。大きな係数語長幅を演算するには、回路規模を大きくさせる必要がある。このため、生成するデジタルトーン信号の周波数の正確さが要求される用途には、ＩＩＲフィルタ型のトーンジェネレータは適さなかった。回路規模を大きくせず、このような誤差を低減できるトーンジェネレータの改良が望まれている。
【０００７】
トーンジェネレータは、デジタル信号処理の回路である音声コーデックと共に用いられることが多い。音声コーデックとデジタル信号処理に必須の回路である並列乗算回路などを共用できるようにするため、トーンジェネレータは、デジタル信号処理で実現できるものが望まれる。
【０００８】
【発明が解決しようとする課題】
本発明の課題は、デジタル処理によりデジタルトーン信号を生成し、設定した周波数と生成したデジタルトーン信号の周波数との誤差をより低減し得るトーンジェネレータ及びデジタルトーン生成方法を提供することにある。
【０００９】
【課題を解決するための手段】
その課題を解決するための手段が、下記のように表現される。その表現中に現れる技術的事項には、括弧（）付きで、番号、記号等が添記されている。その番号、記号等は、本発明の実施の複数・形態又は複数の実施例のうちの少なくとも１つの実施の形態又は複数の実施例を構成する技術的事項、特に、その実施の形態又は実施例に対応する図面に表現されている技術的事項に付せられている参照番号、参照記号等に一致している。このような参照番号、参照記号は、請求項記載の技術的事項と実施の形態又は実施例の技術的事項との対応・橋渡しを明確にしている。このような対応・橋渡しは、請求項記載の技術的事項が実施の形態又は実施例の技術的事項に限定されて解釈することを意味しない。
【００１０】
本発明によるトーンジェネレータは、入力インパルス（１８）に応答した信号を第１のサンプリング信号（２４）でラッチし、トーン信号（１９）として出力するＩＩＲフィルタ（１）と、トーン信号（１９）を第１のサンプリング信号（２４）の周波数と異なる第２のサンプリング信号（２５）でラッチして出力トーン信号（３２）として出力する補正部（３）と、を備える。第１のサンプリング信号（２４）の周波数と第２のサンプリング信号（２５）の周波数とは、出力先の仕様により決定される。出力先の仕様として出力トーン信号（３２）の周波数を設定した場合、ＩＩＲフィルタ（１）により発振されたトーン信号の周波数と、設定された周波数（出力トーン信号の周波数）との間に量子化誤差を由来とする誤差が生じる。このような誤差は、ＩＩＲフィルタ（１）により発振された周波数に依存している誤差を含む。上記依存している誤差の発生は、第１のサンプリング信号（２４）の周波数を変化させることにより回避される。即ち、第１のサンプリング信号（２４）の周波数と第２のサンプリング信号（２５）の周波数とが異なることにより、回避される。
【００１１】
ＩＩＲフィルタ（１）は、入力インパルス（１８）と第１の乗算結果と第２の乗算結果とを加算して、出力信号としてトーン信号（１９）を生成する加算器（１１）と、加算器（１１）の出力を第１のサンプリング信号（２４）でラッチする第１のラッチ回路（１４）と、第１のラッチ回路（１４）の出力と第１の定数とを乗算し、第１の乗算結果を加算器（１１）に出力する第１の乗算回路（１２）と、第１のラッチ回路（１４）の出力を第１のサンプリング信号（２４）でラッチする第２のラッチ回路（１５）と、第２のラッチ回路（１５）の出力と第２の定数とを乗算し、第２の乗算結果を加算器（１１）に出力する第２の乗算回路（１３）と、を備える。
【００１２】
ＩＩＲフィルタ（１）は、加算器（１１）の出力を振幅調整してトーン信号（１９）として生成し、補正部（３）と第１のラッチ回路（１４）とに出力するリミッター回路（１６）を更に備える。このようなＩＩＲフィルタ（１）の構成により、トーン信号（１９）は、所定の時間間隔毎に振幅値が変化する階段状の周波を形成する。
【００１３】
本発明によるトーンジェネレータは、更に、クロック信号（２３）を１／ｎ（ｎは整数）分周して、第１のサンプリング信号（２４）を生成する１／ｎ分周回路（２１）と、クロック信号（２３）を１／２分周して、第２のサンプリング信号（２５）を生成する１／２分周回路（２２）と、を備える。上記の出力先の仕様として出力トーン信号（３２）の周波数を設定するとき、第１のサンプリング信号（２４）の周波数が、出力トーン信号（３２）の周波数の概ね４倍になるように、ｎを設定することが、誤差の低減の点で好ましい。
【００１４】
本発明によるデジタルトーン生成方法は、入力インパルス（１８）に応答した信号を第１のサンプリング信号（２４）でラッチし、トーン信号（１９）として出力する工程と、トーン信号（１９）を第１のサンプリング信号（２４）の周波数と異なる第２のサンプリング信号（２５）でラッチし、出力トーン信号（３２）を生成する工程とを備える。第１のサンプリング信号（２４）の周波数と第２のサンプリング信号（２５）の周波数とは、出力先の仕様により決定される。出力先の仕様として出力トーン信号（３２）の周波数を設定した場合、トーン信号（１９）を出力する工程により発振されたトーン信号の周波数と、設定された周波数（出力トーン信号の周波数）との間に量子化誤差を由来とする誤差が生じる。このような誤差は、トーン信号（１９）を出力する工程により発振された周波数に依存している誤差を含む。上記依存している誤差の発生は、第１のサンプリング信号（２４）の周波数を変化させることにより回避される。即ち、第１のサンプリング信号（２４）の周波数と第２のサンプリング信号（２５）の周波数とが異なることにより、回避される。
【００１５】
トーン信号（１９）を出力する工程において、ｋを正の整数とし、Ａ（ｋ）をｋ番目の計算の結果とし、Ｆを第１のサンプリング信号（２４）の周波数とし、トーン信号（１９）の信号値を時間ｔ（ｔ≧０）の関数ｖ（ｔ）とすると、関数ｖ（ｔ）は、次式、
ｖ（ｔ）＝Ａ（ｋ），（ｋ−２）／Ｆ≦ｔ＜（ｋ−１）／Ｆ
で表される。数列｛Ａ（ｋ）｝は、デジタル型正弦波である。トーン信号ｖ（ｔ）は、所定の時間間隔毎に振幅値が変化する階段状の周波を形成する。
【００１６】
出力トーン信号（３２）を生成する工程において、ｋを正の整数とし、入力インパルス（１８）が入力後に最初に第２のサンプリング信号（２５）が入力された時刻をｔ＝ｔ２とすると、出力トーン信号（３２）であるトーン信号ｙ（ｔ）は、関数ｖ（ｔ）を用いて、次式、
ｙ（ｔ）＝ｖ（ｋ＋ｔ２），（ｋ＋ｔ２＜ｔ≦ｋ＋１＋ｔ２）
で表される。
【００１７】
【発明の実施の形態】
図に一致対応して、本発明によるトーンジェネレータの実施の形態は、ＩＩＲフィルタ部に、クロック部と補正部とが設けられている。図１に示されるように、そのＩＩＲフィルタ部１は、加算器１１、リミッター１６、ラッチ１４、ラッチ１５、乗算器１２、乗算器１３を備えている。加算器１１は、リミッター１６に接続している。リミッター１６は、ラッチ１４に接続している。リミッター１６の出力は、ＩＩＲフィルタ部１の出力であるトーン信号１９と一致している。ラッチ１４は、乗算器１２とラッチ１５とに接続している。乗算器１２は、加算器１１に接続している。ラッチ１５は、乗算器１３に接続している。乗算器１３は、加算器１１に接続している。
【００１８】
補正部３は、ラッチ３１を備えている。トーン信号１９は、ラッチ３１に入力される。ラッチ３１の出力は、補正部３の出力であるトーン信号３２と一致する。クロック部２は、１／２分周器２２と１／ｎ分周器２１を備えている。１／ｎ分周器２１は、ラッチ１４に接続し、ラッチ１５に接続している。１／２分周器２２は、ラッチ３１に接続している。
【００１９】
クロック信号２３は、クロック部２の１／２分周器２２と１／ｎ分周器２１とに入力される。１／２分周器２２は、クロック信号２３の周波数を１／２倍にしたクロック信号２５をラッチ３１に出力する。クロック信号２５の周波数を出力データレートという。出力データレートは、トーン信号３２の出力先の仕様により初期的に決定されている。１／ｎ分周器２１は、クロック信号２３の周波数を１／ｎ倍にしたクロック信号２４をラッチ１４とラッチ１５とに出力する。クロック信号２４の周波数をサンプリング周波数Ｆという。本実施の形態では、計算簡単のため、出力データレートを１とする。クロック信号２３の周波数は２となる。サンプリング周波数Ｆは、Ｆ＝２／ｎとなる。
【００２０】
インパルス１８は、加算器１１に入力される。加算器１１は、インパルス１８、乗算器１２の乗算出力、乗算器１３の乗算出力とを加算し、リミッター１６に出力する。リミッター１６は、入力された信号の振幅レベルが１以上のときは１に、振幅レベルが−１以下のときは−１に補正し、ラッチ３１とラッチ１４に出力する。ラッチ１４は、クロック信号２４が入力されたとき、リミッター１６の出力を取り込み保持し、保持しているデータを、乗算器１２とラッチ１５とに出力する。乗算器１２は、入力信号と乗算係数ｂ１とを乗算し、加算器１１に出力する。ラッチ１５は、クロック信号２４が入力されたとき、ラッチ１４の出力を取り込み保持し、保持しているデータを乗算器１３に出力する。乗算器１３は、入力信号と乗算係数−１とを乗算し加算器１１に出力する。加算器１１は、乗算器１２と乗算器１３の乗算出力を加算し、リミッター１６に出力する。リミッター１６は、振幅レベルを所定のレベルに補正し、ラッチ３１とラッチ１４に出力する。ラッチ３１は、クロック信号２５が入力されたとき、リミッター１６の出力を取り込み保持し、保持しているデータを出力する。ラッチ３１の出力がトーン信号３２となる。
【００２１】
トーンジェネレータ１０は、トーン信号３２の周波数ｆが設定され、インパルス１８が与えられることにより、トーン信号３２を出力する。周波数ｆは、サンプリング周波数Ｆと、乗算器１２の乗算係数ｂ１とにより設定される。サンプリング周波数Ｆは、１／ｎ分周器２１のｎにより決定される。サンプリング周波数Ｆは、トーン信号３２の周波数ｆの概ね４倍に設定される。即ち、ｎには、２／ｎ（＝Ｆ）が４×ｆに最も近くなるような整数が設定される。乗算係数ｂ１は、ｂ１＝２×ｃｏｓ（２×π×ｆ／Ｆ）＝２×ｃｏｓ（π×ｎ×ｆ）により求められる。
【００２２】
ラッチ１４、ラッチ１５は、インパルス１８の入力前に予め、値０にリセットされる。インパルス１８がＩＩＲフィルタ部１に入力される以前、クロック信号２４がＩＩＲフィルタ部１に入力されたとき、ラッチ１４は、値０を出力する。ラッチ１５は、値０を出力する。乗算器１２は、０×ｂ１（＝０）を出力する。乗算器１３は、０×（−１）（＝０）を出力する。加算器１１は、０＋０＋０（＝０）を出力する。リミッター１６は、値０を出力する。ラッチ１４は、値０を保持する。ラッチ１５は、値０を保持する。即ち、インパルス１８が加算器１１に入力される以前は、加算器１１は、常に値０を出力している。
【００２３】
インパルス１８が入力される以前の加算器１１の、出力をＡ（０）で表す。Ａ（０）は、Ａ（０）＝０である。インパルス１８が入力されてからｋ番目のクロック信号２４が入力された時の加算器１１の出力値をＡ（ｋ）で表す。｜Ａ（ｋ）｜≦１とする。
【００２４】
インパルス１８が入力されて１番目のクロック信号２４がＩＩＲフィルタ部１に、入力されたとき、ラッチ１４は、値０を出力する。ラッチ１５は、値０を出力する。乗算器１２は、０×ｂ１（＝０）を出力する。乗算器１３は、０×（−１）（＝０）を出力する。加算器１１は、インパルス１８を受けてＡ（１）を出力する。Ａ（１）は、インパルス１８の振幅値と一致する。リミッター１６は、Ａ（１）を出力する。ラッチ１４は、Ａ（１）を保持する。ラッチ１５は、０を保持する。
【００２５】
２番目のクロック信号２４が入力されたとき、ラッチ１４は、Ａ（１）を出力する。ラッチ１５は、値０を出力する。乗算器１２は、Ａ（１）×ｂ１を出力する。乗算器１３は、０×（−１）（＝０）を出力する。加算器１１は、Ａ（２）（＝Ａ（１）×ｂ１＋０）を出力する。リミッター１６は、Ａ（２）を出力する。ラッチ１４は、Ａ（２）を保持する。ラッチ１５は、Ａ（１）を保持する。
【００２６】
３番目のクロック信号２４が入力されたとき、ラッチ１４は、Ａ（２）を出力する。ラッチ１５は、Ａ（１）を出力する。乗算器１２は、Ａ（２）×ｂ１を出力する。乗算器１３は、Ａ（１）×（−１）を出力する。加算器１１は、Ａ（３）（＝Ａ（２）×ｂ１＋Ａ（１）×（−１））を出力する。リミッター１６は、Ａ（３）を出力する。ラッチ１４は、Ａ（３）を保持する。ラッチ１５は、Ａ（２）を保持する。
【００２７】
ｋ番目（ｋ≧２）のクロック信号２４がＩＩＲフィルタ部１に、入力されたとき、ラッチ１４は、Ａ（ｋ−１）を出力する。ラッチ１５は、Ａ（ｋ−２）を出力する。乗算器１２は、Ａ（ｋ−１）×ｂ１を出力する。乗算器１３は、Ａ（ｋ−２）×（−１）を出力する。加算器１１は、Ａ（ｋ）｛＝Ａ（ｋ−１）×ｂ１＋Ａ（ｋ−２）×（−１）｝を出力する。リミッター１６は、Ａ（ｋ）を出力する。ラッチ１４は、Ａ（ｋ）を保持する。ラッチ１５は、Ａ（ｋ−１）を保持する。即ち、Ａ（ｋ）＝ｂ１×Ａ（ｋ−１）−Ａ（ｋ−２）となる。数列｛Ａ（ｋ）｝は、この漸化式により決定する。ｂ１＝２×ｃｏｓ（π×ｎ×ｆ）として、この漸化式を解くと、Ａ（０）＝０、Ａ（１）＝ｓｉｎ（π×ｎ×ｆ）のとき、Ａ（ｋ）＝ｓｉｎ（π×ｎ×ｆ×ｋ），（ｋは、非負の整数）となる。数列｛Ａ（ｋ）｝は、デジタル型正弦波である。
【００２８】
トーン信号１９の信号値は、時間ｔ（ｔ≧０）の関数ｖ（ｔ）である。インパルス１８が入力された時刻をｔ＝０、ｔ＝０の後、最初のクロック信号２４が入力された時刻をｔ＝ｔ１とすると、ｖ（ｔ）＝Ａ（ｋ）＝ｓｉｎ（π×ｎ×ｆ×ｋ），｛（ｋ−２）×ｎ／２＋ｔ１＜ｔ≦（ｋ−１）×ｎ／２＋ｔ１，ｋは正の整数｝となる。トーン信号１９は、クロック信号２４の周期（ｎ／２）毎に信号値が変化する階段状の周波である。
【００２９】
ラッチ３１は、クロック信号２５が入力されたとき、トーン信号１９の信号値を保持し、次にクロック信号２５が入力されるまでの間、保持した信号値を出力する。トーン信号３２の信号値は、時間ｔ（ｔ≧０）の関数ｙ（ｔ）である。インパルス１８が入力後、最初にクロック信号２５が入力された時刻をｔ＝ｔ２とすると、ｙ（ｔ）＝ｖ（ｋ＋ｔ２），（ｋ＋ｔ２＜ｔ≦ｋ＋１＋ｔ２、ｋは正の整数）となる。トーン信号３２は、クロック信号２５の周期（１）毎に信号値が変化する階段状の周波である。サンプリング周波数Ｆが出力データレートより低い場合、ラッチ３１は、トーン信号１９の信号値を補完して出力する。サンプリング周波数Ｆが出力データレートより高い場合、ラッチ３１は、トーン信号１９の信号値を間引いて出力する。
【００３０】
一般に、出力するトーン信号の周波数がカットオフ周波数以下に制限されている場合、サンプリング周波数Ｆをカットオフ周波数の２倍以上に選択すれば、トーン信号を復元することができる。しかし、ＩＩＲフィルタ部により発振されたトーンの周波数と設定された周波数とに量子化誤差を由来とする誤差が生じる。サンプリング周波数Ｆをカットオフ周波数の２倍とした場合で、設定された周波数ｆが、カットオフ周波数に比べ十分に低いとき、または、カットオフ周波数に近いとき、誤差が大きい。ｆ／Ｆ＝０．２５の付近、即ち、Ｆ＝４×ｆの付近は、比較的誤差が小さい。トーンジェネレータ１０は、サンプリング周波数Ｆが変更可能である。サンプリング周波数Ｆが、４×ｆに最も近い値に変更されることにより、このような誤差は低減される。
【００３１】
例えば、設定周波数ｆにｆ＝０．１２５が設定された場合、サンプリング周波数Ｆは、Ｆ＝４×０．１２５＝０．５に変更される。Ｆ＝２／ｎ＝０．５より、ｎ＝４が、即ち、１／ｎ分周器２１に、１／４分周が設定される。乗算係数ｂ１は、ｂ１＝２×ｃｏｓ（π×４×０．１２５）＝０となる。図２は、ＩＩＲフィルタ部１にインパルス１８を入力し動作を開始させたときの所要点の信号を示す。この場合、インパルス１８の振幅値Ａ（１）は、Ａ（１）＝ｓｉｎ（π×４×０．１２５）＝１である。
【００３２】
クロック信号２３のクロック順序数であるクロック数ｋが４の倍数番目のときにラッチ１４とラッチ１５とにクロック信号２４が出力される。クロック数ｋが奇数番目のときに、ラッチ３１にクロック信号２５が出力される。ラッチ１４は、ｋ＝４×ｍ（ｍは整数）のときのリミッター１６の出力を保持し、ｋ＝４×ｍ＋１〜ｋ＝４×ｍ＋４の間保持した値を出力する。ラッチ１５は、ｋ＝４×ｍのラッチ１４の出力を保持し、ｋ＝４×ｍ＋１〜ｋ＝４×ｍ＋４の間保持した値を出力する。乗算器１２は、ラッチ１４の出力に乗算係数０を乗じて、出力する。即ち、常時値０を出力する。乗算器１３は、ラッチ１５の出力に乗算係数−１を乗じて、出力する。加算器１１は、インパルス１８、乗算器１２、乗算器１３の出力を加算して出力する。リミッター１６は、加算器１１の出力を補正して出力する。ラッチ３１は、ｋ＝２×ｍ＋１のときのリミッター１６の出力を保持し、ｋ＝２×ｍ＋２〜ｋ＝２×ｍ＋３の間保持した値を出力する。
【００３３】
クロック数１の時、ラッチ１４は、値０を出力する。ラッチ１５は、値０を出力する。乗算器１２は、値０を出力する。乗算器１３は、０×（−１）（＝０）を出力する。加算器１１は、インパルス１８を受け、Ａ（１）＋０＋０（＝１）を出力する。リミッター１６は、値１を出力する。ラッチ１４は、リミッター１６の出力の値１を保持する。ラッチ１５は、ラッチ１４の出力の値０を保持する。ラッチ３１は、値０を出力し、リミッター１６の出力の値１を保持する。
【００３４】
クロック数２の時、ラッチ１４は、保持している値０を出力する。ラッチ１５は、保持している値０を出力する。乗算器１２は、値０を出力する。乗算器１３は、０×（−１）（＝０）を出力する。加算器１１は、１＋０＋０（＝１）を出力する。リミッター１６は、値１を出力する。ラッチ３１は、値１を出力する。
【００３５】
クロック数３の時、ラッチ１４は、保持している値０を出力する。ラッチ１５は、保持している値０を出力する。乗算器１２は、値０を出力する。乗算器１３は、０×（−１）（＝０）を出力する。加算器１１は、１＋０＋０（＝１）を出力する。リミッター１６は、値１を出力する。ラッチ３１は、保持している値１を出力し、リミッター１６の出力の値１を保持する。
【００３６】
クロック数４の時、ラッチ１４は、保持している値０を出力する。ラッチ１５は、保持している値０を出力する。乗算器１２は、値０を出力する。乗算器１３は、０×（−１）（＝０）を出力する。加算器１１は、１＋０＋０（＝１）を出力する。リミッター１６は、値１を出力する。ラッチ１４は、リミッター１６の出力の値１を保持する。ラッチ１５は、ラッチ１４の出力の値０を保持する。ラッチ３１は、値１を出力する。
【００３７】
クロック数５の時、ラッチ１４は、保持している値１（表中○で囲まれた値）を出力する。ラッチ１５は、保持している値０を出力する。乗算器１２は、値０を出力する。乗算器１３は、０×（−１）（＝０）を出力する。加算器１１は、０＋０＋０（＝０）を出力する。リミッター１６は、値０を出力する。ラッチ３１は、値１を出力し、リミッター１６の出力の値０を保持する。
【００３８】
クロック数６の時、ラッチ１４は、保持している値１を出力する。ラッチ１５は、保持している値０を出力する。乗算器１２は、値０を出力する。乗算器１３は、０×（−１）（＝０）を出力する。加算器１１は、０＋０＋０（＝０）を出力する。リミッター１６は、値０を出力する。ラッチ３１は、値０を出力する。
【００３９】
クロック数７の時、ラッチ１４は、保持している値１を出力する。ラッチ１５は、保持している値０を出力する。乗算器１２は、値０を出力する。乗算器１３は、０×（−１）（＝０）を出力する。加算器１１は、０＋０＋０（＝０）を出力する。リミッター１６は、値０を出力する。ラッチ３１は、値０を出力し、リミッター１６の出力の値０を保持する。
【００４０】
クロック数８の時、ラッチ１４は、保持している値１を出力する。ラッチ１５は、保持している値０を出力する。乗算器１２は、値０を出力する。乗算器１３は、０×（−１）（＝０）を出力する。加算器１１は、０＋０＋０（＝０）を出力する。リミッター１６は、値０を出力する。ラッチ１４は、リミッター１６の出力の値０を保持する。ラッチ１５は、ラッチ１４の出力の値１を保持する。ラッチ３１は、値０を出力する。
【００４１】
クロック数９の時、ラッチ１４は、保持している値０を出力する。ラッチ１５は、保持している値１を出力する。乗算器１２は、値０を出力する。乗算器１３は、１×（−１）（＝−１）を出力する。加算器１１は、０＋０＋（−１）（＝−１）を出力する。リミッター１６は、値−１を出力する。ラッチ３１は、値０を出力し、リミッター１６の出力の値−１を保持する。
【００４２】
クロック数１０の時、ラッチ１４は、保持している値０を出力する。ラッチ１５は、保持している値１を出力する。乗算器１２は、値０を出力する。乗算器１３は、１×（−１）（＝−１）を出力する。加算器１１は、０＋０＋（−１）（＝−１）を出力する。リミッター１６は、値−１を出力する。ラッチ３１は、値−１を出力する。
【００４３】
クロック数１１の時、ラッチ１４は、保持している値０を出力する。ラッチ１５は、保持している値１を出力する。乗算器１２は、値０を出力する。乗算器１３は、１×（−１）（＝−１）を出力する。加算器１１は、０＋０＋（−１）（＝−１）を出力する。リミッター１６は、値−１を出力する。ラッチ３１は、値−１を出力し、リミッター１６の出力の値−１を保持する。
【００４４】
クロック数１２の時、ラッチ１４は、保持している値０を出力する。ラッチ１５は、保持している値１を出力する。乗算器１２は、値０を出力する。乗算器１３は、１×（−１）（＝−１）を出力する。加算器１１は、０＋０＋（−１）（＝−１）を出力する。リミッター１６は、値−１を出力する。ラッチ１４は、リミッター１６の出力の値−１を保持する。ラッチ１５は、ラッチ１４の出力の値０を保持する。ラッチ３１は、値−１を出力する。
【００４５】
クロック数１３の時、ラッチ１４は、保持している値−１を出力する。ラッチ１５は、保持している値０を出力する。乗算器１２は、値０を出力する。乗算器１３は、０×（−１）（＝０）を出力する。加算器１１は、０＋０＋０（＝０）を出力する。リミッター１６は、値０を出力する。ラッチ３１は、値−１を出力し、リミッター１６の出力の値０を保持する。
【００４６】
クロック数１４の時、ラッチ１４は、保持している値−１を出力する。ラッチ１５は、保持している値０を出力する。乗算器１２は、値０を出力する。乗算器１３は、０×（−１）（＝０）を出力する。加算器１１は、０＋０＋０（＝０）を出力する。リミッター１６は、値０を出力する。ラッチ３１は、値０を出力する。
【００４７】
クロック数１５の時、ラッチ１４は、保持している値−１を出力する。ラッチ１５は、保持している値０を出力する。乗算器１２は、値０を出力する。乗算器１３は、０×（−１）（＝０）を出力する。加算器１１は、０＋０＋０（＝０）を出力する。リミッター１６は、値０を出力する。ラッチ３１は、値０を出力し、リミッター１６の出力の値０を保持する。
【００４８】
クロック数１６の時、ラッチ１４は、保持している値−１を出力する。ラッチ１５は、保持している値０を出力する。乗算器１２は、値０を出力する。乗算器１３は、０×（−１）（＝０）を出力する。加算器１１は、０＋０＋０（＝０）を出力する。リミッター１６は、値０を出力する。ラッチ１４は、リミッター１６の出力の値０を保持する。ラッチ１５は、ラッチ１４の出力の値−１を保持する。ラッチ３１は、値０を出力する。
【００４９】
クロック数１７の時、ラッチ１４は、保持している値０を出力する。ラッチ１５は、保持している値−１を出力する。乗算器１２は、値０を出力する。乗算器１３は、（−１）×（−１）（＝１）を出力する。加算器１１は、０＋０＋１（＝１）を出力する。リミッター１６は、値１を出力する。ラッチ３１は、値０を出力し、リミッター１６の出力の値１を保持する。
【００５０】
クロック数１８の時、ラッチ１４は、保持している値０を出力する。ラッチ１５は、保持している値−１を出力する。乗算器１２は、値０を出力する。乗算器１３は、（−１）×（−１）（＝１）を出力する。加算器１１は、０＋０＋１（＝１）を出力する。リミッター１６は、値１を出力する。ラッチ３１は、値１を出力する。
【００５１】
クロック数１９の時、ラッチ１４は、保持している値０を出力する。ラッチ１５は、保持している値−１を出力する。乗算器１２は、値０を出力する。乗算器１３は、（−１）×（−１）（＝１）を出力する。加算器１１は、０＋０＋１（＝１）を出力する。リミッター１６は、値１を出力する。ラッチ３１は、値１を出力し、リミッター１６の出力の値１を保持する。
【００５２】
クロック数２０の時、ラッチ１４は、保持している値０を出力する。ラッチ１５は、保持している値−１を出力する。乗算器１２は、値０を出力する。乗算器１３は、０×（−１）（＝０）を出力する。加算器１１は、１＋０＋０（＝１）を出力する。リミッター１６は、値１を出力する。ラッチ１４は、リミッター１６の出力の値１を保持する。ラッチ１５は、ラッチ１４の出力の値０を保持する。ラッチ３１は、値１を出力する。
【００５３】
クロック数２１の時、ラッチ１４は、保持している値１を出力する。ラッチ１５は、保持している値０を出力する。乗算器１２は、値０を出力する。乗算器１３は、０×（−１）（＝０）を出力する。加算器１１は、０＋０＋０（＝０）を出力する。リミッター１６は、値０を出力する。ラッチ３１は、値１を出力し、リミッター１６の出力の値０を保持する。
【００５４】
クロック数２２の時、ラッチ１４は、保持している値１を出力する。ラッチ１５は、保持している値０を出力する。乗算器１２は、値０を出力する。乗算器１３は、０×（−１）（＝０）を出力する。加算器１１は、０＋０＋０（＝０）を出力する。リミッター１６は、値０を出力する。ラッチ３１は、値０を出力する。
【００５５】
クロック数１〜２２に対応して、図２の表に示されるように、トーン信号３２が生成される。ラッチ３１の出力であるトーン信号３２は、１６クロックを１周期とする周波となっている。周波数が１である出力データレートは、２クロックを１周期とした。トーン信号３２の周波数ｆは、ｆ：１＝１／１６：１／２より、ｆ＝２／１６＝０．１２５となる。
【００５６】
例えば、設定周波数ｆにｆ＝０．５が設定された場合、サンプリング周波数Ｆは、Ｆ＝４×０．５＝２に変更される。２＝２／ｎより、ｎ＝１が設定される。即ち、１／ｎ分周器２１は、分周しない。乗算係数ｂ１は、ｂ１＝２×ｃｏｓ（π×１×０．５）＝０となる。図３の表は、ＩＩＲフィルタ部１にインパルス１８を入力し動作を開始させたときの所要点の信号を示す。この場合、インパルス１８の振幅値Ａ（１）は、Ａ（１）＝ｓｉｎ（２×π×０．５／２）＝１である。
【００５７】
全てのクロック数で、ラッチ１４とラッチ１５とにクロック信号２４が出力される。クロック信号２３のクロック順序数であるクロック数ｋが奇数番目のときに、ラッチ３１にクロック信号２５が出力される。ラッチ１４は、ｋ＝ｍ（ｍは整数）のときのリミッター１６の出力を保持し、ｋ＝ｍ＋１のときに保持した値を出力する。ラッチ１５は、ｋ＝ｍときのラッチ１４の出力を保持し、ｋ＝ｍ＋１のときに保持した値を出力する。乗算器１２は、ラッチ１４の出力に乗算係数０を乗じて、出力する。即ち、常時値０を出力する。乗算器１３は、ラッチ１５の出力に乗算係数−１を乗じて、出力する。加算器１１は、インパルス１８、乗算器１２、乗算器１３の出力を加算して出力する。リミッター１６は、加算器１１の出力を補正して出力する。ラッチ３１は、ｋ＝２×ｍ＋１のときのリミッター１６の出力を保持し、ｋ＝２×ｍ＋２〜ｋ＝２×ｍ＋３の間保持した値を出力する。ラッチ３１の出力は、トーン信号３２である。
【００５８】
クロック数１の時、ラッチ１４は、値０を出力する。ラッチ１５は、値０を出力する。乗算器１２は、値０を出力する。乗算器１３は、０×（−１）（＝０）を出力する。加算器１１は、１＋０＋０（＝１）を出力する。リミッター１６は、値１を出力する。ラッチ１４は、リミッター１６の出力の値１を保持する。ラッチ１５は、ラッチ１４の出力の値０を保持する。ラッチ３１は、値０を出力し、リミッター１６の出力の値１を保持する。
【００５９】
クロック数２の時、ラッチ１４は、保持している値１を出力する。ラッチ１５は、保持している値０を出力する。乗算器１２は、値０を出力する。乗算器１３は、０×（−１）（＝０）を出力する。加算器１１は、０＋０＋０（＝０）を出力する。リミッター１６は、値０を出力する。ラッチ１４は、リミッター１６の出力の値０を保持する。ラッチ１５は、ラッチ１４の出力の値１を保持する。ラッチ３１は、値１を出力する。
【００６０】
クロック数３の時、ラッチ１４は、保持している値０を出力する。ラッチ１５は、保持している値１を出力する。乗算器１２は、値０を出力する。乗算器１３は、１×（−１）（＝−１）を出力する。加算器１１は、０＋０＋（−１）（＝−１）を出力する。リミッター１６は、値−１を出力する。ラッチ１４は、リミッター１６の出力の値−１を保持する。ラッチ１５は、ラッチ１４の出力の値０を保持する。ラッチ３１は、値１を出力し、リミッター１６の出力の値−１を保持する。
【００６１】
クロック数４の時、ラッチ１４は、保持している値−１を出力する。ラッチ１５は、保持している値０を出力する。乗算器１２は、値０を出力する。乗算器１３は、０×（−１）（＝０）を出力する。加算器１１は、０＋０（＝０）を出力する。リミッター１６は、値０を出力する。ラッチ１４は、リミッター１６の出力の値０を保持する。ラッチ１５は、ラッチ１４の出力の値−１を保持する。ラッチ３１は、値−１を出力する。
【００６２】
クロック数５の時、ラッチ１４は、保持している値０を出力する。ラッチ１５は、保持している値−１を出力する。乗算器１２は、値０を出力する。乗算器１３は、（−１）×（−１）（＝１）を出力する。加算器１１は、０＋０＋１（＝１）を出力する。リミッター１６は、値１を出力する。ラッチ１４は、リミッター１６の出力の値１を保持する。ラッチ１５は、ラッチ１４の出力の値０を保持する。ラッチ３１は、値−１を出力し、リミッター１６の出力の値１を保持する。
【００６３】
クロック数６の時、ラッチ１４は、保持している値１を出力する。ラッチ１５は、保持している値０を出力する。乗算器１２は、値０を出力する。乗算器１３は、０×（−１）（＝０）を出力する。加算器１１は、０＋０＋０（＝０）を出力する。リミッター１６は、値０を出力する。ラッチ１４は、リミッター１６の出力の値０を保持する。ラッチ１５は、ラッチ１４の出力の値１を保持する。ラッチ３１は、値１を出力する。
【００６４】
クロック数７の時、ラッチ１４は、保持している値０を出力する。ラッチ１５は、保持している値１を出力する。乗算器１２は、値０を出力する。乗算器１３は、１×（−１）（＝−１）を出力する。加算器１１は、０＋０＋（−１）（＝−１）を出力する。リミッター１６は、値−１を出力する。ラッチ１４は、リミッター１６の出力の値−１を保持する。ラッチ１５は、ラッチ１４の出力の値０を保持する。ラッチ３１は、値１を出力し、リミッター１６の出力の値−１を保持する。
【００６５】
クロック数８の時、ラッチ１４は、保持している値−１を出力する。ラッチ１５は、保持している値０を出力する。乗算器１２は、値０を出力する。乗算器１３は、０×（−１）（＝０）を出力する。加算器１１は、０＋０＋０（＝０）を出力する。リミッター１６は、値０を出力する。ラッチ１４は、リミッター１６の出力の値０を保持する。ラッチ１５は、ラッチ１４の出力の値−１を保持する。ラッチ３１は、値−１を出力する。
【００６６】
クロック数９の時、ラッチ１４は、保持している値０を出力する。ラッチ１５は、保持している値−１を出力する。乗算器１２は、値０を出力する。乗算器１３は、（−１）×（−１）（＝１）を出力する。加算器１１は、０＋０＋１（＝１）を出力する。リミッター１６は、値１を出力する。ラッチ１４は、リミッター１６の出力の値１を保持する。ラッチ１５は、ラッチ１４の出力の値０を保持する。ラッチ３１は、値−１を出力し、リミッター１６の出力の値１を保持する。
【００６７】
クロック数１０の時、ラッチ１４は、保持している値１を出力する。ラッチ１５は、保持している値０を出力する。乗算器１２は、値０を出力する。乗算器１３は、０×（−１）（＝０）を出力する。加算器１１は、０＋０＋０（＝０）を出力する。リミッター１６は、値０を出力する。ラッチ１４は、リミッター１６の出力の値０を保持する。ラッチ１５は、ラッチ１４の出力の値１を保持する。ラッチ３１は、値１を出力する。
【００６８】
クロック数１１の時、ラッチ１４は、保持している値０を出力する。ラッチ１５は、保持している値１を出力する。乗算器１２は、値０を出力する。乗算器１３は、１×（−１）（＝−１）を出力する。加算器１１は、０＋０＋（−１）（＝−１）を出力する。リミッター１６は、値−１を出力する。ラッチ１４は、リミッター１６の出力の値−１を保持する。ラッチ１５は、ラッチ１４の出力の値０を保持する。ラッチ３１は、値１を出力し、リミッター１６の出力の値−１を保持する。
【００６９】
クロック数１２の時、ラッチ１４は、保持している値−１を出力する。ラッチ１５は、保持している値０を出力する。乗算器１２は、値０を出力する。乗算器１３は、０×（−１）（＝０）を出力する。加算器１１は、０＋０＋０（＝０）を出力する。リミッター１６は、値０を出力する。ラッチ１４は、リミッター１６の出力の値０を保持する。ラッチ１５は、ラッチ１４の出力の値−１を保持する。ラッチ３１は、値−１を出力する。
【００７０】
クロック数１３の時、ラッチ１４は、保持している値０を出力する。ラッチ１５は、保持している値−１を出力する。乗算器１２は、値０を出力する。乗算器１３は、（−１）×（−１）（＝１）を出力する。加算器１１は、０＋０＋１（＝１）を出力する。リミッター１６は、値１を出力する。ラッチ１４は、リミッター１６の出力の値１を保持する。ラッチ１５は、ラッチ１４の出力の値０を保持する。ラッチ３１は、値−１を出力し、リミッター１６の出力の値１を保持する。
【００７１】
クロック数１４の時、ラッチ１４は、保持している値１を出力する。ラッチ１５は、保持している値０を出力する。乗算器１２は、値０を出力する。乗算器１３は、０×（−１）（＝０）を出力する。加算器１１は、０＋０＋０（＝０）を出力する。リミッター１６は、値０を出力する。ラッチ１４は、リミッター１６の出力の値０を保持する。ラッチ１５は、ラッチ１４の出力の値１を保持する。ラッチ３１は、値１を出力する。
【００７２】
クロック数１５の時、ラッチ１４は、保持している値０を出力する。ラッチ１５は、保持している値１を出力する。乗算器１２は、値０を出力する。乗算器１３は、１×（−１）（＝−１）を出力する。加算器１１は、０＋０＋（−１）（＝−１）を出力する。リミッター１６は、値−１を出力する。ラッチ１４は、リミッター１６の出力の値−１を保持する。ラッチ１５は、ラッチ１４の出力の値０を保持する。ラッチ３１は、値１を出力し、リミッター１６の出力の値−１を保持する。
【００７３】
クロック数１６の時、ラッチ１４は、保持している値−１を出力する。ラッチ１５は、保持している値０を出力する。乗算器１２は、値０を出力する。乗算器１３は、０×（−１）（＝０）を出力する。加算器１１は、０＋０＋０（＝０）を出力する。リミッター１６は、値０を出力する。ラッチ１４は、リミッター１６の出力の値０を保持する。ラッチ１５は、ラッチ１４の出力の値−１を保持する。ラッチ３１は、値−１を出力する。
【００７４】
クロック数１７の時、ラッチ１４は、保持している値０を出力する。ラッチ１５は、保持している値−１を出力する。乗算器１２は、値０を出力する。乗算器１３は、（−１）×（−１）（＝１）を出力する。加算器１１は、０＋０＋１（＝１）を出力する。リミッター１６は、値１を出力する。ラッチ１４は、リミッター１６の出力の値１を保持する。ラッチ１５は、ラッチ１４の出力の値０を保持する。ラッチ３１は、値−１を出力し、リミッター１６の出力の値１を保持する。
【００７５】
クロック数１８の時、ラッチ１４は、保持している値１を出力する。ラッチ１５は、保持している値０を出力する。乗算器１２は、値０を出力する。乗算器１３は、０×（−１）（＝０）を出力する。加算器１１は、０＋０＋０（＝０）を出力する。リミッター１６は、値０を出力する。ラッチ１４は、リミッター１６の出力の値０を保持する。ラッチ１５は、ラッチ１４の出力の値１を保持する。ラッチ３１は、値１を出力する。
【００７６】
クロック数１９の時、ラッチ１４は、保持している値０を出力する。ラッチ１５は、保持している値１を出力する。乗算器１２は、値０を出力する。乗算器１３は、１×（−１）（＝−１）を出力する。加算器１１は、０＋０＋（−１）（＝−１）を出力する。リミッター１６は、値−１を出力する。ラッチ１４は、リミッター１６の出力の値−１を保持する。ラッチ１５は、ラッチ１４の出力の値０を保持する。ラッチ３１は、値１を出力し、リミッター１６の出力の値−１を保持する。
【００７７】
クロック数２０の時、ラッチ１４は、保持している値−１を出力する。ラッチ１５は、保持している値０を出力する。乗算器１２は、値０を出力する。乗算器１３は、０×（−１）（＝０）を出力する。加算器１１は、０＋０＋０（＝０）を出力する。リミッター１６は、値０を出力する。ラッチ１４は、リミッター１６の出力の値０を保持する。ラッチ１５は、ラッチ１４の出力の値−１を保持する。ラッチ３１は、値−１を出力する。
【００７８】
クロック数２１の時、ラッチ１４は、保持している値０を出力する。ラッチ１５は、保持している値−１を出力する。乗算器１２は、値０を出力する。乗算器１３は、（−１）×（−１）（＝１）を出力する。加算器１１は、０＋０＋１（＝１）を出力する。リミッター１６は、値１を出力する。ラッチ１４は、リミッター１６の出力の値１を保持する。ラッチ１５は、ラッチ１４の出力の値０を保持する。ラッチ３１は、値−１を出力し、リミッター１６の出力の値１を保持する。
【００７９】
クロック数２２の時、ラッチ１４は、保持している値１を出力する。ラッチ１５は、保持している値０を出力する。乗算器１２は、値０を出力する。乗算器１３は、０×（−１）（＝０）を出力する。加算器１１は、０＋０＋０（＝０）を出力する。リミッター１６は、値０を出力する。ラッチ１４は、リミッター１６の出力の値０を保持する。ラッチ１５は、ラッチ１４の出力の値１を保持する。ラッチ３１は、値１を出力する。
【００８０】
クロック数１〜２２に対応して、図３の表に示されるように、トーン信号３２が生成される。ラッチ３１の出力であるトーン信号３２は、４クロックを１周期とする周波となっている。周波数が１である出力データレートは、２クロックを１周期とした。トーン信号３２の周波数ｆは、ｆ：１＝１／４：１／２より、ｆ＝２／４＝０．５となる。
【００８１】
本発明によるトーンジェネレータは、従来のトーンジェネレータにおいて誤差の少ない周波数域を、適宜移動させて、誤差を低減させている。図４のグラフに示されるように、係数語長幅を１０ビットで表現した場合であっても、設定された周波数と発振された周波数との誤差が、設定周波数／出力データレートが、０〜０．５の周波数域で０．２％以下に抑えられている。更に、ＩＩＲフィルタを用いて、トーンジェネレータを実現することは、回路規模の増加が少なく、ＬＳＩに適している。
【００８２】
本発明によるデジタルトーン生成方法の実施の形態は、デジタルシグナルプロセッサを使用し、ソフトウェアで先の実施の形態と同様な処理をしたものである。先の実施の形態における回路には、クロック部２があるが、ソフトウェアには、クロックという概念がない。そのデジタルトーン生成方法は、トーン出力と与えられた周波数ｆの正弦波の振幅値を求める演算からなる。トーン出力が行われる周波数（出力データレート）は変化せず、演算を行う周波数（サンプリング周波数ＦＳ）が、与えられた周波数ｆに応じて設定される。
【００８３】
フローは、図５に示されるように、５つのステップからなる。ステップ５１では、フローのループが出力データレートの２倍の周波数で実行するよう調整する。ステップ５２では、データ出力が出力データレートで行われるように、即ち、ループ２回に対して、データ出力が１回行われるようにフローを調整する。データを出力するなら、ステップ５３に移行する。データを出力しないなら、ステップ５３に移行する。ステップ５３では、データを出力する。ステップ５４では、出力データの演算がサンプリング周波数で行われるようにフローを判別する。演算を行うならば、ステップ５５に移行する。演算を行なわないのであれば、ステップ５５に移行する。ステップ５５では、漸化式を用いて発振トーンの振幅値を求める。その後、ステップ５１に移行する。
【００８４】
このフローは、生成されるトーン信号の周波数ｆが設定され、起動されることにより、ステップ５３のデータ出力が行われる。周波数ｆの設定は、ステップ５５で用いられる漸化式と、サンプリング周波数ＦＳとにより決定される。サンプリング周波数ＦＳは、ループ何回に対してステップ５５を１回行うかが設定されることにより決定される。サンプリング周波数ＦＳは、周波数ｆの概ね４倍に設定される。即ち、ループｎ回に１回演算されるとすると、ｎには、ｎ×ＦＳ＝ｎ×４×ｆが、ループの周波数に最も近くなるような整数ｎが設定される。
【００８５】
ｋ回目の演算結果をＸ（ｋ）と表す。漸化式は、周波数ｆ、サンプリング周波数ＦＳを用いて、Ｘ（ｋ）＝２×ｃｏｓ（２×π×ｆ／ＦＳ）×Ｘ（ｋ−１）−Ｘ（ｋ−２）（ｋ≧３）となる。
【００８６】
図６に示されるフローチャートは、先の図５のフローを更に詳細に記述したものである。ｆは、設定周波数が代入される。ＦＳは、演算が行われる周波数（サンプリング周波数）が代入される。ＤＲはサンプリング周波数を決定する変数である。Ｄ１とＤ２とは、漸化式に代入される変数である。ＲＣは、補完数を計数する為の変数である。ＸＸはトーン出力を決定する変数である。
【００８７】
Ｄ１に１が代入され、Ｄ２に０が代入され、ＲＣに０が代入され、フローは、起動される。ステップ６１では、ＲＣ＝ＤＲかどうかが判断される。ＲＣ＝ＤＲならば、ステップ６２に移行する。ＲＣ≠ＤＲならば、ステップ６４に移行する。ステップ６２では、ＲＣに０が代入される。ステップ６３では、ＸＸにＸが代入される。ステップ６４では、ＤＲの符号が判別される。ＤＲが正ならステップ６５に移行する。ＤＲが負ならステップ６６に移行する。ステップ６５では、ＲＣの値が１だけ増やされ、ステップ６１に移行する。ステップ６６では、ＲＣの値が１だけ減らされる。ステップ６７では、Ｘに２×Ｄ１×ｃｏｓ（２×π×ｆ／ＦＳ）−Ｄ２が代入される。ステップ６８では、Ｘが１より大きいかどうかが判別される。Ｘが１より大きいなら、ステップ６９に移行する。Ｘが１より大きくないなら、ステップ７０に移行する。ステップ６９では、Ｘに１が代入される。ステップ７０では、Ｘが−１より小さいかどうかを判別する。Ｘが−１より小さいなら、ステップ７２に移行する。Ｘが１より小さくないなら、ステップ７３に移行する。ステップ７１では、Ｘに−１が代入される。ステップ７２では、Ｄ２にＤ１が代入され、次に、Ｄ１にＸが代入され、ステップ６１に移行する。
【００８８】
ＤＲはサンプリング周波数を決定する変数である。ＤＲ≧０の場合、このフローのループは、出力データレートと等しい周波数で実行される。更に、ＤＲ＝０の場合、サンプリング周波数は、出力データレートと等しくなる。ＤＲ＝１の場合、サンプリング周波数は、出力データレートの１／２となる。ＤＲ＝２の場合、サンプリング周波数は、出力データレートの１／３となる。即ち、ＤＲ≧０の場合、サンプリング周波数は、出力データレートの１／（ＤＲ＋１）倍の周波数となり、ループ（ＤＲ＋１）回に対して、フィルタ演算が１回行われる。この場合、出力データレートでステップ６３が行われない。ＸＸが次に変化するまでの間は、前の値が保持され出力される０次ホールドが採用されている。このように設定することにより、周波数ｆが出力データレートに比べ十分に低いときの誤差は低減される。
【００８９】
ＤＲ＝−１の場合、フローのループは、出力データレートの２倍の周波数で実行される。ＤＲ＝−１に設定することにより、サンプリング周波数は、出力データレートの２倍となり、ＸＸへのＸの代入は、Ｘの変化２回に対して１回行われる。Ｘの値を２回に対し１回間引いている。このように設定することにより、周波数ｆが出力データレートの１／２の付近であるときの誤差は低減される。
【００９０】
【発明の効果】
本発明によるトーンジェネレータ及びデジタルトーン生成方法は、デジタル処理によりデジタルトーン信号を生成し、且つ、設定した周波数と発振したデジタルトーン信号の周波数の誤差をより低減させることができる。
【図面の簡単な説明】
【図１】図１は、本発明によるトーンジェネレータの実施の形態を示すブロック図である。
【図２】図２は、設定周波数ｆにｆ＝０．１２５を設定した場合の所要点の信号を示す表である。
【図３】図３は、設定周波数ｆにｆ＝０．５を設定した場合の所要点の信号を示す表である。
【図４】図４は、設定周波数と発振周波数との誤差を示すグラフである。
【図５】図５は、本発明によるデジタルトーン生成方法の実施の形態を示すフローチャートである。
【図６】図６は、図５のフローチャートのより詳細なフローチャートである。
【図７】図７は、公知のトーンジェネレータを示すブロック図である。
【図８】図８は、公知のトーンジェネレータを示すブロック図である。
【図９】図９は、公知のトーンジェネレータにおける係数語長幅が１０ビットである場合の設定周波数と発振周波数との誤差を示すグラフである。
【図１０】図１０は、公知のトーンジェネレータにおける係数語長幅が１６ビットである場合の設定周波数と発振周波数との誤差を示すグラフである。
【符号の説明】
１…ＩＩＲフィルタ
２…クロック部
３…補正部
【図１】
0003566613.tif 000002
【図２】
0003566613.tif 000003
【図３】
0003566613.tif 000004
【図４】
0003566613.tif 000005
【図５】
0003566613.tif 000006
【図６】
0003566613.tif 000007
【図７】
0003566613.tif 000008
【図８】
0003566613.tif 000009
【図９】
0003566613.tif 000010
【図１０】
0003566613.tif 000011