(57)【要約】【課題】頻度分析に基づかない新規なデータ圧縮技術を提供する。【解決手段】データ圧縮伸張装置は、データの値を表すために必要な必要ビット数に基づいて、複数の周波数領域のデータを並べたデータ列を区切って複数のブロックに分割する。具体的には、データ圧縮伸張装置は、次のデータの必要ビット数が現在のブロック内の各データのビット数と等しい場合は、次のデータを現在のブロックに含め、異なる場合は、分割判定処理により当該次のデータを現在のブロックと分割するか否かが判定される。次のデータを分割しないと判定された場合は、次のデータを現在のブロックに含め、分割すると判定された場合は、次のデータを次のブロックに含める。そして、生成されたブロック内の各データについて必要なビットを残して不要なビットを削減することにより、各ブロックを圧縮する。【選択図】図８
2014103496.tif 000002
【特許請求の範囲】
【請求項１】
複数の入力データを圧縮して圧縮データを生成するデータ圧縮装置であって、
前記入力データの値を表すために必要なビット数を示す必要ビット数に基づいて、前記複数の入力データのそれぞれが複数のブロックのいずれかに含まれるように、当該複数のブロックを生成するブロック生成手段と、
前記ブロック生成手段により生成されたブロックごとに当該ブロックに含まれるデータを圧縮することにより、前記圧縮データを生成するデータ圧縮手段とを備える、データ圧縮装置。
【請求項２】
前記ブロック生成手段は、前記必要ビット数に基づいて、前記複数の入力データを並べたデータ列を区切って前記複数のブロックを生成する、請求項１に記載のデータ圧縮装置。
【請求項３】
前記データ圧縮手段は、ブロックに含まれる入力データの値を表すために必要なビットを残して不要なビットを削減することにより、当該ブロックの各データを圧縮する、請求項１又は２に記載のデータ圧縮装置。
【請求項４】
前記ブロック生成手段は、隣り合う入力データの前記必要ビット数が同じ場合、当該隣り合う入力データを同じブロックに含める、請求項１から３の何れかに記載のデータ圧縮装置。
【請求項５】
前記ブロック生成手段は、隣り合う入力データの前記必要ビット数が異なる場合であっても、所定条件が満たされている場合に、当該隣り合うデータを同じブロックに含める、請求項４に記載のデータ圧縮装置。
【請求項６】
前記ブロック生成手段は、隣り合う入力データを１つのブロックに含めて当該１つのブロックを生成するよりも、隣り合う入力データを別のブロックに含めて２つのブロックを生成する方が圧縮後のデータサイズが小さくなる場合、当該隣り合う入力データを別のブロックに含めて２つのブロックを生成する、請求項１から５の何れかに記載のデータ圧縮装置。
【請求項７】
前記データ圧縮手段は、前記必要ビット数に基づいて、前記圧縮データを伸張する際に用いられる伸張情報をブロックごとに生成し、当該伸張情報を含む前記圧縮データを生成する、請求項１から６の何れかに記載のデータ圧縮装置。
【請求項８】
前記データ圧縮手段は、前記伸張情報として、ブロック内の各入力データのビット数を示すビット情報を、前記必要ビット数に基づいて設定し、ブロック内の各入力データのビット数を前記ビット情報が示すビット数に圧縮することにより、前記圧縮データを生成する、請求項７に記載のデータ圧縮装置。
【請求項９】
前記ブロック生成手段は、あるブロックの隣の入力データの前記必要ビット数と、当該あるブロックの前記ビット情報が示すビット数との差分に基づいて、当該隣の入力データを当該あるブロックに含めて１つのブロックを生成するか、又は当該隣の入力データを別のブロックに含めて２つのブロックを生成するかを判定する、請求項８に記載のデータ圧縮装置。
【請求項１０】
前記ブロック生成手段は、前記あるブロックの隣の入力データを前記あるブロックに含めて１つのブロックを生成するか、又は当該隣の入力データを前記別のブロックに含めて２つのブロックを生成するかを、前記伸張情報のサイズにも基づいて判定する、請求項９に記載のデータ圧縮装置。
【請求項１１】
前記ブロック生成手段は、前記隣の入力データの前記必要ビット数が前記あるブロックの前記ビット情報が示すビット数よりも大きい場合において、前記差分と前記あるブロックに含まれる入力データの数との積が前記伸張情報のサイズよりも小さい場合、前記あるブロックに前記隣の入力データを含める、請求項１０に記載のデータ圧縮装置。
【請求項１２】
前記ブロック生成手段は、前記隣の入力データの前記必要ビット数が前記あるブロックの前記ビット情報が示すビット数よりも大きい場合において、前記あるブロックに前記隣の入力データを含める場合、前記あるブロックの前記ビット情報が示すビット数を増加させる、請求項１１に記載のデータ圧縮装置。
【請求項１３】
前記ブロック生成手段は、前記隣の入力データの前記必要ビット数が前記あるブロックの前記ビット情報が示すビット数よりも小さい場合において、前記差分と前記別のブロックに含まれる入力データの数との積が前記伸張情報のサイズよりも小さい場合、前記あるブロックに前記隣の入力データを含める、請求項９から１２の何れかに記載のデータ圧縮装置。
【請求項１４】
前記データ圧縮手段によるデータ圧縮の前に、前記複数の入力データのビット数を予め定められた値に削減するビット数削減手段をさらに備える、請求項１から１３の何れかに記載のデータ圧縮装置。
【請求項１５】
元データを対数化して前記入力データを生成する対数処理手段をさらに備え、
前記ブロック生成手段は、前記対数化処理手段によって生成された前記入力データのそれぞれが複数のブロックのいずれかに含まれるように、当該複数のブロックを生成する、請求項１から１４の何れかに記載のデータ圧縮装置。
【請求項１６】
前記複数の入力データは、音声信号をデジタル変換して得られる音声データである、請求項１から１５の何れかに記載のデータ圧縮装置。
【請求項１７】
音声信号を所定の周期でサンプリングして得られた複数の時間領域のデータを複数の周波数領域のデータに変換する変換手段をさらに備え、
前記ブロック生成手段は、前記複数の入力データとして、前記複数の周波数領域のデータのそれぞれが複数のブロックのいずれかに含まれるように、当該複数のブロックを生成する、請求項１から１６の何れかに記載のデータ圧縮装置。
【請求項１８】
伸張対象データを伸張するデータ伸張装置であって、
前記伸張対象データは、複数の圧縮されたデータを含むブロックと、当該ブロックに含まれる各データのビット数を示す情報とを含み、
前記各データのビット数を示す情報に基づいて、前記ブロックに含まれる複数の圧縮されたデータを抽出する抽出手段と、
前記抽出手段によって抽出された前記圧縮されたデータを伸張する伸張手段とを備える、データ伸張装置。
【請求項１９】
複数の入力データを圧縮して圧縮データを生成するデータ圧縮装置のコンピュータによって実行されるデータ圧縮プログラムであって、前記コンピュータを、
前記入力データの値を表すために必要なビット数を示す必要ビット数に基づいて、前記複数の入力データのそれぞれが複数のブロックのいずれかに含まれるように、当該複数のブロックを生成するブロック生成手段と、
前記ブロック生成手段により生成されたブロックごとに当該ブロックに含まれるデータを圧縮することにより、前記圧縮データを生成するデータ圧縮手段として機能させる、データ圧縮プログラム。
【請求項２０】
複数の入力データを圧縮して圧縮データを生成するデータ圧縮システムであって、
前記入力データの値を表すために必要なビット数を示す必要ビット数に基づいて、前記複数の入力データのそれぞれが複数のブロックのいずれかに含まれるように、当該複数のブロックを生成するブロック生成手段と、
前記ブロック生成手段により生成されたブロックごとに当該ブロックに含まれるデータを圧縮することにより、前記圧縮データを生成するデータ圧縮手段とを備える、データ圧縮システム。
【請求項２１】
複数の入力データを圧縮して圧縮データを生成するデータ圧縮システムにおいて行われるデータ圧縮方法であって、
前記入力データの値を表すために必要なビット数を示す必要ビット数に基づいて、前記複数の入力データのそれぞれが複数のブロックのいずれかに含まれるように、当該複数のブロックを生成するブロック生成ステップと、
前記ブロック生成ステップにおいて生成されたブロックごとに当該ブロックに含まれるデータを圧縮することにより、前記圧縮データを生成するデータ圧縮ステップとを含む、データ圧縮方法。
【請求項２２】
伸張対象データを伸張するデータ伸張システムであって、
前記伸張対象データは、複数の圧縮されたデータを含むブロックと、当該ブロックに含まれる各データのビット数を示す情報とを含み、
前記各データのビット数を示す情報に基づいて、前記ブロックに含まれる複数の圧縮されたデータを抽出する抽出手段と、
前記抽出手段によって抽出された前記圧縮されたデータを伸張する伸張手段とを備える、データ伸張システム。
【請求項２３】
複数の入力データを圧縮して圧縮データを生成するとともに、当該圧縮データを伸張するデータ圧縮伸張システムであって、
前記入力データの値を表すために必要なビット数を示す必要ビット数に基づいて、前記複数の入力データのそれぞれが複数のブロックのいずれかに含まれるように、当該複数のブロックを生成するブロック生成手段と、
前記ブロック生成手段により生成されたブロックごとに当該ブロックに含まれるデータを圧縮するとともに、ブロックに含まれる各データのビット数を示す情報を生成することにより、前記圧縮データを生成するデータ圧縮手段と、
前記各データのビット数を示す情報に基づいて、前記ブロックに含まれる複数の圧縮されたデータを抽出する抽出手段と、
前記抽出手段によって抽出された前記圧縮されたデータを伸張する伸張手段とを備える、データ圧縮伸張システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ圧縮装置、データ圧縮プログラム、データ圧縮システム、データ圧縮方法、データ伸張装置、およびデータ圧縮伸張システムに関する。
【背景技術】
【０００２】
従来、例えば入力された被圧縮データに対する圧縮アルゴリズムとしてハフマン符号化が用いられることがある。（例えば、特許文献１）。ハフマン符号化では、情報の頻度分析を行い、出現率が高い情報に短い符号を割り当て、出現率の低い情報には長い符号を割り当てることにより、被圧縮データを圧縮する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００８−１０７６１５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来の技術では圧縮の際に頻度分析を行う必要があり、例えば圧縮の際の処理負荷や圧縮の効率性という点においては改善の余地があった。
【０００５】
それ故、本発明の目的は、頻度分析に基づかない新規なデータ圧縮技術を提供することである。
【課題を解決するための手段】
【０００６】
本発明は、上記の課題を解決するために、以下の構成を採用した。
【０００７】
本発明は、複数の入力データを圧縮して圧縮データを生成するデータ圧縮装置である。データ圧縮装置は、ブロック生成手段と、データ圧縮手段とを備える。ブロック生成手段は、上記入力データの値を表すために必要なビット数を示す必要ビット数に基づいて、上記複数の入力データのそれぞれが複数のブロックのいずれかに含まれるように、当該複数のブロックを生成する。データ圧縮手段は、上記ブロック生成手段により生成されたブロックごとに当該ブロックに含まれるデータを圧縮することにより、上記圧縮データを生成する。
【０００８】
上記によれば、上記必要ビット数に基づいて、圧縮対象の複数の入力データをそれぞれ複数のブロックに分割し、分割したブロックごとに圧縮することができる。これにより、例えば効率よく圧縮対象のデータを圧縮することができる。
【０００９】
また、他の構成では、上記ブロック生成手段は、上記必要ビット数に基づいて、上記複数の入力データを並べたデータ列を区切って上記複数のブロックを生成してもよい。
【００１０】
上記によれば、データ列のうちの隣り合う入力データを１のブロックに含めて複数のブロックを生成することができ、ブロックごとにデータを圧縮することができる。
【００１１】
また、他の構成では、上記データ圧縮手段は、ブロックに含まれる入力データの値を表すために必要なビットを残して不要なビットを削減することにより、当該ブロックの各データを圧縮してもよい。
【００１２】
上記によれば、必要なビットを残して不要なビットを削減することにより、データを圧縮することができる。これにより、圧縮対象のデータを可逆的に圧縮することができる。
【００１３】
また、他の構成では、上記ブロック生成手段は、隣り合う入力データの上記必要ビット数が同じ場合、当該隣り合う入力データを同じブロックに含めてもよい。
【００１４】
上記によれば、入力データの値を表すために必要なビット数が同じ隣り合う入力データを同じブロックに含めて圧縮することができ、効率よくデータを圧縮することができる。
【００１５】
また、他の構成では、上記ブロック生成手段は、隣り合う入力データの上記必要ビット数が異なる場合であっても、所定条件が満たされている場合に、当該隣り合うデータを同じブロックに含めてもよい。
【００１６】
上記によれば、隣り合う入力データの必要ビット数が異なる場合であっても所定条件が満たされている場合は、当該隣り合うデータを同じブロックに統合することができる。これにより、ブロックの数が増大しすぎることを防止することができる。
【００１７】
また、他の構成では、上記ブロック生成手段は、隣り合う入力データを１つのブロックに含めて当該１つのブロックを生成するよりも、隣り合う入力データを別のブロックに含めて２つのブロックを生成する方が圧縮後のデータサイズが小さくなる場合、当該隣り合う入力データを別のブロックに含めて２つのブロックを生成してもよい。
【００１８】
上記によれば、圧縮後のデータサイズが小さくなるように複数のブロックを生成することができ、データの圧縮率を高めることができる。
【００１９】
また、他の構成では、上記データ圧縮手段は、上記必要ビット数に基づいて、上記圧縮データを伸張する際に用いられる伸張情報をブロックごとに生成し、当該伸張情報を含む上記圧縮データを生成してもよい。
【００２０】
上記によれば、必要ビット数に基づいて複数のブロックを生成するとともに、データを伸張する際に用いられる伸張情報をブロックごとに生成することができる。
【００２１】
また、他の構成では、上記データ圧縮手段は、上記伸張情報として、ブロック内の各入力データのビット数を示すビット情報を、上記必要ビット数に基づいて設定し、ブロック内の各入力データのビット数を上記ビット情報が示すビット数に圧縮することにより、上記圧縮データを生成してもよい。
【００２２】
上記によれば、ブロック内の各データをビット情報が示すビット数に圧縮することができる。
【００２３】
また、他の構成では、上記ブロック生成手段は、あるブロックの隣の入力データの上記必要ビット数と、当該あるブロックの上記ビット情報が示すビット数との差分に基づいて、当該隣の入力データを当該あるブロックに含めて１つのブロックを生成するか、又は当該隣の入力データを別のブロックに含めて２つのブロックを生成するかを判定してもよい。
【００２４】
上記によれば、ブロックを生成する際に、あるブロックの隣の入力データの必要ビット数と、当該あるブロックのビット情報が示すビット数との差分に基づいて、当該隣の入力データを当該あるブロックに含めるか否かを判定することができる。
【００２５】
また、他の構成では、上記ブロック生成手段は、上記あるブロックの隣の入力データを上記あるブロックに含めて１つのブロックを生成するか、又は当該隣の入力データを上記別のブロックに含めて２つのブロックを生成するかを、上記伸張情報のサイズにも基づいて判定してもよい。
【００２６】
上記によれば、伸張情報のサイズにも基づいて、上記あるブロックにその隣の入力データを含めるか否かを判定することができる。
【００２７】
また、他の構成では、上記ブロック生成手段は、上記隣の入力データの上記必要ビット数が上記あるブロックの上記ビット情報が示すビット数よりも大きい場合において、上記差分と上記あるブロックに含まれる入力データの数との積が上記伸張情報のサイズよりも小さい場合、上記あるブロックに上記隣の入力データを含めてもよい。
【００２８】
上記によれば、あるブロックの隣の入力データを当該あるブロックに含めることができ、当該隣の入力データを別のブロックに分割して２つのブロックを生成する場合よりも圧縮後のサイズを小さくすることができる。
【００２９】
また、他の構成では、上記ブロック生成手段は、上記隣の入力データの上記必要ビット数が上記あるブロックの上記ビット情報が示すビット数よりも大きい場合において、上記あるブロックに上記隣の入力データを含める場合、上記あるブロックの上記ビット情報が示すビット数を増加させてもよい。
【００３０】
上記によれば、ビット数を増加させることによって、上記あるブロックに含められる隣の入力データを伸張する際に、当該隣の入力データを正確に復元することができる。
【００３１】
また、他の構成では、上記ブロック生成手段は、上記隣の入力データの上記必要ビット数が上記あるブロックの上記ビット情報が示すビット数よりも小さい場合において、上記差分と上記別のブロックに含まれる入力データの数との積が上記伸張情報のサイズよりも小さい場合、上記あるブロックに上記隣の入力データを含めてもよい。
【００３２】
上記によれば、あるブロックの隣の入力データを当該あるブロックに含めることができ、当該隣の入力データを別のブロックに分割して２つのブロックを生成する場合よりも圧縮後のサイズを小さくすることができる。
【００３３】
また、他の構成では、上記データ圧縮装置は、上記データ圧縮手段によるデータ圧縮の前に、上記複数の入力データのビット数を予め定められた値に削減するビット数削減手段をさらに備えてもよい。
【００３４】
上記によれば、上記データ圧縮手段によるデータの圧縮の前に、入力データをある程度圧縮することができる。
【００３５】
また、他の構成では、上記データ圧縮装置は、元データを対数化して上記入力データを生成する対数処理手段をさらに備えてもよい。上記ブロック生成手段は、上記対数化処理手段によって生成された上記入力データのそれぞれが複数のブロックのいずれかに含まれるように、当該複数のブロックを生成する。
【００３６】
上記によれば、対数化された入力データを上記データ圧縮手段による圧縮対象のデータとすることができる。対数化されたデータは元データよりも取り得る値の範囲が狭くなる傾向にある。このため、上記データ圧縮手段による圧縮をより効果的なものとすることができる。
【００３７】
また、他の構成では、上記複数の入力データは、音声信号をデジタル変換して得られる音声データであってもよい。
【００３８】
上記によれば、音声データを圧縮することができる。
【００３９】
また、他の構成では、上記データ圧縮装置は、音声信号を所定の周期でサンプリングして得られた複数の時間領域のデータを複数の周波数領域のデータに変換する変換手段をさらに備えてもよい。上記ブロック生成手段は、上記複数の入力データとして、上記複数の周波数領域のデータのそれぞれが複数のブロックのいずれかに含まれるように、当該複数のブロックを生成する。
【００４０】
上記によれば、音声信号を圧縮することができる。
【００４１】
本発明の別の一例は、伸張対象データを伸張するデータ伸張装置である。上記伸張対象データは、複数の圧縮されたデータを含むブロックと、当該ブロックに含まれる各データのビット数を示す情報とを含む。データ伸張装置は、抽出手段と、伸張手段とを備える。抽出手段は、上記各データのビット数を示す情報に基づいて、上記ブロックに含まれる複数の圧縮されたデータを抽出する。伸張手段は、上記抽出手段によって抽出された上記圧縮されたデータを伸張する。
【００４２】
本発明の別の一例は、複数の入力データを圧縮して圧縮データを生成するとともに、当該圧縮データを伸張するデータ圧縮伸張システムである。データ圧縮伸張システムは、ブロック生成手段と、データ圧縮手段と、抽出手段と、伸張手段とを備える。ブロック生成手段は、上記入力データの値を表すために必要なビット数を示す必要ビット数に基づいて、上記複数の入力データのそれぞれが複数のブロックのいずれかに含まれるように、当該複数のブロックを生成する。データ圧縮手段は、上記ブロック生成手段により生成されたブロックごとに当該ブロックに含まれるデータを圧縮するとともに、ブロックに含まれる各データのビット数を示す情報を生成することにより、上記圧縮データを生成する。抽出手段は、上記各データのビット数を示す情報に基づいて、上記ブロックに含まれる複数の圧縮されたデータを抽出する。伸張手段は、上記抽出手段によって抽出された上記圧縮されたデータを伸張する。
【００４３】
なお、本発明の別の一例は、上記装置において実行されるプログラムであってもよし、複数の装置によって構成されるシステムであってもよい。さらに、本発明の別の一例は、上記各装置（システム）において行われる方法であってもよい。
【発明の効果】
【００４４】
本発明によれば、頻度分析に基づかないデータの圧縮技術を提供することができる。
【図面の簡単な説明】
【００４５】
【図１】データ圧縮伸張装置１０の機能構成を示すブロック図
【図２】本実施形態におけるデータ圧縮処理が行われる対象のデータの一例を示す図
【図３】データを表すために必要なビット数に基づいたブロックの生成および圧縮の一例を示す図
【図４】必要ビット数が異なる隣り合うデータが１つのブロックに含められる場合と、含められない場合の一例を示す図
【図５】必要ビット数が異なる隣り合うデータが１つのブロックに含められる場合と、含められない場合の他の例を示す図
【図６】エンコード部１３によって実行されるエンコード処理の流れを示すメインフローチャート
【図７】ステップＳ１０８の帯域毎のビット数削減処理の詳細を示すフローチャート
【図８】ステップＳ１０９のブロック最適化処理の詳細を示すフローチャート
【図９】ステップＳ３０４の分割判定処理の詳細を示すフローチャート
【図１０】入力部１１において入力された音声信号の波形を示す図
【図１１】期間Ｔにおける音声信号の波形を示す図
【図１２】取得された時間領域のデータを圧縮する様子を示す図
【図１３】ＭＤＣＴの実行によって得られる周波数領域のデータの一例を示す図
【図１４】符号のデータ列と絶対値のデータ列との分離について説明するための図
【図１５】ステップＳ１０７におけるビット数削減処理（５ビット化）について説明するための図
【図１６】本実施形態におけるフレームの定義を示す図
【図１７】本実施形態におけるブロックの定義を示す図
【図１８】帯域毎のビット数削減処理の概要を示す図
【図１９】第１手法による低ビット化を示す図であり、第１手法を用いてビット数を５ビットから４ビットに削減する処理を示す図
【図２０】第２手法による低ビット化を示す図であり、第２手法を用いてビット数を５ビットから４ビットに削減する処理を示す図
【図２１】データ列の値とその値を表現するために必要なビット数とを示す図
【図２２】ｉ＋１番目のデータの必要ビット数が現在のブロックの設定ビット数と同じ場合に、ｉ＋１番目のデータが現在のブロックに含められる様子を示す図
【図２３】ステップＳ４０５における現在のブロックの設定ビット数を拡張する処理を説明するための図
【図２４】ｉ＋１番目のデータの必要ビット数が現在のブロックの設定ビット数よりも大きい場合における、分割条件の算出根拠を説明するための図
【図２５】ｉ＋１番目のデータの必要ビット数が現在のブロックの設定ビット数よりも小さい場合における、分割条件の算出根拠を説明するための図
【図２６】次のブロックのデータ数Ｍが確定される様子を示す図であり、現在のブロックと次のブロックとを分割する様子を示す図
【図２７】フレームヘッダＦＨの領域ＦＨ２の設定値によるデータサイズの違いを示す図
【図２８】デコード部１５によって行われるデコード処理の流れを示すフローチャート
【発明を実施するための形態】
【００４６】
（データ圧縮伸張装置の構成）
以下、図面を参照して、一実施形態に係るデータ圧縮伸張装置１０について説明する。データ圧縮伸張装置１０は、例えば音声信号（画像信号でもよい）の入力を受け付け、当該音声信号をデジタル信号に変換して圧縮し、当該圧縮データを記憶する。また、データ圧縮伸張装置１０は、記憶された圧縮データを伸張して音声信号に変換して出力する。また、データ圧縮伸張装置１０は、音声や画像の圧縮に限らず、任意のデータを圧縮するために用いられてもよい。以下では、データ圧縮伸張装置１０を用いて、例えば人の声などの音声（音楽等でもよい）を圧縮・伸張する場合について説明する。
【００４７】
図１は、データ圧縮伸張装置１０の機能構成を示すブロック図である。図１に示すように、データ圧縮伸張装置１０は、入力部１１と、Ａ／Ｄ変換部１２と、エンコード部１３と、圧縮データ記憶部１４と、デコード部１５と、Ｄ／Ａ変換部１６と、出力部１７とを含む。
【００４８】
入力部１１は、例えばマイクであり、例えば人の声等の音声信号の入力を受け付ける。Ａ／Ｄ変換部１２は、入力部１１からのアナログ信号を受信して、デジタル信号に変換する。Ａ／Ｄ変換部１２は、アナログの音声信号を所定のサンプリング周期でサンプリングし、メモリ等の記憶部に一時的に記憶する。サンプリング周波数としては、例えば、４４ｋＨｚであってもよいし、他の任意の周波数であってもよいし、可変であってもよい。
【００４９】
エンコード部１３は、Ａ／Ｄ変換部１２からサンプリングデータを取得し、所定の処理を行う。具体的には、エンコード部１３は、取得したサンプリングデータを周波数領域のデータに変換し、変換した周波数領域のデータを圧縮することにより、音声信号を圧縮した圧縮データを生成する。
【００５０】
圧縮データ記憶部１４は、エンコード部１３が生成した圧縮データを記憶する。圧縮データ記憶部１４は、例えば不揮発性メモリによって構成される。
【００５１】
デコード部１５は、圧縮データ記憶部１４から圧縮データを読み取り、圧縮データを伸張する。Ｄ／Ａ変換部１６は、伸張されたデータをアナログ信号に変換し、出力部１７に出力する。出力部１７は、例えばスピーカであり、Ｄ／Ａ変換部１６からのアナログ信号を受け取って音声として出力する。
【００５２】
なお、データ圧縮伸張装置１０は、ハードウェア構成として、ＣＰＵ、メインメモリ、不揮発性メモリ、マイク、スピーカ等を備える。例えば、不揮発性メモリには、エンコード部１３によって行われるデータ圧縮処理（後述する）やデコード部１５によって行われるデータ伸張処理（後述する）を実行するためのプログラムが記憶される。そして、このプログラムがメインメモリに読み込まれ、ＣＰＵを上記各部として機能させる。また、データ圧縮伸張装置１０は、上記各部のうちの一部又は全部として機能する専用回路を備えてもよい。すなわち、上記各部は、ソフトウェア、ハードウェア、またはこれらの組み合わせによって実現されることができる。
【００５３】
なお、データ圧縮伸張装置１０の構成は単なる一例であり、後述する処理（エンコード処理、デコード処理）はどのような装置において行われてもよい。例えば、データ圧縮伸張装置１０が、物理的に分離された複数の装置によって構成されてもよい。例えば、物理的に離れた場所に設置された複数の装置がネットワークで互いに接続されて、データ圧縮伸張装置（システム）が実現されてもよい。例えば、エンコード部１３とデコード部１５が物理的に離れており、エンコード部１３でエンコードされた圧縮データがストリーミング形式でデコード部１５に送信されて、デコード部１５においてデコードされてもよい。
【００５４】
（データ圧縮処理の概要）
次に、データ圧縮伸張装置１０によって行われるデータ圧縮処理の概要について説明する。図２は、本実施形態におけるデータ圧縮処理が行われる対象のデータの一例を示す図である。
【００５５】
図２に示すように、例えば、アナログの音声信号を所定のサンプリング周期でサンプリングしたサンプリングデータが取得される。ここでは、期間Ｔの間にｍ（ｍは正の整数）個のサンプリングデータが取得されるものとする。この時間領域のサンプリングデータのデータ列に対して、周波数領域のデータ（周波数スペクトル）に変換するための所定の変換が行われる。所定の変換としては、例えば、後述する修正離散コサイン変換（ＭＤＣＴ）であってもよいし、離散コサイン変換（ＤＣＴ）、フーリエ変換あるいはその派生の変換等、どのような変換方法が用いられてもよい。
【００５６】
所定の変換が行われることによって、例えば、ｎ（ｎは正の整数）個の周波数領域のデータが取得される。すなわち、所定の処理が行われることによって、期間Ｔにおいて取得された時間領域のデータ列が、周波数領域のデータ列として、例えば余弦関数を基底とする一次結合（様々な周波数と振幅を有する余弦関数の和）の係数に変換される。ここで得られる周波数領域のデータ列は、低い周波数から高い周波数の順に並んだｎ個の数列となる。なお、ここでは、所定の変換が行われた後の１の周波数領域のデータ（ある周波数の余弦関数の係数）を上記サンプリングデータと区別して「サンプルデータ」と呼ぶことがある。
【００５７】
以下では、所定の変換が行われることによって生成された複数のサンプルデータを並べたデータ列を圧縮する方法について説明する。本実施形態では、データの値を表すために最低限必要なビット数（以下、「必要ビット数」という場合がある）に基づいて、データ列を区切って複数のブロックを生成し、生成したブロックごとに圧縮が行われる。
【００５８】
図３は、データを表すために必要なビット数に基づいたブロックの生成および圧縮の一例を示す図である。図３に示すように、時間領域のデータに対して上記所定の変換が行われることにより、例えば、サンプルデータＤ１、サンプルデータＤ２、・・、サンプルデータＤｎ（ｎ個のデータ）からなる周波数領域のデータ列が得られたとする。各サンプルデータのサイズは、例えば５ビットであるとする。この場合、このサンプルデータ列の全体サイズは、５ｎビットとなる。
【００５９】
ここで、データサイズが５ビットの各データには、それぞれ図３に示す値が格納されているものとする。例えば、データＤ１、データＤ２、データＤ３、データＤ４には、それぞれ「３」、「３」、「３」、「２」が格納されている。これらの各データのサイズは５ビットであるが（これら各データのために５ビットが確保されるが）、これら各データの値を表すために最低限必要なビット数（必要ビット数）は、２ビットである。従って、必要ビット数が同じデータを１つのブロックにまとめる。そして、データを表すために必要なビットを残して不要なビットを削減することにより、ブロック内の各データを圧縮し、ブロック全体のサイズを圧縮する。
【００６０】
具体的には、図３に示すように、データＤ１〜データＤ６は、値が２〜３の範囲であるため、これらのデータは２ビットで表現することができる。このため、これらデータＤ１〜Ｄ６をブロック１にまとめる。また、データＤ７〜データＤ１０は、値が８〜１１の範囲であるため、これらのデータは４ビットで表現することができる。このため、データＤ７〜データＤ１０をブロック２にまとめる。
【００６１】
そして、ブロック１に含まれる各データのサイズを削減する。例えば、ブロック１の各データは２ビットで表すことができるため、ブロック１の各データのサイズを５ビットから２ビットにして、それぞれ３ビット削減する。また、ブロック２の各データは４ビットで表すことができるため、ブロック２の各データのサイズを５ビットから４ビットにして、それぞれ１ビット削減する。
【００６２】
各ブロックには、ブロックヘッダＢＨが付加される。ブロックヘッダＢＨには、当該ブロックに含まれるデータを伸張（復号）するために必要な情報が含まれる。具体的には、ブロックヘッダＢＨには、当該ブロックに含まれる各データのビット数（１のデータに割り当てられるサイズ）を示すビット情報と、当該ブロックに含まれるデータの数（サンプル数）の情報が含まれる。
【００６３】
例えば、ブロック１のブロックヘッダＢＨには、各データのビット数として、「２」が記憶され、サンプル数として、「６」が記憶される。ブロックに含まれるデータのビット数とサンプル数によって、各データの区切りを判別することができ、各データを抽出することができる。そして、抽出した各データのサイズを２ビットから５ビットに戻すことにより、各データを正確に復元することができる。
【００６４】
本実施形態では、隣り合うデータの必要ビット数が異なる場合であっても、所定の条件を満たす場合は、これら隣り合うデータが同じブロックに含められる場合がある。
【００６５】
図４は、必要ビット数が異なる隣り合うデータが１つのブロックに含められる場合と、含められない場合の一例を示す図である。
【００６６】
図４に示すように、データＤ１〜データＤ６は、同じビット数「２」で表現することができるため、これらのデータはブロック１に含められる。ブロック１の次のデータＤ７は、値が８であり、２ビットで表現することはできず、データＤ７の必要ビット数は「４」である。また、データＤ８〜データＤ１０の必要ビット数は、データＤ７と同様に、「４」である。
【００６７】
本実施形態では、データＤ７（データＤ７〜Ｄ１０）をブロック１に含めるか、又は、ブロック２を生成して、当該ブロック２にデータＤ７を含めるかの判定が行われる。具体的には、１つのブロックにまとめたときの圧縮後のサイズが２つのブロックに分割したときの圧縮後のサイズよりも大きい場合、２つのブロックに分割される。
【００６８】
より具体的には、データＤ７〜データＤ１０をブロック１に含めて不要なビットを削減する場合、データＤ７〜データＤ１０を表現するために最低限必要なビット数は４であるため、ブロック１の各データのビット数（ブロックヘッダＢＨのビット情報が示すビット数）は４となる。すなわち、ブロック１に含まれる各データには４ビットが割り当てられる。このため、ブロック１の全体サイズは、ブロックヘッダＢＨのサイズと、４０ビット（４ビット×１０個）との和である。
【００６９】
一方、図４に示すように、データＤ７〜データＤ１０をブロック１に含めずに、ブロック２に含めて不要なビットを削減する場合、全データ（データＤ１〜データＤ１０）のサイズは、ブロック１のサイズと、ブロック２のサイズとの和である。ブロック１の各データは２ビットで表現することができるため、当該ブロック１の各データのビット数は２ビットとなり、ブロック１のデータサイズは、１２ビット（２ビット×６個）にブロックヘッダＢＨのサイズを加えた値となる。また、ブロック２の各データは４ビットで表現することができるため、当該ブロック２の各データのビット数は４ビットとなり、ブロック２のデータサイズは、１６ビット（４ビット×４個）にブロックヘッダＢＨのサイズを加えた値となる。
【００７０】
このように、図４に示す例において、ブロック１にデータＤ７〜データＤ１０を含めた場合（ケース１）は、ブロック１に含まれる各データに４ビットが割り当てられる。データＤ１〜データＤ６は２ビットで表現可能であるため、１２ビット（２ビット×６個）が余分なビットとなる。一方、ブロック１にデータＤ７〜データＤ１０を含めずに、ブロック２を生成して当該ブロック２にデータＤ７〜データＤ１０を含める場合（ケース２）は、ブロック２のブロックヘッダＢＨのサイズの分だけ余分にビットが必要となる。
【００７１】
このため、これらケース１とケース２における全体のデータサイズを考慮して、ブロック１にデータＤ７（〜データＤ１０）を含めるか、ブロック２にデータＤ７（〜データＤ１０）を含めるかが判定される。
【００７２】
詳細は後述するが、ブロック１の隣のデータＤ７をブロック１に含めるか否かは、ブロックヘッダＢＨのサイズ、及び、データＤ７の必要ビット数とブロック１に含まれる各データのビット数との差分に基づいて、決定される。具体的には、データＤ７の必要ビット数がブロック１の各データのビット数よりも大きい場合において、上記差分とブロック１に含まれるデータの数との積がブロックヘッダＢＨのサイズよりも小さい場合、当該データＤ７をブロック１に含める。すなわち、この場合、データＤ７をブロック１と分割しない。これにより、ブロック２を生成してデータＤ７をブロック２に含めるよりも、ブロック２を生成せずにブロック１に含めた方が、圧縮した場合のブロックヘッダを含めたサイズは小さくなる。
【００７３】
図５は、必要ビット数が異なる隣り合うデータが１つのブロックに含められる場合と、含められない場合の他の例を示す図である。
【００７４】
図５に示すように、データＤ１〜データＤ６は、図４と同様、同じビット数「２」で表現することができるため、これらのデータはブロック１に含められる。次のデータＤ７は、値が１であり、１ビットで表現することが可能である。また、データＤ８〜データＤ１０を表現するために必要なビット数は、データＤ７と同様に、「１」である。
【００７５】
データＤ７〜データＤ１０をブロック１に含めて不要なビットを削減する場合、データＤ７〜データＤ１０の必要ビット数は１であっても、データＤ１〜データＤ６の必要ビット数は２であるため、ブロック１の各データのビット数（ブロックヘッダＢＨのビット情報が示すビット数）は２にする必要がある。すなわち、ブロック１に含まれる各データ（データＤ１〜データＤ１０）には２ビットが割り当てられる。
【００７６】
一方、図５に示すように、データＤ７〜データＤ１０をブロック１に含めずに、ブロック２に含めて不要なビットを削減する場合、当該ブロック２の各データのビット数は１ビットとなるが、ブロック２のブロックヘッダＢＨをさらに付加する必要がある。
【００７７】
このように、図５に示す例において、ブロック１にデータＤ７〜データＤ１０を含めた場合（ケース１）は、ブロック１に含まれる各データに２ビットが割り当てられる。データＤ７〜データＤ１０は１ビットで表現可能であるため、４ビット（１ビット×４個）が余分なビットとなる。一方、ブロック１にデータＤ７〜データＤ１０を含めずに、ブロック２を生成して当該ブロック２にデータＤ７〜データＤ１０を含める場合（ケース２）は、ブロック２のブロックヘッダＢＨのサイズの分だけ余分にビットが必要となる。これらケース１とケース２におけるデータサイズを考慮して、ブロック１にデータＤ７を含めるか否かが判定される。
【００７８】
詳細は後述するが、ブロック１の隣のデータＤ７の必要ビット数がブロック１の各データのビット数よりも小さい場合において、上記差分とブロック２に含まれるデータの数との積がブロックヘッダＢＨのサイズよりも小さい場合、当該データＤ７をブロック１に含める。これにより、ブロック２を生成してデータＤ７をブロック２に含めるよりも、ブロック２を生成せずにブロック１に含めた方が、圧縮した場合のブロックヘッダを含めたサイズは小さくなる。
【００７９】
例えば、音声信号の場合、サンプリングして得られた時間領域のデータを周波数領域のデータに変換すると、低い周波数から高い周波数まで順に並んだサンプルデータ列を得ることができる。この場合において、このデータ列から、人間の耳に聞こえない範囲の周波数に対応するサンプルデータを削除して、人間の耳に聞こえる周波数に対応するサンプルデータのみを取り出してもよい。このようにして、得られたサンプルデータ列は、比較的値の近いデータがまとまっている場合がある。このような値の近いデータは、同じ（又は近い）ビット数で表現することができるため、これらのデータを同じビット数で表して１つのブロックにまとめる。そして、ブロック単位でビット数を削減することによって、データを圧縮する。
【００８０】
以上のように、本実施形態では、データの値を表すために必要なビット数に基づいて、圧縮対象のデータ列を区切って複数のブロックを生成する。そして、生成した各ブロック内のデータのビットを削減することにより、圧縮対象のデータ列を圧縮する。
【００８１】
なお、上記では、一例として音声データを圧縮することとしたが、他の実施形態では、音声データに限らず、例えば画像データを圧縮してもよい。また、文字列のデータ、プログラムデータ等、任意のデータを圧縮してもよい。同じビット数で表現可能なデータが連続する傾向にあるデータの場合は、効率的に圧縮することができる。
【００８２】
（処理の詳細）
次に、データ圧縮伸張装置１０において実行される処理の詳細を説明する。以下では、エンコード部１３によって行われるエンコード処理、およびデコード部１５によって行われるデコード処理について説明する。まず、エンコード部１３によって行われるエンコード処理について、図６〜図９を参照して説明する。
【００８３】
なお、以下に示すエンコード処理およびデコード処理は、データ圧縮伸張装置１０が備えるＣＰＵが、メモリにロードされた音声圧縮伸張プログラムを実行することによって行われる。すなわち、エンコード部１３およびデコード部１５は、ＣＰＵが当該プログラムを実行することによって実現される。音声圧縮伸張プログラムは、例えば、記憶媒体（例えば、不揮発性メモリ、磁気ディスク、光ディスク等）に予め記憶されてもよいし、他の装置から無線又は有線で提供されてもよい。記憶媒体は、データ圧縮伸張装置１０に着脱自在に接続されてもよいし、データ圧縮伸張装置１０に内蔵されてもよい。
【００８４】
図６は、エンコード部１３によって実行されるエンコード処理の流れを示すメインフローチャートである。
【００８５】
まず、ステップＳ１０１において、エンコード部１３は、シークポイントから２ｎサンプルのデータを取得する。具体的には、エンコード部１３は、シークポイントを基準として定められる一定期間Ｔにおいてサンプリングされた２ｎ個のサンプリングデータを取得する。サンプリングデータは、Ａ／Ｄ変換部１２によってサンプリングされたデータである。
【００８６】
図１０は、入力部１１において入力された音声信号の波形を示す図である。図１１は、期間Ｔにおける音声信号の波形を示す図である。図１０及び図１１において、横軸は時間を示し、縦軸は音声信号の振幅を示す。図１０及び図１１に示すように、エンコード部１３は、ステップＳ１０１において、シークポイントを基準として定められる期間Ｔにおいてサンプリングされた２ｎ個のサンプリングデータを取得する。Ａ／Ｄ変換部１２は、所定のサンプリング周期（例えば、４４ｋＨｚ）で音声信号をサンプリングし、メモリ等の記憶部（図示せず）に一時的にサンプリングデータを記憶する。各サンプリングデータは、ある時間における振幅を示すデータであり、時間領域のデータである。図１１に示すように、ここで記憶されるサンプリングデータは、その値が例えば１６ビットで表現される実数値を示すデータである。
【００８７】
エンコード部１３は、２ｎ個のサンプリングデータを取得した後、次にステップＳ１０２の処理を実行する。
【００８８】
ステップＳ１０２において、エンコード部１３は、音量をｖ％にする。ここでは、取得された時間領域のデータについて、各データの値の範囲を圧縮する。図１２は、取得された時間領域のデータを圧縮する様子を示す図である。
【００８９】
具体的には、図１２に示すように、エンコード部１３は、各サンプリングデータをｖ％（例えば、４０％）にする。これにより、１６ビットで表現されていたサンプリングデータを１５ビットで表現する。すなわち、各サンプリングデータに割り当てるメモリ上の領域を１５ビットに圧縮する。
【００９０】
ステップＳ１０２に続いて、エンコード部１３は、取得した２ｎ個のデータに対して例えばハニング窓（窓関数）を掛ける（ステップＳ１０３）。エンコード部１３は、次にステップＳ１０４の処理を実行する。
【００９１】
ステップＳ１０４において、エンコード部１３は、ＭＤＣＴ（修正離散コサイン変換）を実行する。ＭＤＣＴの実行により、２ｎ個のサンプリングデータからｎ個の周波数領域のデータが得られる。以降の処理では、ｎ個のデータについての処理が行われる。図１３は、ＭＤＣＴの実行によって得られる周波数領域のデータの一例を示す図である。図１３において、横軸は周波数を示す。図１３に示すように、ＭＤＣＴを実行することによって、２ｎ個の時間領域のデータからｎ個の周波数領域のデータ（サンプルデータ）が得られる。このステップＳ１０４の処理の結果得られるｎ個のデータ列は、低い周波数から高い周波数に順に並んだ実数列である。
【００９２】
次に、ステップＳ１０５において、エンコード部１３は、ＭＤＣＴを実行して得られたｎ個のサンプルデータ列について、符号のデータ列と、絶対値のデータ列とを分離する。図１４は、符号のデータ列と絶対値のデータ列との分離について説明するための図である。図１４に示すように、ＭＤＣＴの実行によって得られたサンプルデータには、負の数値が含まれている。ここでは、以降の計算を行いやすくするために、ＭＤＣＴの実行によって得られたサンプルデータ列を、絶対値データ列と符号データ列とに分離をする。以降のステップＳ１０６〜ステップＳ１０９では、ステップＳ１０５において分離されたｎ個の絶対値データ列について処理が行われる。
【００９３】
次に、ステップＳ１０６において、エンコード部１３は、ステップＳ１０５で得られた絶対値データ列の各データをそれぞれ対数化する。対数化して得られたデータ列は、メモリに一時的に記憶される。エンコード部１３は、次にステップＳ１０７の処理を実行する。
【００９４】
ステップＳ１０７において、エンコード部１３は、ビット数削減処理（５ビット化）を行う。ここでは、ステップＳ１０６の処理で得られた各データについて、例えば１６ビットで表現されていたデータを、５ビットで表現する。
【００９５】
図１５は、ステップＳ１０７におけるビット数削減処理（５ビット化）について説明するための図である。図１５に示すように、対数化された各データは、例えば１６ビットで表現されるデータである。ここで、ビット数削減処理（５ビット化）においては、ステップＳ１０６で対数化された各データについて、０よりも小さい値を０とし、３１よりも大きな値を３１として、各データを５ビットで表現するとともに、０〜３１の整数値で表現する。ステップＳ１０６で対数化された各データのうち、値が０〜３１の範囲である場合には、そのままの値が維持される（例えば小数点以下は切り捨てられる）。
【００９６】
例えば、対数化されたデータの値が負である場合、そのデータの絶対値は相対的に小さく（ある周波数成分の振幅は小さく）、そのようなデータについては無視（値を「０」にする）しても音声として伸張したときに音の聞こえ方に大きな影響はない。また、対数化されたデータの値が３２以上の場合、振幅が非常に大きいため人間には３１でも３２以上でもその差を識別し難い。このため、このような人間には識別し難い、値が「３２」以上のデータについては、「３１」としても大きな影響はない。従って、ステップＳ１０７においては、各データを０〜３１の範囲の値として、各データを５ビットで表現する。すなわち、各周波数領域のデータのために５ビットを再割り当てする。このようにして、各データのビット数が削減される。
【００９７】
次に、ステップＳ１０８において、エンコード部１３は、帯域毎のビット数削減処理を実行する。ここでは、ステップＳ１０７の処理で得られたデータ列について、帯域毎にさらにビット数を削減する。この帯域毎のビット数削減処理の詳細については、図７を参照して後に詳述する。
【００９８】
ステップＳ１０８の処理の後、エンコード部１３は、ブロック最適化処理を実行する（ステップＳ１０９）。ここでは、エンコード部１３は、ステップＳ１０８で得られたデータ列を最適化して複数のブロックに分けるとともに、各ブロックを圧縮する。このブロック最適化処理の詳細については、図８を参照して後に詳述する。
【００９９】
次に、ステップＳ１１０において、エンコード部１３は、ステップＳ１０５で分離した符号データ列と、ステップＳ１０９で得られた絶対値データ列とを結合する。
【０１００】
次に、ステップＳ１１１において、エンコード部１３は、シークポイントが終了位置に達したか否かを判定する。判定結果が肯定である場合、エンコード部１３は、図６に示すエンコード処理を終了する。一方、判定結果が否定である場合、エンコード部１３は、シークポイントをｎ個のサンプリングデータの分だけ進め（ステップＳ１１２）、再びステップＳ１０１の処理を実行する。
【０１０１】
このようにして、ステップＳ１０１〜ステップＳ１１１の処理が繰り返されることにより、音声データが圧縮されて圧縮データ記憶部１４に記憶される。
【０１０２】
次に、上述したステップＳ１０８の帯域毎のビット数削減処理、及び、ステップＳ１０９のブロック最適化処理について、説明する。これらの処理の詳細を説明する前に、本実施形態におけるブロックとフレームの定義について説明する。
【０１０３】
（フレーム、ブロックのフォーマット）
図１６は、本実施形態におけるフレームの定義を示す図である。図１７は、本実施形態におけるブロックの定義を示す図である。
【０１０４】
本実施形態では、図６に示すエンコード処理が、図１６に示すフレーム単位で行われる。図１６に示すように、フレームは、フレームヘッダＦＨと、複数のブロックとを含む。フレームヘッダＦＨは、フレームサイズを格納する領域ＦＨ１と、ブロックヘッダＢＨの「サンプル数」のビット数を指定するための領域ＦＨ２とを含む。「フレームサイズ」は、フレーム全体のサイズを示し、当該フレームサイズを示す領域ＦＨ１には、１６ビットが割り当てられる。「ブロックヘッダＢＨの「サンプル数」のビット数」は、ブロックヘッダＢＨにおける「サンプル数」（図１７参照）を示す領域ＢＨ１に割り当てられるビット数である。領域ＦＨ２には、２ビットが割り当てられる。
【０１０５】
例えば、領域ＦＨ２に値０が格納される場合、ブロックヘッダＢＨにおける領域ＢＨ１には、７ビットが割り当てられる。また、領域ＦＨ２に値１が格納される場合、ブロックヘッダＢＨにおける領域ＢＨ１には、８ビットが割り当てられる。領域ＦＨ２に値２が格納される場合、ブロックヘッダＢＨにおける領域ＢＨ１には、９ビットが割り当てられ、領域ＦＨ２に値３が格納される場合、ブロックヘッダＢＨにおける領域ＢＨ１には、１０ビットが割り当てられる。
【０１０６】
図１６に示すように、フレームには複数のブロックが含まれる。各ブロックは、図１７に示すように、ブロックヘッダＢＨと、データ部とに分けられる。ブロックヘッダＢＨは、データ部に含まれる各サンプルデータを伸張する際に必要な情報である。具体的には、ブロックヘッダＢＨは、さらに、「サンプル数」を格納する領域ＢＨ１と、「サンプルデータのビット数」を示す領域ＢＨ２とに分けられる。なお、ブロックヘッダＢＨは、データ部に付加される必要はなく、ブロックのデータ部とブロックヘッダＢＨとが分離してもよい。
【０１０７】
領域ＢＨ１のサイズは、可変であり、上述のように、フレームヘッダにおける領域ＦＨ２に格納される値によって定められる。例えば、フレームヘッダの領域ＦＨ２に「０」が格納される場合、ブロックヘッダの領域ＢＨ１のサイズは、７ビットとなる。この領域ＢＨ１に格納される値は、このブロックのデータ部に含まれるサンプルデータの数（サンプル数）を示す。例えば、領域ＢＨ１が７ビットである場合、最大で１２７個のサンプルデータをこのブロックのデータ部に含むことが可能である。例えば、領域ＢＨ１が７ビットであって、このブロックに４つのデータが含まれている場合、領域ＢＨ１に格納される値は「００００１００」（２進数）となる。以下では、図１７に示すブロックのブロックヘッダＢＨのサイズをＨ［ｂｉｔ］で表すことがある。
【０１０８】
このように、本実施形態では、フレームにフレームヘッダＦＨと複数のブロックとが含まれる。フレームヘッダＦＨには、ブロックヘッダＢＨのサイズを示す情報が含まれる。すなわち、フレームヘッダＦＨにおいて値が指定されることで、このフレームに含まれるすべてのブロックヘッダＢＨのサイズ（領域ＢＨ１のサイズ）が指定される。これにより、各ブロックのヘッダサイズを指定することができる。
【０１０９】
また、ブロックヘッダの「サンプルデータのビット数」は、データ部に含まれる各サンプルデータに割り当てられるビット数である。「サンプルデータのビット数」を示す領域ＢＨ２には、例えば３ビット（固定長）が割り当てられる。例えば、「サンプルデータのビット数」として、「１０１」（２進数表現；１０進数では「５」）が設定される場合、データ部に含まれるサンプルデータのサイズは、全て「５」ビットであることを意味する。
【０１１０】
上述のようにブロックヘッダＢＨは可変であり、ブロックヘッダＢＨの領域ＢＨ１のサイズによって、ブロックに含まれるデータの数の上限が定められる。例えば、領域ＢＨ１に８ビットが割り当てられる場合には、最大で２５６個のデータをブロックに含めることが可能であり、領域ＢＨ１に９ビットが割り当てられる場合には、最大で５１２個のデータをブロックに含めることができる。
【０１１１】
本実施形態では、フレーム毎に領域ＦＨ２に設定される値が異なる。例えば、あるフレームでは、フレームヘッダＦＨの領域ＦＨ２に値「０」が格納されてデータが圧縮されて記憶される（このときのフレームの各ブロックの最大データ数は１２８個（７ビット）である）。また、他のフレームでは、フレームヘッダＦＨの領域ＦＨ２に値「１」が格納されてデータが圧縮されて記憶される（このときのフレームの各ブロックの最大データ数は２５６個（８ビット）である）。
【０１１２】
なお、ブロックヘッダＢＨの「サンプルデータのビット数」に値「０」が格納される場合、このブロックのデータ部にはデータが存在しないことを意味する。また、「サンプル数」に値「０」が格納される場合、このフレームの最後のサンプルデータまでを意味する。すなわち、値が０のサンプルデータがフレームの最後まで続く場合、その値および数は省略される。
【０１１３】
（帯域毎のビット数削減処理の詳細）
次に、ステップＳ１０８の帯域毎のビット数削減処理の詳細について説明する。図７は、ステップＳ１０８の帯域毎のビット数削減処理の詳細を示すフローチャートである。
【０１１４】
図７に示すように、ステップＳ２０１において、エンコード部１３は、データ列を８等分に分割する。具体的には、エンコード部１３は、上記ステップＳ１０７の処理で５ビット化されたデータ列を、各グループに含まれるデータの数が等しくなるようにして、周波数の帯域毎に８つのグループに分割する。ここで、上述したブロックとは異なり、各グループに含まれるサンプルデータの数は同じである。従って、ステップＳ２０１で分割されるデータの集合を「グループ」と表記して、上述の「ブロック」と区別する。
【０１１５】
次に、ステップＳ２０２において、エンコード部１３は、カウンタＫに１をセットする。続いて、ステップＳ２０３において、エンコード部１３は、第１手法を用いるか否かを判定する。ステップＳ２０３においては、エンコード部１３は、Ｋ番目のグループのデータを低ビット化する手法（ビット数を削減する手法）として、第１手法を用いるか否かを判定する。具体的には、エンコード部１３は、Ｋの値に基づいて、第１手法を用いるか否かを判定する。なお、この「第１手法」については、後に詳述する。
【０１１６】
ステップＳ２０３の判定結果が肯定の場合、エンコード部１３は、ステップＳ２０４において、Ｋ番目のグループを第１手法で低ビット化する。一方、ステップＳ２０３の判定結果が否定の場合、エンコード部１３は、ステップＳ２０５において、Ｋ番目のグループを第２手法で低ビット化する。なお、この「第２手法」については、後に詳述する。ステップＳ２０４又はステップＳ２０５の処理は、８等分したグループのうちのＫ番目のグループに含まれる各データのビット数を削減する処理である。
【０１１７】
ステップＳ２０４又はステップＳ２０５の処理の後、エンコード部１３は、ステップＳ２０６において、Ｋに１を加算する。そして、エンコード部１３は、次のステップＳ２０７において、Ｋが８より大きいか否かを判定する。判定結果が肯定の場合は、エンコード部１３は、図７に示す帯域毎のビット数削減処理を終了する。一方、判定結果が否定の場合は、エンコード部１３は、再びステップＳ２０３の処理を実行する。ステップＳ２０３〜ステップＳ２０７の処理が繰り返し行われることによって、８等分された各グループが、第１手法又は第２手法を用いて低ビット化される。以上で、図７のフローチャートの説明を終了する。
【０１１８】
次に、図７のフローチャートで示した帯域毎のビット数削減処理の概要について、図１８を参照して説明する。
【０１１９】
図１８は、帯域毎のビット数削減処理の概要を示す図である。図１８に示すように、ここで処理されるデータ列は、周波数領域のデータ列であって、低い周波数成分から高い周波数成分まで周波数の順に並んでいる。ステップＳ２０１では、ｎ個のデータ列（データＤ１、データＤ２、・・、データＤＮ）が、８つのグループに等分割される。そして、各グループについて、第１手法又は第２手法により、ビット数の削減処理が行われる（ステップＳ２０４、ステップＳ２０５）。このビット数削減処理によって、例えば、１番目のグループ及び２番目のグループの各データは、５ビットで表されていたものが、４ビットで表現される。また、３番目のグループの各データは、５ビットで表されていたものが、３ビットで表現され、８番目のグループの各データは２ビットで表現される。
【０１２０】
例えば、ｎ＝５１２である場合、各グループには６４個のサンプルデータが含まれる。この場合、１番目及び２番目のグループに含まれる１個目〜１２８個目までのサンプルデータは、比較的低い周波数の成分であるため、それぞれ１ビット削減される。一方、８番目のグループに含まれる４４９番目〜５１２番目のサンプルデータは、比較的高い周波数の成分であるため、それぞれ３ビット削減される。
【０１２１】
図１９は、第１手法による低ビット化を示す図であり、第１手法を用いてビット数を５ビットから４ビットに削減する処理を示す図である。
【０１２２】
図１９に示すように、第１手法では、５ビットで表された１０進数の値０及び１を「０」とし、値２及び３を「１」とし、値４及び５を「２」として再定義する。すなわち、第１手法では、５ビットで表された１０進数の値を２で除した場合において、その商を低ビット化後の値として定義する。これにより、０〜３１（５ビット）の範囲の数は、０〜１５（４ビット）の範囲の数となる。そして、各データに割り当てる領域が、５ビットから４ビットに変更される。このように、第１手法では、値の全範囲にわたって均等に圧縮される。
【０１２３】
図２０は、第２手法による低ビット化を示す図であり、第２手法を用いてビット数を５ビットから４ビットに削減する処理を示す図である。
【０１２４】
図２０に示すように、第２手法では、５ビットで表された１０進数の値０〜１６を「０」とし、値１７〜３１をそれぞれ「１〜１５」として再定義する。すなわち、第２手法では、比較的小さな値０〜１６を「０」として捨てて、比較的大きな値１７〜３１を残す。これにより、０〜３１（５ビット）の範囲の数は、０〜１５（４ビット）の範囲の数となる。このように、第２手法では、小さい値０〜１６を捨てて、大きな値のみを残す。各データの値が小さいことは、その周波数成分の振幅（音量に関係する）が小さいことを示す。小さな音は人間には聞こえにくいため、このような小さな音を「０」にしても音の聞こえ方には影響しない場合がある。このため、第２手法では、小さな値を捨てて、大きな値のみを残す。
【０１２５】
なお、周波数や音声の種類によっては小さな音でもカットすると音質が低下する場合がある。従って、周波数や音声の種類によっては、第２手法よりも第１手法が用いられる。例えば、比較的高い周波数成分では、小さな音をカットしても音質が低下し難い場合がある。また、周波数や音声の種類によっては、第１手法によって均等に低ビット化するよりも第２手法を用いる方が音質が低下し難い場合がある。第１手法によって均等に低ビット化すると、細かい振幅の違いを表現することができず、音質が低下する場合がある。一方で、第２手法では、ある値以下はカットされるが、それ以外の値はそのまま維持されるため、細かい振幅の違いを表現することができる。
【０１２６】
このように、第１手法又は第２手法を用いて、周波数の帯域毎にビット数が削減される。具体的には、高い周波数帯域であるほど、ビット数の削減幅が大きくなる。例えば、低い周波数帯域である１番目のグループ及び２番目のグループでは、５ビットから４ビットにビット数が１だけ削減される。高い周波数帯域である７番目のグループ及び８番目のグループでは、５ビットから２ビットにビット数が３だけ削減される。
【０１２７】
２ビット以上削減する場合は、第１手法又は第２手法によるビット数の削減処理が２回以上行われる。例えば、５ビットから３ビットに２ビットだけ削減される場合、５ビットから４ビットに削減された後、さらに、４ビットから３ビットに削減される。この場合において、５ビットから４ビットへの削減には、上記第１手法が用いられ、４ビットから３ビットへの削減には、同様に上記第１手法が用いられてもよいし、上記第２手法が用いられてもよい。
【０１２８】
各グループに対してどの手法を用いてビット数の削減処理を行うかは、予め定められる。また、どの手法をどの順番で適用するかも予め定められる。例えば、１番目〜６番目のグループは、第１手法のみが用いられ、７番目のグループは第２手法のみが用いられてもよい。８番目のグループは、３回のビット数削減処理において、１回目及び２回目は第１手法が用いられ、３回目は第２手法が用いられてもよい。
【０１２９】
なお、圧縮された音声データを伸張する場合は、圧縮した時の手法に合わせて上述した第１手法又は第２手法を用いたビット数削減処理と逆の処理を行う。すなわち、第１手法で圧縮されたデータは、第１手法の逆の処理（例えば、４ビットのデータについて値を２倍することで５ビットにする）を行って伸張する。
【０１３０】
以上のようにして、サンプルデータ列を、８つのグループに等分割して、グループ単位でビット数が削減される。高い周波数帯域では削減幅が大きく（５ビットから２ビット）、低い周波数帯域では削減幅が小さい（５ビットから４ビット）。人間にはある一定の範囲の周波数の音しか聞こえず、また、聞こえる範囲の周波数であっても高い周波数帯域と、低い周波数帯域とでは敏感になる場合とそうでない場合とがある。一般的には、高い周波数（例えば１０ｋＨｚ）の音は聞こえにくく、このため、高い周波数の音の精度を下げて圧縮しても音質は劣化し難い。また、低い周波数（例えば１ｋＨｚ）の音に対しては人間は敏感であるため、高い精度で復元できるようにすることが好ましい。従って、本実施形態では、高い周波数帯域ではビット数の削減幅を大きくしてデータ量を大幅に削減し、低い周波数帯域ではビット数の削減幅を小さくして、高い精度で復元できるようにする。
【０１３１】
このように、帯域毎のビット数削減処理では、帯域毎に削減幅を変えて、各サンプルデータのビット数を削減する。上記第１手法および第２手法を用いたビット数削減処理は、非可逆変換であり、これらの手法を用いた処理を行った場合、処理の前のデータを正確には復元することはできない。しかしながら、音質に影響がない程度であれば、正確にデータを復元することができなくても問題はない。
【０１３２】
なお、ビット数を削減する処理としては、第１手法および第２手法以外に、他の手法が用いられてもよい。他の手法は、非可逆変換であってもよいし、可逆変換であってもよい。
【０１３３】
（ブロック最適化処理の詳細）
次に、ステップＳ１０９のブロック最適化処理の詳細について説明する。ステップＳ１０９のブロック最適化処理は、サンプルデータ列を、複数のブロック（図１６参照）に分割する処理であり、各ブロックを最適化しつつ圧縮する処理である。
【０１３４】
すなわち、ステップＳ１０９のブロック最適化処理では、上記ステップＳ１０８の帯域毎のビット数削減処理で８分割された各グループの区切り位置を無視して、サンプルデータ列が複数のブロックに分割される。そして、ブロック単位で圧縮が行われる。具体的には、ブロック最適化処理では、ステップＳ１０８の処理が行われた後のデータ列について、各データのビット数に基づいて、ブロックが生成される。
【０１３５】
図２１は、データ列の値とその値を表現するために必要なビット数とを示す図である。図２１に示すように、ステップＳ１０８の処理が行われた後、データ列として、データＤ１、データＤ２、データＤ３、・・、データＤＮがメモリに一時的に記憶されている。このとき、例えば、データＤ１〜データＤ１０は、ステップＳ１０８においては１番目のグループとして処理が行われ、その結果４ビットに圧縮されている。すなわち、データＤ１〜データＤ１０の値を格納するための領域として、それぞれ４ビットの領域がメモリ上で確保されている。
【０１３６】
一方、図２１に示すように、例えばデータＤ１の値は、「６」（１０進数表現）であり、この値を表現するために必要なビット数（必要ビット数）は、「３」である（３ビットで表現可能な値は０〜７）。３ビットの領域が確保されていれば、データＤ１は表現可能である。すなわち、データを表現するために必要なビット数が確保されていれば、それ以外のビットは不要である。
【０１３７】
このようなことから、ブロック最適化処理では、上記必要ビット数に着目して、必要ビット数が同じデータを１つのグループにまとめる。また、必要ビット数が同じでなくても所定の条件を満たす場合には１つのグループにまとめる。以下、図８に示すフローチャートを参照して、ブロック最適化処理の詳細について説明する。
【０１３８】
図８は、ステップＳ１０９のブロック最適化処理の詳細を示すフローチャートである。
【０１３９】
図８に示すように、エンコード部１３は、まず、変数ｉに１をセットする（ステップＳ３０１）。変数ｉは、処理するデータの位置を示し、以降の処理はデータ列のｉ番目のサンプルデータについて処理が行われる。
【０１４０】
次に、エンコード部１３は、ｉ＋１番目のデータの必要ビット数と現在のブロックの設定ビット数（現在のブロック内の各データのビット数；現在のブロックのブロックヘッダにより定められる「サンプルデータのビット数」）とが等しいか否かを判定する（ステップＳ３０２）。なお、１番目のデータは、１番目のブロックに含められる。判定結果が肯定の場合、エンコード部１３は、次にステップＳ３０３の処理を実行する。一方、判定結果が否定の場合、エンコード部１３は、次にステップＳ３０４の処理を実行する。
【０１４１】
ステップＳ３０３において、エンコード部１３は、ｉ＋１番目のデータを現在のブロックに含める。
【０１４２】
図２２は、ｉ＋１番目のデータの必要ビット数が現在のブロックの設定ビット数と同じ場合に、ｉ＋１番目のデータが現在のブロックに含められる様子を示す図である。図２２に示すように、データＤ１〜データＤ３の必要ビット数（データを表現するために必要なビット数）が「３」である場合、図８に示すブロック最適化処理が行われると、データＤ１〜データＤ３が同じブロックに含められる（ステップＳ３０３）。この状態において、さらに、４番目のデータであるデータＤ４について図８に示す処理が行われると、現在のブロックの設定ビット数と、データＤ４の必要ビット数とが等しいか否かが判定される（ステップＳ３０２）。図２２に示す例では、これらがともに「３」で等しいため、データＤ４は、現在のブロックに含められる（ステップＳ３０３）。このようにして、必要ビット数が等しいデータが現在のブロックに次々と含められる。
【０１４３】
ステップＳ３０３の処理の後、エンコード部１３は、ステップＳ３０７の処理を実行する。
【０１４４】
一方、ステップＳ３０４において、エンコード部１３は、分割判定処理を実行する。ここでは、ｉ＋１番目のデータの必要ビット数が現在のブロックの設定ビット数と異なるため、エンコード部１３は、ｉ＋１番目のデータを現在のブロックと分割するか、又は現在のブロックに含めるかについての判定処理を行う。以下、図９に示すフローチャートを参照して、分割判定処理の詳細について説明する。
【０１４５】
図９は、ステップＳ３０４の分割判定処理の詳細を示すフローチャートである。
【０１４６】
図９に示すように、ステップＳ４０１において、エンコード部１３は、ｉ＋１番目のデータの必要ビット数が現在のブロックの設定ビット数より大きいか否かを判定する。判定結果が肯定の場合（ｉ＋１番目のデータの必要ビット数＞現在のブロックの設定ビット数）、エンコード部１３は、次にステップＳ４０２の処理を実行する。一方、判定結果が否定の場合（ｉ＋１番目のデータの必要ビット数＜現在のブロックの設定ビット数）、エンコード部１３は、次にステップＳ４０６の処理を実行する。
【０１４７】
ステップＳ４０２において、エンコード部１３は、Ｈ＜＝α×Ｎが成立するか否かを判定する。ここで、「Ｈ」は、上述した図１７に示すブロックヘッダＢＨのサイズ［ｂｉｔ］である。また、「α」は、現在のブロックの設定ビット数とｉ＋１番目のデータの必要ビット数との差分（絶対値）である。また、「Ｎ」は、現在のブロックに含まれるデータの数である。
【０１４８】
ステップＳ４０２の判定結果が肯定の場合（Ｈ＜＝α×Ｎが成立する場合）、エンコード部１３は、ステップＳ４０３において、ｉ＋１番目のデータを現在のブロックと分割すると決定する。なお、この分割するか否かを決定するための分割条件（Ｈ＜＝αＮ）の算出根拠については、後述する。
【０１４９】
一方、ステップＳ４０２の判定結果が否定の場合（Ｈ＜＝α×Ｎが成立しない場合）、エンコード部１３は、ステップＳ４０４において、ｉ＋１番目のデータを現在のブロックと分割しないと決定する。すなわち、エンコード部１３は、ｉ＋１番目のデータを現在のブロックに含めると決定する。そして、エンコード部１３は、続くステップＳ４０５において、現在のブロックの設定ビット数をαだけ拡張する。
【０１５０】
図２３は、ステップＳ４０５における現在のブロックの設定ビット数を拡張する処理を説明するための図である。図２３では、現在のブロックにデータＤ１〜データＤ３が含まれており、データＤ４に対する処理が行われる様子が示されている。図２３に示すように、現在のブロックの設定ビット数（ブロックに含まれる各データのビット数）が「３」である場合において、データＤ４の必要ビット数が「４」である場合、Ｈ＜＝α×Ｎが成立しないため、データＤ４を分割しないと決定される（ステップＳ４０４）。このとき、現在のブロックの設定ビット数が、新たに加えられるデータＤ４の必要ビット数に拡張される。
【０１５１】
具体的には、データＤ４の必要ビット数が「４」であるため、現在のブロックの設定ビット数も「４」に拡張される。ここでは、新たに加えられるデータＤ４を表現するためには「４」ビットが必要であるため、新たに加えられるデータＤ４の必要ビット数に合わせて、現在のブロックの設定ビット数も拡張される。すなわち、既に現在のブロックに属されている他のデータのビット数が、新たに加えられるデータＤ４の必要ビット数に合わせて拡張される。現在のブロックの設定ビット数が新たに加えられるデータの必要ビット数に合わせて拡張されることにより、既に現在のブロックに属している各データの値は維持され、かつ、新たに加えられるデータの値も表現することができる。
【０１５２】
このように、ステップＳ４０２における分割条件（Ｈ＜＝αＮ）を満たすか否かによって、ｉ＋１番目のデータを現在のブロックと分割するか（ｉ＋１番目のデータを現在のブロックに含めるか）否かが決定される。
【０１５３】
ここで、ステップＳ４０２における分割条件の算出根拠について、図２４を参照して説明する。図２４は、ｉ＋１番目のデータの必要ビット数が現在のブロックの設定ビット数よりも大きい場合における、分割条件の算出根拠を説明するための図である。
【０１５４】
図２４において、データＤ１〜データＤ３に対する処理が行われて、現在のブロックが形成されているものとする。次のブロックは、仮にデータＤ４を現在のブロックに含めずに分割した場合の仮のブロックであるものとする。図２４に示すように、（Ａ）現在のブロックを次のブロックと分割する場合、２つのブロックの合計サイズは、以下の式（１）によって算出することができる。
【０１５５】
２つのブロックの合計サイズ（Ａ）＝（Ｈ＋ＢＮ）＋｛Ｈ＋Ｍ（Ｂ＋α）｝      （１）
【０１５６】
ここで、「Ｂ」は、現在のブロックの設定ビット数を示す。また、「Ｍ」は次のブロックに含まれるデータの数を示す。また、上述のように「Ｎ」は、現在のブロックに含まれるデータの数であり、「α」は、現在のブロックの設定ビット数と次のブロックの設定ビット数との差である。現在のブロックのデータサイズは、Ｂ×Ｎにヘッダを加えて、Ｈ＋ＢＮとなる。また、次のブロックの設定ビット数は、現在のブロックの設定ビット数Ｂよりもαだけ大きく、データの数がＭ個である。このため、次のブロックのデータサイズは、Ｈ＋Ｍ（Ｂ＋α）となる。従って、２つのブロックの合計サイズは、式（１）で表すことができる。
【０１５７】
一方、（Ｂ）現在のブロックと次のブロックとを統合する場合、統合後のブロックのサイズは、以下の式（２）によって算出することができる。
【０１５８】
１つのブロックに統合した場合のサイズ（Ｂ）＝Ｈ＋（Ｎ＋Ｍ）（Ｂ＋α）      （２）
【０１５９】
ここで、２つのブロックの合計サイズ（Ａ）が、１つのブロックに統合した場合のサイズ（Ｂ）以下である場合、２つのブロックに分割した方が、全体としてのデータサイズが小さくなる。従って、分割するべき条件は、次の式（３）によって表される。
【０１６０】
（Ｈ＋ＢＮ）＋｛Ｈ＋Ｍ（Ｂ＋α）｝＜＝Ｈ＋（Ｎ＋Ｍ）（Ｂ＋α）      （３）
【０１６１】
この式（３）を展開することにより、以下の分割条件を示す式（４）が得られる。
【０１６２】
Ｈ＜＝αＮ      （４）
【０１６３】
ブロックヘッダＢＨのサイズＨは、フレームヘッダによって定められるため、固定である（ここでは、例えばＨ＝１１とする）。このため、式（４）に示すように、ｉ＋１番目のデータの必要ビット数が現在のブロックの設定ビット数よりも大きい場合の分割条件は、現在のブロックに含まれるデータの数Ｎと、現在のブロックの設定ビット数及びｉ＋１番目のデータの必要ビット数の差分αと、に依存する。すなわち、ｉ＋１番目のデータの必要ビット数が現在のブロックの設定ビット数よりも大きい場合の分割条件は、次のブロックに含まれるデータの数Ｍには依存しない。
【０１６４】
以上のように、ｉ＋１番目のデータの必要ビット数が現在のブロックの設定ビット数よりも大きい場合は、エンコード部１３は、式（４）に示す分割条件の成否によって、分割すべきか否かを判定する。
【０１６５】
図９に戻り、ステップＳ４０１の判定結果が否定の場合（ｉ＋１番目のデータの必要ビット数＜現在のブロックの設定ビット数）、エンコード部１３は、ステップＳ４０６の処理を実行する。
【０１６６】
具体的には、ステップＳ４０６において、エンコード部１３は、Ｈ＜＝α×Ｍが成立するか否かを判定する。ここで、「Ｍ」は、次のブロックに含まれるデータの数である。また、「Ｈ」は、上述した図１７に示すブロックヘッダのサイズ（ビット数）である。また、「α」は、現在のブロックの設定ビット数とｉ＋１番目のデータの必要ビット数との差分（絶対値）である。
【０１６７】
ステップＳ４０６の判定結果が肯定の場合（Ｈ＜＝αＭが成立する場合）、エンコード部１３は、ステップＳ４０３において、ｉ＋１番目のデータを現在のブロックと分割すると決定する。
【０１６８】
一方、ステップＳ４０６の判定結果が否定の場合（Ｈ＜＝αＭが成立しない場合）、エンコード部１３は、ステップＳ４０７において、ｉ＋１番目のデータを現在のブロックと分割しないと決定する（すなわち、ｉ＋１番目のデータを現在のブロックに含めると決定する）。
【０１６９】
このように、ステップＳ４０６における分割条件（Ｈ＜＝αＭ）を満たすか否かによって、ｉ＋１番目のデータを現在のブロックと分割するか否かが決定される。
【０１７０】
以下、ステップＳ４０６における分割条件（Ｈ＜＝αＭ）の算出根拠について説明する。
【０１７１】
図２５は、ｉ＋１番目のデータの必要ビット数が現在のブロックの設定ビット数よりも小さい場合における、分割条件の算出根拠を説明するための図である。
【０１７２】
図２５において、図２４と同様に、データＤ１〜データＤ３に対する処理が行われて、現在のブロックが形成されているものとし、次のブロックは仮のブロックであるものとする。図２５に示すように、（Ｃ）現在のブロックを次のブロックと分割する場合、２つのブロックの合計サイズは、以下の式（５）によって算出することができる。
【０１７３】
２つのブロックの合計サイズ（Ｃ）＝（Ｈ＋ＢＮ）＋｛Ｈ＋Ｍ（Ｂ−α）｝      （５）
【０１７４】
ここで、「Ｂ」、「Ｎ」、「Ｍ」は上述の通りである。次のブロックの設定ビット数は、現在のブロックの設定ビット数Ｂよりもαだけ小さいため、次のブロックのデータサイズは、Ｈ＋Ｍ（Ｂ−α）となっている。従って、２つのブロックの合計サイズは、式（５）で表すことができる。
【０１７５】
一方、（Ｄ）現在のブロックと次のブロックとを統合する場合、統合後のブロックのサイズは、以下の式（６）によって算出することができる。
【０１７６】
１つのブロックに統合した場合のサイズ（Ｄ）＝Ｈ＋（Ｎ＋Ｍ）Ｂ      （６）
【０１７７】
図２５に示すように、４番目のデータＤ４の必要ビット数が現在のブロックの設定ビット数よりも小さい場合、現在のブロックの設定ビット数を拡張しなくても、現在のブロックに含まれるデータ、及び、新たにブロックに追加されるデータＤ４〜データＤ７を表現するはできる。逆に、現在のブロックの設定ビット数を新たに追加されるデータＤ４の必要ビット数に削減すると、現在のブロックに含まれるデータＤ１〜データＤ３を表現できなくなる。このため、統合後のブロックの設定ビット数は、維持される。逆に、追加されるデータＤ４〜データＤ７は、Ｂ−α［ｂｉｔ］で表現可能であるが、統合後のブロックにおいては、Ｂ［ｂｉｔ］の領域が確保される。このように、現在のブロックの設定ビット数よりも新たに追加されるデータＤ４の必要ビット数が小さい場合、式（６）に示すように、統合後のブロックのサイズは、ヘッダＨを加えて、Ｈ＋（Ｎ＋Ｍ）Ｂとなる。
【０１７８】
ここで、分割した場合の２つのブロックの合計サイズ（Ｃ）が、分割しない場合のブロックのサイズ（Ｄ）以下である場合、２つのブロックに分割した方が、全体としてのデータサイズが小さくなる。従って、分割するべき条件は、次の式（７）によって表される。
【０１７９】
（Ｈ＋ＢＮ）＋｛Ｈ＋Ｍ（Ｂ−α）｝＜＝Ｈ＋（Ｎ＋Ｍ）Ｂ      （７）
【０１８０】
この式（７）を展開することにより、以下の分割条件を示す式（８）が得られる。
【０１８１】
Ｈ＜＝αＭ      （８）
【０１８２】
ブロックヘッダＢＨのサイズＨは、フレームヘッダによって定められるため、固定である。このため、式（８）に示すように、ｉ＋１番目のデータの必要ビット数が現在のブロックの設定ビット数よりも小さい場合の分割条件は、次のブロックのデータ数Ｍと、現在のブロックの設定ビット数及びｉ＋１番目のデータの必要ビット数の差分αと、に依存する。
【０１８３】
ここで、次のブロックのデータ数Ｍは、ステップＳ４０６の分割条件の判定が行われる時点では確定していない。このため、次のブロックのデータ数Ｍを確定するため、ｉ＋１番目のデータからブロック最適化処理を開始して、次のブロックのデータ数Ｍを算出する。
【０１８４】
図２６は、次のブロックのデータ数Ｍが確定される様子を示す図であり、現在のブロックと次のブロックとを分割する様子を示す図である。図２６において、データＤ１〜データＤ３によって１番目のブロックが生成されており、データＤ４に対する処理がこれから行われる様子が示されている。データＤ１〜データＤ３によって１番目のブロックが生成された後、データＤ４に対する処理として、データＤ４の必要ビット数と１番目のブロックの設定ビット数とが比較される。
【０１８５】
図２６に示すように、データＤ４の必要ビット数は１番目のブロックの設定ビット数よりも小さい。この場合において、データＤ４を１番目のブロックに含めるか否かを判定するためには、次のブロックのデータ数Ｍが必要である。このため、データＤ４を１番目のブロックに含めるか否かを決定するための処理を中断して、次のブロックのデータ数Ｍを確定するために、データＤ４から新たな仮のブロック（２番目のブロック）の生成をスタートする。
【０１８６】
データＤ４〜データＤ９までは、必要ビット数は「２」でそれぞれ等しいため、データＤ４〜データＤ９は２番目のブロックに含められる（上記ステップＳ３０３）。次に、データＤ１０を２番目のブロックに含めるか、あるいは、このデータＤ１０を２番目のブロックに含めずに、３番目のブロックに含めるかが判定される。データＤ１０の必要ビット数は「４」であり、２番目のブロックの設定ビット数は「２」であるため、上記ステップＳ４０１において「ＹＥＳ」と判定されて、Ｈ＜＝αＮが成立するか否かが判定される（ステップＳ４０２）。図２６に示す例では、α＝２、Ｎ（２番目のブロックのデータ数）＝６であり、Ｈ＜＝αＮが成立しているため、２番目のブロックとデータＤ１０とは分割される。この時点で、２番目のブロックのデータ数は「６」に確定する。なお、この時点においても、１番目のブロックと分割されるか、統合されるかは確定していないため、２番目のブロックは「仮のブロック」である。
【０１８７】
このようにして、２番目のブロックのデータ数Ｍが確定したため、データＤ４に対する処理が再開される。具体的には、Ｈ＜＝αＭが成立しているか否かが判定される。１番目のブロックの設定ビット数は「４」であり、２番目のブロックの設定ビット数は「２」であるため、α＝２であり、２番目のブロックのデータ数Ｍ＝６である。従って、Ｈ＜＝αＭが成立している（分割条件が成立している）。このため、エンコード部１３は、１番目のブロックとデータＤ４とを分割すると決定する（Ｓ４０３）。すなわち、エンコード部１３は、１番目のブロックと２番目のブロックとを分割すると決定する。なお、仮に、Ｈ＜＝αＭが成立していなければ（分割条件が成立していなければ）、エンコード部１３は、１番目のブロックと２番目のブロックとを分割せずにこれらを１つのブロックに統合して、１番目のブロックとして定義する。
【０１８８】
このように、現在のブロックの設定ビット数よりも次のデータ（ｉ＋１番目のデータ）の必要ビット数が小さい場合、まず、次のブロックのデータ数が確定されてから、ｉ＋１番目のデータを現在のブロックに含めるか否かが判定される。
【０１８９】
なお、図２６において、データＤ１０の必要ビット数が２番目のブロック（仮のブロック）の設定ビット数よりも小さい場合、エンコード部１３は、さらに、データＤ１０から新たなブロックの作成をスタートして、３番目のブロック（仮のブロック）のデータ数を確定する処理を行う。このように、次のブロックを暫定的に生成していき、ブロックに含まれるデータの数を順次確定していく。
【０１９０】
ステップＳ４０３の処理、ステップＳ４０５の処理、又は、ステップＳ４０７の処理の後、エンコード部１３は、図９に示す分割判定処理を終了して、処理を図８に戻す。
【０１９１】
図８に戻り、エンコード部１３は、ステップＳ３０４の分割判定処理の結果、ブロックを分割すると判定した場合（ステップＳ３０５：ＹＥＳ）は、ステップＳ３０６の処理を実行する。一方で、ブロックを分割しないと判定した場合（ステップＳ３０５：ＮＯ）、エンコード部１３は、次に、上記ステップＳ３０３の処理を実行する。
【０１９２】
ステップＳ３０６において、エンコード部１３は、ｉ＋１番目のデータを次のブロックに含める。これにより、現在のブロックが確定され、新たに次のブロックが生成されて、以降では、次のブロックにデータを含めるか否かの処理が行われる。
【０１９３】
ステップＳ３０６の処理の後、ステップＳ３０７において、エンコード部１３は、変数ｉに１を加算する。そして、次のステップＳ３０８において、エンコード部１３は、ｉがｎより大きいか否かを判定し、判定結果が否定の場合は、再びステップＳ３０２の処理を実行する。ｉがｎより大きい場合は、エンコード部１３は、図８に示すブロック最適化処理を終了する。
【０１９４】
以上のように、ステップＳ３０２〜ステップＳ３０８の処理が繰り返し行われることによって、ｎ個のサンプルデータに対して処理が行われる。これにより、周波数領域のデータ列が複数のブロックに分割され、それぞれのブロックの最適化が行われる。
【０１９５】
具体的には、ブロックを分割した場合のヘッダを含めた全体のデータサイズと、分割しない場合のヘッダを含めた全体のデータサイズとが考慮されて、全体のデータサイズが小さくなる場合の条件に基づいて、分割するか分割しないかが決定される。そして、分割されたブロックごとにデータが圧縮される。より具体的には、ブロックは、同じビット数で表現可能なデータの集合であり、圧縮後では、圧縮前に比べてデータのビット数が削減される。
【０１９６】
このようにして、サンプルデータ列が、データの必要ビット数に基づいて複数の可変ブロックに分割されて、余分なビットが削減される。以上の説明から明らかであるが、図８のブロック最適化処理は、図７に示す帯域毎のビット数削減処理とは異なり、各サンプルデータの値を正確に復元可能な可逆変換である。
【０１９７】
なお、図８に示すブロック最適化処理は、フレームヘッダＦＨの領域ＦＨ２の値毎に実行される。すなわち、領域ＦＨ２に０〜３の値が設定され、各値でのブロック最適化処理が行われる。そして、サイズが最も小さいフレームが選択されて、記憶される。
【０１９８】
図２７は、フレームヘッダＦＨの領域ＦＨ２の設定値によるデータサイズの違いを示す図である。図２７に示すように、領域ＦＨ２に値０が設定されると各ブロックに含まれるデータの最大数が１２８個に定められ、領域ＦＨ２に値２が設定されると各ブロックに含まれるデータの最大数が５１２個に定められる。このとき、図２７に示すように、ブロックに含まれるデータの最大数が異なることによって、データを圧縮した場合のフレームの全体サイズが異なる場合がある。
【０１９９】
従って、本実施形態においては、フレームヘッダＦＨの領域ＦＨ２に各値（０〜３）を設定してデータを圧縮し、それぞれの圧縮後のデータサイズが最も小さいフレームが選択される。
【０２００】
（デコード処理）
次に、上述のようにして圧縮された圧縮データをデコードする処理について説明する。デコード処理は、上記エンコード処理と逆の処理である。すなわち、エンコード処理によって圧縮されて記憶されたデータがフレーム毎に読み込まれて、上述した処理と逆の処理が行われる。図２８は、デコード部１５によって行われるデコード処理の流れを示すフローチャートである。
【０２０１】
図２８に示すように、デコード部１５は、まず、圧縮データ記憶部１４から１フレームを抽出する（ステップＳ５０１）。続いて、デコード部１５は、抽出したフレームに含まれる各ブロックのデータを取り出し、１つのデータ列として展開する（ステップＳ５０２）。
【０２０２】
具体的には、デコード部１５は、フレームヘッダＦＨの領域ＦＨ１と、領域ＦＨ２とに格納された値を読み取り、フレームのサイズを特定するとともに、ブロックヘッダの「サンプル数」のビット数を特定する。特定されたサンプル数のビット数によって、各ブロックヘッダのサイズが特定される。デコード部１５は、先頭のブロックのブロックヘッダＢＨを読み取って、当該先頭のブロックに含まれるサンプルデータの数を特定するとともに、各サンプルデータのビット数を特定する。そして、デコード部１５は、先頭のブロックに含まれる各サンプルデータを抽出する。また、デコード部１５は、先頭のブロックのサンプルデータの数と各サンプルデータのビット数によって、次のブロックの区切り位置を特定することができる。これらの処理を先頭のブロックから最後のブロックまで繰り返すことにより、デコード部１５は、フレームに含まれるすべてのサンプルデータ（ｎ個の周波数領域のデータ）を抽出して、データ列として展開することができる。
【０２０３】
次に、ステップＳ５０３において、デコード部１５は、ステップＳ５０２の処理で得られたデータ列を、符号データ列と絶対値データ列とに分離する。そして、デコード部１５は、分離したデータ列を１６ビット化する（ステップＳ５０４）。ここでは、エンコード処理と逆の処理を行うことにより、各データが、１６ビットで表現される。
【０２０４】
次に、ステップＳ５０５において、デコード部１５は、得られた各データを指数化する。すなわち、図６のステップＳ１０６における対数化と逆の処理が行われる。続いて、ステップＳ５０７において、デコード部１５は、分離した符号データ列と絶対値データ列とを結合する。
【０２０５】
次に、ステップＳ５０８において、デコード部１５は、ＩＭＤＣＴ（Ｉｎｖｅｒｓｅ  ＭＤＣＴ；逆修正離散コサイン変換）を実行する。これによって、周波数領域のデータから時間領域のデータに変換される。続いて、デコード部１５は、得られた時間領域のデータにハニング窓を掛ける（ステップＳ５０９）。そして、デコード部１５は、音量を１００／ｖ％にする（ステップＳ５１０）。このように、１フレームのデコード処理が行われる。
【０２０６】
続いて、デコード部１５は、圧縮データ記憶部１４にデータが無くなったか否かを判定し（ステップＳ５１１）、データが無くなっていれば、図２８のデコード処理を終了する。データが無くなっていなければ、デコード部１５は、再びステップＳ５０１の処理を実行する。
【０２０７】
以上のようにして、ステップＳ５０１〜Ｓ５１１の処理が繰り返し行われることで、圧縮された圧縮データが伸張されて音声として出力される。
【０２０８】
なお、上記図６〜図９、及び図２８に示したフローチャートにおける各ステップの処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよい。また、各ステップにおいて用いられた値は単なる例示に過ぎず、どのような値が用いられてもよい。また、本実施形態では、上記フローチャートの各ステップの処理をデータ圧縮伸張装置１０のＣＰＵが実行するものとして説明したが、上記フローチャートにおける一部又は全部のステップの処理を、ＣＰＵ以外のプロセッサや専用回路が実行するようにしてもよい。
【０２０９】
以上のように、本実施形態では、周波数領域のデータ列が複数の可変ブロックに分割され、ブロック毎に圧縮が行われる。これにより、データ圧縮により好ましいブロックを生成して、データを圧縮することができる。具体的には、ブロックを分割することによって増加するブロックヘッダのサイズを考慮してブロックを分割するか否かを判定し、分割した場合にデータサイズが小さくなる場合は、ブロックを分割する。このため、圧縮したときのデータの全体サイズをより小さくすることができる。
【０２１０】
また、本実施形態では、各データの必要ビット数に基づいてブロックを生成し、ブロック内の各データの不要なビットを削減することにより、データの圧縮が行われる。これにより、簡易な計算により複数のデータをブロックにまとめて、データを圧縮することができる。また、本実施形態のブロック最適化処理では必要なビットを残して不要なビットのみを削減するため、可逆的にデータを圧縮することができる。
【０２１１】
また、本実施形態では、上記帯域毎のビット数削減処理において、周波数帯域に応じてビット数の削減幅を異ならせた。これにより、必要に応じて特定の周波数帯域のデータについては高い精度でデータを復元できるとともに、それ以外の周波数帯域のデータについては高い圧縮率で圧縮することができる。このようにして、データの劣化を防止しつつ、全体としての圧縮率を向上することができる。
【０２１２】
また、本実施形態では、上記帯域毎のビット数削減処理において、複数の手法（第１手法及び第２手法）のうちの何れかの手法によりビット数を削減した。これにより、例えば復号した時により影響が小さい手法を用いてデータを圧縮することができる。
【０２１３】
また、本実施形態では、ブロックを分割するか否かについての評価（上記分割条件の判定）が行われて、その結果に基づいてブロックが分割される。このため、例えば、よりサイズが小さくなる方法でブロックを分割することができる。
【０２１４】
また、本実施形態では、音声信号が時間領域のデータから周波数領域のデータに変換された後にデータの圧縮が行われるのみならず、周波数領域のデータに変換される前の時間領域のデータについても圧縮が行われる（上記ステップＳ１０２）。このため、より圧縮率を高めることができる。
【０２１５】
以上のように、本実施形態では例えば音声を圧縮することができる。例えば、人の声の音声信号に対して本実施形態の圧縮方法を用いた場合は、特に有効である。音楽などの音声信号を周波数領域のデータに変換した場合に比べて、人の声の音声信号を周波数領域のデータに変換した場合の方が、偏った周波数帯（高周波数帯域ではない部分）にのみ大きな振幅が現れる傾向にある。また、人の声の場合、高周波数帯域では、比較的振幅が小さくなる傾向にある。このため、結果として同じブロックに属しやすくなり、圧縮効率が上がる。すなわち、人の声の場合、高周波数領域では、少ないビット数で表すことができるデータが出現しやすく、圧縮率の高いブロック（データ数が多く、かつ、ビット数が小さいブロック）が生成されやすい。
【０２１６】
なお、上記データ圧縮方法は、任意の情報処理装置において実行されることができる。
【０２１７】
例えば、任意の情報処理装置としては、パーソナルコンピュータ、サーバ、スマートフォン、携帯電話、ＰＤＡ、ゲーム装置、タブレット型コンピュータ等が挙げられる。また、これら複数の装置が相互に接続されることによって構成されるシステムが、上記エンコード処理及びデコード処理を行ってもよい。
【０２１８】
（変形例）
上記実施形態で示した各データの必要ビット数に基づくデータ圧縮方法に種々の変形が加えられてもよい。
【０２１９】
例えば、上記実施形態では、必要ビット数が同じ隣り合うデータを１つのブロックに含めた。また、隣り合うデータの必要ビット数が異なる場合であっても、式（４）又は式（８）に示す条件を満たす場合は、これらのデータを１つのブロックに含めた。すなわち、ブロックを分割するかしないかを上記式（４）又は式（８）に基づいて判定した。他の実施形態では、ブロックを分割するかしないかの条件は上記式に限らず、圧縮後のデータサイズが小さくなるのであれば、他の条件式に基づいてブロックを分割する／しないが判定されてもよい。
【０２２０】
また、他の実施形態では、隣り合うデータの必要ビット数が同じ場合にこれらのデータを１つのブロックにまとめ、隣り合うデータの必要ビット数が異なる場合は別のブロックにデータを含めることにより、複数のブロックを生成してもよい。この場合、上記式（４）や式（８）に示す判定は行われず、必要ビット数が異なるデータは異なるブロックに含められる。
【０２２１】
また、他の実施形態では、例えば、隣り合うデータの必要ビット数の差分が所定値以下の場合に、これらのデータを１つのブロックに含め、所定値を超える場合は、別のブロックに含めてもよい。
【０２２２】
また、上記実施形態では、現在のブロックに次のデータを含めるか否かを順に判定した。他の実施形態では、必要ビット数が同じブロックを仮のブロックとして生成した後、各仮ブロックを統合するか否かが判定され、複数のブロックが生成されてもよい。
【０２２３】
また、上記実施形態では、各データの圧縮後のビット数（ブロックの設定ビット数）が、ブロックヘッダの領域ＢＨ２に設定され、当該ビット数に基づいて各データが抽出されて伸張された。他の実施形態では、各ブロックに含まれる各データを抽出することができれば、どのような情報がブロックヘッダに設定されてもよい。
【符号の説明】
【０２２４】
１０  データ圧縮伸張装置
１１  入力部
１２  Ａ／Ｄ変換部
１３  エンコード部
１４  圧縮データ記憶部
１５  デコード部
１６  Ｄ／Ａ変換部
１７  出力部
【図１】
2014103496.tif 000003
【図２】
2014103496.tif 000004
【図３】
2014103496.tif 000005
【図４】
2014103496.tif 000006
【図５】
2014103496.tif 000007
【図６】
2014103496.tif 000008
【図７】
2014103496.tif 000009
【図８】
2014103496.tif 000010
【図９】
2014103496.tif 000011
【図１０】
2014103496.tif 000012
【図１１】
2014103496.tif 000013
【図１２】
2014103496.tif 000014
【図１３】
2014103496.tif 000015
【図１４】
2014103496.tif 000016
【図１５】
2014103496.tif 000017
【図１６】
2014103496.tif 000018
【図１７】
2014103496.tif 000019
【図１８】
2014103496.tif 000020
【図１９】
2014103496.tif 000021
【図２０】
2014103496.tif 000022
【図２１】
2014103496.tif 000023
【図２２】
2014103496.tif 000024
【図２３】
2014103496.tif 000025
【図２４】
2014103496.tif 000026
【図２５】
2014103496.tif 000027
【図２６】
2014103496.tif 000028
【図２７】
2014103496.tif 000029
【図２８】
2014103496.tif 000030