(57)【特許請求の範囲】
【請求項１】
それぞれが波形の振幅値を示す波形データ列を、隣り合う波形データの差分値を求めることにより、差分波形データ列を生成するデータ列生成手段と、
前記データ列生成手段により生成された差分波形データ列における差分値の最大値を検出する最大値検出手段と、
前記最大値検出手段が検出した差分値の最大値を用いて算出される係数を、前記波形データ列を構成する各波形データに乗算することにより正規化波形データ列を生成する正規化波形データ列生成手段と、
前記生成された正規化波形データ列の振幅の差分値を算出しながら、当該差分値に対応する仮数部及び指数部からなる浮動小数点データを算出する浮動小数点データ算出手段と、
前記算出された指数部を対象に、当該隣り合う指数部間の差分値が連続する複数の差分値のいずれかとなるように、前記算出された指数部の各値を限定する指数部圧縮手段と、
前記生成された正規化波形データ列の振幅の差分値を算出しながら、当該差分値及び前記指数部圧縮手段からの指数部に対応した仮数部を算出し、前記算出された差分値が所定の値を越える場合は、前記算出された仮数部の値が正の最大値若しくは負の最小値にするとともに、前記指数部圧縮手段からの指数部の値を所定の値に設定する仮数部算出手段と、
前記仮数部算出手段により算出された仮数部の値が正の最大値若しくは負の最小値であるか否か、若しくは前記指数部圧縮手段からの指数部の値が前記所定の値か否か判定する判定手段と、
前記判定手段により、前記仮数部の値が正の最大値若しくは負の最小値であるか、若しくは前記指数部の値が前記所定の値であると判定された場合に、前記係数をその現在値から予め定めた値を減算して前記データ生成手段に中間波形データ列を再生成させ、該再生成させた中間波形データ列を対象に前記正規化波形データ列生成手段による正規化波形生成、前記浮動小数点データ算出手段による浮動小数点データ算出、前記指数部圧縮手段による指数部の各値の限定、及び前記仮数部算出手段による仮数部算出を再度、行わせる制御手段と、
を有し、前記指数部圧縮手段からの指数部及び前記仮数部算出手段からの仮数部とが、前記波形データ列に対応する符号化されたデータとして出力される、ことを特徴とする波形データ符号化装置。
【請求項２】
それぞれが波形の振幅値を示す波形データ列を、隣り合う波形データの差分値を求めることにより、差分波形データ列を生成し、
前記生成された差分波形データ列における差分値の最大値を検出し、
前記検出した差分値の最大値を用いて算出される係数を、前記波形データ列を構成する各波形データに乗算することにより正規化波形データ列を生成し、
前記生成された正規化波形データ列の振幅の差分値を算出しながら、当該差分値に対応する仮数部及び指数部からなる浮動小数点データを算出し、
前記算出された指数部を対象に、当該隣り合う指数部間の差分値が連続する複数の差分値のいずれかとなるように、前記算出された指数部の各値を限定し、
前記生成された正規化波形データ列の振幅の差分値を算出しながら、当該差分値及び前記指数部圧縮手段からの指数部に対応した仮数部を算出して前記算出された差分値が所定の値を越える場合は、前記算出された仮数部の値が正の最大値若しくは負の最小値にするとともに、前記限定された指数部の値を所定の値に設定し、
前記算出された仮数部の値が正の最大値若しくは負の最小値であるか否か、若しくは前記指数部圧縮手段からの指数部の値が前記所定の値か否か判定し、
前記仮数部の値が正の最大値若しくは負の最小値であるか、若しくは前記指数部の値が前記所定の値であると判定された場合に、前記係数をその現在値から予め定めた値を減算して中間波形データ列を再生成させ、該再生成させた中間波形データ列を対象に前記正規化波形生成、前記浮動小数点データ算出、前記指数部の各値の限定、及び前記仮数部算出を再度、行わせ、
前記限定された指数部及び前記算出された仮数部とが、前記波形データ列に対応する符号化されたデータとして出力される、
ことを特徴とする波形データ符号化方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、隣り合う波形データの差分値を仮数部と指数部とからなる浮動小数点データで表現して波形データの符号化を行う圧縮技術に関する。
【０００２】
【従来の技術】
一般に音声波形は連続的に変化する。それは、時系列上で隣り合う音声波形の振幅値（波形データ）の差分値はその振幅値よりも少ないビット数で表現できることを意味する。このことから、その特性に着目し、その差分値を記録することでデータ量を低減させるＡＤＰＣＭ（Adaptive Differential Pulse Code Modulation）符号化方式が創案されている。
【０００３】
振幅値の差分値を記録する場合、あまり高い圧縮率は得られないのが普通である。このため、より高い圧縮率が得られるように、現在では特許文献１、及び２に記載の符号化方式が創案されている。その符号化方式では、隣り合う振幅値の差分値を仮数部と指数部とからなる浮動小数点データで表現してその指数部を連続する複数の差分値で共通化し、各差分値の仮数部、及び隣り合う共通化した指数部の差分値である差分指数部を符号化している。それにより、指数部に係わる符号化後のデータ量を更に低減させている。
【０００４】
【特許文献１】
特開平０７−１６０２６７号公報
【特許文献２】
特開平０７−１９９９９６号公報
【０００５】
【発明が解決しようとする課題】
符号化の際に差分値を算出する場合、当然のことながら、振幅値を適切に復号化できるように（適切に復号化できないと波形が極端に歪むこともある）、その差分値は予め割り当てられた量子化ビット数で表現できることが求められる。つまりオーバーフローを回避することが求められる。このことから、一般的にＡＤＰＣＭ符号化方式では、符号化の対象となる元のデータに係数を乗算してその差分値を量子化ビット数で表現できるように制限することが行われている。
【０００６】
その制限方法では、係数を差分値の最大値に応じた値に設定することで制限を確実に行うことができる。しかし、特許文献１や２に記載された従来の符号化方式では、振幅値の差分値を求め、更にその差分値の指数部の差分指数部を求め、その差分指数部には差分値の指数部よりも少ないビット数を割り当てている。そのように複数段階で差分値を求めて有効ビット数をより少なくさせるような場合、その制限方法を採用しても、２段階目で求めた差分値の量子化ビット数でその差分値を表現できるとは限らない。
【０００７】
元のデータに乗算する係数を十分に小さな値に設定すれば、各段階で求めた差分値をその量子化ビット数で確実に表現させることができる。しかし、それは量子化ビット数で表される値の範囲を実質的に大幅に狭くさせる形でのビットの分解能の低下を招く。これは非常に望ましくない。このようなことから、ビットの分解能の低下を抑えつつ、各段階で求められる差分値をその量子化ビット数で確実に表現できるようにすることが強く望まれていた。
【０００８】
本発明の課題は、複数段階で差分値を算出して符号化を行う場合に、ビットの分解能の低下を抑えつつ、各段階で算出される差分値をそれに割り当てられた量子化ビット数で確実に表現できるようにする技術を提供することにある。
【０００９】
【課題を解決するための手段】
本発明の波形データ符号化装置は、それぞれが波形の振幅値を示す波形データ列を、隣り合う波形データの差分値を求めることにより、差分波形データ列を生成するデータ列生成手段と、前記データ列生成手段により生成された差分波形データ列における差分値の最大値を検出する最大値検出手段と、前記最大値検出手段が検出した差分値の最大値を用いて算出される係数を、前記波形データ列を構成する各波形データに乗算することにより正規化波形データ列を生成する正規化波形データ列生成手段と、前記生成された正規化波形データ列の振幅の差分値を算出しながら、当該差分値に対応する仮数部及び指数部からなる浮動小数点データを算出する浮動小数点データ算出手段と、前記算出された指数部を対象に、当該隣り合う指数部間の差分値が連続する複数の差分値のいずれかとなるように、前記算出された指数部の各値を限定する指数部圧縮手段と、前記生成された正規化波形データ列の振幅の差分値を算出しながら、当該差分値及び前記指数部圧縮手段からの指数部に対応した仮数部を算出し、前記算出された差分値が所定の値を越える場合は、前記算出された仮数部の値が正の最大値若しくは負の最小値にするとともに、前記指数部圧縮手段からの指数部の値を所定の値に設定する仮数部算出手段と、前記仮数部算出手段により算出された仮数部の値が正の最大値若しくは負の最小値であるか否か、若しくは前記指数部圧縮手段からの指数部の値が前記所定の値か否か判定する判定手段と、前記判定手段により、前記仮数部の値が正の最大値若しくは負の最小値であるか、若しくは前記指数部の値が前記所定の値であると判定された場合に、前記係数をその現在値から予め定めた値を減算して前記データ生成手段に中間波形データ列を再生成させ、該再生成させた中間波形データ列を対象に前記正規化波形データ列生成手段による正規化波形生成、前記浮動小数点データ算出手段による浮動小数点データ算出、前記指数部圧縮手段による指数部の各値の限定、及び前記仮数部算出手段による仮数部算出を再度、行わせる制御手段と、を有し、前記指数部圧縮手段からの指数部及び前記仮数部算出手段からの仮数部とが、前記波形データ列に対応する符号化されたデータとして出力される、ことを特徴とする。
【００１０】
本発明の波形データ符号化方法は、それぞれが波形の振幅値を示す波形データ列を、隣り合う波形データの差分値を求めることにより、差分波形データ列を生成し、前記生成された差分波形データ列における差分値の最大値を検出し、前記検出した差分値の最大値を用いて算出される係数を、前記波形データ列を構成する各波形データに乗算することにより正規化波形データ列を生成し、前記生成された正規化波形データ列の振幅の差分値を算出しながら、当該差分値に対応する仮数部及び指数部からなる浮動小数点データを算出し、前記算出された指数部を対象に、当該隣り合う指数部間の差分値が連続する複数の差分値のいずれかとなるように、前記算出された指数部の各値を限定し、前記生成された正規化波形データ列の振幅の差分値を算出しながら、当該差分値及び前記指数部圧縮手段からの指数部に対応した仮数部を算出して前記算出された差分値が所定の値を越える場合は、前記算出された仮数部の値が正の最大値若しくは負の最小値にするとともに、前記限定された指数部の値を所定の値に設定し、前記算出された仮数部の値が正の最大値若しくは負の最小値であるか否か、若しくは前記指数部圧縮手段からの指数部の値が前記所定の値か否か判定し、前記仮数部の値が正の最大値若しくは負の最小値であるか、若しくは前記指数部の値が前記所定の値であると判定された場合に、前記係数をその現在値から予め定めた値を減算して中間波形データ列を再生成させ、該再生成させた中間波形データ列を対象に前記正規化波形生成、前記浮動小数点データ算出、前記指数部の各値の限定、及び前記仮数部算出を再度、行わせ、前記限定された指数部及び前記算出された仮数部とが、前記波形データ列に対応する符号化されたデータとして出力される。
【００１３】
本発明では、それぞれが波形の振幅値を示す波形データ列を、隣り合う波形データの差分値を求めることにより、差分波形データ列を生成し、前記生成された差分波形データ列における差分値の最大値を検出し、前記検出した差分値の最大値を用いて算出される係数を、前記波形データ列を構成する各波形データに乗算することにより正規化波形データ列を生成し、前記生成された正規化波形データ列の振幅の差分値を算出しながら、当該差分値に対応する仮数部及び指数部からなる浮動小数点データを算出し、前記算出された指数部を対象に、当該隣り合う指数部間の差分値が連続する複数の差分値のいずれかとなるように、前記算出された指数部の各値を限定し、前記生成された正規化波形データ列の振幅の差分値を算出しながら、当該差分値及び前記指数部圧縮手段からの指数部に対応した仮数部を算出して前記算出された差分値が所定の値を越える場合は、前記算出された仮数部の値が正の最大値若しくは負の最小値にするとともに、前記限定された指数部の値を所定の値に設定し、前記算出された仮数部の値が正の最大値若しくは負の最小値であるか否か、若しくは前記指数部圧縮手段からの指数部の値が前記所定の値か否か判定し、前記仮数部の値が正の最大値若しくは負の最小値であるか、若しくは前記指数部の値が前記所定の値であると判定された場合に、前記係数をその現在値から予め定めた値を減算して中間波形データ列を再生成させ、該再生成させた中間波形データ列を対象に前記正規化波形生成、前記浮動小数点データ算出、前記指数部の各値の限定、及び前記仮数部算出を再度、行わせ、前記限定された指数部及び前記算出された仮数部とが、前記波形データ列に対応する符号化されたデータとして出力される。それにより、係数は最適化され、ビットの分解能の低下を抑えつつ、波形データの復号化を行う際に不具合が発生するのを回避する形で符号化を行うことが可能となる。
【００１５】
【発明の実施の形態】
以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。
図１は、本実施の形態による波形データ符号化装置の構成図である。その図１を参照して、その構成、及び各部の動作について詳細に説明する。
【００１６】
まず、データ保持部１０３、減算部１０４、最大差分値検出部１０６、除算部１０７、及び乗算部１０８からなる部分では、入力した入力ファイル（波形データ列）１０１を構成する１６ビットリニア波形データ１０２の振幅値の差分値に対して、その差分値を浮動小数点データのダイナミックレンジに合せるための正規化を行う。
【００１７】
即ち、まず減算部１０４において、特には図示しないディスク装置などから入力ファイル１０１のデータとして入力される１６ビットリニア波形データ１０２の現在のサンプル値から、データ保持部１０３に保持されている１サンプル前のサンプル値が減算されることにより、差分波形データ１０５が算出される。
【００１８】
次に、最大差分値検出部１０６は、現在までに保持している差分波形データ１０５のサンプル値と新たに入力された差分波形データ１０５のサンプル値とを比較し、値が大きい方のサンプル値を順次保持してゆくことにより、入力ファイル１０１全体における最大差分値ＤＦｍａｘを検出する。
【００１９】
続いて、除算部１０７は、最大差分値検出部１０６が入力ファイル１０１全体における最大差分値ＤＦｍａｘを検出した後に、浮動小数点データの最大値である浮動小数点最大値Ｄｍａｘ を最大差分値ＤＦｍａｘで除算することにより、その比“Ｄｍａｘ ／ＤＦｍａｘ”を係数として算出する。係数保持部１３５は、その係数を保持する。そして、乗算部１０８は、入力ファイル１０１内の全ての１６ビットリニア波形データ１０２について、各振幅値に係数保持部１３５が保持している係数（＝Ｄｍａｘ ／ＤＦｍａｘ）を乗算する。この結果得られる正規化１６ビットリニア波形データ１０９は、第１中間ファイル１１０のデータとして特には図示しないディスク装置などに保持される。
【００２０】
以上の処理により、第１中間ファイル１１０のデータとして保持される正規化１６ビットリニア波形データ１０９の最大値は、後述する浮動小数点データ算出部１１３によって変換される浮動小数点データにおける最大値Ｄｍａｘ に等しくなり、この結果、後述する浮動小数点データへの変換時に、最大のダイナミックレンジが確保されることになる。
【００２１】
次に、減算部１１１では、第１中間ファイル１１０のデータとして入力される正規化１６ビットリニア波形データ１０９の現在のサンプル値から、後述する固定小数点データ復号化部１１６、加算部１１７、及びデータ保持部１１８によって復号された１サンプル前の復号１６ビットリニア波形データ１１９のサンプル値が減算されることにより、差分波形データ１１２が算出される。
【００２２】
続いて、浮動小数点データ算出部１１３は、固定小数点形式の差分波形データ１１２を浮動小数点形式に変換し、３ビット指数部１１４と７ビット仮数部１１５とからなる浮動小数点データに変換する。
図２は、差分波形データ１１２の浮動小数点データへの変換動作の説明図である。今、図２(a) の例において、２の補数の形式で表現されている１６ビットの差分波形データ１１２では、ビット９〜１５が符号ビットＳとなっている。そして、浮動小数点データ算出部１１３では、それらの符号ビットのうちの最下位のビットと、それに続く下位の６ビットの計７ビットが７ビット仮数部１１５とされる。そして、その７ビット仮数部１１５のうちの最下位のビットの位の値が、３ビット指数部１１４の値とされる。
【００２３】
例えば図２(a) のＡとして示されるように、符号ビットのうちの最下位のビットが９である場合には、図２(b) に示されるように、ビット９〜ビット３が７ビット仮数部１１５とされる。そして、その７ビット仮数部１１５のうちの最下位のビットの位の値３＝０１１（２進表現）が、３ビット指数部１１４の値とされる。
【００２４】
また、例えば図２(a) のＢとして示されるように、符号ビットのうちの最下位のビットが１３である場合には、ビット１３〜ビット７が７ビット仮数部１１５とされる。そして、その７ビット仮数部１１５のうちの最下位のビットの位の値７＝１１１（２進表現）が３ビット指数部１１４の値とされる。更に、例えば図２(a) のＣとして示されるように、符号ビットのうちの最下位のビットが６である場合は、ビット６〜ビット０が７ビット仮数部１１５とされる。そして、その７ビット仮数部１１５のうちの最下位のビットの位の値０＝０００（２進表現）が３ビット指数部１１４の値とされる。
【００２５】
なお、最下位の符号ビットがビット１４以上又はビット５以下の場合には、３ビット指数部１１４の値は７又は０とされる。最下位の符号ビットがビット１４以上の場合には、正しい値が表現できないことになるが、差分波形データ１１２においては、１４ビット以上の有効値はめったに生じないため、事実上、問題はない。
【００２６】
以上のようにして、正規化１６ビットリニア波形データ１０９が差分波形データ１１２に変換され、その差分波形データ１１２のデータ形式が浮動小数点形式に変換された場合、浮動小数点形式への変換過程において変換誤差が生じる。この変換誤差の影響を無くすために、以下に示すようにして、上述の変換誤差が差分波形データ１１２によって表現される差分値に吸収される。
【００２７】
即ち、固定小数点データ復号化部１１６は、浮動小数点データ算出部１１３から出力される３ビット指数部１１４と７ビット仮数部１１５とから、固定小数点形式の差分波形データを復号する。今、７ビット仮数部１１５の値をａ、３ビット指数部１１４の値をｂとすれば、それらに対応する固定小数点形式の差分波形データｃは、ｃ＝ａ×２ｂ  （以降（１）式と呼ぶ）によって復号できる。
【００２８】
次に、加算部１１７とデータ保持部１１８とからなる部分は、固定小数点データ復号化部１１６から出力される固定小数点形式の差分波形データを順次累算することにより、復号１６ビットリニア波形データ１１９を復号する。
このようにしてサンプリング周期毎に算出される誤差を含む復号１６ビットリニア波形データ１１９が、次回のサンプリング周期において、減算部１１１によって正規化１６ビットリニア波形データ１０９から減算されることにより、差分波形データ１１２が算出される。
【００２９】
浮動小数点データ算出部１１３によって算出される３ビット指数部１１４は、第２中間ファイル１２０のデータとして、特には図示しないディスク装置などに保持される。
次に、指数部圧縮部１２１は、第２中間ファイル１２０のデータとして入力される連続する２つの３ビット指数部１１４毎に、値の大きい方のみを選択し、更に、その選択した３ビット指数部１１４のデータ列の各値を、隣り合うデータ間の値の差分値が−１、０、１、２の４値のうちの何れかになるように限定することにより、圧縮３ビット指数部１２２を算出する。即ち、上述の隣り合うデータ間の値の差分値が３以上又は−２以下の場合には、差分値が２又は−１になるように、その隣り合うデータの各値を限定する。
【００３０】
算出された圧縮３ビット指数部１２２は、第３中間ファイル１２３のデータとして特には図示しないディスク装置などに保持される。このようにして、図２(b) →(c) に示されるように、連続する２つの７ビット仮数部１１５の値毎に１つの圧縮３ビット指数部１２２が対応することになり、圧縮３ビット指数部１２２のデータ量は３ビット指数部１１４のデータ量の半分に圧縮される。
【００３１】
ここで、連続する２つの３ビット指数部１１４毎に値の大きい方のみが選択されることにより、最終的に復号されるリニア波形データを元の１６ビットリニア波形データ１０２に追従させることができる。また、圧縮３ビット指数部１２２のデータ列の各値が、隣り合うデータ間の値の差分値が−１、０、１、２の４値のうちの何れかになるように限定される理由は、後述する差分算出部１３２において得られる差分圧縮指数部１３３のビット数２によって表現できる値の数４（＝２２ ）に対応させるためである。今、１６ビットリニア波形データ１０２が差分波形データに変換されることにより、差分波形データに必要なビット数を圧縮することができ、また、差分波形データの値の変化幅は、元の１６ビットリニア波形データ１０２の値の変化幅よりも小さくすることができる。従って、差分波形データの指数部の値の変化幅の値の数は、高々４値程度で十分である。
【００３２】
次に、減算部１２４、仮数部算出部１２６、固定小数点データ復号化部１２８、及びデータ保持部１３０からなる部分によって、７ビット仮数部１２７が算出し直される。
即ち、まず、減算部１２４では、第１中間ファイル１１０のデータとして入力される正規化１６ビットリニア波形データ１０９の現在のサンプル値から、後述する固定小数点データ復号化部１２８、加算部１２９、及びデータ保持部１３０によって復号された１サンプル前の復号１６ビットリニア波形データ１３１のサンプル値が減算されることにより、差分波形データ１２５が算出される。
【００３３】
続いて、仮数部算出部１２６は、固定小数点形式の差分波形データ１２５と第３中間ファイル１２３のデータとして入力される圧縮３ビット指数部１２２とから、７ビット仮数部１２７を算出し直す。即ち、差分波形データ１２５の連続する２つのサンプル値のそれぞれにおいて、それらの入力に同期して１／２のサンプリング速度で入力される１つの圧縮３ビット指数部１２２の値に対応する位から上位方向に７ビット分が抽出され、それらが連続する２つの７ビット仮数部１２７として出力される。
【００３４】
後述する誤差の影響により、差分波形データ１２５の値が浮動小数点最大値Ｄｍａｘ を越える場合があるが、その場合には、圧縮３ビット指数部１２２の値＝３、７ビット仮数部１２７の値＝正の最大値又は負の最小値に設定される。
以上のようにして、仮数部算出部１２６が差分波形データ１２５から７ビット仮数部１２７を算出し直す過程において、誤差が生じる。この誤差は、差分波形データ１１２のデータ形式が固定小数点形式から浮動小数点形式に変換される変換過程において生じる誤差と、指数部が３ビット指数部１１４から圧縮３ビット指数部１２２に圧縮されたことにより生じた誤差の２種類の誤差を含んでいる。この変換誤差の影響を低減させるために、以下に示すようにして、上述の変換誤差が差分波形データ１２５によって表現される差分値に吸収させる。
【００３５】
即ち、固定小数点データ復号化部１２８は、第３中間ファイル１２３のデータとして入力される圧縮３ビット指数部１２２と、仮数部算出部１２６から入力される７ビット仮数部１２７とから、固定小数点形式の差分波形データを復号する。この復号原理は、前述した固定小数点データ復号化部１１６に対応する（１）式で示されるものと同様である。但し、連続する２つの７ビット仮数部１２７に対して１つの圧縮３ビット指数部１２２が対応付けられて演算が行われる。
【００３６】
次に、加算部１２９とデータ保持部１３０とからなる部分は、固定小数点データ復号化部１２８から出力される固定小数点形式の差分波形データを順次累算することにより、復号１６ビットリニア波形データ１３１を復号する。
このようにしてサンプリング周期毎に算出される誤差を含む復号１６ビットリニア波形データ１３１が、次回のサンプリング周期において、減算部１２４によって、正規化１６ビットリニア波形データ１０９から減算されることにより、差分波形データ１２５が算出される。
【００３７】
差分算出部１３２は、第３中間ファイル１２３のデータとして入力される圧縮３ビット指数部１２２の差分値を算出し、２ビット差分圧縮指数部１３３として出力する。この２ビット差分圧縮指数部１３３の値は、前述したように、−１、０、１、２の４値を２ビットのデータによって表現している。
【００３８】
このようにして、図２(c) →(d) に示されるように、連続する２つの７ビット仮数部１２７の値毎に１つの２ビット差分圧縮指数部１３３が対応することになり、指数部のデータ量を３ビットから２ビットに圧縮することができる。
差分算出部１３２から出力される２ビット差分圧縮指数部１３３と、仮数部算出部１２６から出力される７ビット仮数部１２７とが、出力ファイル１３４のデータとして出力される。
【００３９】
上述したようにして、変換誤差の影響を低減させているが、その低減が不十分な場合がある。その場合、２ビット差分圧縮指数部１３３、７ビット仮数部１２７から復号化される１６ビットリニア波形データは不適切なものとなり、ときにはそれによって表される波形が極端に歪むこともある。指数部累算部１３７、及び係数操作部１３６は、そのようなことを回避するために設けたものである。
【００４０】
指数部累算部１３７は、２ビット差分圧縮指数部１３３を累算することにより、圧縮３ビット指数部１２２を復号化する。係数操作部１３６は、復号化された圧縮３ビット指数部１２２、及び７ビット仮数部１２７を入力して、それらが共に適切な値か否か監視し、それらのうちの何れかが適切な値でなかった場合に、即ち圧縮３ビット指数部１２２の値＝３、或いは７ビット仮数部１２７の値＝正の最大値、若しくは負の最小値であった場合に、係数保持部１３５に保持されている係数を操作して、第１中間ファイル１１０の生成からやり直させる。それにより、２ビット差分圧縮指数部１３３、７ビット仮数部１２７から復号化される１６ビットリニア波形データが不適切なものとなるのを回避できる最大の係数が最終的に係数保持部１３５に保持されることになる。このため、係数は最適化される。
【００４１】
係数保持部１３５に保持された係数の操作は、例えばその現在値から予め定めた値を減算することで行われる。そのような操作を行うことにより、差分波形データ１２５の値は全体的に小さな値に抑えられる形となる。当然のことながら、別の方法で操作を行っても良い。
【００４２】
図３(a) に、１６ビットリニア波形データ１０２をデータとして有する入力ファイル１０１のファイルフォーマットを、また、図３(b) に、２ビット差分圧縮指数部１３３と７ビット仮数部１２７とをデータとして有する出力ファイル１３４のファイルフォーマットを、それぞれ示す。
【００４３】
この例の場合、出力ファイル１３４のデータ量を、入力ファイル１０１のデータ量の１／２に圧縮することができた。また、圧縮指数部１３３は２ビットのまま、仮数部１２７を７ビットから３ビット（１ビットは符号ビット）に変更しても復号化された波形に大きな歪みが生じないことが確認できた。このことは、歪みの発生を抑えつつ、ビットの分解能の低下を回避するのに有効であることを意味する。
【００４４】
なお、本実施の形態では、出力ファイル１３４のデータとして出力される２ビット差分圧縮指数部１３３、及び７ビット仮数部１２７を監視して復号化される１６ビットリニア波形データが適切か否か判定するようにしているが、これはその波形データが適切か否か正確に判定するためである。その判定は、精度は低下するが、減算部１２４が出力する差分波形データ１２５、或いはデータ保持部１３０が保持する復号１６ビットリニア波形データ１３１等を監視して行っても良い。本発明は、差分値の指数部の差分指数部ではなく、仮数部の差分値を符号化するような場合にも適用することができる。
【００４５】
図４は、本実施の形態による波形データ復号化装置の構成図であり、電子楽器の楽音波形発生装置の一部などに適用される。その復号化装置は、仮数部１２７を７ビットから３ビットとした図１の符号化装置の出力ファイル１３４に対応させたものである。
【００４６】
入力ファイル４０１は、図１の符号化装置によって生成される出力ファイル１３４に対応している。そして、入力ファイル１０１のデータとして出力される２ビット差分圧縮指数部４０２及び３ビット仮数部４０６は、図１における出力ファイル１３４のデータとして記憶される２ビット差分圧縮指数部１３３及び７ビット仮数部１２７に対応している。
【００４７】
まず、入力ファイル４０１のデータとして入力される２ビット差分圧縮指数部４０２は、加算部４０３とデータ保持部４０５とからなる累算部によってサンプリング速度の１／２のタイミング毎に累算され、それによって復号圧縮３ビット指数部４０４が算出される。このデータは、図１の符号化装置における圧縮３ビット指数部１２２、及び指数部累算部１３７が係数操作部１３６に出力するデータに対応している。
【００４８】
その３ビット仮数部４０６は、加算器４１２によって、乱数発生部４１３が発生した乱数が加算される。その加算は、仮数部４０６の最下位のビットの下位に、乱数の値を示す２ビットを加える形で行われる。加算器４１２は、その２ビットを下位に加えた５ビット仮数部４０６ａを出力する。
【００４９】
次に、固定小数点データ復号化部４０７は、復号圧縮３ビット指数部４０４と、加算器４１２から入力される５ビット仮数部４０６ａとから、サンプリング周期毎に、固定小数点形式の復号差分波形データ４０８を算出する。この復号原理は、図１の符号化装置の説明において前述した固定小数点データ復号化部１１６に対応する（１）式で示されるものと同様である。但し、連続する２つずつの７ビット仮数部４０６に対して１つずつの復号圧縮３ビット指数部４０４が対応付けられて演算が行われる。この復号差分波形データ４０８は、図１の符号化装置の固定小数点データ復号化部１２８から出力される固定小数点形式の差分波形データと同じものである。
【００５０】
そして、加算部４０９とデータ保持部４１１とからなる部分は、固定小数点データ復号化部４０７から出力される復号差分波形データ４０８を順次累算することにより、復号１２ビットリニア波形データ４１０を復号化する。
この復号１２ビットリニア波形データ４１０は、乗算器４１４により、係数保持部４１５に保持された係数と乗算されて復号１２ビットリニア波形データ４１０ａとされる。その係数保持部４１５に保持されている係数とは、図１の係数保持部１３５に最終的に保持されていた係数の逆数（＝ＤＦｍａｘ／Ｄｍａｘ ）である。そのリニア波形データ４１０ａは、必要な信号処理を施された後、Ｄ／Ａ変換器においてアナログ波形データに変換され、楽音信号などして出力される。
【００５１】
上記３ビット仮数部４０６の最下位ビットの下位に更にビットを加えたことにより、見かけ上の分解能は向上する。それにより、そのビットの値が０であっても、そのビットを加えない場合と比較して、復号１２ビットリニア波形データ４１０ａにより発音される楽音の音質が向上することが確認された。加える各ビットの値を乱数で与えた場合には、その楽音の音質がより向上することが確認された。このことから、図１の出力ファイル１３４に入力される仮数部１２７のビット数が小さい場合に有効であることがわかる。
【００５２】
なお、本実施の形態では、３ビット仮数部４０６に２ビットを加えているが、加えるビット数は２ビットに限定されるわけではない。仮数部４０６のビット数などに応じて適宜、選択すれば良い。ビット数を加えることで加算する値は乱数以外のものであっても良い。
【００５３】
【発明の効果】
以上、説明したように本発明は、波形データ列における差分値の最大値を用いて算出される係数を、その波形データ列を構成する各波形データに乗算することにより中間波形データ列を生成して符号化を行う場合に、その符号化されたデータによって復号化される波形データに不具合が発生するか否か監視し、その不具合が発生することが判明すると、その不具合を回避する方向に係数を更新し、中間波形データ列の生成から符号化を再度、行わせる。このため、係数は最適化され、ビットの分解能の低下を抑えつつ、波形データの復号化を行う際に不具合が発生するのを回避する形で符号化を行うことができる。
【００５４】
本発明は、隣り合う波形データの差分値を仮数部と指数部とからなる浮動小数点データで表現して仮数部、及び指数部が符号化された波形データを復号化する場合に、復号化された仮数部に対し、それで表現される最小の絶対値より絶対値が小さい加算値を加算して、加算後の仮数部、及び復号化した指数部を用いて波形データを復号化する。その加算値を仮数部に加算することにより、それの見かけ上の分解能は向上する。その向上により、符号化時に発生した歪みを抑えることができる。
【図面の簡単な説明】
【図１】本実施の形態による波形データ符号化装置の構成図である。
【図２】浮動小数点データへの変換動作の説明図である。
【図３】ファイルフォーマット図である。
【図４】本実施の形態による波形データ復号化装置の構成図である。
【符号の説明】
１０１、４０１    入力ファイル
１０３、１１８、１３０、４１１    データ保持部
１０４、１１１、１２４  減算部
１０６    最大差分値検出部
１０７    除算部
１０８、４１４    乗算部
１１０    第１中間ファイル
１１３    浮動小数点データ算出部
１１６、１２８、４０７    固定小数点データ復号化部
１１７、１２９、４０３、４０９、４１２    加算部
１２０    第２中間ファイル
１２１    指数部圧縮部
１２３    第３中間ファイル
１２６    仮数部算出部
１３２    差分算出部
１３５、４１５    係数保持部
１３６    係数操作部
１３７    指数部累算部
４１３    乱数発生部
【図１】
0004259110.tif 000002
【図２】
0004259110.tif 000003
【図３】
0004259110.tif 000004
【図４】
0004259110.tif 000005