説明

データ圧縮装置、及びデータ圧縮方法

【課題】 音の遅延を利用した効果音を生成する場合に、遅延を実現する大量のメモリを必要とすることなく、小さいサイズのメモリを効果的に使用することができるデータ圧縮装置を提供する。
【解決手段】 リニヤデータ(24ビット)110からフロートデータ(指数部4ビット、仮数部8ビット)120に変換する場合、MSB(サインビット)の次のビット(2SB)からLSBの方向にサインビットと値を順番に比較していく。値が異なるビットが見つかった時、そのビットを「反転ビット」とし、反転ビットの位置により指数部デーを設定する。また、リニヤデータ110を反転ビット以下、12ビットになるようにシフト操作を行い、12ビットの下位4ビットに対してディザ(ホワイトノイズ)を加算し、12ビットの上位8ビットを仮数部とする。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データ圧縮装置、及びデータ圧縮方法に関し、特に、携帯用着信装置や電子楽器等の楽音生成装置において、リバーブ、コーラスのようなエフェクトとして音の遅延を利用した効果音を生成する場合に、遅延を実現する大量のメモリを必要とすることなく、小さいサイズのメモリを効果的に使用することができる、データ圧縮装置、及びデータ圧縮方法に関する。
【背景技術】
【0002】
電子楽器等の楽音生成装置においては、楽曲データにリバーブ(多数の異なったディレイを持ったエコーの組み合わせ)、コーラス(複数の音が同時に鳴っているようにする効果)のようなエフェクトを与えるために、デジタル信号処理用のDSP(Digital Signal Processor)を使用することが多い。
【0003】
このDSPには、音源装置から出力されたPCM(Pulse Code Modulation)コード化された波形データが入力され、DSPによりエフェクト処理等のデジタル信号処理が行われた後に、D/A(デジタル/アナログ)変換されて、スピーカにより楽音が再生されるようになっている。
【0004】
このDSPにおいては、入力された音源装置の出力が数値データとして入力され、一旦、第1のメモリに格納される。そして、エフェクタをかける楽曲データは、遅延させる必要があり、第2のメモリである遅延用メモリ(Delay RAM)に格納させた後、所定の遅延をかけた後、第1メモリに戻し、他の付加的な処理を行った後に、最終的に第1のメモリより、D/A変換器に出力するように構成されている。
【0005】
ところで、リバーブや、コーラスのようなエフェクトは音の遅延を利用した効果音であるため、遅延を実現する大量の遅延用メモリ(Delay RAM)を必要とする。
【0006】
しかしながら、DSPは高速な演算処理を行うことを主たる目的として使用されるもののであり、大量の遅延用メモリ(Delay RAM)として使用できるだけのメモリサイズを有していない。従って、小さいサイズのメモリを効果的に使用できるデータの圧縮方法の提供が望まれていた。
【0007】
なお、本発明に関連する先行技術として、いくつかの発明が開示されている。例えば、音声信号をデジタル処理するための「データ処理装置のデータ処理方法」についての発明が開示されている(例えば、特許文献1参照)。
【0008】
特許文献1の発明では、データ処理装置に2つのDSPを使用した場合に、一般にデジタル/アナログ変換器では固定少数点データ処理を行う機能を有するため、前記DSPの浮動小数点データの送信のためにレジスタは使用されず、回路構成に無駄が生じていた問題の解決を目的としている。
【0009】
また、例えば、加減乗除算を多く含み、かつ、入力変数または変数の組み合わせの数が多いような関数式の計算を、安価な固定小数点用DSPにより実現することができる「演算装置、プログラム及び関数値算出方法」に関する発明が開示されている(例えば、特許文献2参照)。
【0010】
特許文献2の発明では、予め作成したテーブルを参照して関数値を求める方式と、近似関数式を用いて関数値を求める方式とのいずれかを、入力変数値に応じて選択可能にする。これにより、例えば加減乗除算を多く含み、かつ、入力変数または変数の組み合わせの数が多いような関数式の場合には、できるだけ処理ステップ数が少なく、かつ、少ないメモリ領域で関数値を求めることが可能になる値を閾値とすることで、加減乗除算を多く含み、かつ、入力変数または変数の組み合わせの数が多いような関数式の計算を安価な固定小数点用DSPにより実現することを目的としている。
【0011】
しかしながら、本発明は、電子楽器等の楽音生成装置において、リバーブ、コーラスのようなエフェクトとして音の遅延を利用した効果音を生成するために、遅延を実現する大量のメモリを必要とすることなく、小さいサイズのメモリを効果的に使用することができるデータ圧縮方法を提供することを目的としており、上記先行発明とは、発明の目的と利用の形態が異なるものである。
【特許文献1】特開昭63−282800号公報
【特許文献2】特開2002−342308号公報
【発明の開示】
【発明が解決しようとする課題】
【0012】
本発明はこのような問題を解決するためになされたもので、その目的は、リバーブ、コーラスのようなエフェクトとして音の遅延を利用した効果音を生成する場合に、遅延を実現する大量のメモリを必要とすることなく、小さいサイズのメモリを効果的に使用することができる、データ圧縮装置、及びデータ圧縮方法を提供することにある。
【課題を解決するための手段】
【0013】
本発明は上記課題を解決するためになされたものであり、請求項1に記載の発明は、サインビットをMSBとするnビットのリニヤデータを、指数部aビット、仮数部bビットのフロートデータの形式(n>a+b)に圧縮してメモリに格納すると共に、該メモリに格納されたフロートデータをリニヤデータに復元するデータ圧縮装置であって、前記nビットのリニヤデータのMSB(サインビット)の次のビットからLSBの方向にサインビットと値を順番に比較し、前記指数部に数値設定可能な位置(≠0)の範囲内で、異なるビットが見つかった時、そのビットを「反転ビット」とし、サインビットを省略した反転ビット以下のbビットを仮数部とする手段と、前記反転ビットが出現した位置に応じて指数部の値を設定すると共に、反転ビットが出現しなかった場合には値(=0)を指数部に設定する手段と、前記指数部および仮数部生成後に、前記nビットのデータをcビット(n>c)のデータになるようにシフト操作を行い、前記cビットのデータの上位bビットを仮数部とする手段と、フロートデータからリニヤデータに変換する際に、前記指数部を参照し反転ビットがあるかどうかを判断し、反転ビットがある場合は、仮数部のMSBの反転値をリニヤデータのMSBに加えた後に、該MSBの次のビットから前記仮数部のデータを設定すると共に、前記指数部を参照し、該指数部の値に応じたシフト操作を行いリニヤデータを復元する手段とを備えることを特徴とするデータ圧縮装置である。
【0014】
また、請求項2に記載の発明は、請求項1に記載のデータ圧縮装置において、前記指数部の設定範囲の制約により反転ビットがない場合は、リニヤデータの反転ビットのないビット以下を仮数部とし、前記指数部を‘0’に設定する手段と、フロートデータからリニヤデータに変換する際に、反転ビットがない場合は、仮数部のMSBの値をリニヤデータのMSBにコピーした後に、リニヤデータのMSBの次のビットから前記仮数部のデータを設定すると共に、該仮数部データのMSBがリニヤデータ中のbビット目の位置になるようにシフト操作してリニヤデータを復元する手段とを備えることを特徴とする。
【0015】
また、請求項3に記載の発明は、請求項1または請求項2に記載のデータ圧縮装置において、前記cビットのデータの下位dビットに対してディザ(ホワイトノイズ)を加算する手段と、前記ディザを加算する際には、指数部の値、仮数部のMSBの値、及びMSBを除く仮数部の値を基に、ディザ加算を行なうかどうかを判定する手段を備えることを特徴とする。
【0016】
また、請求項4に記載の発明は、サインビットをMSBとする24ビットのリニヤデータを、指数部4ビット、仮数部8ビットのフロートデータの形式に圧縮してメモリに格納すると共に、該メモリに格納されたフロートデータをリニヤデータに復元するデータ圧縮装置であって、前記24ビットのリニヤデータのMSB(サインビット)の次のビットからLSBの方向にサインビットと値を順番に比較し、前記指数部に数値設定可能な位置(1〜15)の範囲内で、値が異なるビットが見つかった時、そのビットを「反転ビット」とし、サインビットを省略した反転ビット以下の8ビットを仮数部とする手段と、前記反転ビットが出現した位置に応じて指数部の値を設定すると共に、反転ビットが出現しなかった場合の値(=0)を指数部に設定する手段と、前記指数部および仮数部生成後に、前記24ビットのデータを12ビットのデータになるようにシフト操作を行い、前記12ビットのデータの上位8ビットを仮数部とする手段と、フロートデータからリニヤデータに変換する際に、前記指数部を参照し反転ビットがあるかどうかを判断し、反転ビットがある場合は、仮数部のMSBの反転値をリニヤデータのMSBに加えた後に、該MSBの次のビットから前記仮数部のデータを設定すると共に、前記指数部を参照し、該指数部の値に応じたシフト操作を行いリニヤデータを復元する手段とを備えることを特徴とするデータ圧縮装置である。
【0017】
また、請求項5に記載の発明は、請求項4に記載のデータ圧縮装置において、前記指数部の設定範囲の制約により反転ビットがない場合は、リニヤデータの8ビット〜1ビット目を仮数部とし、前記指数部を‘0’に設定する手段と、フロートデータからリニヤデータに変換する際に、反転ビットがない場合は、仮数部のMSBの値をリニヤデータのMSBにコピーした後に、リニヤデータのMSBの次のビットから前記仮数部のデータを設定すると共に、該仮数部データのMSBがリニヤデータ中の8ビット目の位置になるようにシフト操作してリニヤデータを復元する手段とを備えることを特徴とする。
【0018】
また、請求項6に記載の発明は、請求項4または請求項5に記載のデータ圧縮装置において、前記12ビットのデータの下位4ビットに対してディザ(ホワイトノイズ)を加算する手段と、前記ディザを加算する際には、指数部の値、仮数部のMSBの値、及びMSBを除く仮数部の値を基に、ディザ加算を行なうかどうかを判定する手段を備えることを特徴とする。
【0019】
また、請求項7に記載の発明は、サインビットをMSBとするnビットのリニヤデータを、指数部aビット、仮数部bビットのフロートデータの形式(n>a+b)に圧縮してメモリに格納すると共に、該メモリに格納されたフロートデータをリニヤデータに復元するデータ圧縮装置におけるデータ圧縮方法であって、前記nビットのリニヤデータのMSB(サインビット)の次のビットからLSBの方向にサインビットと値を順番に比較し、前記指数部に数値設定可能な位置(≠0)の範囲内で、異なるビットが見つかった時、そのビットを「反転ビット」とし、サインビットを省略した反転ビット以下のbビットを仮数部とする手順と、前記反転ビットが出現した位置に応じて指数部の値を設定すると共に、反転ビットが出現しなかった場合には値(=0)を指数部に設定する手順と、前記指数部および仮数部生成後に、前記nビットのデータをcビット(n>c)のデータになるようにシフト操作を行い、前記cビットのデータの上位bビットを仮数部とする手順と、フロートデータからリニヤデータに変換する際に、前記指数部を参照し反転ビットがあるかどうかを判断し、反転ビットがある場合は、仮数部のMSBの反転値をリニヤデータのMSBに加えた後に、該MSBの次のビットから前記仮数部のデータを設定すると共に、前記指数部を参照し、該指数部の値に応じたシフト操作を行いリニヤデータを復元する手順とを含むことを特徴とするデータ圧縮方法である。
【0020】
また、請求項8に記載の発明は、請求項7に記載のデータ圧縮方法において、前記cビットのデータの下位dビットに対してディザ(ホワイトノイズ)を加算する手順と、前記ディザを加算する際には、指数部の値、仮数部のMSBの値、及びMSBを除く仮数部の値を基に、ディザ加算を行なうかどうかを判定する手順とを含むことを特徴とする
【0021】
また、請求項9に記載の発明は、サインビットをMSBとする24ビットのリニヤデータを、指数部4ビット、仮数部8ビットのフロートデータの形式に圧縮してメモリに格納すると共に、該メモリに格納されたフロートデータをリニヤデータに復元するデータ圧縮装置におけるデータ圧縮方法であって、前記24ビットのリニヤデータのMSB(サインビット)の次のビットからLSBの方向にサインビットと値を順番に比較し、前記指数部に数値設定可能な位置(1〜15)の範囲内で、値が異なるビットが見つかった時、そのビットを「反転ビット」とし、サインビットを省略した反転ビット以下の8ビットを仮数部とする手順と、前記反転ビットが出現した位置に応じて指数部の値を設定すると共に、反転ビットが出現しなかった場合の値(=0)を指数部に設定する手順と、前記指数部および仮数部生成後に、前記24ビットのデータを12ビットのデータになるようにシフト操作を行い、前記12ビットのデータの上位8ビットを仮数部とする手順と、フロートデータからリニヤデータに変換する際に、前記指数部を参照し反転ビットがあるかどうかを判断し、反転ビットがある場合は、仮数部のMSBの反転値をリニヤデータのMSBに加えた後に、該MSBの次のビットから前記仮数部のデータを設定すると共に、前記指数部を参照し、該指数部の値に応じたシフト操作を行いリニヤデータを復元する手順とを含むことを特徴とするデータ圧縮方法である。
【0022】
また、請求項10に記載の発明は、請求項9に記載のデータ圧縮方法において、前記12ビットのデータの下位4ビットに対してディザ(ホワイトノイズ)を加算する手順と、前記ディザ(ホワイトノイズ)を加算する際には、指数部の値、仮数部のMSBの値、及びMSBを除く仮数部の値を基に、ディザ加算を行なうかどうかを判定する手順を含むことを特徴とする。
【発明の効果】
【0023】
請求項1および請求項7に記載の発明においては、リニヤデータ(nビット)からフロートデータ(指数部aビット、仮数部bビット)に変換する場合に、MSB(サインビット)の次のビット(2SB)からLSBの方向にサインビットと値を順番に比較していく。値が異なるビットが見つかった時、そのビットを「反転ビット」とし、その位置を指数部に設定する。サインビットと反転ビットは必ず異なる値となる。その為、サインビットは反転ビットの値から推測可能である。そこで、サインビットを省略した反転ビット以下のbビット(例えば、8ビット)を仮数部とすると、仮数部が実質b+1ビット(例えば、9ビット)相当になるというメリットがあり、限られた遅延用メモリを有効に使用できる。また、指数部判定・反転ビット有無判定後、リニヤデータを反転ビット以下、cビット(例えば、12ビット)になるようにシフト操作を行い、cビット(例えば、12ビット)の上位bビット(例えば、8ビット)を仮数部とする。これにより、リニヤデータを、指数部と仮数部データから構成されるフロートデータに変換して効果的に圧縮でき、限られた遅延用メモリを有効に使用できる。
【0024】
また、請求項2に記載の発明においては、指数部の設定範囲の制約により反転ビットが存在しない場合には、リニヤデータの反転ビットのないビット以下を仮数部とし、前記指数部を‘0’に設定するようにしたので、これにより、反転ビットが検出されないリニヤデータについてもフロートデータに変換することができる。
【0025】
また、請求項3および請求項8に記載の発明においては、リニヤデータを反転ビット以下、cビット(例えば、12ビット)になるようにシフト操作を行い、このcビット(例えば、12ビット)のデータの下位dビット(例えば、4ビット)に対してディザ(ホワイトノイズ)を加算する。また、ディザ(ホワイトノイズ)を加算する際には、指数部の値、仮数部のMSBの値、及びMSBを除く仮数部の値を基に、ディザ加算を行なうかどうかを判定するようにする。これにより、仮数部よりも下位のビットの値の大小を確率的に仮数部のLSBに反映した形でフロートデータを生成することができる。また、例えば、ディザ加算した結果、仮数部のMSBが反転し、サインビットが反転する事態の発生を抑止することができる。
【0026】
請求項4および請求項9に記載の発明においては、リニヤデータ(12ビット)からフロートデータ(指数部4ビット、仮数部8ビット)に変換する場合、MSB(サインビット)の次のビット(2SB)からLSBの方向にサインビットと値を順番に比較していく。値が異なるビットが見つかった時、そのビットを「反転ビット」とし、その位置を指数部に設定する。サインビットと反転ビットは必ず異なる値となる。その為、サインビットは反転ビットの値から推測可能である。そこで、サインビットを省略した反転ビット以下の8ビットを仮数部とすると、仮数部が実質9ビット相当になるというメリットがあり、限られた遅延用メモリを有効に使用できる。また、指数部判定・反転ビット有無判定後、リニヤデータを反転ビット以下、12ビットになるようにシフト操作を行い、12ビットの上位8ビットを仮数部とする。これにより、リニヤデータを、指数部と仮数部データから構成されるフロートデータに変換して効果的に圧縮でき、限られた遅延用メモリを有効に使用できる。
【0027】
また、請求項5に記載の発明においては、指数部の設定範囲の制約により反転ビットが存在しない場合には、リニヤデータの8ビット〜1ビット目を仮数部とし、指数部を‘0’に設定するようにしたので、これにより、反転ビットが検出されないリニヤデータについてもフロートデータに変換することができる。
【0028】
また、請求項6および請求項10に記載の発明においては、リニヤデータを反転ビット以下、12ビットになるようにシフト操作を行い、この12ビットのデータの下位4ビットに対してディザ(ホワイトノイズ)を加算する。また、ディザ(ホワイトノイズ)を加算する際には、指数部の値、仮数部のMSBの値、及びMSBを除く仮数部の値を基に、ディザ加算を行なうかどうかを判定する。これにより、これにより、仮数部よりも下位のビットの値の大小を確率的に仮数部のLSBに反映する形でフロートデータを生成することができる。また、例えば、ディザ加算した結果、仮数部のMSBが反転し、サインビットが反転する事態の発生を抑止することができる。
【発明を実施するための最良の形態】
【0029】
次に本発明を実施するための最良の形態について図面を参照して説明する。なお、図中のデータの値の表記方法としては、ハードウェア設計言語(IEEEにおいて規定される)を使用している。
【0030】
図1は、本発明によるデータ圧縮装置の構成例を示すブロック図であり、本発明に直接関係する部分について示したものである。図1に示す例は、楽曲データにリバーブやコーラスなどのエフェクトを与える楽音生成装置200に、本発明によるデータ圧縮装置300を搭載した例を示している。
【0031】
この楽音生成装置200には、音源装置(図示せず)から出力されたPCMコード化された波形データが入力されるデータ入力部201と、入力された音源装置の出力が数値データとし一旦格納されるメモリ(QRAM)210と、楽曲データにエフェクトをかけるエフェクト効果処理部400と、データ圧縮装置300とが設けられている。
【0032】
また、データ圧縮装置300内には、QRAM210に格納された楽曲データを受け取り、リニヤデータをフロートデータに変換するリニヤ・フロート変換回路301と、フロートデータに変換された楽曲データを格納する遅延用メモリであるディレイRAM360と、ディレイRAM360に格納されたフロートデータをリニヤデータに復元するフロート・リニヤ変換回路350とが含まれている。
【0033】
なお、エフェクト効果処理部400、リニヤ・フロート変換回路301、フロート・リニヤ変換回路350における処理は、デジタル信号処理用のDSP(Digital Signal Processor)により行なわれ、また、データ入力部201、QRAM210、およびディレイRAM360もDSP内に搭載される場合がある。
【0034】
図2および図3は、本発明によるデータ圧縮装置におけるデータ圧縮方法の原理について説明するための図であり、リニヤ・フロート変換回路301およびフロート・リニヤ変換回路350における楽曲データの圧縮と復元の原理について説明するための図である。
【0035】
図2および図3に示す例は、24bitのリニヤデータ(楽曲データ)110を、12ビットのフロートデータ(フローティングデータ)120に変換し、さらに、フロートデータ120を、24ビットのリニヤデータ130に再変換(復元)する例を示している。
【0036】
リニヤデータ110は、サインビット(符号ビットS)と23ビットのデータからなる24ビットのリニヤデータ(単に、「リニヤ」ともいう)である。MSB(最上位bit:S)を23ビット目、次のビットを22ビット目、・・・LSBを0ビット目ということにする(以下同じ)。フロートデータ(単に、「フロート」ともいう)120は、指数部4ビット、仮数部8ビットからなる合計12ビットのデータである。
【0037】
そして、リニヤデータ(24bit)からフロートデータ(12bit)への変換は次のようにして行なわれる。
【0038】
まず、MSB(最上位bit:S)の次のビット(22)からLSB(最下位bit:0)の方向に、各ビットの値と、サインビット(S)の値とを順番に比較していく。値が異なるビットが見つかった時、その位置のビットを「反転ビット」と呼ぶことにする。
【0039】
サインビットと反転ビットは必ず異なる値となる。そのため、サインビット(S)は反転ビットの値から推測可能である(反転ビットを反転するとサインビットになる)。そこで、サインビット(S)を省略した反転ビット以下の8ビットを仮数部とする。こうすることで仮数部が実質9ビット相当になるというメリットがあり、限られた遅延用メモリを有効に使用できる。
【0040】
上述した反転ビット有無判定を行なった後に、リニヤデータを、反転ビット以下12ビットになるようにシフト操作を行う(具体例については後述する)。また、シフト操作を行なった12ビットのリニヤデータの下位4ビットに対してディザ(ホワイトノイズ:擬似乱数)を加算し、ディザ加算した12ビットデータの上位8ビットを仮数部とする。
【0041】
なお、ディザ加算はできる場合とできない場合がある。これについては、後述する。
【0042】
また、指数部については、リニヤデータにおいて反転ビットが、MSB(サインビット:S)のすぐ次に現れた場合は、すなわち、反転ビットが22ビット目の場合は、指数部を「指数部=4'b1111」とする。「指数部=4'b1111」の表記はハードウェア設計言語(IEEE)によるものであり、4ビットで構成されるデータを示し、各ビットデータが上位から順番に、‘1'、‘1'、‘1'、‘1'であることを示している。
【0043】
また、リニヤデータ110において反転ビットが、サインビット(S)の2つ後に現れた場合、すなわち、反転ビットが21ビット目の場合は、指数部を「指数部=4'b1110」とする。「指数部=4'b1110」の表記は、4ビットで構成されるデータを示し、各ビットデータが上位から順番に、‘1'、‘1'、‘1'、‘0'であることを示している。
【0044】
ただし、リニヤデータにおいて、MSB(サインビット:S)から8ビット目までサインビットと同じ値が続く場合は、指数部(4ビット)の制約により、これ以上のリニヤデータのビットシフトができないため、反転ビットは存在せず、8〜1ビット目までの8ビットを仮数部とする。また、この場合は「指数部=4'b0000」とする。
【0045】
また、フロートデータ120から、リニヤデータ130に変換する場合は、指数部で反転ビットがあるかどうかを判断し、反転ビットがある(指数部≠4'b0000)場合は、仮数部のMSBの値の反転した値を、変換されるリニヤデータのMSBに加えた後、指数部に応じたビットシフト操作を行い、リニヤデータに戻す。
【0046】
図4は、ディザ加算の有無について説明するための図である。ディザ加算はできる場合とできない場合があり、図4はディザ加算が可能な場合、および禁止する場合の条件を示している。まず仮数部の6ビット目から3ビット目までが全て‘0’か否かを見て、次にMSB、さらに指数部が全て‘0’かを判定して、優先度A、B、C、Dを決める。
【0047】
図4の優先度Aに示す場合は、指数部は任意の値(*)であり、仮数部データのMSB([7](MSB))が任意の値(*)であり、かつ、仮数部の6〜0ビット([6:0])の7ビットデータが、16進数で‘7F'以外(少なくとも1ビットは‘0’)の場合である。
【0048】
この場合は、ディザ加算をしても/しなくても仮数部のMSBには影響を与えないため(MSBまでの桁上がりが生じないため)、フロートデータへの変換、およびリニヤデータへの復元が可能である。従って、ディザ加算が可能である。
【0049】
図5は、優先度Aの場合の第1の具体例を示す図であり、仮数部[bit6:bitO]≠7'blll_1111の場合であり、仮数部のLSBにディザを加算しても、オーバーフローする可能性がない場合である。
【0050】
図5において、24ビットのリニヤデータ(QRam_do)は、サインビット(MSB)が‘0’であり、22ビット目が‘0’であり、21ビット目にサインビットの値と異なる‘1’が出現する。
【0051】
従って、指数部データは(4'b1110)となる。また、リニヤデータ(QRam_do)を10ビット、シフトダウン(Shift Down)し、12ビットのデータ(LinFltSftOut)を得る。この12ビットデータ(LinFltSftOut)の下位4ビットにディザ加算を行い。8ビットのデータ(LinFltAdd2Out)を得る。なお、8ビットのデータ(LinFltAdd2Out)のLSBが、‘0’かまたは‘1’になっているのは、ディザ加算の結果、桁上げが生じることがあるためである。この8ビットのデータ(LinFltAdd2Out)は、仮数部として、指数部データ(4ビット)とともに、12ビットのフロートデータ(DSP2DRAM_do)として、ディレイRAMに書き込まれる。
【0052】
また、このデータを復元する場合には、リニヤデータ(FltLinSftIn)として、フロートデータの仮数部データのMSBの反転値をサインビットとし、それに続いて、8ビットの仮数部データを格納する。そして、指数部データを参照し、その値に応じて仮数部データをシフトダウン(Shift Down)する。この例の場合では、1ビット、シフトダウン(Shift Down)し、リニヤデータ(FltLinSftOut)を復元する。
【0053】
また、図6は、優先度Aの場合の第2の具体例を示す図であり、仮数部[bit6:bitO]≠7'blll_1111の場合であり、仮数部のLSBにディザを加算しても、オーバーフローする可能性がない場合である。
【0054】
図6において、24ビットのリニヤデータ(QRam_do)は、サインビット(MSB)が‘0’であり、22ビット目から9ビット目までが‘0’であり、8ビット目にサインビットの値と異なる‘1’が出現する。
【0055】
従って、指数部データは(4'b0001=4'h1)となる。3ビット、シフトアップ(Shift Up)し、また、3ビットの‘0’データ(3'b000)を付加して、12ビットのデータ(LinFlitSftOut)を得る。この12ビットデータ(LinFltSftOut)の下位4ビットにディザ加算を行い。8ビットのデータ(LinFltAdd2Out)を得る。なお、8ビットのデータ(LinFltAdd2Out)のLSBが、‘0’かまたは‘1’になっているのは、ディザ加算の結果、桁上げが生じることがあるためである。この8ビットのデータ(LinFltAdd2Out)は、仮数部として、指数部データ(4ビット)とともに、12ビットの仮数部データ(DSP2DRAM_do)として、ディレイRAMに書き込まれる。
【0056】
また、このデータを復元する場合には、リニヤデータ(FltLinSftIn)として、フロートデータの仮数部データのMSBの反転値‘0’をサインビットとし、それに続いて、8ビットの仮数部データを格納する。そして、指数部データ(4'h1)を参照し、その値に応じて仮数部データをシフトダウン(Shift Down)する。この例の場合では、14ビット、シフトダウン(Shift Down)し、リニヤデータ(FltLinSftOut)を復元する。
【0057】
図4に戻り、優先度Bの場合は、指数部は任意の値(*)であり、仮数部データのMSB([7](MSB))が‘0’であり、仮数部の6〜0ビット([6:0])の7ビットデータが、16進数で‘7F'(7'h7F)の場合である。この場合はディザ加算を禁止する。
【0058】
これは、ディザ加算した結果、桁上りが生じて仮数部のMSBが反転する場合があるためである。
【0059】
図7は、優先度Bの場合の第1の具体例を示す図であり、仮数部[bit7:bitO]=8'bOlll_1111の場合であり、仮数部のLSBにディザを加算するとオーバーフローする可能性があり、その結果反転ビットへの影響(反転し、リニヤデータに戻す時、符号が反転してしまう)がある場合の例であり、かつ反転ビットがある場合の例である。
【0060】
図7において、24ビットのリニヤデータ(QRam_do)は、サインビット(MSB)が‘1’であり、22ビット目が‘1’であり、21ビット目にサインビットの値と異なる‘0’が出現する。20ビット目から14ビット目の7ビットは全て‘1’である。
【0061】
従って、指数部データは(4'b1110)となる。また、リニヤデータ(QRam_do)を10ビット、シフトダウン(Shift Down)し、12ビットのデータ(LinFltSftOut)を得る。この12ビットデータ(LinFltSftOut)の下位4ビットにディザ加算は行わない。ディザの値が4'b0111以下であれば、加算しても差し支えないが、4'b1000以上であると桁上りが生じてMSBが反転してしまう。例えば、ディザの値が4'b1000であると、加算結果は12'b100000000000となってしまう。また、12ビットデータ(LinFltSftOut)の上位8ビットのデータ(LinFltAdd2Out)は、仮数部として、指数部データ(4ビット)とともに、12ビットのフロートデータ(DSP2DRAM_do)として、ディレイRAMに書き込まれる。
【0062】
また、このデータを復元する場合には、リニヤデータ(FltLinSftIn)として、フロートデータの仮数部データのMSBの反転値‘1’をサインビットとし、それに続いて、8ビットの仮数部データを格納する。そして、指数部データ(4'b1110)を参照し、その値に応じて仮数部データをシフトダウン(Shift Down)する。この例の場合では、1ビット、シフトダウン(Shift Down)し、リニヤデータ(FltLinSftOut)を復元する。
【0063】
また、図8は、優先度Bの場合の第2の具体例を示す図であり、仮数部[bit7:bitO]=8'bOlll_1111の場合であり、仮数部のLSBにディザを加算するとオーバーフローする可能性があり、その結果反転ビットへの影響がある場合の例であり、かつ反転ビットがない場合の例である。
【0064】
図8において、24ビットのリニヤデータ(QRam_do)は、サインビット(MSB)が‘0’であり、22ビット目から8ビット目までが‘0’であり、反転ビットは検出されない。
【0065】
従って、指数部データは(4'b0000)となる。また、リニヤデータ(QRam_do)を、3ビット、シフトアップ(Shift Up)し、また、3ビットのデータ(3'b000)を付加して、12ビットのデータ(LinFltSftOut)を得る。この12ビットデータ(LinFltSftOut)の下位4ビットにディザ加算は行わない。
【0066】
また、12ビットデータ(LinFltSftOut)の上位8ビットのデータ(LinFltAdd2Out)は、仮数部として、指数部データ(4ビット)とともに、12ビットのフロートデータ(DSP2DRAM_do)として、ディレイRAMに書き込まれる。
【0067】
また、このデータを復元する場合には、指数部データが全て‘0’(4'h0)であるので、反転ビットが無い場合であると判定し、リニヤデータ(FltLinSftIn)として、フロートデータの仮数部データのMSBの‘0’をコピーしてサインビットとし、それに続いて、8ビットの仮数部データを格納する。そして、指数部データ(4'b0000)を参照し、その値に応じて仮数部データをシフトダウン(Shift Down)する。この例の場合では、14ビット、シフトダウン(Shift Down)し、リニヤデータ(FltLinSftOut)を復元する。
【0068】
図4に戻り、優先度Cの場合は、指数部が4ビットの全てが‘0’以外(4'h0以外)の値であり、仮数部データのMSB([7](MSB))が‘1’であり、仮数部の6〜0ビット([6:0])の7ビットデータが、16進数で‘7F'(7'h7F)の場合(仮数部の全ビットが1)である。この場合はディザ加算を禁止する。理由は、優先度Bの場合と同じく、ディザ加算した結果の仮数部のMSBが反転し、サインが反転してしまうためである。
【0069】
図9は、優先度Cの場合の第1の具体例を示す図であり、指数部≠4'hO(反転ビットあり)であり、かつ仮数部[bit7:bitO]=8'b1111_1111の場合であり、仮数部のLSBにディザを加算するとオーバーフローする可能性があり、その結果反転ビットへの影響がある場合の例である。
【0070】
図9において、24ビットのリニヤデータ(QRam_do)は、サインビット(MSB)が‘0’であり、22ビット目が‘0’であり、21ビット目にサインビットの値と異なる‘1’が出現する。
【0071】
従って、指数部データは(4'b1110)となる。また、リニヤデータ(QRam_do)を10ビット、シフトダウン(Shift Down)し、12ビットのデータ(LinFltSftOut)を得る。この12ビットデータ(LinFltSftOut)の下位4ビットにディザ加算は行わない。また、12ビットデータ(LinFltSftOut)の上位8ビットのデータ(LinFltAdd2Out)は、仮数部として、指数部データ(4ビット)とともに、12ビットのフロートデータ(DSP2DRAM_do)として、ディレイRAMに書き込まれる。
【0072】
また、このデータを復元する場合には、リニヤデータ(FltLinSftIn)として、フロートデータの仮数部データのMSBの反転値‘0’をサインビットとし、それに続いて、8ビットの仮数部データを格納する。そして、指数部データ(4'b1110)を参照し、その値に応じて仮数部データをシフトダウン(Shift Down)する。この例の場合では、1ビット、シフトダウン(Shift Down)し、リニヤデータ(FltLinSftOut)を復元する。
【0073】
また、図10は、優先度Cの場合の第2の具体例を示す図であり、指数部≠4'b0000(反転ビットあり)であり、かつ仮数部[bit7:bitO]=8'b1111_1111の場合であり、仮数部のLSBにディザを加算するとオーバーフローする可能性があり、その結果反転ビットへの影響がある場合の例である。
【0074】
図10において、24ビットのリニヤデータ(QRam_do)は、サインビット(MSB)が‘0’であり、22ビット目から9ビット目までが‘0’であり、8ビット目に反転ビット‘1’が検出された例である。
【0075】
従って、指数部データは(4'b0001=4'h1)となる。また、リニヤデータ(QRam_do)の8ビット目から0ビット目までを、3ビット、シフトアップ(Shift Up)し、また、3ビットのデータ(3'b000)を付加して12ビットのデータ(LinFltSftOut)を得る。この12ビットデータ(LinFltSftOut)の下位4ビットにディザ加算は行わない。
【0076】
また、12ビットデータ(LinFltSftOut)の上位8ビットのデータ(LinFltAdd2Out)は、仮数部として、指数部データ(4ビット)とともに、12ビットのフロートデータ(DSP2DRAM_do)として、ディレイRAMに書き込まれる。
【0077】
また、このデータを復元する場合には、リニヤデータ(FltLinSftIn)として、フロートデータの仮数部データのMSBの反転値‘0’をサインビットとし、それに続いて、8ビットの仮数部データを格納する。そして、指数部データ(4'b0001)を参照し、その値に応じて仮数部データをシフトダウン(Shift Down)する。この例の場合では、14ビット、シフトダウン(Shift Down)し、リニヤデータ(FltLinSftOut)を復元する。
【0078】
図4に戻り、優先度Dの場合は、指数部が4ビットの16進数で‘0’(4'h0)の値であり、仮数部データのMSB([7](MSB))が‘1’であり、仮数部の6〜0ビット([6:0])の7ビットデータが、16進数で‘7F'(7'h7F)の場合である。この場合はディザ加算を行なう。これは、反転ビットがないため、ディザ加算した時のキャリーをフロート変換した仮数部に残せ、リニヤデータへの復元が可能であるからである。さらにリミットサイクルへの対応ができる(後述)。
【0079】
図11は、優先度Dの場合の第1の具体例を示す図であり、指数部=4'b0000(反転ビットなし)であり、かつ仮数部[bit7:bitO]=8'b1111_1111の場合であり、仮数部のLSBにディザを加算しても桁上りが生じない場合の例である。
【0080】
図11において、24ビットのリニヤデータ(QRam_do)は、サインビット(MSB)が‘1’であり、22ビット目から0ビット目までが‘1’であり、反転ビットが検出されない例である。
【0081】
従って、指数部データは(4'b0000=4'h0)となる。また、リニヤデータ(QRam_do)の8ビット目から0ビット目までを、3ビット、シフトアップ(Shift Up)し、また、3ビットのデータ(3'b000)を付加して12ビットのデータ(LinFltSftOut)を得る。この12ビットデータ(LinFltSftOut)の下位4ビットにディザ加算を行なう。ディザの値は、4'b0111以下の場合である。
【0082】
また、12ビットデータ(LinFltSftOut)の上位8ビットのデータ(LinFltAdd2Out)は、仮数部として、指数部データ(4ビット)とともに、12ビットのフロートデータ(DSP2DRAM_do)として、ディレイRAMに書き込まれる。
【0083】
また、このデータを復元する場合には、リニヤデータ(FltLinSftIn)として、フロートデータの仮数部データのMSBをコピーしてをサインビットとし、それに続いて、8ビットの仮数部データを格納する。そして、指数部データ(4'b0000)を参照し、その値に応じて仮数部データをシフトダウン(Shift Down)する。この例の場合では、14ビット、シフトダウン(Shift Down)し、リニヤデータ(FltLinSftOut)を復元する。
【0084】
また、図12は、優先度Dの場合の第2の具体例を示す図であり、指数部=4'b0000(反転ビットなし)であり、かつ仮数部[bit7:bitO]=8'b1111_1111の場合であり、仮数部のLSBにディザを加算するとオーバーフローする可能性があるが、反転ビットがなく、オーバーフローしたときの取り扱いが可能な場合の例である。また、ディザ加算により、仮数部に‘+1’の場合の例である。
【0085】
24ビットのリニヤデータ(QRam_do)は、サインビット(MSB)が‘1’であり、22ビット目から0ビット目までが‘1’であり、反転ビットが検出されない。
【0086】
従って、指数部データは(4'b0000=4'h0)となる。また、リニヤデータ(QRam_do)の8ビット目から0ビット目までを、3ビット、シフトアップ(Shift Up)し、また、3ビットのデータ(3'b000)を付加して12ビットのデータ(LinFltSftOut)を得る。この12ビットデータ(LinFltSftOut)の下位4ビットにディザ加算を行なうディザ値が4'b1000以上の場合である。この場合は、ディザ加算による桁上げが生じ、仮数部の8ビットが全て‘0’(8'b0000_0000)となる。
【0087】
また、12ビットデータ(LinFltSftOut)の上位8ビットのデータ(LinFltAdd2Out)は、仮数部として、指数部データ(4ビット)とともに、12ビットのフロートデータ(DSP2DRAM_do)として、ディレイRAMに書き込まれる。
【0088】
また、このデータを復元する場合には、リニヤデータ(FltLinSftIn)として、フロートデータの仮数部データのMSBをコピーしてサインビットとし、それに続いて、8ビットの仮数部データを格納する。そして、指数部データ(4'b0000)を参照し、その値に応じて仮数部データをシフトダウン(Shift Down)する。この例の場合では、14ビット、シフトダウン(Shift Down)し、リニヤデータ(FltLinSftOut)を復元する。
【0089】
このように、優先度Dの場合にディザ加算を行なう理由について、補足して説明しておく。図12に示す例の場合は、次のような理由からディザ加算を許可し、絶対値最小の負値(‘0xFFF…')が‘0’に繰り上がることがあるようにしている。
【0090】
第1に、このケースではキャリーが発生しても指数部や反転ビットには影響を与えることがなく、元のリニアデータの値−1が、値0に復元されても影響は小さい。また、回路が煩雑にならないようにすることができるためである。
【0091】
第2に、このケースがリミットサイクルにとって重要である。この点は重要で、このケースでキャリーを禁止すると、リミットサイクルが止まらない可能性がある。リミットサイクルは微少振動や微小直流が残るケースなので、振幅が小さくなってからが特に問題になる。典型的な例として、0.9倍してフィードバックするディレイループがあった場合、入力が停止しディレイの中に負の数の種が残ると、その数は0.9倍されてどんどん‘0’に近付いていく。しかしキャリーを許さないと、データ‘0xFFF…'(値−1)は永久に‘0’にはならない。キャリーを許せばいつか必ず‘0'に収束する。なぜなら、ディザ加算される値(ホワイトノイズの値)が大きいタイミングが必ず生じるからである。すなわち、リミットサイクルの解消ができる。
【0092】
また、図13は、リニヤデータをフロートデータに変換する回路の構成例を示す図である。図13において、QRAM210には、楽曲データが一時的に格納されており、QRAM210からの24ビットのリニヤデータ(QRAM_do[23:0])が、リニヤ・フロート変換回路301の指数判定部302と、シフター(Shifter)303に入力される。
【0093】
指数部判定部302では、QRAM210から受け取ったリニヤデータ(QRAM_d0[23:0])から、図14に示すように、反転ビットの位置に応じて、4ビットの指数部データ(LinFltExp[3:0])を設定する。例えば、リニヤデータのMSBであるサインビット(QRAM_d0[23])と、22ビット目以降の各ビットを比較し、22ビット目が反転、「QRAM_d0[23]≠[22]の場合は、指数部(LinFltExp[3:0])を、4'hF(4ビットデータを16進数の‘F’)にする(図2参照)。
【0094】
また、この場合に、リニヤデータから12ビットの仮数部データ(ディザ加算部の4ビットデータを含む)を生成するために、リニヤデータのシフトダウン(Shift Down)量を決定する。指数部(LinFltExp[3:0])が、4'hFの場合は、シフトダウン(Shift Down)量は11ビットとなる。以下、同様にして、反転ビットに位置に応じて、指数部(LinFltExp[3:0])の値が設定され、また、リニヤデータのシフトダウン(Shift Down)又はシフトアップ(Shift up)量が決定される。
【0095】
指数部判定部302により、指数部データとリニヤデータのシフトダウン(Shift Down)又はシフトアップ(Shift up)量が決まると、シフター(Shifter)303により、リニヤデータのシフトダウン(Shift Down)又はシフトアップ(Shift up)が行なわれる。
【0096】
そして、指数部判定部302から指数部データ(LinFltExp_d[3:0])311が、ディレイRAMライトデータ生成部330と、ディザ加算判定部321に送られる。
【0097】
また、シフター(Shifter)303から出力される12ビットのシフトデータ(LinFltSftOut_d[11:0])312のうち、MSB(11ビット目)のデータがディレイRAMライトデータ生成部330に送られ、MSB(11ビット目)〜4ビット目までの8ビットデータがディザ加算判定部321に送られ、また、10ビット〜4ビット目までのデータがディザ加算部323に送られる。
【0098】
ディザ加算判定部321では、4ビットの指数部データ(LinFltExp_d[3:0])311と、12ビットのシフトデータ(LinFltSftOUT_d[11:0])312うちの11ビット〜4ビット目の8ビットデータ([11:4])を基に、ディザ加算を行なうかどうかを判定する。判定結果は、セレクタ322に送られる。なお、ディザ加算判定部321によるディザ加算を行なうかどうかは、優先度と条件に従い行なわれ、図4において説明した条件により行なわれる。
【0099】
また、シフター(Shifter)303から出力された12ビットデータの下位4ビット([3:0])が加算部320に送られる。加算部320では、シフター(Shifter)303から受け取った下位4ビット([3:0])のデータに、ホワイトノイズ(擬似乱数4ビットデータ)を加算する。加算の結果オーバフローが生じキャリーが発生した場合には、データ313としてセレクタ322に送られる。
【0100】
セレクタ322では、ディザ加算判定部321からの信号により、ディザ加算を行なう場合には、データD313を選択し、ディザ加算を行なわない場合は、データ‘0’を選択し、信号(LinFltAdd2Ci)として、ディザ加算部323に出力する。
【0101】
ディザ加算部323では、12ビットのシフトデータ(LinFltSftOUT_d[11:0])312の10ビット〜4ビット目までの7ビットデータ(LinFltSftOUT_d[10:4])のLSBと、セレクタ322からの信号データ(LinFltAdd2Ci)とを加算する。なお、信号データ(LinFltAdd2Ci)は、上位に6ビットの‘0’データを付加した{6'd0,LinFltAdd2Ci}の形で7ビットのデータとして加算される。
【0102】
そして、ディザ加算部323における加算結果は、7ビットのデータ(LinFltAdd2Out[6:0])としてディレイRAMライトデータ生成部330に送られる。
【0103】
ディレイRAMライトデータ生成部330では、指数部データ(LinFltExp_d[3:0])311と、シフトデータ(LinFltSftOUT_d[11:0])312のMSB(11ビット目)(LinFltSftOUT_d[11])と、ディザ加算部323からの出力データ(LinFltAdd2Out[6:0])を合成し、ディレイRAMライトデータ(Dram_Wdata[11:0])を出力する。なお、この場合、ディザ加算部323からのキャリー(linFltAdd2Co)がある場合に、MSB(LinFltSftOUT_d[11])の値が反転することがある。
【0104】
そして、このディレイRAMライトデータ(Dram_Wdata[11:0])は、セレクタ331を介して、データ(DSP2DRAM_d[23:0])として、ディレイRAM360に記録される。
【0105】
また、図15は、フロート・リニヤ変換回路の構成例を示す図であり、ディレイRAM360に格納されたフロートデータをリニヤデータに変換する回路の構成例である。
【0106】
図15において、ディレイRAM360から読み込まれた12ビットのフロートデータD(FltLinIn_d[11:0])351は、リニヤデータ生成部352に入力される。また、フロートデータD(FltLinIn_d[11:0])351の11ビット目〜8ビット目のデータ(指数部データ)がシフター(Shifter)353に送られる。
【0107】
リニヤデータ生成部352では、指数部データ(in[11:8])が‘0’(in[11:8]=4'h0)でない場合(反転ビットが有る場合)は、サインビット(入力データinのMSB(in[7])またはMSB(in[7])を反転した値)と、入力データのMSB(7ビット目)〜0ビット目までと、15ビットの‘0’データ(15'h0000)とを合成して、24ビットのデータ(FltLinSftIn[23:0])を生成して出力する。
【0108】
リニヤデータ生成部352から出力された24ビットのデータ(FltLinSftIn[23:0])はシフター(Shifter)353に送られる。
【0109】
シフター(Shifter)353では、リニヤデータ生成部352から出力された24ビットのデータ(FltLinShtIn[23:0])に対して、指数部データ(FltLinIn_d[11:8])を基に、24ビットのデータ(FltLinSftIn[23:0])に対してシフト操作を行い、リニヤデータを復元し、データ(FltLinSftOut[23:0])として出力する。そして、リニヤデータ(FltLinSftOut[23:0])は、データ(o_FltLinOut[23:0])として、QRAM210に格納される。
【0110】
なお、上記実施の形態では、ディザの加算に関し、仮数部の値に応じて、図4のように場合分けしてから処理を行う方法を示したが、次のように行なうこともできる。
まず、ディザの加算を行なった後に桁上がり検出を行なう(MSBが反転したか否か)。桁上がりが生じない場合は、加算結果をそのまま使う。
桁上がりが生じた場合は、図4のDの場合かを判定する。Dの場合は、加算結果をそのまま使う。Dの場合でない場合は、加算前の値(図13では、312の値)を使うことにすればよい。
【0111】
以上、本発明の実施の形態について説明したが、本発明のデータ圧縮装置は、楽音生成装置のディレイRAMにデータを記録する場合に使用されるだけでなく、データを圧縮してメモリに記録する全ての場合に使用することができる。また、本発明のデータ圧縮装置は、DSPに使用されるだけでなく、他の種々のデータ処理装置に使用できるものである。
【0112】
また、本発明のデータ圧縮装置は、上述の図示例にのみ限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変更を加え得ることは勿論である。
【産業上の利用可能性】
【0113】
本発明は、電子楽器等の楽音生成装置において、リバーブ、コーラスのようなエフェクトとして音の遅延を利用した効果音を生成する場合に、遅延を実現する大量のメモリを必要とすることなく、小さいサイズのメモリを効果的に使用することができる。
【図面の簡単な説明】
【0114】
【図1】本発明によるデータ圧縮装置の構成例を示すブロック図である。
【図2】本発明によるデータ圧縮装置におけるデータ圧縮方法の原理について説明するための図その1である。
【図3】本発明によるデータ圧縮装置におけるデータ圧縮方法の原理について説明するための図その2である。
【図4】ディザ加算の有無について説明するための図である。
【図5】優先度Aの場合の第1の具体例を示す図である。
【図6】優先度Aの場合の第2の具体例を示す図である。
【図7】優先度Bの場合の第1の具体例を示す図である。
【図8】優先度Bの場合の第2の具体例を示す図である。
【図9】優先度Cの場合の第1の具体例を示す図である。
【図10】優先度Cの場合の第2の具体例を示す図である。
【図11】優先度Dの場合の第1の具体例を示す図である。
【図12】優先度Dの場合の第2の具体例を示す図である。
【図13】リニヤデータをフロートデータに変換する回路の構成例を示す図である。
【図14】指数(シフト量)判定処理の例を示す図である。
【図15】フロート・リニヤ変換回路の構成例を示す図である。
【符号の説明】
【0115】
110…リニヤデータ、120…フロートデータ、130…リニヤデータ、200…楽音生成装置、201…データ入力部、300…データ圧縮装置、301…リニヤ・フロート変換回路、302…指数部判定部、303…シフター、320…加算部、321…ディザ加算判定部、322…セレクタ、323…ディザ加算部、330…ディレイRAMライトデータ生成部、331…セレクタ、350…フロート・リニヤ変換回路、352…リニヤデータ生成部、353…シフター、360…ディレイRAM、400…エフェクト効果処理部

【特許請求の範囲】
【請求項1】
サインビットをMSBとするnビットのリニヤデータを、指数部aビット、仮数部bビットのフロートデータの形式(n>a+b)に圧縮してメモリに格納すると共に、該メモリに格納されたフロートデータをリニヤデータに復元するデータ圧縮装置であって、
前記nビットのリニヤデータのMSB(サインビット)の次のビットからLSBの方向にサインビットと値を順番に比較し、前記指数部に数値設定可能な位置(≠0)の範囲内で、異なるビットが見つかった時、そのビットを「反転ビット」とし、サインビットを省略した反転ビット以下のbビットを仮数部とする手段と、
前記反転ビットが出現した位置に応じて指数部の値を設定すると共に、反転ビットが出現しなかった場合には値(=0)を指数部に設定する手段と、
前記指数部および仮数部生成後に、前記nビットのデータをcビット(n>c)のデータになるようにシフト操作を行い、前記cビットのデータの上位bビットを仮数部とする手段と、
フロートデータからリニヤデータに変換する際に、前記指数部を参照し反転ビットがあるかどうかを判断し、反転ビットがある場合は、仮数部のMSBの反転値をリニヤデータのMSBに加えた後に、該MSBの次のビットから前記仮数部のデータを設定すると共に、前記指数部を参照し、該指数部の値に応じたシフト操作を行いリニヤデータを復元する手段と
を備えることを特徴とするデータ圧縮装置。
【請求項2】
前記指数部の設定範囲の制約により反転ビットがない場合は、リニヤデータの反転ビットのないビット以下を仮数部とし、前記指数部を‘0’に設定する手段と、
フロートデータからリニヤデータに変換する際に、反転ビットがない場合は、仮数部のMSBの値をリニヤデータのMSBにコピーした後に、リニヤデータのMSBの次のビットから前記仮数部のデータを設定すると共に、該仮数部データのMSBがリニヤデータ中のbビット目の位置になるようにシフト操作してリニヤデータを復元する手段と
を備えることを特徴とする請求項1に記載のデータ圧縮装置。
【請求項3】
前記cビットのデータの下位dビットに対してディザ(ホワイトノイズ)を加算する手段と、
前記ディザを加算する際には、指数部の値、仮数部のMSBの値、及びMSBを除く仮数部の値を基に、ディザ加算を行なうかどうかを判定する手段を
備えることを特徴とする請求項1または請求項2に記載のデータ圧縮装置。
【請求項4】
サインビットをMSBとする24ビットのリニヤデータを、指数部4ビット、仮数部8ビットのフロートデータの形式に圧縮してメモリに格納すると共に、該メモリに格納されたフロートデータをリニヤデータに復元するデータ圧縮装置であって、
前記24ビットのリニヤデータのMSB(サインビット)の次のビットからLSBの方向にサインビットと値を順番に比較し、前記指数部に数値設定可能な位置(1〜15)の範囲内で、値が異なるビットが見つかった時、そのビットを「反転ビット」とし、サインビットを省略した反転ビット以下の8ビットを仮数部とする手段と、
前記反転ビットが出現した位置に応じて指数部の値を設定すると共に、反転ビットが出現しなかった場合の値(=0)を指数部に設定する手段と、
前記指数部および仮数部生成後に、前記24ビットのデータを12ビットのデータになるようにシフト操作を行い、前記12ビットのデータの上位8ビットを仮数部とする手段と、
フロートデータからリニヤデータに変換する際に、前記指数部を参照し反転ビットがあるかどうかを判断し、反転ビットがある場合は、仮数部のMSBの反転値をリニヤデータのMSBに加えた後に、該MSBの次のビットから前記仮数部のデータを設定すると共に、前記指数部を参照し、該指数部の値に応じたシフト操作を行いリニヤデータを復元する手段と
を備えることを特徴とするデータ圧縮装置。
【請求項5】
前記指数部の設定範囲の制約により反転ビットがない場合は、リニヤデータの8ビット〜1ビット目を仮数部とし、前記指数部を‘0’に設定する手段と、
フロートデータからリニヤデータに変換する際に、反転ビットがない場合は、仮数部のMSBの値をリニヤデータのMSBにコピーした後に、リニヤデータのMSBの次のビットから前記仮数部のデータを設定すると共に、該仮数部データのMSBがリニヤデータ中の8ビット目の位置になるようにシフト操作してリニヤデータを復元する手段と
を備えることを特徴とする請求項4に記載のデータ圧縮装置。
【請求項6】
前記12ビットのデータの下位4ビットに対してディザ(ホワイトノイズ)を加算する手段と、
前記ディザを加算する際には、指数部の値、仮数部のMSBの値、及びMSBを除く仮数部の値を基に、ディザ加算を行なうかどうかを判定する手段を
備えることを特徴とする請求項4または請求項5に記載のデータ圧縮装置。
【請求項7】
サインビットをMSBとするnビットのリニヤデータを、指数部aビット、仮数部bビットのフロートデータの形式(n>a+b)に圧縮してメモリに格納すると共に、該メモリに格納されたフロートデータをリニヤデータに復元するデータ圧縮装置におけるデータ圧縮方法であって、
前記nビットのリニヤデータのMSB(サインビット)の次のビットからLSBの方向にサインビットと値を順番に比較し、前記指数部に数値設定可能な位置(≠0)の範囲内で、異なるビットが見つかった時、そのビットを「反転ビット」とし、サインビットを省略した反転ビット以下のbビットを仮数部とする手順と、
前記反転ビットが出現した位置に応じて指数部の値を設定すると共に、反転ビットが出現しなかった場合には値(=0)を指数部に設定する手順と、
前記指数部および仮数部生成後に、前記nビットのデータをcビット(n>c)のデータになるようにシフト操作を行い、前記cビットのデータの上位bビットを仮数部とする手順と、
フロートデータからリニヤデータに変換する際に、前記指数部を参照し反転ビットがあるかどうかを判断し、反転ビットがある場合は、仮数部のMSBの反転値をリニヤデータのMSBに加えた後に、該MSBの次のビットから前記仮数部のデータを設定すると共に、前記指数部を参照し、該指数部の値に応じたシフト操作を行いリニヤデータを復元する手順と
を含むことを特徴とするデータ圧縮方法。
【請求項8】
前記cビットのデータの下位dビットに対してディザ(ホワイトノイズ)を加算する手順と、
前記ディザを加算する際には、指数部の値、仮数部のMSBの値、及びMSBを除く仮数部の値を基に、ディザ加算を行なうかどうかを判定する手順と
を含むことを特徴とする請求項7に記載のデータ圧縮方法。
【請求項9】
サインビットをMSBとする24ビットのリニヤデータを、指数部4ビット、仮数部8ビットのフロートデータの形式に圧縮してメモリに格納すると共に、該メモリに格納されたフロートデータをリニヤデータに復元するデータ圧縮装置におけるデータ圧縮方法であって、
前記24ビットのリニヤデータのMSB(サインビット)の次のビットからLSBの方向にサインビットと値を順番に比較し、前記指数部に数値設定可能な位置(1〜15)の範囲内で、値が異なるビットが見つかった時、そのビットを「反転ビット」とし、サインビットを省略した反転ビット以下の8ビットを仮数部とする手順と、
前記反転ビットが出現した位置に応じて指数部の値を設定すると共に、反転ビットが出現しなかった場合の値(=0)を指数部に設定する手順と、
前記指数部および仮数部生成後に、前記24ビットのデータを12ビットのデータになるようにシフト操作を行い、前記12ビットのデータの上位8ビットを仮数部とする手順と、
フロートデータからリニヤデータに変換する際に、前記指数部を参照し反転ビットがあるかどうかを判断し、反転ビットがある場合は、仮数部のMSBの反転値をリニヤデータのMSBに加えた後に、該MSBの次のビットから前記仮数部のデータを設定すると共に、前記指数部を参照し、該指数部の値に応じたシフト操作を行いリニヤデータを復元する手順と
を含むことを特徴とするデータ圧縮方法。
【請求項10】
前記12ビットのデータの下位4ビットに対してディザ(ホワイトノイズ)を加算する手順と、
前記ディザ(ホワイトノイズ)を加算する際には、指数部の値、仮数部のMSBの値、及びMSBを除く仮数部の値を基に、ディザ加算を行なうかどうかを判定する手順を
含むことを特徴とする請求項9に記載のデータ圧縮方法。


【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate