(57)【要約】【課題】  音の遅延を利用した効果音を生成する場合に、遅延を実現する大量のメモリを必要とすることなく、小さいサイズのメモリを効果的に使用することができるデータ圧縮装置を提供する。【解決手段】  リニヤデータ（２４ビット）１１０からフロートデータ（指数部４ビット、仮数部８ビット）１２０に変換する場合、ＭＳＢ（サインビット）の次のビット（２ＳＢ）からＬＳＢの方向にサインビットと値を順番に比較していく。値が異なるビットが見つかった時、そのビットを「反転ビット」とし、反転ビットの位置により指数部デーを設定する。また、リニヤデータ１１０を反転ビット以下、１２ビットになるようにシフト操作を行い、１２ビットの下位４ビットに対してディザ（ホワイトノイズ）を加算し、１２ビットの上位８ビットを仮数部とする。【選択図】  図２
2006058685.tif 000002
【特許請求の範囲】
【請求項１】
サインビットをＭＳＢとするｎビットのリニヤデータを、指数部ａビット、仮数部ｂビットのフロートデータの形式（ｎ＞ａ＋ｂ）に圧縮してメモリに格納すると共に、該メモリに格納されたフロートデータをリニヤデータに復元するデータ圧縮装置であって、
前記ｎビットのリニヤデータのＭＳＢ（サインビット）の次のビットからＬＳＢの方向にサインビットと値を順番に比較し、前記指数部に数値設定可能な位置（≠０）の範囲内で、異なるビットが見つかった時、そのビットを「反転ビット」とし、サインビットを省略した反転ビット以下のｂビットを仮数部とする手段と、
前記反転ビットが出現した位置に応じて指数部の値を設定すると共に、反転ビットが出現しなかった場合には値（＝０）を指数部に設定する手段と、
前記指数部および仮数部生成後に、前記ｎビットのデータをｃビット（ｎ＞ｃ）のデータになるようにシフト操作を行い、前記ｃビットのデータの上位ｂビットを仮数部とする手段と、
フロートデータからリニヤデータに変換する際に、前記指数部を参照し反転ビットがあるかどうかを判断し、反転ビットがある場合は、仮数部のＭＳＢの反転値をリニヤデータのＭＳＢに加えた後に、該ＭＳＢの次のビットから前記仮数部のデータを設定すると共に、前記指数部を参照し、該指数部の値に応じたシフト操作を行いリニヤデータを復元する手段と
を備えることを特徴とするデータ圧縮装置。
【請求項２】
前記指数部の設定範囲の制約により反転ビットがない場合は、リニヤデータの反転ビットのないビット以下を仮数部とし、前記指数部を‘０’に設定する手段と、
フロートデータからリニヤデータに変換する際に、反転ビットがない場合は、仮数部のＭＳＢの値をリニヤデータのＭＳＢにコピーした後に、リニヤデータのＭＳＢの次のビットから前記仮数部のデータを設定すると共に、該仮数部データのＭＳＢがリニヤデータ中のｂビット目の位置になるようにシフト操作してリニヤデータを復元する手段と
を備えることを特徴とする請求項１に記載のデータ圧縮装置。
【請求項３】
前記ｃビットのデータの下位ｄビットに対してディザ（ホワイトノイズ）を加算する手段と、
前記ディザを加算する際には、指数部の値、仮数部のＭＳＢの値、及びＭＳＢを除く仮数部の値を基に、ディザ加算を行なうかどうかを判定する手段を
備えることを特徴とする請求項１または請求項２に記載のデータ圧縮装置。
【請求項４】
サインビットをＭＳＢとする２４ビットのリニヤデータを、指数部４ビット、仮数部８ビットのフロートデータの形式に圧縮してメモリに格納すると共に、該メモリに格納されたフロートデータをリニヤデータに復元するデータ圧縮装置であって、
前記２４ビットのリニヤデータのＭＳＢ（サインビット）の次のビットからＬＳＢの方向にサインビットと値を順番に比較し、前記指数部に数値設定可能な位置（１〜１５）の範囲内で、値が異なるビットが見つかった時、そのビットを「反転ビット」とし、サインビットを省略した反転ビット以下の８ビットを仮数部とする手段と、
前記反転ビットが出現した位置に応じて指数部の値を設定すると共に、反転ビットが出現しなかった場合の値（＝０）を指数部に設定する手段と、
前記指数部および仮数部生成後に、前記２４ビットのデータを１２ビットのデータになるようにシフト操作を行い、前記１２ビットのデータの上位８ビットを仮数部とする手段と、
フロートデータからリニヤデータに変換する際に、前記指数部を参照し反転ビットがあるかどうかを判断し、反転ビットがある場合は、仮数部のＭＳＢの反転値をリニヤデータのＭＳＢに加えた後に、該ＭＳＢの次のビットから前記仮数部のデータを設定すると共に、前記指数部を参照し、該指数部の値に応じたシフト操作を行いリニヤデータを復元する手段と
を備えることを特徴とするデータ圧縮装置。
【請求項５】
前記指数部の設定範囲の制約により反転ビットがない場合は、リニヤデータの８ビット〜１ビット目を仮数部とし、前記指数部を‘０’に設定する手段と、
フロートデータからリニヤデータに変換する際に、反転ビットがない場合は、仮数部のＭＳＢの値をリニヤデータのＭＳＢにコピーした後に、リニヤデータのＭＳＢの次のビットから前記仮数部のデータを設定すると共に、該仮数部データのＭＳＢがリニヤデータ中の８ビット目の位置になるようにシフト操作してリニヤデータを復元する手段と
を備えることを特徴とする請求項４に記載のデータ圧縮装置。
【請求項６】
前記１２ビットのデータの下位４ビットに対してディザ（ホワイトノイズ）を加算する手段と、
前記ディザを加算する際には、指数部の値、仮数部のＭＳＢの値、及びＭＳＢを除く仮数部の値を基に、ディザ加算を行なうかどうかを判定する手段を
備えることを特徴とする請求項４または請求項５に記載のデータ圧縮装置。
【請求項７】
サインビットをＭＳＢとするｎビットのリニヤデータを、指数部ａビット、仮数部ｂビットのフロートデータの形式（ｎ＞ａ＋ｂ）に圧縮してメモリに格納すると共に、該メモリに格納されたフロートデータをリニヤデータに復元するデータ圧縮装置におけるデータ圧縮方法であって、
前記ｎビットのリニヤデータのＭＳＢ（サインビット）の次のビットからＬＳＢの方向にサインビットと値を順番に比較し、前記指数部に数値設定可能な位置（≠０）の範囲内で、異なるビットが見つかった時、そのビットを「反転ビット」とし、サインビットを省略した反転ビット以下のｂビットを仮数部とする手順と、
前記反転ビットが出現した位置に応じて指数部の値を設定すると共に、反転ビットが出現しなかった場合には値（＝０）を指数部に設定する手順と、
前記指数部および仮数部生成後に、前記ｎビットのデータをｃビット（ｎ＞ｃ）のデータになるようにシフト操作を行い、前記ｃビットのデータの上位ｂビットを仮数部とする手順と、
フロートデータからリニヤデータに変換する際に、前記指数部を参照し反転ビットがあるかどうかを判断し、反転ビットがある場合は、仮数部のＭＳＢの反転値をリニヤデータのＭＳＢに加えた後に、該ＭＳＢの次のビットから前記仮数部のデータを設定すると共に、前記指数部を参照し、該指数部の値に応じたシフト操作を行いリニヤデータを復元する手順と
を含むことを特徴とするデータ圧縮方法。
【請求項８】
前記ｃビットのデータの下位ｄビットに対してディザ（ホワイトノイズ）を加算する手順と、
前記ディザを加算する際には、指数部の値、仮数部のＭＳＢの値、及びＭＳＢを除く仮数部の値を基に、ディザ加算を行なうかどうかを判定する手順と
を含むことを特徴とする請求項７に記載のデータ圧縮方法。
【請求項９】
サインビットをＭＳＢとする２４ビットのリニヤデータを、指数部４ビット、仮数部８ビットのフロートデータの形式に圧縮してメモリに格納すると共に、該メモリに格納されたフロートデータをリニヤデータに復元するデータ圧縮装置におけるデータ圧縮方法であって、
前記２４ビットのリニヤデータのＭＳＢ（サインビット）の次のビットからＬＳＢの方向にサインビットと値を順番に比較し、前記指数部に数値設定可能な位置（１〜１５）の範囲内で、値が異なるビットが見つかった時、そのビットを「反転ビット」とし、サインビットを省略した反転ビット以下の８ビットを仮数部とする手順と、
前記反転ビットが出現した位置に応じて指数部の値を設定すると共に、反転ビットが出現しなかった場合の値（＝０）を指数部に設定する手順と、
前記指数部および仮数部生成後に、前記２４ビットのデータを１２ビットのデータになるようにシフト操作を行い、前記１２ビットのデータの上位８ビットを仮数部とする手順と、
フロートデータからリニヤデータに変換する際に、前記指数部を参照し反転ビットがあるかどうかを判断し、反転ビットがある場合は、仮数部のＭＳＢの反転値をリニヤデータのＭＳＢに加えた後に、該ＭＳＢの次のビットから前記仮数部のデータを設定すると共に、前記指数部を参照し、該指数部の値に応じたシフト操作を行いリニヤデータを復元する手順と
を含むことを特徴とするデータ圧縮方法。
【請求項１０】
前記１２ビットのデータの下位４ビットに対してディザ（ホワイトノイズ）を加算する手順と、
前記ディザ（ホワイトノイズ）を加算する際には、指数部の値、仮数部のＭＳＢの値、及びＭＳＢを除く仮数部の値を基に、ディザ加算を行なうかどうかを判定する手順を
含むことを特徴とする請求項９に記載のデータ圧縮方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ圧縮装置、及びデータ圧縮方法に関し、特に、携帯用着信装置や電子楽器等の楽音生成装置において、リバーブ、コーラスのようなエフェクトとして音の遅延を利用した効果音を生成する場合に、遅延を実現する大量のメモリを必要とすることなく、小さいサイズのメモリを効果的に使用することができる、データ圧縮装置、及びデータ圧縮方法に関する。
【背景技術】
【０００２】
電子楽器等の楽音生成装置においては、楽曲データにリバーブ（多数の異なったディレイを持ったエコーの組み合わせ）、コーラス（複数の音が同時に鳴っているようにする効果）のようなエフェクトを与えるために、デジタル信号処理用のＤＳＰ（Digital Signal Processor）を使用することが多い。
【０００３】
このＤＳＰには、音源装置から出力されたＰＣＭ（Pulse Code Modulation）コード化された波形データが入力され、ＤＳＰによりエフェクト処理等のデジタル信号処理が行われた後に、Ｄ／Ａ（デジタル／アナログ）変換されて、スピーカにより楽音が再生されるようになっている。
【０００４】
このＤＳＰにおいては、入力された音源装置の出力が数値データとして入力され、一旦、第１のメモリに格納される。そして、エフェクタをかける楽曲データは、遅延させる必要があり、第２のメモリである遅延用メモリ（Delay RAM）に格納させた後、所定の遅延をかけた後、第１メモリに戻し、他の付加的な処理を行った後に、最終的に第１のメモリより、Ｄ／Ａ変換器に出力するように構成されている。
【０００５】
ところで、リバーブや、コーラスのようなエフェクトは音の遅延を利用した効果音であるため、遅延を実現する大量の遅延用メモリ（Delay RAM）を必要とする。
【０００６】
しかしながら、ＤＳＰは高速な演算処理を行うことを主たる目的として使用されるもののであり、大量の遅延用メモリ（Delay RAM）として使用できるだけのメモリサイズを有していない。従って、小さいサイズのメモリを効果的に使用できるデータの圧縮方法の提供が望まれていた。
【０００７】
なお、本発明に関連する先行技術として、いくつかの発明が開示されている。例えば、音声信号をデジタル処理するための「データ処理装置のデータ処理方法」についての発明が開示されている（例えば、特許文献１参照）。
【０００８】
特許文献１の発明では、データ処理装置に２つのＤＳＰを使用した場合に、一般にデジタル／アナログ変換器では固定少数点データ処理を行う機能を有するため、前記ＤＳＰの浮動小数点データの送信のためにレジスタは使用されず、回路構成に無駄が生じていた問題の解決を目的としている。
【０００９】
また、例えば、加減乗除算を多く含み、かつ、入力変数または変数の組み合わせの数が多いような関数式の計算を、安価な固定小数点用ＤＳＰにより実現することができる「演算装置、プログラム及び関数値算出方法」に関する発明が開示されている（例えば、特許文献２参照）。
【００１０】
特許文献２の発明では、予め作成したテーブルを参照して関数値を求める方式と、近似関数式を用いて関数値を求める方式とのいずれかを、入力変数値に応じて選択可能にする。これにより、例えば加減乗除算を多く含み、かつ、入力変数または変数の組み合わせの数が多いような関数式の場合には、できるだけ処理ステップ数が少なく、かつ、少ないメモリ領域で関数値を求めることが可能になる値を閾値とすることで、加減乗除算を多く含み、かつ、入力変数または変数の組み合わせの数が多いような関数式の計算を安価な固定小数点用ＤＳＰにより実現することを目的としている。
【００１１】
しかしながら、本発明は、電子楽器等の楽音生成装置において、リバーブ、コーラスのようなエフェクトとして音の遅延を利用した効果音を生成するために、遅延を実現する大量のメモリを必要とすることなく、小さいサイズのメモリを効果的に使用することができるデータ圧縮方法を提供することを目的としており、上記先行発明とは、発明の目的と利用の形態が異なるものである。
【特許文献１】特開昭６３−２８２８００号公報
【特許文献２】特開２００２−３４２３０８号公報
【発明の開示】
【発明が解決しようとする課題】
【００１２】
本発明はこのような問題を解決するためになされたもので、その目的は、リバーブ、コーラスのようなエフェクトとして音の遅延を利用した効果音を生成する場合に、遅延を実現する大量のメモリを必要とすることなく、小さいサイズのメモリを効果的に使用することができる、データ圧縮装置、及びデータ圧縮方法を提供することにある。
【課題を解決するための手段】
【００１３】
本発明は上記課題を解決するためになされたものであり、請求項１に記載の発明は、サインビットをＭＳＢとするｎビットのリニヤデータを、指数部ａビット、仮数部ｂビットのフロートデータの形式（ｎ＞ａ＋ｂ）に圧縮してメモリに格納すると共に、該メモリに格納されたフロートデータをリニヤデータに復元するデータ圧縮装置であって、前記ｎビットのリニヤデータのＭＳＢ（サインビット）の次のビットからＬＳＢの方向にサインビットと値を順番に比較し、前記指数部に数値設定可能な位置（≠０）の範囲内で、異なるビットが見つかった時、そのビットを「反転ビット」とし、サインビットを省略した反転ビット以下のｂビットを仮数部とする手段と、前記反転ビットが出現した位置に応じて指数部の値を設定すると共に、反転ビットが出現しなかった場合には値（＝０）を指数部に設定する手段と、前記指数部および仮数部生成後に、前記ｎビットのデータをｃビット（ｎ＞ｃ）のデータになるようにシフト操作を行い、前記ｃビットのデータの上位ｂビットを仮数部とする手段と、フロートデータからリニヤデータに変換する際に、前記指数部を参照し反転ビットがあるかどうかを判断し、反転ビットがある場合は、仮数部のＭＳＢの反転値をリニヤデータのＭＳＢに加えた後に、該ＭＳＢの次のビットから前記仮数部のデータを設定すると共に、前記指数部を参照し、該指数部の値に応じたシフト操作を行いリニヤデータを復元する手段とを備えることを特徴とするデータ圧縮装置である。
【００１４】
また、請求項２に記載の発明は、請求項１に記載のデータ圧縮装置において、前記指数部の設定範囲の制約により反転ビットがない場合は、リニヤデータの反転ビットのないビット以下を仮数部とし、前記指数部を‘０’に設定する手段と、フロートデータからリニヤデータに変換する際に、反転ビットがない場合は、仮数部のＭＳＢの値をリニヤデータのＭＳＢにコピーした後に、リニヤデータのＭＳＢの次のビットから前記仮数部のデータを設定すると共に、該仮数部データのＭＳＢがリニヤデータ中のｂビット目の位置になるようにシフト操作してリニヤデータを復元する手段とを備えることを特徴とする。
【００１５】
また、請求項３に記載の発明は、請求項１または請求項２に記載のデータ圧縮装置において、前記ｃビットのデータの下位ｄビットに対してディザ（ホワイトノイズ）を加算する手段と、前記ディザを加算する際には、指数部の値、仮数部のＭＳＢの値、及びＭＳＢを除く仮数部の値を基に、ディザ加算を行なうかどうかを判定する手段を備えることを特徴とする。
【００１６】
また、請求項４に記載の発明は、サインビットをＭＳＢとする２４ビットのリニヤデータを、指数部４ビット、仮数部８ビットのフロートデータの形式に圧縮してメモリに格納すると共に、該メモリに格納されたフロートデータをリニヤデータに復元するデータ圧縮装置であって、前記２４ビットのリニヤデータのＭＳＢ（サインビット）の次のビットからＬＳＢの方向にサインビットと値を順番に比較し、前記指数部に数値設定可能な位置（１〜１５）の範囲内で、値が異なるビットが見つかった時、そのビットを「反転ビット」とし、サインビットを省略した反転ビット以下の８ビットを仮数部とする手段と、前記反転ビットが出現した位置に応じて指数部の値を設定すると共に、反転ビットが出現しなかった場合の値（＝０）を指数部に設定する手段と、前記指数部および仮数部生成後に、前記２４ビットのデータを１２ビットのデータになるようにシフト操作を行い、前記１２ビットのデータの上位８ビットを仮数部とする手段と、フロートデータからリニヤデータに変換する際に、前記指数部を参照し反転ビットがあるかどうかを判断し、反転ビットがある場合は、仮数部のＭＳＢの反転値をリニヤデータのＭＳＢに加えた後に、該ＭＳＢの次のビットから前記仮数部のデータを設定すると共に、前記指数部を参照し、該指数部の値に応じたシフト操作を行いリニヤデータを復元する手段とを備えることを特徴とするデータ圧縮装置である。
【００１７】
また、請求項５に記載の発明は、請求項４に記載のデータ圧縮装置において、前記指数部の設定範囲の制約により反転ビットがない場合は、リニヤデータの８ビット〜１ビット目を仮数部とし、前記指数部を‘０’に設定する手段と、フロートデータからリニヤデータに変換する際に、反転ビットがない場合は、仮数部のＭＳＢの値をリニヤデータのＭＳＢにコピーした後に、リニヤデータのＭＳＢの次のビットから前記仮数部のデータを設定すると共に、該仮数部データのＭＳＢがリニヤデータ中の８ビット目の位置になるようにシフト操作してリニヤデータを復元する手段とを備えることを特徴とする。
【００１８】
また、請求項６に記載の発明は、請求項４または請求項５に記載のデータ圧縮装置において、前記１２ビットのデータの下位４ビットに対してディザ（ホワイトノイズ）を加算する手段と、前記ディザを加算する際には、指数部の値、仮数部のＭＳＢの値、及びＭＳＢを除く仮数部の値を基に、ディザ加算を行なうかどうかを判定する手段を備えることを特徴とする。
【００１９】
また、請求項７に記載の発明は、サインビットをＭＳＢとするｎビットのリニヤデータを、指数部ａビット、仮数部ｂビットのフロートデータの形式（ｎ＞ａ＋ｂ）に圧縮してメモリに格納すると共に、該メモリに格納されたフロートデータをリニヤデータに復元するデータ圧縮装置におけるデータ圧縮方法であって、前記ｎビットのリニヤデータのＭＳＢ（サインビット）の次のビットからＬＳＢの方向にサインビットと値を順番に比較し、前記指数部に数値設定可能な位置（≠０）の範囲内で、異なるビットが見つかった時、そのビットを「反転ビット」とし、サインビットを省略した反転ビット以下のｂビットを仮数部とする手順と、前記反転ビットが出現した位置に応じて指数部の値を設定すると共に、反転ビットが出現しなかった場合には値（＝０）を指数部に設定する手順と、前記指数部および仮数部生成後に、前記ｎビットのデータをｃビット（ｎ＞ｃ）のデータになるようにシフト操作を行い、前記ｃビットのデータの上位ｂビットを仮数部とする手順と、フロートデータからリニヤデータに変換する際に、前記指数部を参照し反転ビットがあるかどうかを判断し、反転ビットがある場合は、仮数部のＭＳＢの反転値をリニヤデータのＭＳＢに加えた後に、該ＭＳＢの次のビットから前記仮数部のデータを設定すると共に、前記指数部を参照し、該指数部の値に応じたシフト操作を行いリニヤデータを復元する手順とを含むことを特徴とするデータ圧縮方法である。
【００２０】
また、請求項８に記載の発明は、請求項７に記載のデータ圧縮方法において、前記ｃビットのデータの下位ｄビットに対してディザ（ホワイトノイズ）を加算する手順と、前記ディザを加算する際には、指数部の値、仮数部のＭＳＢの値、及びＭＳＢを除く仮数部の値を基に、ディザ加算を行なうかどうかを判定する手順とを含むことを特徴とする
【００２１】
また、請求項９に記載の発明は、サインビットをＭＳＢとする２４ビットのリニヤデータを、指数部４ビット、仮数部８ビットのフロートデータの形式に圧縮してメモリに格納すると共に、該メモリに格納されたフロートデータをリニヤデータに復元するデータ圧縮装置におけるデータ圧縮方法であって、前記２４ビットのリニヤデータのＭＳＢ（サインビット）の次のビットからＬＳＢの方向にサインビットと値を順番に比較し、前記指数部に数値設定可能な位置（１〜１５）の範囲内で、値が異なるビットが見つかった時、そのビットを「反転ビット」とし、サインビットを省略した反転ビット以下の８ビットを仮数部とする手順と、前記反転ビットが出現した位置に応じて指数部の値を設定すると共に、反転ビットが出現しなかった場合の値（＝０）を指数部に設定する手順と、前記指数部および仮数部生成後に、前記２４ビットのデータを１２ビットのデータになるようにシフト操作を行い、前記１２ビットのデータの上位８ビットを仮数部とする手順と、フロートデータからリニヤデータに変換する際に、前記指数部を参照し反転ビットがあるかどうかを判断し、反転ビットがある場合は、仮数部のＭＳＢの反転値をリニヤデータのＭＳＢに加えた後に、該ＭＳＢの次のビットから前記仮数部のデータを設定すると共に、前記指数部を参照し、該指数部の値に応じたシフト操作を行いリニヤデータを復元する手順とを含むことを特徴とするデータ圧縮方法である。
【００２２】
また、請求項１０に記載の発明は、請求項９に記載のデータ圧縮方法において、前記１２ビットのデータの下位４ビットに対してディザ（ホワイトノイズ）を加算する手順と、前記ディザ（ホワイトノイズ）を加算する際には、指数部の値、仮数部のＭＳＢの値、及びＭＳＢを除く仮数部の値を基に、ディザ加算を行なうかどうかを判定する手順を含むことを特徴とする。
【発明の効果】
【００２３】
請求項１および請求項７に記載の発明においては、リニヤデータ（ｎビット）からフロートデータ（指数部ａビット、仮数部ｂビット）に変換する場合に、ＭＳＢ（サインビット）の次のビット（２ＳＢ）からＬＳＢの方向にサインビットと値を順番に比較していく。値が異なるビットが見つかった時、そのビットを「反転ビット」とし、その位置を指数部に設定する。サインビットと反転ビットは必ず異なる値となる。その為、サインビットは反転ビットの値から推測可能である。そこで、サインビットを省略した反転ビット以下のｂビット（例えば、８ビット）を仮数部とすると、仮数部が実質ｂ＋１ビット（例えば、９ビット）相当になるというメリットがあり、限られた遅延用メモリを有効に使用できる。また、指数部判定・反転ビット有無判定後、リニヤデータを反転ビット以下、ｃビット（例えば、１２ビット）になるようにシフト操作を行い、ｃビット（例えば、１２ビット）の上位ｂビット（例えば、８ビット）を仮数部とする。これにより、リニヤデータを、指数部と仮数部データから構成されるフロートデータに変換して効果的に圧縮でき、限られた遅延用メモリを有効に使用できる。
【００２４】
また、請求項２に記載の発明においては、指数部の設定範囲の制約により反転ビットが存在しない場合には、リニヤデータの反転ビットのないビット以下を仮数部とし、前記指数部を‘０’に設定するようにしたので、これにより、反転ビットが検出されないリニヤデータについてもフロートデータに変換することができる。
【００２５】
また、請求項３および請求項８に記載の発明においては、リニヤデータを反転ビット以下、ｃビット（例えば、１２ビット）になるようにシフト操作を行い、このｃビット（例えば、１２ビット）のデータの下位ｄビット（例えば、４ビット）に対してディザ（ホワイトノイズ）を加算する。また、ディザ（ホワイトノイズ）を加算する際には、指数部の値、仮数部のＭＳＢの値、及びＭＳＢを除く仮数部の値を基に、ディザ加算を行なうかどうかを判定するようにする。これにより、仮数部よりも下位のビットの値の大小を確率的に仮数部のＬＳＢに反映した形でフロートデータを生成することができる。また、例えば、ディザ加算した結果、仮数部のＭＳＢが反転し、サインビットが反転する事態の発生を抑止することができる。
【００２６】
請求項４および請求項９に記載の発明においては、リニヤデータ（１２ビット）からフロートデータ（指数部４ビット、仮数部８ビット）に変換する場合、ＭＳＢ（サインビット）の次のビット（２ＳＢ）からＬＳＢの方向にサインビットと値を順番に比較していく。値が異なるビットが見つかった時、そのビットを「反転ビット」とし、その位置を指数部に設定する。サインビットと反転ビットは必ず異なる値となる。その為、サインビットは反転ビットの値から推測可能である。そこで、サインビットを省略した反転ビット以下の８ビットを仮数部とすると、仮数部が実質９ビット相当になるというメリットがあり、限られた遅延用メモリを有効に使用できる。また、指数部判定・反転ビット有無判定後、リニヤデータを反転ビット以下、１２ビットになるようにシフト操作を行い、１２ビットの上位８ビットを仮数部とする。これにより、リニヤデータを、指数部と仮数部データから構成されるフロートデータに変換して効果的に圧縮でき、限られた遅延用メモリを有効に使用できる。
【００２７】
また、請求項５に記載の発明においては、指数部の設定範囲の制約により反転ビットが存在しない場合には、リニヤデータの８ビット〜１ビット目を仮数部とし、指数部を‘０’に設定するようにしたので、これにより、反転ビットが検出されないリニヤデータについてもフロートデータに変換することができる。
【００２８】
また、請求項６および請求項１０に記載の発明においては、リニヤデータを反転ビット以下、１２ビットになるようにシフト操作を行い、この１２ビットのデータの下位４ビットに対してディザ（ホワイトノイズ）を加算する。また、ディザ（ホワイトノイズ）を加算する際には、指数部の値、仮数部のＭＳＢの値、及びＭＳＢを除く仮数部の値を基に、ディザ加算を行なうかどうかを判定する。これにより、これにより、仮数部よりも下位のビットの値の大小を確率的に仮数部のＬＳＢに反映する形でフロートデータを生成することができる。また、例えば、ディザ加算した結果、仮数部のＭＳＢが反転し、サインビットが反転する事態の発生を抑止することができる。
【発明を実施するための最良の形態】
【００２９】
次に本発明を実施するための最良の形態について図面を参照して説明する。なお、図中のデータの値の表記方法としては、ハードウェア設計言語（ＩＥＥＥにおいて規定される）を使用している。
【００３０】
図１は、本発明によるデータ圧縮装置の構成例を示すブロック図であり、本発明に直接関係する部分について示したものである。図１に示す例は、楽曲データにリバーブやコーラスなどのエフェクトを与える楽音生成装置２００に、本発明によるデータ圧縮装置３００を搭載した例を示している。
【００３１】
この楽音生成装置２００には、音源装置（図示せず）から出力されたＰＣＭコード化された波形データが入力されるデータ入力部２０１と、入力された音源装置の出力が数値データとし一旦格納されるメモリ（ＱＲＡＭ）２１０と、楽曲データにエフェクトをかけるエフェクト効果処理部４００と、データ圧縮装置３００とが設けられている。
【００３２】
また、データ圧縮装置３００内には、ＱＲＡＭ２１０に格納された楽曲データを受け取り、リニヤデータをフロートデータに変換するリニヤ・フロート変換回路３０１と、フロートデータに変換された楽曲データを格納する遅延用メモリであるディレイＲＡＭ３６０と、ディレイＲＡＭ３６０に格納されたフロートデータをリニヤデータに復元するフロート・リニヤ変換回路３５０とが含まれている。
【００３３】
なお、エフェクト効果処理部４００、リニヤ・フロート変換回路３０１、フロート・リニヤ変換回路３５０における処理は、デジタル信号処理用のＤＳＰ（Digital Signal Processor）により行なわれ、また、データ入力部２０１、ＱＲＡＭ２１０、およびディレイＲＡＭ３６０もＤＳＰ内に搭載される場合がある。
【００３４】
図２および図３は、本発明によるデータ圧縮装置におけるデータ圧縮方法の原理について説明するための図であり、リニヤ・フロート変換回路３０１およびフロート・リニヤ変換回路３５０における楽曲データの圧縮と復元の原理について説明するための図である。
【００３５】
図２および図３に示す例は、２４ｂｉｔのリニヤデータ（楽曲データ）１１０を、１２ビットのフロートデータ（フローティングデータ）１２０に変換し、さらに、フロートデータ１２０を、２４ビットのリニヤデータ１３０に再変換（復元）する例を示している。
【００３６】
リニヤデータ１１０は、サインビット（符号ビットＳ）と２３ビットのデータからなる２４ビットのリニヤデータ（単に、「リニヤ」ともいう）である。ＭＳＢ（最上位ｂｉｔ：Ｓ）を２３ビット目、次のビットを２２ビット目、・・・ＬＳＢを０ビット目ということにする（以下同じ）。フロートデータ（単に、「フロート」ともいう）１２０は、指数部４ビット、仮数部８ビットからなる合計１２ビットのデータである。
【００３７】
そして、リニヤデータ（２４ｂｉｔ）からフロートデータ（１２ｂｉｔ）への変換は次のようにして行なわれる。
【００３８】
まず、ＭＳＢ（最上位ｂｉｔ：Ｓ）の次のビット（２２）からＬＳＢ（最下位ｂｉｔ：０）の方向に、各ビットの値と、サインビット（Ｓ）の値とを順番に比較していく。値が異なるビットが見つかった時、その位置のビットを「反転ビット」と呼ぶことにする。
【００３９】
サインビットと反転ビットは必ず異なる値となる。そのため、サインビット（Ｓ）は反転ビットの値から推測可能である（反転ビットを反転するとサインビットになる）。そこで、サインビット（Ｓ）を省略した反転ビット以下の８ビットを仮数部とする。こうすることで仮数部が実質９ビット相当になるというメリットがあり、限られた遅延用メモリを有効に使用できる。
【００４０】
上述した反転ビット有無判定を行なった後に、リニヤデータを、反転ビット以下１２ビットになるようにシフト操作を行う（具体例については後述する）。また、シフト操作を行なった１２ビットのリニヤデータの下位４ビットに対してディザ（ホワイトノイズ：擬似乱数）を加算し、ディザ加算した１２ビットデータの上位８ビットを仮数部とする。
【００４１】
なお、ディザ加算はできる場合とできない場合がある。これについては、後述する。
【００４２】
また、指数部については、リニヤデータにおいて反転ビットが、ＭＳＢ（サインビット：Ｓ）のすぐ次に現れた場合は、すなわち、反転ビットが２２ビット目の場合は、指数部を「指数部＝4'b1111」とする。「指数部＝4'b1111」の表記はハードウェア設計言語（ＩＥＥＥ）によるものであり、４ビットで構成されるデータを示し、各ビットデータが上位から順番に、‘１'、‘１'、‘１'、‘１'であることを示している。
【００４３】
また、リニヤデータ１１０において反転ビットが、サインビット（Ｓ）の２つ後に現れた場合、すなわち、反転ビットが２１ビット目の場合は、指数部を「指数部＝4'b1110」とする。「指数部＝4'b1110」の表記は、４ビットで構成されるデータを示し、各ビットデータが上位から順番に、‘１'、‘１'、‘１'、‘０'であることを示している。
【００４４】
ただし、リニヤデータにおいて、ＭＳＢ（サインビット：Ｓ）から８ビット目までサインビットと同じ値が続く場合は、指数部（４ビット）の制約により、これ以上のリニヤデータのビットシフトができないため、反転ビットは存在せず、８〜１ビット目までの８ビットを仮数部とする。また、この場合は「指数部＝4'b0000」とする。
【００４５】
また、フロートデータ１２０から、リニヤデータ１３０に変換する場合は、指数部で反転ビットがあるかどうかを判断し、反転ビットがある（指数部≠4'b0000）場合は、仮数部のＭＳＢの値の反転した値を、変換されるリニヤデータのＭＳＢに加えた後、指数部に応じたビットシフト操作を行い、リニヤデータに戻す。
【００４６】
図４は、ディザ加算の有無について説明するための図である。ディザ加算はできる場合とできない場合があり、図４はディザ加算が可能な場合、および禁止する場合の条件を示している。まず仮数部の６ビット目から３ビット目までが全て‘０’か否かを見て、次にＭＳＢ、さらに指数部が全て‘０’かを判定して、優先度Ａ、Ｂ、Ｃ、Ｄを決める。
【００４７】
図４の優先度Ａに示す場合は、指数部は任意の値（＊）であり、仮数部データのＭＳＢ（［７］（ＭＳＢ））が任意の値（＊）であり、かつ、仮数部の６〜０ビット（[6:0]）の７ビットデータが、１６進数で‘７Ｆ'以外（少なくとも１ビットは‘０’）の場合である。
【００４８】
この場合は、ディザ加算をしても／しなくても仮数部のＭＳＢには影響を与えないため（ＭＳＢまでの桁上がりが生じないため）、フロートデータへの変換、およびリニヤデータへの復元が可能である。従って、ディザ加算が可能である。
【００４９】
図５は、優先度Ａの場合の第１の具体例を示す図であり、仮数部［bit6：bitO］≠7'blll_1111の場合であり、仮数部のＬＳＢにディザを加算しても、オーバーフローする可能性がない場合である。
【００５０】
図５において、２４ビットのリニヤデータ（QRam_do）は、サインビット（ＭＳＢ）が‘０’であり、２２ビット目が‘０’であり、２１ビット目にサインビットの値と異なる‘１’が出現する。
【００５１】
従って、指数部データは（4'ｂ1110）となる。また、リニヤデータ（QRam_do）を１０ビット、シフトダウン（Shift Down）し、１２ビットのデータ（LinFltSftOut）を得る。この１２ビットデータ（LinFltSftOut）の下位４ビットにディザ加算を行い。８ビットのデータ（LinFltAdd2Out）を得る。なお、８ビットのデータ（LinFltAdd2Out）のＬＳＢが、‘０’かまたは‘１’になっているのは、ディザ加算の結果、桁上げが生じることがあるためである。この８ビットのデータ（LinFltAdd2Out）は、仮数部として、指数部データ（４ビット）とともに、１２ビットのフロートデータ（DSP2DRAM_ｄo）として、ディレイＲＡＭに書き込まれる。
【００５２】
また、このデータを復元する場合には、リニヤデータ（FltLinSftIn）として、フロートデータの仮数部データのＭＳＢの反転値をサインビットとし、それに続いて、８ビットの仮数部データを格納する。そして、指数部データを参照し、その値に応じて仮数部データをシフトダウン（Shift Down）する。この例の場合では、１ビット、シフトダウン（Shift Down）し、リニヤデータ（FltLinSftOut）を復元する。
【００５３】
また、図６は、優先度Ａの場合の第２の具体例を示す図であり、仮数部［bit6：bitO］≠7'blll_1111の場合であり、仮数部のＬＳＢにディザを加算しても、オーバーフローする可能性がない場合である。
【００５４】
図６において、２４ビットのリニヤデータ（QRam_do）は、サインビット（ＭＳＢ）が‘０’であり、２２ビット目から９ビット目までが‘０’であり、８ビット目にサインビットの値と異なる‘１’が出現する。
【００５５】
従って、指数部データは（4'ｂ0001=4'h1）となる。３ビット、シフトアップ（Shift Up）し、また、３ビットの‘０’データ（3'b000）を付加して、１２ビットのデータ（LinFlitSftOut）を得る。この１２ビットデータ（LinFltSftOut）の下位４ビットにディザ加算を行い。８ビットのデータ（LinFltAdd2Out）を得る。なお、８ビットのデータ（LinFltAdd2Out）のＬＳＢが、‘０’かまたは‘１’になっているのは、ディザ加算の結果、桁上げが生じることがあるためである。この８ビットのデータ（LinFltAdd2Out）は、仮数部として、指数部データ（４ビット）とともに、１２ビットの仮数部データ（DSP2DRAM_do）として、ディレイＲＡＭに書き込まれる。
【００５６】
また、このデータを復元する場合には、リニヤデータ（FltLinSftIn）として、フロートデータの仮数部データのＭＳＢの反転値‘０’をサインビットとし、それに続いて、８ビットの仮数部データを格納する。そして、指数部データ（4'h１）を参照し、その値に応じて仮数部データをシフトダウン（Shift Down）する。この例の場合では、１４ビット、シフトダウン（Shift Down）し、リニヤデータ（FltLinSftOut）を復元する。
【００５７】
図４に戻り、優先度Ｂの場合は、指数部は任意の値（＊）であり、仮数部データのＭＳＢ（［７］（ＭＳＢ））が‘０’であり、仮数部の６〜０ビット（[６：０]）の７ビットデータが、１６進数で‘７Ｆ'（7'h7F）の場合である。この場合はディザ加算を禁止する。
【００５８】
これは、ディザ加算した結果、桁上りが生じて仮数部のＭＳＢが反転する場合があるためである。
【００５９】
図７は、優先度Ｂの場合の第１の具体例を示す図であり、仮数部［bit7：bitO］＝8'bOlll_1111の場合であり、仮数部のＬＳＢにディザを加算するとオーバーフローする可能性があり、その結果反転ビットへの影響（反転し、リニヤデータに戻す時、符号が反転してしまう）がある場合の例であり、かつ反転ビットがある場合の例である。
【００６０】
図７において、２４ビットのリニヤデータ（QRam_do）は、サインビット（ＭＳＢ）が‘１’であり、２２ビット目が‘１’であり、２１ビット目にサインビットの値と異なる‘０’が出現する。２０ビット目から１４ビット目の７ビットは全て‘１’である。
【００６１】
従って、指数部データは（4'ｂ1110）となる。また、リニヤデータ（QRam_do）を１０ビット、シフトダウン（Shift Down）し、１２ビットのデータ（LinFltSftOut）を得る。この１２ビットデータ（LinFltSftOut）の下位４ビットにディザ加算は行わない。ディザの値が4'b0111以下であれば、加算しても差し支えないが、4'b1000以上であると桁上りが生じてＭＳＢが反転してしまう。例えば、ディザの値が4'b1000であると、加算結果は12'b100000000000となってしまう。また、１２ビットデータ（LinFltSftOut）の上位８ビットのデータ（LinFltAdd2Out）は、仮数部として、指数部データ（４ビット）とともに、１２ビットのフロートデータ（DSP2DRAM_do）として、ディレイＲＡＭに書き込まれる。
【００６２】
また、このデータを復元する場合には、リニヤデータ（FltLinSftIn）として、フロートデータの仮数部データのＭＳＢの反転値‘１’をサインビットとし、それに続いて、８ビットの仮数部データを格納する。そして、指数部データ（4'b1110）を参照し、その値に応じて仮数部データをシフトダウン（Shift Down）する。この例の場合では、１ビット、シフトダウン（Shift Down）し、リニヤデータ（FltLinSftOut）を復元する。
【００６３】
また、図８は、優先度Ｂの場合の第２の具体例を示す図であり、仮数部［bit7：bitO］＝8'bOlll_1111の場合であり、仮数部のＬＳＢにディザを加算するとオーバーフローする可能性があり、その結果反転ビットへの影響がある場合の例であり、かつ反転ビットがない場合の例である。
【００６４】
図８において、２４ビットのリニヤデータ（QRam_do）は、サインビット（ＭＳＢ）が‘０’であり、２２ビット目から８ビット目までが‘０’であり、反転ビットは検出されない。
【００６５】
従って、指数部データは（4'b0000）となる。また、リニヤデータ（QRam_do）を、３ビット、シフトアップ（Shift Up）し、また、３ビットのデータ（3'b000）を付加して、１２ビットのデータ（LinFltSftOut）を得る。この１２ビットデータ（LinFltSftOut）の下位４ビットにディザ加算は行わない。
【００６６】
また、１２ビットデータ（LinFltSftOut）の上位８ビットのデータ（LinFltAdd2Out）は、仮数部として、指数部データ（４ビット）とともに、１２ビットのフロートデータ（DSP2DRAM_ｄo）として、ディレイＲＡＭに書き込まれる。
【００６７】
また、このデータを復元する場合には、指数部データが全て‘０’（4'h0）であるので、反転ビットが無い場合であると判定し、リニヤデータ（FltLinSftIn）として、フロートデータの仮数部データのＭＳＢの‘０’をコピーしてサインビットとし、それに続いて、８ビットの仮数部データを格納する。そして、指数部データ（4'b0000）を参照し、その値に応じて仮数部データをシフトダウン（Shift Down）する。この例の場合では、１４ビット、シフトダウン（Shift Down）し、リニヤデータ（FltLinSftOut）を復元する。
【００６８】
図４に戻り、優先度Ｃの場合は、指数部が４ビットの全てが‘０’以外（4'h0以外）の値であり、仮数部データのＭＳＢ（［７］（ＭＳＢ））が‘１’であり、仮数部の６〜０ビット（[６：０]）の７ビットデータが、１６進数で‘７Ｆ'（7'h7F）の場合（仮数部の全ビットが１）である。この場合はディザ加算を禁止する。理由は、優先度Ｂの場合と同じく、ディザ加算した結果の仮数部のＭＳＢが反転し、サインが反転してしまうためである。
【００６９】
図９は、優先度Ｃの場合の第１の具体例を示す図であり、指数部≠4'hO（反転ビットあり）であり、かつ仮数部[bit7：bitO］＝8'b1111_1111の場合であり、仮数部のＬＳＢにディザを加算するとオーバーフローする可能性があり、その結果反転ビットへの影響がある場合の例である。
【００７０】
図９において、２４ビットのリニヤデータ（QRam_do）は、サインビット（ＭＳＢ）が‘０’であり、２２ビット目が‘０’であり、２１ビット目にサインビットの値と異なる‘１’が出現する。
【００７１】
従って、指数部データは（4'ｂ1110）となる。また、リニヤデータ（QRam_do）を１０ビット、シフトダウン（Shift Down）し、１２ビットのデータ（LinFltSftOut）を得る。この１２ビットデータ（LinFltSftOut）の下位４ビットにディザ加算は行わない。また、１２ビットデータ（LinFltSftOut）の上位８ビットのデータ（LinFltAdd2Out）は、仮数部として、指数部データ（４ビット）とともに、１２ビットのフロートデータ（DSP2DRAM_do）として、ディレイＲＡＭに書き込まれる。
【００７２】
また、このデータを復元する場合には、リニヤデータ（FltLinSftIn）として、フロートデータの仮数部データのＭＳＢの反転値‘０’をサインビットとし、それに続いて、８ビットの仮数部データを格納する。そして、指数部データ（4'b1110）を参照し、その値に応じて仮数部データをシフトダウン（Shift Down）する。この例の場合では、１ビット、シフトダウン（Shift Down）し、リニヤデータ（FltLinSftOut）を復元する。
【００７３】
また、図１０は、優先度Ｃの場合の第２の具体例を示す図であり、指数部≠4'b0000（反転ビットあり）であり、かつ仮数部[bit7：bitO］＝8'b1111_1111の場合であり、仮数部のＬＳＢにディザを加算するとオーバーフローする可能性があり、その結果反転ビットへの影響がある場合の例である。
【００７４】
図１０において、２４ビットのリニヤデータ（QRam_do）は、サインビット（ＭＳＢ）が‘０’であり、２２ビット目から９ビット目までが‘０’であり、８ビット目に反転ビット‘１’が検出された例である。
【００７５】
従って、指数部データは（4'ｂ0001=4'h1）となる。また、リニヤデータ（QRam_do）の８ビット目から０ビット目までを、３ビット、シフトアップ（Shift Up）し、また、３ビットのデータ（3'b000）を付加して１２ビットのデータ（LinFltSftOut）を得る。この１２ビットデータ（LinFltSftOut）の下位４ビットにディザ加算は行わない。
【００７６】
また、１２ビットデータ（LinFltSftOut）の上位８ビットのデータ（LinFltAdd2Out）は、仮数部として、指数部データ（４ビット）とともに、１２ビットのフロートデータ（DSP2DRAM_do）として、ディレイＲＡＭに書き込まれる。
【００７７】
また、このデータを復元する場合には、リニヤデータ（FltLinSftIn）として、フロートデータの仮数部データのＭＳＢの反転値‘０’をサインビットとし、それに続いて、８ビットの仮数部データを格納する。そして、指数部データ（4'b0001）を参照し、その値に応じて仮数部データをシフトダウン（Shift Down）する。この例の場合では、１４ビット、シフトダウン（Shift Down）し、リニヤデータ（FltLinSftOut）を復元する。
【００７８】
図４に戻り、優先度Ｄの場合は、指数部が４ビットの１６進数で‘０’（4'h0）の値であり、仮数部データのＭＳＢ（［７］（ＭＳＢ））が‘１’であり、仮数部の６〜０ビット（[6:0]）の７ビットデータが、１６進数で‘７Ｆ'（7'h7F）の場合である。この場合はディザ加算を行なう。これは、反転ビットがないため、ディザ加算した時のキャリーをフロート変換した仮数部に残せ、リニヤデータへの復元が可能であるからである。さらにリミットサイクルへの対応ができる（後述）。
【００７９】
図１１は、優先度Ｄの場合の第１の具体例を示す図であり、指数部＝4'b0000（反転ビットなし）であり、かつ仮数部[bit7：bitO］＝8'b1111_1111の場合であり、仮数部のＬＳＢにディザを加算しても桁上りが生じない場合の例である。
【００８０】
図１１において、２４ビットのリニヤデータ（QRam_do）は、サインビット（ＭＳＢ）が‘１’であり、２２ビット目から０ビット目までが‘１’であり、反転ビットが検出されない例である。
【００８１】
従って、指数部データは（4'b0000=4'h0）となる。また、リニヤデータ（QRam_do）の８ビット目から０ビット目までを、３ビット、シフトアップ（Shift Up）し、また、３ビットのデータ（3'b000）を付加して１２ビットのデータ（LinFltSftOut）を得る。この１２ビットデータ（LinFltSftOut）の下位４ビットにディザ加算を行なう。ディザの値は、4'b0111以下の場合である。
【００８２】
また、１２ビットデータ（LinFltSftOut）の上位８ビットのデータ（LinFltAdd2Out）は、仮数部として、指数部データ（４ビット）とともに、１２ビットのフロートデータ（DSP2DRAM_do）として、ディレイＲＡＭに書き込まれる。
【００８３】
また、このデータを復元する場合には、リニヤデータ（FltLinSftIn）として、フロートデータの仮数部データのＭＳＢをコピーしてをサインビットとし、それに続いて、８ビットの仮数部データを格納する。そして、指数部データ（4'b0000）を参照し、その値に応じて仮数部データをシフトダウン（Shift Down）する。この例の場合では、１４ビット、シフトダウン（Shift Down）し、リニヤデータ（FltLinSftOut）を復元する。
【００８４】
また、図１２は、優先度Ｄの場合の第２の具体例を示す図であり、指数部＝4'b0000（反転ビットなし）であり、かつ仮数部[bit7：bitO］＝8'b1111_1111の場合であり、仮数部のＬＳＢにディザを加算するとオーバーフローする可能性があるが、反転ビットがなく、オーバーフローしたときの取り扱いが可能な場合の例である。また、ディザ加算により、仮数部に‘＋１’の場合の例である。
【００８５】
２４ビットのリニヤデータ（QRam_do）は、サインビット（ＭＳＢ）が‘１’であり、２２ビット目から０ビット目までが‘１’であり、反転ビットが検出されない。
【００８６】
従って、指数部データは（4'b0000=4'h0）となる。また、リニヤデータ（QRam_do）の８ビット目から０ビット目までを、３ビット、シフトアップ（Shift Up）し、また、３ビットのデータ（3'b000）を付加して１２ビットのデータ（LinFltSftOut）を得る。この１２ビットデータ（LinFltSftOut）の下位４ビットにディザ加算を行なうディザ値が4'b1000以上の場合である。この場合は、ディザ加算による桁上げが生じ、仮数部の８ビットが全て‘０’（8'b0000_0000）となる。
【００８７】
また、１２ビットデータ（LinFltSftOut）の上位８ビットのデータ（LinFltAdd2Out）は、仮数部として、指数部データ（４ビット）とともに、１２ビットのフロートデータ（DSP2DRAM_do）として、ディレイＲＡＭに書き込まれる。
【００８８】
また、このデータを復元する場合には、リニヤデータ（FltLinSftIn）として、フロートデータの仮数部データのＭＳＢをコピーしてサインビットとし、それに続いて、８ビットの仮数部データを格納する。そして、指数部データ（4'b0000）を参照し、その値に応じて仮数部データをシフトダウン（Shift Down）する。この例の場合では、１４ビット、シフトダウン（Shift Down）し、リニヤデータ（FltLinSftOut）を復元する。
【００８９】
このように、優先度Ｄの場合にディザ加算を行なう理由について、補足して説明しておく。図１２に示す例の場合は、次のような理由からディザ加算を許可し、絶対値最小の負値（‘0xFFF…'）が‘０’に繰り上がることがあるようにしている。
【００９０】
第１に、このケースではキャリーが発生しても指数部や反転ビットには影響を与えることがなく、元のリニアデータの値−１が、値０に復元されても影響は小さい。また、回路が煩雑にならないようにすることができるためである。
【００９１】
第２に、このケースがリミットサイクルにとって重要である。この点は重要で、このケースでキャリーを禁止すると、リミットサイクルが止まらない可能性がある。リミットサイクルは微少振動や微小直流が残るケースなので、振幅が小さくなってからが特に問題になる。典型的な例として、０．９倍してフィードバックするディレイループがあった場合、入力が停止しディレイの中に負の数の種が残ると、その数は０．９倍されてどんどん‘０’に近付いていく。しかしキャリーを許さないと、データ‘0xFFF…'（値−１）は永久に‘０’にはならない。キャリーを許せばいつか必ず‘０'に収束する。なぜなら、ディザ加算される値（ホワイトノイズの値）が大きいタイミングが必ず生じるからである。すなわち、リミットサイクルの解消ができる。
【００９２】
また、図１３は、リニヤデータをフロートデータに変換する回路の構成例を示す図である。図１３において、ＱＲＡＭ２１０には、楽曲データが一時的に格納されており、ＱＲＡＭ２１０からの２４ビットのリニヤデータ（QRAM_do[23:0]）が、リニヤ・フロート変換回路３０１の指数判定部３０２と、シフター（Shifter）３０３に入力される。
【００９３】
指数部判定部３０２では、ＱＲＡＭ２１０から受け取ったリニヤデータ（QRAM_d0[23:0]）から、図１４に示すように、反転ビットの位置に応じて、４ビットの指数部データ（LinFltExp[3:0]）を設定する。例えば、リニヤデータのＭＳＢであるサインビット（QRAM_d0[23]）と、２２ビット目以降の各ビットを比較し、２２ビット目が反転、「QRAM_d0[23]≠［22］の場合は、指数部（LinFltExp[3:0]）を、4'hF（４ビットデータを１６進数の‘Ｆ’）にする（図２参照）。
【００９４】
また、この場合に、リニヤデータから１２ビットの仮数部データ（ディザ加算部の４ビットデータを含む）を生成するために、リニヤデータのシフトダウン（Shift Down）量を決定する。指数部（LinFltExp[3:0]）が、4'hFの場合は、シフトダウン（Shift Down）量は１１ビットとなる。以下、同様にして、反転ビットに位置に応じて、指数部（LinFltExp[3:0]）の値が設定され、また、リニヤデータのシフトダウン（Shift Down）又はシフトアップ（Shift up）量が決定される。
【００９５】
指数部判定部３０２により、指数部データとリニヤデータのシフトダウン（Shift Down）又はシフトアップ（Shift up）量が決まると、シフター（Shifter）３０３により、リニヤデータのシフトダウン（Shift Down）又はシフトアップ（Shift up）が行なわれる。
【００９６】
そして、指数部判定部３０２から指数部データ（LinFltExp_d[3:0]）３１1が、ディレイＲＡＭライトデータ生成部３３０と、ディザ加算判定部３２１に送られる。
【００９７】
また、シフター（Shifter）３０３から出力される１２ビットのシフトデータ（LinFltSftOut_d[11:0]）３１２のうち、ＭＳＢ（１１ビット目）のデータがディレイＲＡＭライトデータ生成部３３０に送られ、ＭＳＢ（１１ビット目）〜４ビット目までの８ビットデータがディザ加算判定部３２１に送られ、また、１０ビット〜４ビット目までのデータがディザ加算部３２３に送られる。
【００９８】
ディザ加算判定部３２１では、４ビットの指数部データ（LinFltExp_d[3:0]）３１１と、１２ビットのシフトデータ（LinFltSftOUT_d[11:0]）３１２うちの１１ビット〜４ビット目の８ビットデータ（[11:4]）を基に、ディザ加算を行なうかどうかを判定する。判定結果は、セレクタ３２２に送られる。なお、ディザ加算判定部３２１によるディザ加算を行なうかどうかは、優先度と条件に従い行なわれ、図４において説明した条件により行なわれる。
【００９９】
また、シフター（Shifter）３０３から出力された１２ビットデータの下位４ビット（［3:0］）が加算部３２０に送られる。加算部３２０では、シフター（Shifter）３０３から受け取った下位４ビット（［3:0］）のデータに、ホワイトノイズ（擬似乱数４ビットデータ）を加算する。加算の結果オーバフローが生じキャリーが発生した場合には、データ３１３としてセレクタ３２２に送られる。
【０１００】
セレクタ３２２では、ディザ加算判定部３２１からの信号により、ディザ加算を行なう場合には、データＤ３１３を選択し、ディザ加算を行なわない場合は、データ‘０’を選択し、信号（LinFltAdd2Ci）として、ディザ加算部３２３に出力する。
【０１０１】
ディザ加算部３２３では、１２ビットのシフトデータ（LinFltSftOUT_d[11:0]）３１２の１０ビット〜４ビット目までの７ビットデータ（LinFltSftOUT_d[10:4]）のＬＳＢと、セレクタ３２２からの信号データ（LinFltAdd2Ci）とを加算する。なお、信号データ（LinFltAdd2Ci）は、上位に６ビットの‘０’データを付加した｛6'd0,LinFltAdd2Ci｝の形で７ビットのデータとして加算される。
【０１０２】
そして、ディザ加算部３２３における加算結果は、７ビットのデータ（LinFltAdd2Out[6:0])としてディレイＲＡＭライトデータ生成部３３０に送られる。
【０１０３】
ディレイＲＡＭライトデータ生成部３３０では、指数部データ（LinFltExp_d[3:0]）３１１と、シフトデータ（LinFltSftOUT_d[11:0]）３１２のＭＳＢ（１１ビット目）（LinFltSftOUT_d[11]）と、ディザ加算部３２３からの出力データ（LinFltAdd2Out[6:0])を合成し、ディレイＲＡＭライトデータ（Dram_Wdata[11:0]）を出力する。なお、この場合、ディザ加算部３２３からのキャリー（linFltAdd2Co）がある場合に、ＭＳＢ（LinFltSftOUT_d[11]）の値が反転することがある。
【０１０４】
そして、このディレイＲＡＭライトデータ（Dram_Wdata[11:0]）は、セレクタ３３１を介して、データ（DSP2DRAM_d[23:0]）として、ディレイＲＡＭ３６０に記録される。
【０１０５】
また、図１５は、フロート・リニヤ変換回路の構成例を示す図であり、ディレイＲＡＭ３６０に格納されたフロートデータをリニヤデータに変換する回路の構成例である。
【０１０６】
図１５において、ディレイＲＡＭ３６０から読み込まれた１２ビットのフロートデータＤ（FltLinIn_d[11:0]）３５１は、リニヤデータ生成部３５２に入力される。また、フロートデータＤ（FltLinIn_d[11:0]）３５１の１１ビット目〜８ビット目のデータ（指数部データ）がシフター（Shifter）３５３に送られる。
【０１０７】
リニヤデータ生成部３５２では、指数部データ(in[11:8]）が‘０’（in[11:8]=4'h0）でない場合（反転ビットが有る場合）は、サインビット（入力データinのＭＳＢ（in[7]）またはＭＳＢ（in[7]）を反転した値）と、入力データのＭＳＢ（７ビット目）〜０ビット目までと、１５ビットの‘０’データ（15'h0000）とを合成して、２４ビットのデータ（FltLinSftIn[23:0]）を生成して出力する。
【０１０８】
リニヤデータ生成部３５２から出力された２４ビットのデータ（FltLinSftIn[23:0]）はシフター（Shifter）３５３に送られる。
【０１０９】
シフター（Shifter）３５３では、リニヤデータ生成部３５２から出力された２４ビットのデータ（FltLinShtIn[23:0]）に対して、指数部データ（FltLinIn_d[11:8]）を基に、２４ビットのデータ（FltLinSftIn[23:0]）に対してシフト操作を行い、リニヤデータを復元し、データ（FltLinSftOut[23:0]）として出力する。そして、リニヤデータ（FltLinSftOut[23:0]）は、データ（o_FltLinOut[23:0]）として、ＱＲＡＭ２１０に格納される。
【０１１０】
なお、上記実施の形態では、ディザの加算に関し、仮数部の値に応じて、図４のように場合分けしてから処理を行う方法を示したが、次のように行なうこともできる。
まず、ディザの加算を行なった後に桁上がり検出を行なう（ＭＳＢが反転したか否か）。桁上がりが生じない場合は、加算結果をそのまま使う。
桁上がりが生じた場合は、図４のＤの場合かを判定する。Ｄの場合は、加算結果をそのまま使う。Ｄの場合でない場合は、加算前の値（図１３では、３１２の値）を使うことにすればよい。
【０１１１】
以上、本発明の実施の形態について説明したが、本発明のデータ圧縮装置は、楽音生成装置のディレイＲＡＭにデータを記録する場合に使用されるだけでなく、データを圧縮してメモリに記録する全ての場合に使用することができる。また、本発明のデータ圧縮装置は、ＤＳＰに使用されるだけでなく、他の種々のデータ処理装置に使用できるものである。
【０１１２】
また、本発明のデータ圧縮装置は、上述の図示例にのみ限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変更を加え得ることは勿論である。
【産業上の利用可能性】
【０１１３】
本発明は、電子楽器等の楽音生成装置において、リバーブ、コーラスのようなエフェクトとして音の遅延を利用した効果音を生成する場合に、遅延を実現する大量のメモリを必要とすることなく、小さいサイズのメモリを効果的に使用することができる。
【図面の簡単な説明】
【０１１４】
【図１】本発明によるデータ圧縮装置の構成例を示すブロック図である。
【図２】本発明によるデータ圧縮装置におけるデータ圧縮方法の原理について説明するための図その１である。
【図３】本発明によるデータ圧縮装置におけるデータ圧縮方法の原理について説明するための図その２である。
【図４】ディザ加算の有無について説明するための図である。
【図５】優先度Ａの場合の第１の具体例を示す図である。
【図６】優先度Ａの場合の第２の具体例を示す図である。
【図７】優先度Ｂの場合の第１の具体例を示す図である。
【図８】優先度Ｂの場合の第２の具体例を示す図である。
【図９】優先度Ｃの場合の第１の具体例を示す図である。
【図１０】優先度Ｃの場合の第２の具体例を示す図である。
【図１１】優先度Ｄの場合の第１の具体例を示す図である。
【図１２】優先度Ｄの場合の第２の具体例を示す図である。
【図１３】リニヤデータをフロートデータに変換する回路の構成例を示す図である。
【図１４】指数（シフト量）判定処理の例を示す図である。
【図１５】フロート・リニヤ変換回路の構成例を示す図である。
【符号の説明】
【０１１５】
１１０…リニヤデータ、１２０…フロートデータ、１３０…リニヤデータ、２００…楽音生成装置、２０１…データ入力部、３００…データ圧縮装置、３０１…リニヤ・フロート変換回路、３０２…指数部判定部、３０３…シフター、３２０…加算部、３２１…ディザ加算判定部、３２２…セレクタ、３２３…ディザ加算部、３３０…ディレイＲＡＭライトデータ生成部、３３１…セレクタ、３５０…フロート・リニヤ変換回路、３５２…リニヤデータ生成部、３５３…シフター、３６０…ディレイＲＡＭ、４００…エフェクト効果処理部
【図１】
2006058685.tif 000003
【図２】
2006058685.tif 000004
【図３】
2006058685.tif 000005
【図４】
2006058685.tif 000006
【図５】
2006058685.tif 000007
【図６】
2006058685.tif 000008
【図７】
2006058685.tif 000009
【図８】
2006058685.tif 000010
【図９】
2006058685.tif 000011
【図１０】
2006058685.tif 000012
【図１１】
2006058685.tif 000013
【図１２】
2006058685.tif 000014
【図１３】
2006058685.tif 000015
【図１４】
2006058685.tif 000016
【図１５】
2006058685.tif 000017