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