(57)【特許請求の範囲】
【請求項１】
デジタル処理により所定のパルス波形データを発生するパルス波形発生手段と、
前記パルス波形に対して所定の帯域制限を施した場合における前記パルス波形に対する修正データを発生する修正データ発生手段と、
前記パルス波形における不連続点の近傍のサンプリング点についてのみ前記修正データ発生手段の出力に基づいて前記パルス波形発生手段の出力を修正する修正手段と
を有することを特徴とする波形発生器。
【請求項２】
デジタル処理により鋸歯状波波形データを発生するパルス波形発生手段と、
帯域制限された鋸歯状波波形と帯域制限されていない鋸歯状波波形との比に対応する修正データを発生する修正データ発生手段と、
前記発生される鋸歯状波波形における不連続点の近傍のサンプリング点についてのみ前記鋸歯状波波形データと前記修正データとを乗算する修正手段と
を有することを特徴とする波形発生器。
【請求項３】
デジタル処理により鋸歯状波波形データを発生するパルス波形発生手段と、
ステップ波形と帯域制限されたステップ応答波形との差分に対応する修正データを発生する修正データ発生手段と、
前記発生される鋸歯状波波形における不連続点の近傍のサンプリング点について前記鋸歯状波波形データから前記修正データを減算する修正手段と
を有することを特徴とする波形発生器。
【請求項４】
デジタル処理により矩形波波形データを発生するパルス波形発生手段と、
ステップ波形と帯域制限されたステップ応答波形との差分に対応する修正データを発生する修正データ発生手段と、
前記発生される矩形波波形における不連続点の近傍のサンプリング点について前記矩形波波形データから前記修正データを減算する修正手段と
を有することを特徴とする波形発生器。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、鋸歯状波や矩形波あるいは三角波等のパルス波形データをデジタル処理により発生する波形発生器に関する。
【０００２】
【従来の技術】
アナログシンセサイザにおいては、押圧された鍵盤に応じた電圧を発生させ、該電圧に基づいて積分器等により構成されたＶＣＯ（Voltage Controlled Oscillator）から鋸歯状波や矩形波等の単純な波形を発生させて、それをＶＣＦ（Voltage Controlled Filter）やＶＣＡ（Voltage Controlled Amplifier）を用いて音色や音量の調整を行うようにしていた。このようなアナログシンセサイザは、アナログ動作であるためにその動作が不安定となりやすく、現在では、ほとんどのシンセサイザがデジタルシ処理によるものに置き換わっている。
しかしながら、アナログシンセサイザは特有の音質を有しており、近年では、デジタル処理によりアナログシンセサイザの発生する楽音を発生させることが望まれている。
【０００３】
【発明が解決しようとする課題】
デジタル処理によりＶＣＯ波形を発生する方法として、フィードバックＦＭ方式や波形メモリ方式が知られている。
フィードバックＦＭ方式では、得られる鋸歯状波（ＳＡＷ：Saw-Tooth Wave）波形に歪みがあり、上下非対称となっておりＤＣ成分が存在している。したがって、ＲＩＮＧ変調器や他のＶＣＯの周波数変調にこのＳＡＷ波形を用いた場合には、前述したアナログ方式の動作とは異なる出力となってしまう。
また、波形メモリ方式を採用した場合には、帯域制限した複数の波形を周波数に応じて滑らかにつなぐことが困難であり、ＬＦＯ（Low Frequency Oscillator）で過激に周波数を変更したりしたときなどに、波形の繋ぎ目の不連続がノイズとなって聞こえてしまうという問題点があった。
さらに、鋸歯状波や三角波等のＶＣＯ波形をデジタル処理により発生させる場合には、波形のエイリアジング（aliasing：重複歪）をいかにして抑えるかが重要な課題となる。すなわち、デジタル処理によりＶＣＯ波形を発生させる場合には、波形の不連続点において急峻に変化するサンプル値が出力され、高周波成分を非常に多く含んだ波形データとなり、ここで折り返し歪が発生することとなる。
【０００４】
そこで本発明は、上述した問題点を解決し、エイリアジングもなく、アナログシンセサイザにおける波形との相似性もよく、波形の不連続も生じない波形発生器を提供することを目的としている。すなわち、往年のアナログシンセサイザ風の音色には欠かせない鋸歯状波、パルス波形等の波形をデジタルで合成するための新規なアルゴリズムを提供することを目的としている。
【０００５】
【課題を解決するための手段】
上記目的を達成するために、本発明の波形発生器は、デジタル処理により所定のパルス波形データを発生するパルス波形発生手段と、前記パルス波形に対して所定の帯域制限を施した場合における前記パルス波形に対する修正データを発生する修正データ発生手段と、前記パルス波形における不連続点の近傍のサンプリング点についてのみ前記修正データ発生手段の出力に基づいて前記パルス波形発生手段の出力を修正する修正手段とを有するものである。
また、本発明の他の波形発生器は、デジタル処理により鋸歯状波波形データを発生するパルス波形発生手段と、帯域制限された鋸歯状波波形と帯域制限されていない鋸歯状波波形との比に対応する修正データを発生する修正データ発生手段と、前記発生される鋸歯状波波形における不連続点の近傍のサンプリング点についてのみ前記鋸歯状波波形データと前記修正データとを乗算する修正手段とを有するものである。
【０００６】
さらに、本発明のさらに他の波形発生器は、デジタル処理により鋸歯状波波形データを発生するパルス波形発生手段と、ステップ波形と帯域制限されたステップ応答波形との差分に対応する修正データを発生する修正データ発生手段と、前記発生される鋸歯状波波形における不連続点の近傍のサンプリング点について前記鋸歯状波波形データから前記修正データを減算する修正手段とを有するものである。
さらにまた、本発明のさらに他の波形発生器は、デジタル処理により矩形波波形データを発生するパルス波形発生手段と、ステップ波形と帯域制限されたステップ応答波形との差分に対応する修正データを発生する修正データ発生手段と、前記発生される矩形波波形における不連続点の近傍のサンプリング点について前記矩形波波形データから前記修正データを減算する修正手段とを有するものである。
【０００７】
【発明の実施の形態】
以下、本発明の波形発生器の各実施の形態について説明するが、本発明の波形発生器はハードウエアにより実現することができるだけではなく、ＤＳＰ（Digital Signal Processor）等を用いてソフトウエアあるいはファームウエアにより実現することができるものである。
まず、図１を参照して本発明の波形発生器の一実施の形態である帯域制限された鋸歯状波を発生する鋸歯状波波形発生器の一構成例について説明する。図１において、（ａ）はこの鋸歯状波（ＳＡＷ）波形発生器の一実施の形態の機能構成を示すブロック図、（ｂ）および（ｃ）はその要部における波形の一例を示す図である。ここで、（ｂ）は周波数の低いＳＡＷ波形を発生する場合における前記図１（ａ）のＡ〜Ｅで示す各部の波形を示しており、（ｃ）は同じく周波数の高いＳＡＷ波形を発生する場合の上記各部の波形を示している。なお、ここでは、出力される鋸歯状波の振幅が−１〜＋１の範囲に正規化されているものとして説明する。
【０００８】
図１の（ａ）において、１は発生する鋸歯状波の繰り返し周波数（ピッチ）を決定する周波数ナンバ（ｆナンバ）が入力される入力端子であり、この周波数ナンバｆとして、０≦ｆ≦１の値が入力される。ここで、この周波数ナンバｆは、たとえば１４ビットの２進数で指定され、これにより０．１セント単位で発生する鋸歯状波の繰り返し周波数を設定することができる。
また、２は前記入力端子１から入力される周波数ナンバｆと遅延回路３の出力とを加算する加算器である。なお、本発明においては２種類の加算器が使用されている。第１の種類の加算器は、加算結果がその桁数をオーバーフローしてもそれを無視して加算を実行し、加算結果として最大値に対する剰余を出力する加算器（モジュロ加算器、図中ｍｏと記載）であり、第２は、加算結果がオーバーフローしたときにそれ以降の加算結果が最大値に固定されるオーバーフロー検出タイプの加算器（図中ｏｖと記載）である。ここで、前記加算器２は前記モジュロ加算器とされている。また、３は該加算器２の出力信号を１サンプリング周期だけ遅延する遅延回路であり、前記加算器２およびこの遅延回路３によりデジタルの積分回路が構成される。この加算器２の出力Ａはサンプリング周期毎にｆずつ増加していき、該加算器がオーバーフローすると再びはじめから加算が開始される。これにより、該加算器２の出力Ａは、周波数ナンバｆにより決定される繰り返し周波数を有する鋸歯状波波形データとなる。
【０００９】
ここで、前記加算器２から出力される鋸歯状波波形Ａは帯域制限を受けておらず、図１の（ｂ）および（ｃ）中に示すように不連続点を有する波形データとなっており、エイリアジングを含むものとなっている。本発明のこの実施の形態においては、このエイリアジングを含む鋸歯状波波形データＡを乗算器１１に入力し、前記不連続点の前後において窓関数テーブル１０から読み出される修正データＤと乗算することにより、エイリアジングのない理想的な鋸歯状波波形データＥを出力するようにしている。この修正データ（窓関数）の詳細については後述するが、この窓関数は、所定の通過帯域特性を有するＳＡＷ波形と帯域制限を受けていないＳＡＷ波形との商に対応するデータとされている。
【００１０】
以下、このような修正データＤを出力するための構成について説明する。
４は前記入力端子１からの周波数ナンバｆを入力とし、その逆数に比例する数（Ｒ／ｆ）を出力する逆数テーブル、５は前記加算器２の出力と定数「−１」とを加算するモジュロ加算器、６は前記加算器５の出力Ｂと前記逆数テーブル４の出力（Ｒ／ｆ）とを乗算する乗算器、７は該乗算器６の出力に対し定数ｓを乗算するシフタ、８は該シフタ７の出力の振幅を−１〜＋１に制限するリミッタ、９は前記リミッタ８の出力が入力されその絶対値を出力する絶対値回路である。
この絶対値回路９の出力Ｃは、前記窓関数テーブル１０にアドレスとして入力され、該窓関数テーブル１０から対応する修正データＤが出力される。
【００１１】
このような構成において、前記加算器５の出力Ｂは、図（ｂ）および（ｃ）に示すように前記加算器２の出力Ａの位相を１８０°シフトした波形となり、前記加算器２から出力される帯域制限されていない鋸歯状波波形データＡにおける不連続点の位置が加算器５の出力Ｂにおいてはゼロクロス点の位置に変換されている。なお、この鋸歯状波の傾きはサンプリング周期Ｆｓごとに周波数ナンバｆだけ増加するため、ｆ／Ｆｓである。
一方、前記逆数テーブル４からはＲ／ｆが出力され、前記乗算器６の出力は前記波形データＢをＲ／ｆ倍したものとなり、さらに、シフタ７において定数ｓが乗算されて、前記リミッタ８には前記波形データＢをＲ・ｓ／ｆ倍した波形が入力される。
ここで、前記波形Ｂの傾きはｆ／Ｆｓであるため、前記シフタ７の出力の傾きは（ｆ／Ｆｓ）×（Ｒ・ｓ／ｆ）＝Ｒ・ｓ／Ｆｓとなり、周波数ナンバｆにかかわらず一定の値となる。そして、この出力はリミッタ８において±１でリミットされ、絶対値回路９を介して、その出力Ｃが前記窓関数テーブル１０のアドレスとされている。したがって、出力Ｃの傾斜部分が前記乗算器１１におけるＳＡＷ波形の不連続部に対する修正が行われる部分となる。
【００１２】
この修正が行われる部分の幅は２Ｆｓ／（Ｒ・ｓ）となり、この部分において前記窓関数テーブル１０から読み出されるサンプル数Ｎは、Ｎ＝２／（Ｒ・ｓ）となる。ここで、係数Ｒは窓関数テーブルを等速で読み出すことの可能な最低周波数とされており、定数ｓの大きさにより窓関数の読み出しサンプル数Ｎを任意の値に設定することができる。
なお、サンプル数Ｎを多くとるほど、帯域制限のカットオフスロープを急峻なものとすることが可能となるが、逆に、高い周波数においては窓関数を途中までしか読むことができなくなる。したがって、窓関数を全部読むことが可能な周波数では、エイリアスをかなり少なく、あるいは、ほとんど０とすることができるが、ある周波数以上では急に増加することとなる。一方、Ｎを小さくした場合は、ある程度のエイリアスは生じるが、高い周波数になっても急に増加することはない。一般に、ＶＣＯの場合は、ナイキスト周波数の近くまでの周波数の信号を出力することが必要とされるため、Ｎ＝４程度とＮを小さくとる場合が多い。
【００１３】
このようにしてＳＡＷ波形Ａの不連続点の前後において、該窓関数テーブル１０から対応する修正データＤが読み出され、前記乗算器１１において前記加算器２からのＳＡＷ波形と乗算されて、修正されたＳＡＷ波形Ｅが出力される。図の（ｂ）および（ｃ）に示すように、該出力Ｅは、傾斜部においては直線となり、不連続部においては通過周波数帯域が制限された理想的なＳＡＷ波形となっている。
【００１４】
図２は、前記窓関数テーブル１０に格納される窓関数（修正データ）を生成するための構成の一例を説明するための図である。
この図において、２１は周波数帯域を設定するための周波数応答設定部である。この周波数応答設定部２１に設定する周波数帯域特性としては、通過域が平坦な通常の低域通過周波数特性であってもよいし、あるいは、所定の音色特性を付加するために所定の通過域特性を有するものとしてもよい。
【００１５】
２２は前記周波数応答設定部２１において設定された周波数特性を逆フーリエ変換して時間領域の信号に変換する逆ＦＦＴ（Fast Fourier Transform）部、２３は前記逆ＦＦＴ部２２の出力信号の時間応答を制限するための窓となるウインドウ部である。また、２４は前記ウインドウ部２３により制限された時間応答信号を再び周波数領域の信号に変換するＦＦＴ部である。
さらに、２５は通常の帯域制限されていないＳＡＷ波形を出力するＳＡＷ波形出力部であり、２６は該ＳＡＷ波形出力部２５から出力されるＳＡＷ波形を周波数領域の信号に変換するＦＦＴ部である。
【００１６】
２７は、前記ＦＦＴ部２４から出力される周波数応答特性と前記ＦＦＴ部２６から出力されるＳＡＷ波形の周波数領域の信号とを複素乗算する複素乗算器である。２８は前記複素乗算器２７の出力を時間領域に変換する逆ＦＦＴ部であり、この逆ＦＦＴ部２８からＳＡＷ波形に前記周波数応答設定部２１において設定された通過帯域特性が付加されたＳＡＷ波形が出力されることとなる。
２９は、前記逆ＦＦＴ部２８から出力される所定の通過帯域特性が付加されたＳＡＷ波形（ｘ）と、前記ＳＡＷ波形出力部２５からの帯域制限されていないＳＡＷ波形（ｙ）とを除算し、商（ｘ／ｙ）を出力する除算器である。この除算器２９の出力が、前記窓関数テーブル１０に格納される。このとき、前記窓関数はオーバーシュートする波形となるため、前記窓関数テーブル１０に格納するときには、最大値が「１」となるようにすることが必要である。
【００１７】
上述のように窓関数は、帯域制限されたＳＡＷ波形（ｘ）と帯域制限されていないＳＡＷ波形（ｙ）との比（ｘ／ｙ）となっているため、前記図１の（ａ）における乗算器１１において前記加算器２から出力される当該周波数のＳＡＷ波形とこの窓関数とを乗算することにより、不連続部において所望の通過帯域特性が付加されたＳＡＷ波形サンプルデータを出力することが可能となる。
【００１８】
なお、前記窓関数を算出するときには、サンプリング周波数よりも高いサンプリング周波数を用いて算出するようにする。このようにオーバサンプリングするほど、読み出しの精度を向上させることができる。例として、Ｎ＝１６、窓関数のサイズ（ＦＦＴのサイズ）を４０９６（実際のサイズはその半分の２０４８）とすると、オーバサンプリング比Ｏｒは、Ｏｒ＝４０９６／１６＝２５６となるので、通過周波数帯域はその１／２５６以下に設定して窓関数を生成する。
また、Ｎ＝４、サイズ４０９６のときは、Ｏｒ＝１０２４となるので、帯域は１／１０２４以下とする。このとき、Ｒ＝１／５１２であるとすると、ｓ＝２５６となる。
【００１９】
以上のように、この実施の形態のＳＡＷ波形発生器によれば、発生するＳＡＷ波形の周波数によらず不連続部において周波数帯域が制限された理想的なＳＡＷ波形を得ることができる。
【００２０】
なお、前記図１の（ａ）に示した実施の形態においては、前記周波数ナンバｆを０≦ｆ≦１としたが、これに限らず、正負の周波数ナンバｆを用いるようにすることもできる。すなわち、図３は、この実施の形態におけるＳＡＷ波形発生器の要部構成を示す図である。この場合には、周波数ナンバｆが−１≦ｆ≦１とされるため、前記逆数テーブル４の入力側に図示するように絶対値回路１４を設ければよい。その他の構成は、前記図１の（ａ）の場合と同一の構成でよい。
また、前記逆数テーブル４のかわりに、係数Ｒを前記周波数ナンバで割り算する割算器を用いるようにしてもよい。
【００２１】
さらに、前記窓関数（修正データ）は、前記図２に示した方法以外の方法によっても生成することができる。図４は、この窓関数を生成する方法の他の例を示す図である。この方法は、帯域制限されたステップ応答を求めて、これを窓関数として使用するものである。
図４において、３１はＳＩＮＣ関数（ＳＩＮＣ（ｘ）＝（ｓｉｎπｘ）／πｘ）生成部であり、このＳＩＮＣ関数生成部３１からは、一定周波数範囲のスペクトラム振幅関数が一定である場合のインパルス応答に対応する信号が出力される。３２は、前記ＳＩＮＣ関数生成部３１の出力を必要十分な時間範囲に制限するウインドウ部であり、このウインドウ部３２からは時間範囲を制限されたインパルス応答波形が出力される。３３はステップ波形を生成するステップ波形生成部である。前記ウインドウ部３２から出力される時間範囲を制限されたＳＩＮＣ関数と前記ステップ波形生成部３３から出力されるステップ波形は畳込み演算部３４において畳込み積分され、該畳込み積分演算結果のうちの所定の部分が切り出されて、窓関数テーブルに格納される。
このように、所定の周波数帯域に制限されたステップ波形から、前記窓関数を生成するようにしてもよい。
【００２２】
次に、本発明の波形発生器の他の実施の形態のＳＡＷ波形発生器について説明する。前記図１の（ａ）に示した実施の形態がＳＡＷ波形に対して修正データを乗算することにより所望の帯域制限を受けたＳＡＷ波形を生成していたのに対し、この実施の形態は、ＳＡＷ波形に対し所定の修正データを加算することにより所望の帯域制限を受けたＳＡＷ波形を生成するようにしたものである。
【００２３】
この実施の形態のＳＡＷ波形発生器の構成について説明する前に、まず、この実施の形態の動作原理について図５を参照して説明する。
図５の（ａ）はＳＡＷ波形の成り立ちを説明する図であり、この図に示すように、ＳＡＷ波形ａは、ランプ波形とタイミングがずらされた複数のステップ波形の和で構成されているということもできる。
したがって、図５の（ｂ）に示すように、帯域制限されたＳＡＷ波形ｘは、ランプ波形とタイミングがずらされた複数の帯域制限されたステップ応答波形の和から得ることができる。
以上のことから、図５の（ｃ）に示すように、帯域制限されたＳＡＷ波形を得るためには、ＳＡＷ波形ａからステップ波形ｂと帯域制限されたステップ応答波形ｃとの差ｄ（＝ｂ−ｃ）を減算すればよい。
したがって、図５の（ｄ）に示すように、ａのすべての立ち下がりにつき、ａ−ｄの計算を行うことにより、帯域制限されたＳＡＷ波形ｘを得ることができる。
【００２４】
図６はこのような原理に基づいて構成されたＳＡＷ波形発生器の一構成例を示すブロック図であり、図７はそのＡ〜Ｈで示す部分における波形の一例を示す波形図である。
図６において、５１は発生すべきＳＡＷ波形の周波数を決定する周波数ナンバｆが入力される入力端子であり、この入力端子５１から例えば０≦ｆ≦１の周波数ナンバｆが入力される。この周波数ナンバｆはモジュロ加算を行う加算器５２の一方の入力に印加され、該加算器５２の他方の入力には１サンプリング周期（Ｆｓ）だけ該加算器５２の出力を遅延する遅延回路５３の出力が入力されている。この加算器５２と遅延回路５３によりデジタル積分回路が構成されており、サンプリング周期ごとにｆが累算され、前記加算器５２がオーバーフローしたときに再び初期値に戻って該累算が繰り返される。これにより、前述した実施の形態の場合と同様にして帯域制限されていない鋸歯状波波形データＡが出力される。
【００２５】
前記加算器５２から出力される帯域制限されていないＳＡＷ波形Ａは、遅延回路５４に入力される。この図に示した例においては、後述する差分テーブル６６から４サンプルの修正データを読み出すものとしているため、前記遅延回路５４は２サンプリング周期だけ前記ＳＡＷ波形Ａを遅延するものとされている。この遅延回路５４を通過した帯域制限されていないＳＡＷ波形Ａは乗算器７３において定数「０．５」を乗算された後、波形の修正を実行する加算器７４に入力され、該加算器７４において差分テーブル６６から読み出された修正データＨと加算されて、所定の帯域制限されたＳＡＷ波形Ｉが出力端子７５から出力されることとなる。この差分テーブル６６には、前記図５に示したステップ波形と帯域制限されたステップ応答波形との差の波形ｄ（＝ｂ−ｃ）に対応するデータが格納されている。
【００２６】
さて、前記加算器５２から出力される帯域制限されていないＳＡＷ波形Ａは、モジュロ加算を行う加算器５６において定数「−１」と加算され、位相が１８０°シフトされて、図７にＢで示す波形が該加算器５６から出力される。この図７の波形Ａと波形Ｂとを比較してわかるように、波形Ａの不連続部が波形Ｂのゼロクロス点となっている。
また、前記入力端子５１から入力される周波数ナンバｆは、逆数テーブル５５に入力され、該逆数テーブル５５からは前記周波数ナンバｆを引数としてその逆数に対応する数１／（ｆ・ｓ）が出力される。なお、この逆数テーブル５５に代えて除算を実行する演算器を用いてもよい。
前記加算器５６から出力される波形データＢと前記逆数テーブル５５の出力１／（ｆ・ｓ）は乗算器５７において乗算され、さらにシフタ５８において定数ｓと乗算される。該シフタ５８の出力は、加算器５９において定数「０．５」と乗算され、さらに加算器６０において定数「−１」と加算される。この加算器６０の出力は、切替スイッチ６２のＳ端子に印加される。
【００２７】
前記切替スイッチ６２は、前記モジュロ加算器５２におけるオーバーフローを検出するオーバーフロー検出部６１の出力ｖにより制御され、該オーバーフローが検出されたときにＳ（セット）端子を選択し、その他のときはＣ（クリア）端子を選択するように制御される。このＣ端子には、前記切替スイッチ６２の出力に対して定数「０．５」を加算するオーバーフロータイプの加算器６３の出力を１サンプリング周期だけ遅延する遅延回路６４の出力が接続されている。
また、前記切替スイッチ６２の出力は絶対値回路６５に入力され、該絶対値回路６２の出力が差分テーブル６６にアドレスとして入力されている。該差分テーブル６６の出力は、バッファ増幅器６７を介して前記加算器７４に入力されている。このバッファ増幅器６７は、制御信号に基づいて入力信号をそのままの極性あるいは極性を反転して出力するものとされている。
【００２８】
また、前記オーバーフロー検出部６１の出力ｖは第２の切替スイッチ６８に切り替え制御信号として入力されており、該第２の切替スイッチ６８のＳ端子には定数「０．７５」が印加されており、Ｃ端子には該切替スイッチ６８の出力に対して定数「０．５」を加算する加算器６９の出力を１サンプリング周期だけ遅延する遅延回路７０の出力が接続されている。この第２の切替スイッチ６８の出力は、入力信号の振幅を−１〜＋１に制限するリミッタ７２に入力されており、該リミッタ７２の出力が前記バッファ増幅器６７に制御信号として印加されている。
【００２９】
さてこのように構成されたＳＡＷ波形発生器において、図７のＡに示すように、前記加算器５２の出力はサンプリング周期（Ｆｓ）ごとにｆずつ加算され、ＳＡＷ波形は傾きｆ／Ｆｓで上昇していく。そして、タイミング５において前記加算器５２においてオーバーフローが発生したとする。このとき、発生されるＳＡＷ波形の不連続点は図中にアで示した位置にある。このオーバーフローが発生したタイミング５における前記加算器５６の出力の値をＰとすると、ＳＡＷ波形の傾斜部の傾きはｆ／Ｆｓであるので、ＳＡＷ波形Ａの不連続部は前記タイミング５よりも（Ｐ／ｆ）・Ｆｓだけ前の位置にあること、すなわち、不連続部の位相はＰ／ｆ＝Ｔ（０≦Ｔ＜１）だけ前にずれていることがわかる。このように、オーバーフロー発生タイミングにおける前記加算器５６の出力値Ｐから、当該ＳＡＷ波形Ａの不連続部の位相のずれを検出できる。
【００３０】
このように加算器５２においてオーバーフローが発生し前記オーバーフロー検出部６１からオーバーフロー検出信号ｖが出力された時点においては、前記シフタ５８の出力はＰ／ｆ＝Ｔとなり、前記加算器６０から０．５Ｔ−１が前記切替スイッチ６２のＳ端子に印加されている。前記切替スイッチ６２によりＳ端子が選択され、この値０．５Ｔ−１が、当該不連続部に対応する修正データＨを出力するための差分テーブル６６の読み出しアドレスの初期値となる。
【００３１】
図８を参照して、前記差分テーブル６６からのデータの読み出しについて説明する。実際には、差分データは図９に示す様な形のデータとなるが、このデータは原点に対して点対称であるため、差分テーブル６６には、その０〜＋１のデータのみを格納してある。この実施の形態においては、この差分テーブル６６からＮ＝４サンプルのデータを読み出すようにしており、また、差分テーブル６６の読み出し位相をサンプリング周期に対してＴだけ進めることが必要となる。４サンプルで差分テーブルのアドレスを１から−１まで振るためには、１サンプルあたりの該アドレスの増加分は、（１−（−１））／４＝０．５となる。したがって、差分テーブルを位相Ｔだけ進んで読むために、テーブルの読み出しアドレスの初期値を０．５Ｔ−１としている。
【００３２】
さて、前記切替スイッチ６２は、前記加算器５２においてオーバーフローが発生したタイミング以外のタイミングでは、前記Ｃ端子を選択する。したがって、前記切替スイッチ６２からは、図７のＤに示すように、初期値を０．５Ｔ−１とし、以後サンプル周期ごとに０．５ずつ増加される出力が得られる。この切替スイッチ６２の出力は絶対値回路６５に入力され、該絶対値回路６５の出力は差分テーブル６６にアドレスとして入力され、該差分テーブル６６から当該不連続点の前後２サンプル分の差分データが読み出されることとなる。
【００３３】
なお、前述のように、前記差分テーブル６６には前記差分データｄの一部（０≦ｘ≦１）のみを格納するようにしている。したがって、修正時に、前記差分テーブル６６の出力を前記帯域制限されていないＳＡＷ波形から減算するか加算するかを決定することが必要となる。このために、前記切替スイッチ６８，加算器６９、遅延回路７０からなるカウンタ、シフタ７１およびリミッタ７２が設けられており、オーバーフローした後２サンプルは引き算、それ以後は足し算となるように制御される。
【００３４】
すなわち、前記切替スイッチ６８のＳ端子には定数「−０．７５」が印加されており、前記切替スイッチ６８の出力は、−０．７５，−０．２５，０．２５，０．７５・・・とカウントされ、シフタ７１において定数「４」を乗算され、リミッタ７２において−１〜１の範囲の値に制限される。したがって、前記リミッタ７２の出力は、−１，−１，１，１，・・・となる。この信号はバッファ増幅器６７に印加され、該信号が−１のときは前記バッファ増幅器６７の出力はその極性が反転されて、前記信号が１のときはそのままの極性で出力される。このバッファ増幅器６７の出力は加算器７４に一方の入力として印加され、他方の入力として印加される前記乗算器７３の出力と加算される。
したがって、オーバーフローした後２サンプルは前記差分テーブル６６の出力が前記帯域制限されないＳＡＷ波形に対して引き算され、それ以後のサンプルについては前記差分テーブル６６の出力が足し算されることとなる。このようにして、帯域制限されないＳＡＷ波形に対する修正処理が行われる。
【００３５】
なお、差分テーブル６６に上述のような形で差分データを格納しているのは、次のような理由による。すなわち、該差分データを図９に示すように不連続な形で格納した場合には、初期値を求める際の誤差により０付近で正になるべき値が負になったり、あるいはその逆に負になるべき値が正になったりすることがあり、これはノイズの原因となる。したがって、本実施の形態においては、上述したように差分データを格納し、前述したようにカウンタを用いて正しい極性で修正演算を実行させている。
【００３６】
さて、上記実施の形態においては、差分テーブル６６から４サンプル読み出しているために、オーバーフローが４サンプルに一度以上発生する周波数、すなわちＦｓ／４＝ＦN／２以上の周波数においてはエイリアスが増加するという問題点がある。そこで、このような問題点を回避するようにした実施の形態について説明する。
図１０はこの実施の形態の一構成例を示すブロック図である。この実施の形態は、前記図６の実施の形態における差分テーブルを読み出すための手段（図６中の破線で囲まれた部分）を複数個設けてそれらを順番に使用することにより、前述の問題を回避している。
一般に、差分テーブルからＮサンプルを読み出す場合は、Ｎ／２個の差分テーブル読み出し手段が設けられているときにはＦNまでの周波数を再生することが可能である。図１０に示した実施の形態においては、差分テーブル読み出し手段を２個用い、差分テーブルの読み出しを交互に行っている。
【００３７】
図１０において、前記図６と同一の構成要素には同一の番号を付して説明の重複を避けることとする。この図において、１００および１０１は差分テーブル読み出し手段であり、それぞれ、前記図６に破線で囲んだ差分テーブル読み出し手段と対応している。
また、８１は前記オーバーフロー検出部６１の出力ｖに応じて、入力端子ＳとＣとを切り替えて出力する切替スイッチ、８２は前記切替スイッチ８１の出力を１サンプリング周期だけ遅延して前記入力端子Ｃおよびモジュロ加算器８３に出力する遅延回路、８３は前記遅延回路８２の出力と定数「−１」とを加算して前記入力端子Ｓに出力するモジュロ加算器である。また、８４は前記切替スイッチ８１から出力されるの符号の正負を検出する符号検出部である。この符号検出部８４の出力ｎは、差分テーブル読出し手段１００および１０１にそれぞれ設けられている切替スイッチ８５、８６、９０および９７に切替制御信号として供給される。
【００３８】
前記切替スイッチ８１は、前記オーバーフロー検出部６１からオーバーフロー検出信号ｖが出力されたときに入力端子Ｓを選択し、その他のタイミングでは入力端子Ｃを選択するようになされている。今、前記モジュロ加算器５２がオーバーフローし、前記オーバーフロー検出部６１からオーバーフロー信号ｖが出力されたとする。このとき、該オーバーフロー信号ｖにより前記切替スイッチ８１がｓ入力端子側に接続される。前記モジュロ加算器８３は−１から＋１の間の値を出力する。ここで、オーバーフロー検出前に前記遅延回路８２の出力が正（０から＋１）のデータであるときには、前記加算器８３の出力は負の値となり、前記入力端子Ｓを介して前記切替スイッチ８１の出力は負の値となり、該負の出力は前記遅延回路８２に入力され、次にオーバーフローが検出されるまで、該負の値が保持される。このとき、前記符号検出部８４からは負を表す出力信号ｎが出力される。すなわち、オーバーフロー検出前の正を表す出力信号に代えて、負の出力信号が出力されることとなる。
【００３９】
一方、前記オーバーフロー検出時点の前に前記遅延回路８２の出力が負の値（−１から０間での値）であったときは、該負の値と「−１」とのモジュロ加算により、前記モジュロ加算器８３はオーバーフローしてその出力は正の値となる。したがって、前記入力端子Ｓを介して正の信号が選択され、前記符号検出部８４の出力は正を表す信号となり、この正の信号が前記遅延回路８２を介して次のオーバーフローの検出まで保持されることとなる。
以上のように、前記切替スイッチ８１、遅延回路８２およびモジュロ加算器８３による回路の出力は、前記モジュロ加算器５２においてオーバーフローが発生するごとに正から負あるいは負から正へと切り替えられる。
【００４０】
したがって、前記符号検出回路８４の出力ｎは、オーバーフローが発生するごとに正負が切り替えられる。この出力ｎは、前述のように、前記差分テーブル読出手段１００における切替スイッチ８５および８６、前記差分テーブル読出手段１０１における切替スイッチ９０および９７に制御信号として印加され、各切替スイッチは、前記出力ｎが正に対応する信号であるときには「＋」側に接続され、負に対応する信号であるときには「−」側に接続される。
図１０には、前記出力ｎが正であり、前記切替スイッチ８５、８６、９０および９７が「＋」側に接続されている場合が示されている。この場合には、前記切替スイッチ８５および８６が「＋」側に接続されているため、差分テーブル読出手段１００は前記図６における差分テーブル読出手段と同一の接続となり、前記図６について説明したと同様に、当該オーバーフローの検出時点から４サンプルの差分データの読出が行われることとなる。
【００４１】
一方、前記差分テーブル読出手段１０１においては、切替スイッチ８７の出力が前記切替スイッチ９０の「−」側に接続され、また、切替スイッチ９４の出力が前記切替スイッチ９７の「−」側に接続されている。したがって、図１０に示したように、符号検出部８４の出力が正に対応する信号であり、切替スイッチ９０および９７が「＋」側に接続されている状態においては、前記オーバーフロー検出部６１の出力ｖにより、切替スイッチ８７および９４がｓ側に接続されても、該切替スイッチ８７および９４の出力は、前記切替スイッチ９０および９７において選択されず、絶対値回路９１の入力およびシフタ９８の入力には、なんらの影響もない。
すなわち、前記符号検出部８４の出力が正に対応する信号のときは、前記差分テーブル読出手段１００が当該オーバーフロー検出信号に対応して動作することとなる。
【００４２】
次に、再び前記モジュロ加算器５２においてオーバーフローが発生し、前記オーバーフロー検出部６１からオーバーフロー信号ｖが出力されたときは、前述のように前記切替スイッチ８１の出力が負の信号となり、前記符号検出部８４から負に対応する信号が出力される。これにより、前記切替スイッチ８５、８６、９０および９７は「−」側に切り替えらる。これにより、前記差分テーブル読出手段１００においては、前記切替スイッチ６２および６８の出力が前記切替スイッチ８５および８６の出力に接続されず、一方、前記差分テーブル読出手段１０１においては前記切替スイッチ８７および９４の出力がそれぞれ前記切替スイッチ９０および９７に接続されることとなる。
これにより、このオーバーフローの検出に対応して差分テーブル９２から差分データが読出され、バッファ増幅器９３を介して前記加算器７４において当該オーバーフローに対する修正処理が実行されることとなる。
【００４３】
このように、複数の差分テーブル読出し手段１００，１０１を設け、これらを前記モジュロ加算器５２のオーバーフローごとに交互に切り替えて使用することにより、１回のオーバーフローに対応する差分テーブルの読出しサンプル数Ｎによるエイリアスに対する影響をなくすことが可能となる。したがって、Ｎを十分に大きくとり、それに見合った数の差分テーブル読出し手段を設けることにより、エイリアスを理想的にまで低減することが可能となる。
【００４４】
さらに、この方法を矩形波の発生に適用することもできる。この方法を、矩形波の発生に適用する場合の概念図を図１１に示す。図１１に示すように、元波形である帯域制限されていない矩形波に対し、図示するような立ち上がり、立ち下がりに対応する差分データを順次用いて修正することにより、所望の帯域制限された矩形波を発生することができる。ただし、矩形波の場合には立ち上がりと立ち下がりの両方について修正を行うことが必要となるので、前述したＳＡＷ波形の場合の２倍の頻度でテーブル読出しをすることが必要となる。あるいは、同数のテーブル読み出しを行うものとした場合には、上限周波数がＳＡＷ波形の場合の１／２になる。
【００４５】
さらにまた、前記図１０に示したＳＡＷ波形発生器において、前記差分テーブル読出しの部分をステップ応答波形の読出しに変え、さらに、奇数個のテーブル読出し手段を用いるようにすることにより、デューティ可変な矩形波を発生させる矩形波発生器とすることも可能である。デューティ可変な矩形波を発生させる場合には、デューティを変化させたときにサンプリング周期よりも短いパルス幅となってしまうことがある。このような場合であっても、帯域制限された矩形波を発生させることが可能である。
【００４６】
図１２は、この実施の形態の概略を説明するための図である。この図において、（ａ）は発生する矩形波の一例を示しており、この図に示すような、サンプリング周期よりも幅の狭いパルスを発生するときには、図中のＡで示すパルスについては出力が発生されないこととなってしまう。これを防ぐために、図の（ｂ）に示すように、当該矩形波の立ち上がり位置に対応した不連続部を有するＳＡＷ波形Ｃとそれより当該パルス波形のパルス幅だけ遅れたＳＡＷ波形Ｄとを前述したように発生させ、それらの不連続部をオーバーフロー検出部１１１で検出する。そして、奇数個（図示する例においては３個）のステップ読み出し部１１２〜１１４を設け、これらのステップ読み出し部１１２〜１１４を用いて、前記オーバーフロー検出部１１１からのオーバーフロー検出信号に対応して、順次立ち下がりあるいは立ち上がりに対応する帯域制限されたステップ応答波形を読み出すようにし、これらからの出力を加算器１１５において加算して帯域制限された幅の狭いパルス波形を出力する。
【００４７】
例えば、図１２の（ｂ）に示すＳＡＷ波形Ｃの不連続部（１）に対応するオーバーフロー検出部１１１の出力により、第１のステップ読み出し部１１２から立ち下がりのステップ波形を読み出し、ＳＡＷ波形Ｄの不連続部（２）に対応して第２のステップ読み出し部１１３から立ち上がりに対応するステップ波形を読み出す。次に、ＳＡＷ波形Ｃの不連続部（３）に対応して第３のステップ読み出し部１１４から立ち下がりに対応するステップ波形を読み出し、ＳＡＷ波形Ｄの不連続部（４）に対応して前記第１のステップ読み出し部から立ち上がりに対応するステップ波形を読み出すようにする。すなわち、各ステップ読み出し部１１１〜１１３はそれぞれ立ち下がり、立ち上がり波形を交互に読み出すようになされている。
このように、奇数個のステップ読み出し部を設け、順次、立ち下がりおよび立ち上がりのステップ波形を読み出すことにより、１サンプル周期内において立ち上がりと立ち下がりが生じるような幅の狭いパルス波形についても、所定の帯域制限を受けた波形を生成することが可能となる。
【００４８】
図１３は、この実施の形態において実行される処理のフローチャートを示す図である。ここで、ｆは、次に読み出すステップ波形が立ち上がり波形であるのか立ち下がり波形であるのかを指示するためのフラグであり、ｆ＝０のときは次に読み出すのは立ち下がり波形であることを表わし、ｆ＝１のときは次に立ち上がり波形を読み出すことを表している。
【００４９】
この処理が開始されると、まず、ステップＳ１１において、前記フラグｆが０であるか否かを判定する。この結果ＹＥＳのときはステップＳ１２に進み、前記ＳＡＷ波形Ｃ（図１２（ｂ））のオーバーフローが発生したかどうか判定する。ここで、オーバーフローが発生したときは、ステップ読み出し部１１２〜１１４のいずれか（これらは、順番に起動される）に対し、前記フラグｆにより指示されている立ち下がり波形の読出を起動し（Ｓ１３）、前記フラグｆを１にセットする（Ｓ１４）。そして、ステップＳ１８に進む。
一方、前記Ｓ１２においてＳＡＷ波形のオーバーフローが検出されなかったときも、次のステップＳ１８に進む。
また、前記ステップＳ１１においてフラグｆが０でない場合は、Ｓ１５に進み、遅れたＳＡＷ波形Ｄのオーバフローが発生したかどうか判定する。ここで、オーバフローが発生したときは、ステップ読み出し部１１２〜１１４のいずれかに対し、フラグｆで指示される立ち上がりの波形読み出しを起動し（Ｓ１６）、フラグｆを０にクリアする（Ｓ１７）。
前記Ｓ１５でオーバフローしなかった場合は、ステップＳ１８に進む。
【００５０】
ステップＳ１８以下は、前記Ｓ１１〜Ｓ１７と全く同様の処理を行う。これは、１サンプル内に、立ち上がりと立ち下がり（または、その逆）が、同時に存在する可能性があるためである。
このようにして、奇数個設けられたステップ読み出し部に対して、順次、立ち下がりあるいは立ち上がりステップ波形の読出を行わせることにより、前述したパルス幅の狭いパルス波形を発生させることができる。
【００５１】
次に、本発明のさらに他の実施の形態について説明する。この実施の形態は、帯域制限された三角波を発生させるものである。図１４は、この実施の形態について説明するための図面であり、図１４の（ａ）はその機能構成の概略を示すブロック図、（ｂ）は（ａ）に示すブロック図の各部における出力波形を示す図である。この図において、１２１は周波数ナンバｆを入力するための入力端子であり、−１〜＋１の間の周波数ナンバｆがこの端子１２１から入力される。１２２は前記周波数ナンバｆと遅延回路１２３からの出力を加算するモジュロ加算器、１２３は前記モジュロ加算器１２２の出力を１サンプリング周期だけ遅延する遅延回路である。このモジュロ加算器１２２と遅延回路１２３によりデジタル積分回路が構成されており、その出力Ａは帯域制限されていないＳＡＷ波形となる。
【００５２】
１２４は前記モジュロ加算器１２２の出力Ａをアドレスｘとして、対応する正弦波出力ｙ（ｙ＝−ｓｉｎπｘ）を出力するサインテーブルである。このサインテーブル１２４からは、同図（ｂ）に示すような正弦波出力Ｂが出力される。１２５は前記正弦波出力Ｂと定数「２／π」とを乗算する乗算器であり、このように２／πを乗算するのは、出力される三角波と正弦波の傾きの最大値を同じにするためである。なお、この乗算器１２５は必ずしも設けなくてもよい。
１２６は、前記モジュロ加算器１２２の出力Ａと定数「−０．２５」とをモジュロ加算する加算器であり、この加算器１２６の出力は前記出力Ａを９０°だけ位相シフトした出力Ｃとなる。
【００５３】
１２７は、前記モジュロ加算器１２６の出力Ｃが入力され、その絶対値を出力する絶対値回路、１２８は該絶対値回路１２７からの絶対値出力に対し「−０．５」を加算する加算器、１２９は該加算器１２８の出力に対し定数「２」を乗算するシフト回路であり、このシフト回路１２９の出力Ｄは図の（ｂ）に示すような出力Ｄとなる。前記絶対値回路１２７からは前記出力Ｃを０レベルで折り返した０〜＋１の振幅を有する三角波が出力され、前記加算器１２８においてこの三角波を−０．５〜＋０．５の振幅を有する三角波にレベルシフトし、さらに、前記シフト回路１２９において、定数２を乗算することにより、該三角波の振幅を−１〜＋１に変換してＤに示す三角波としている。
【００５４】
１３０は、前記周波数ナンバｆに対応して補間係数ｋを出力する補間係数発生部であり、例えば、ｋ＝ａ・ｆ＋ｂ（ａ，ｂは定数）等の式に基づいて、補間係数ｋを出力する。この補間係数ｋは、後述するように、発生する三角波の頂点に対応する部分を正弦波により補間して帯域制限を加えるときの修正量を決定する係数であり、例えば、周波数ナンバｆが小さく、発生すべき三角波の周波数が低いときは、補間係数ｋの値を小さくして補間量の少ない三角波を出力し、周波数ナンバｆが大きく高い周波数の三角波を発生するときには大きな値の補間係数を発生して、サイン波による修正量を大きくするようになされている。
【００５５】
１３１は前記シフト回路１２９からの帯域制限されていない三角波と前記補間係数発生部１３０から出力される補間係数ｋとを乗算する乗算器であり、１３２は前記乗算器１２５から出力される正弦波波形と前記補間係数発生器１３０からの補間係数ｋとを乗算する乗算器である。また、１３３は、前記乗算器１３２から出力される前記正弦波波形Ｂ×ｋ、前記シフト回路１２９から出力される三角波Ｄ、および、前記乗算器１３１の出力Ｄ×ｋの極性の反転した波形を加算する加算器である。これにより、前記加算器１３３の出力は、ｋ・Ｂ＋Ｄ−ｋ・Ｄ＝ｋ・Ｂ＋（１−ｋ）・Ｄとなる。これにより、前記補間係数ｋにより決定される混合比に従って、正弦波で補間された三角波波形出力Ｅが得られることとなる。
【００５６】
このように、この実施の形態によれば、発生する周波数に応じて帯域制限された三角波を発生することが可能となり、エイリアジングを防止することが可能となる。
なお、前記補間係数発生部１３０としては、前述したような演算式を用いて周波数ナンバｆに対応する補間係数ｋを演算出力するものに限られることはなく、例えば、テーブルを参照するタイプのものとすることもできる。
【００５７】
【発明の効果】
以上説明したように、本発明の波形発生器によれば、波形レベルで帯域制限された鋸歯状波、矩形波、三角波等のパルス波形データを発生させることが可能となる。また、そのときに、発生する波形のピッチにかかわらず、不連続点の帯域を制限した理想的な波形を出力させることが可能となり、アナログシンセサイザ風の音色を発生させることができる。
【図面の簡単な説明】
【図１】本発明の波形発生器の一実施の形態である鋸歯状波発生器の一構成例を示すブロック図およびその各部の波形の例を示す図である。
【図２】図１に示した鋸歯状波発生器における窓関数を生成するための手段を説明するための図である。
【図３】図１に示した鋸歯状波発生器の変形例を示す図である。
【図４】図１に示した鋸歯状波発生器における窓関数を生成するための他の手段を説明するための図である。
【図５】本発明の波形発生器の他の実施の形態である鋸歯状波発生器の他の構成例の原理を説明するための図である。
【図６】図５に示した原理に基づいて構成された鋸歯状波発生器の構成例を示す図である。
【図７】図６に示した鋸歯状波発生器の各部の波形の一例を示す図である。
【図８】図６に示した鋸歯状波発生器における差分テーブルの読み出しを説明するための図である。
【図９】図６に示した鋸歯状波発生器における修正データについて説明するための図である。
【図１０】高いピッチの鋸歯状波波形データを発生することができるようになされた鋸歯状波発生器の構成例を示すブロック図である。
【図１１】本発明の波形発生器の他の実施の形態である矩形波発生器の原理を説明するための図である。
【図１２】本発明の波形発生器のさらに他の実施の形態であるサンプリング周期よりも短いパルス幅を有する矩形波発生器の動作原理を説明するための図である。
【図１３】図１２に示した矩形波発生器の動作を説明するためのフローチャートである。
【図１４】本発明の波形発生器のさらに他の実施の形態である三角波発生器の一構成例を示すブロック図と、その各部の波形の一例を示す図である。
【符号の説明】
１、５１、１２１  入力端子、２、５、５２、５６、６０、６３、６９、７４、８３、８８、９５、１１５、１２２、１２６、１２８、１３３  加算器、３、５３、５４、６４、７０、８２、８９、９６、１２３  遅延回路、４、５５  逆数テーブル、６、１１、５７、５９、７３、１２５、１３１、１３２  乗算器、７、５８、７１、９８、１２９  シフタ、８、７２、９９  リミッタ、９、１３、６５、９１、１２７  絶対値回路、１０  窓関数テーブル、１２、７５、１３４  出力端子、２１  周波数応答設定部、２２、２８  逆ＦＦＴ部、２３、３２ウインドウ部、２４、２６  ＦＦＴ部、２５  ＳＡＷ波形発生部、２７  複素乗算部、２９  除算部、３１  ＳＩＮＣ関数発生部、３３  ステップ波形発生部、３４  たたみこみ演算部、６１、１１１  オーバーフロー検出部、６２、６８、８１、８５、８６、８７、９０、９４、９７  切替スイッチ、６６、９２  差分テーブル、６７、９３  バッファ増幅器、８４  符号検出部、１１２〜１１４ステップ読み出し部、１２４  サインテーブル、１２０  補間係数発生部
【図１】
0003539164.tif 000002
【図２】
0003539164.tif 000003
【図３】
0003539164.tif 000004
【図４】
0003539164.tif 000005
【図５】
0003539164.tif 000006
【図６】
0003539164.tif 000007
【図７】
0003539164.tif 000008
【図８】
0003539164.tif 000009
【図９】
0003539164.tif 000010
【図１０】
0003539164.tif 000011
【図１１】
0003539164.tif 000012
【図１２】
0003539164.tif 000013
【図１３】
0003539164.tif 000014
【図１４】
0003539164.tif 000015