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