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