JP6125807B2 - データ圧縮装置、データ圧縮プログラム、データ圧縮システム、データ圧縮方法、データ伸張装置、およびデータ圧縮伸張システム - Google Patents

データ圧縮装置、データ圧縮プログラム、データ圧縮システム、データ圧縮方法、データ伸張装置、およびデータ圧縮伸張システム Download PDF

Info

Publication number
JP6125807B2
JP6125807B2 JP2012253144A JP2012253144A JP6125807B2 JP 6125807 B2 JP6125807 B2 JP 6125807B2 JP 2012253144 A JP2012253144 A JP 2012253144A JP 2012253144 A JP2012253144 A JP 2012253144A JP 6125807 B2 JP6125807 B2 JP 6125807B2
Authority
JP
Japan
Prior art keywords
data
block
bits
blocks
input data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2012253144A
Other languages
English (en)
Other versions
JP2014103496A (ja
Inventor
阿部 友一
友一 阿部
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nintendo Co Ltd
Original Assignee
Nintendo Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nintendo Co Ltd filed Critical Nintendo Co Ltd
Priority to JP2012253144A priority Critical patent/JP6125807B2/ja
Priority to EP13174618.2A priority patent/EP2693431B1/en
Publication of JP2014103496A publication Critical patent/JP2014103496A/ja
Application granted granted Critical
Publication of JP6125807B2 publication Critical patent/JP6125807B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、データ圧縮装置、データ圧縮プログラム、データ圧縮システム、データ圧縮方法、データ伸張装置、およびデータ圧縮伸張システムに関する。
従来、例えば入力された被圧縮データに対する圧縮アルゴリズムとしてハフマン符号化が用いられることがある。(例えば、特許文献1)。ハフマン符号化では、情報の頻度分析を行い、出現率が高い情報に短い符号を割り当て、出現率の低い情報には長い符号を割り当てることにより、被圧縮データを圧縮する。
特開2008−107615号公報
しかしながら、従来の技術では圧縮の際に頻度分析を行う必要があり、例えば圧縮の際の処理負荷や圧縮の効率性という点においては改善の余地があった。
それ故、本発明の目的は、頻度分析に基づかない新規なデータ圧縮技術を提供することである。
本発明は、上記の課題を解決するために、以下の構成を採用した。
本発明は、複数の入力データを圧縮して圧縮データを生成するデータ圧縮装置である。データ圧縮装置は、ブロック生成手段と、データ圧縮手段とを備える。ブロック生成手段は、上記入力データの値を表すために必要なビット数を示す必要ビット数に基づいて、上記複数の入力データのそれぞれが複数のブロックのいずれかに含まれるように、当該複数のブロックを生成する。データ圧縮手段は、上記ブロック生成手段により生成されたブロックごとに当該ブロックに含まれるデータを圧縮することにより、上記圧縮データを生成する。
上記によれば、上記必要ビット数に基づいて、圧縮対象の複数の入力データをそれぞれ複数のブロックに分割し、分割したブロックごとに圧縮することができる。これにより、例えば効率よく圧縮対象のデータを圧縮することができる。
また、他の構成では、上記ブロック生成手段は、上記必要ビット数に基づいて、上記複数の入力データを並べたデータ列を区切って上記複数のブロックを生成してもよい。
上記によれば、データ列のうちの隣り合う入力データを1のブロックに含めて複数のブロックを生成することができ、ブロックごとにデータを圧縮することができる。
また、他の構成では、上記データ圧縮手段は、ブロックに含まれる入力データの値を表すために必要なビットを残して不要なビットを削減することにより、当該ブロックの各データを圧縮してもよい。
上記によれば、必要なビットを残して不要なビットを削減することにより、データを圧縮することができる。これにより、圧縮対象のデータを可逆的に圧縮することができる。
また、他の構成では、上記ブロック生成手段は、隣り合う入力データの上記必要ビット数が同じ場合、当該隣り合う入力データを同じブロックに含めてもよい。
上記によれば、入力データの値を表すために必要なビット数が同じ隣り合う入力データを同じブロックに含めて圧縮することができ、効率よくデータを圧縮することができる。
また、他の構成では、上記ブロック生成手段は、隣り合う入力データの上記必要ビット数が異なる場合であっても、所定条件が満たされている場合に、当該隣り合うデータを同じブロックに含めてもよい。
上記によれば、隣り合う入力データの必要ビット数が異なる場合であっても所定条件が満たされている場合は、当該隣り合うデータを同じブロックに統合することができる。これにより、ブロックの数が増大しすぎることを防止することができる。
また、他の構成では、上記ブロック生成手段は、隣り合う入力データを1つのブロックに含めて当該1つのブロックを生成するよりも、隣り合う入力データを別のブロックに含めて2つのブロックを生成する方が圧縮後のデータサイズが小さくなる場合、当該隣り合う入力データを別のブロックに含めて2つのブロックを生成してもよい。
上記によれば、圧縮後のデータサイズが小さくなるように複数のブロックを生成することができ、データの圧縮率を高めることができる。
また、他の構成では、上記データ圧縮手段は、上記必要ビット数に基づいて、上記圧縮データを伸張する際に用いられる伸張情報をブロックごとに生成し、当該伸張情報を含む上記圧縮データを生成してもよい。
上記によれば、必要ビット数に基づいて複数のブロックを生成するとともに、データを伸張する際に用いられる伸張情報をブロックごとに生成することができる。
また、他の構成では、上記データ圧縮手段は、上記伸張情報として、ブロック内の各入力データのビット数を示すビット情報を、上記必要ビット数に基づいて設定し、ブロック内の各入力データのビット数を上記ビット情報が示すビット数に圧縮することにより、上記圧縮データを生成してもよい。
上記によれば、ブロック内の各データをビット情報が示すビット数に圧縮することができる。
また、他の構成では、上記ブロック生成手段は、あるブロックの隣の入力データの上記必要ビット数と、当該あるブロックの上記ビット情報が示すビット数との差分に基づいて、当該隣の入力データを当該あるブロックに含めて1つのブロックを生成するか、又は当該隣の入力データを別のブロックに含めて2つのブロックを生成するかを判定してもよい。
上記によれば、ブロックを生成する際に、あるブロックの隣の入力データの必要ビット数と、当該あるブロックのビット情報が示すビット数との差分に基づいて、当該隣の入力データを当該あるブロックに含めるか否かを判定することができる。
また、他の構成では、上記ブロック生成手段は、上記あるブロックの隣の入力データを上記あるブロックに含めて1つのブロックを生成するか、又は当該隣の入力データを上記別のブロックに含めて2つのブロックを生成するかを、上記伸張情報のサイズにも基づいて判定してもよい。
上記によれば、伸張情報のサイズにも基づいて、上記あるブロックにその隣の入力データを含めるか否かを判定することができる。
また、他の構成では、上記ブロック生成手段は、上記隣の入力データの上記必要ビット数が上記あるブロックの上記ビット情報が示すビット数よりも大きい場合において、上記差分と上記あるブロックに含まれる入力データの数との積が上記伸張情報のサイズよりも小さい場合、上記あるブロックに上記隣の入力データを含めてもよい。
上記によれば、あるブロックの隣の入力データを当該あるブロックに含めることができ、当該隣の入力データを別のブロックに分割して2つのブロックを生成する場合よりも圧縮後のサイズを小さくすることができる。
また、他の構成では、上記ブロック生成手段は、上記隣の入力データの上記必要ビット数が上記あるブロックの上記ビット情報が示すビット数よりも大きい場合において、上記あるブロックに上記隣の入力データを含める場合、上記あるブロックの上記ビット情報が示すビット数を増加させてもよい。
上記によれば、ビット数を増加させることによって、上記あるブロックに含められる隣の入力データを伸張する際に、当該隣の入力データを正確に復元することができる。
また、他の構成では、上記ブロック生成手段は、上記隣の入力データの上記必要ビット数が上記あるブロックの上記ビット情報が示すビット数よりも小さい場合において、上記差分と上記別のブロックに含まれる入力データの数との積が上記伸張情報のサイズよりも小さい場合、上記あるブロックに上記隣の入力データを含めてもよい。
上記によれば、あるブロックの隣の入力データを当該あるブロックに含めることができ、当該隣の入力データを別のブロックに分割して2つのブロックを生成する場合よりも圧縮後のサイズを小さくすることができる。
また、他の構成では、上記データ圧縮装置は、上記データ圧縮手段によるデータ圧縮の前に、上記複数の入力データのビット数を予め定められた値に削減するビット数削減手段をさらに備えてもよい。
上記によれば、上記データ圧縮手段によるデータの圧縮の前に、入力データをある程度圧縮することができる。
また、他の構成では、上記データ圧縮装置は、元データを対数化して上記入力データを生成する対数処理手段をさらに備えてもよい。上記ブロック生成手段は、上記対数化処理手段によって生成された上記入力データのそれぞれが複数のブロックのいずれかに含まれるように、当該複数のブロックを生成する。
上記によれば、対数化された入力データを上記データ圧縮手段による圧縮対象のデータとすることができる。対数化されたデータは元データよりも取り得る値の範囲が狭くなる傾向にある。このため、上記データ圧縮手段による圧縮をより効果的なものとすることができる。
また、他の構成では、上記複数の入力データは、音声信号をデジタル変換して得られる音声データであってもよい。
上記によれば、音声データを圧縮することができる。
また、他の構成では、上記データ圧縮装置は、音声信号を所定の周期でサンプリングして得られた複数の時間領域のデータを複数の周波数領域のデータに変換する変換手段をさらに備えてもよい。上記ブロック生成手段は、上記複数の入力データとして、上記複数の周波数領域のデータのそれぞれが複数のブロックのいずれかに含まれるように、当該複数のブロックを生成する。
上記によれば、音声信号を圧縮することができる。
本発明の別の一例は、伸張対象データを伸張するデータ伸張装置である。上記伸張対象データは、複数の圧縮されたデータを含むブロックと、当該ブロックに含まれる各データのビット数を示す情報とを含む。データ伸張装置は、抽出手段と、伸張手段とを備える。抽出手段は、上記各データのビット数を示す情報に基づいて、上記ブロックに含まれる複数の圧縮されたデータを抽出する。伸張手段は、上記抽出手段によって抽出された上記圧縮されたデータを伸張する。
本発明の別の一例は、複数の入力データを圧縮して圧縮データを生成するとともに、当該圧縮データを伸張するデータ圧縮伸張システムである。データ圧縮伸張システムは、ブロック生成手段と、データ圧縮手段と、抽出手段と、伸張手段とを備える。ブロック生成手段は、上記入力データの値を表すために必要なビット数を示す必要ビット数に基づいて、上記複数の入力データのそれぞれが複数のブロックのいずれかに含まれるように、当該複数のブロックを生成する。データ圧縮手段は、上記ブロック生成手段により生成されたブロックごとに当該ブロックに含まれるデータを圧縮するとともに、ブロックに含まれる各データのビット数を示す情報を生成することにより、上記圧縮データを生成する。抽出手段は、上記各データのビット数を示す情報に基づいて、上記ブロックに含まれる複数の圧縮されたデータを抽出する。伸張手段は、上記抽出手段によって抽出された上記圧縮されたデータを伸張する。
なお、本発明の別の一例は、上記装置において実行されるプログラムであってもよし、複数の装置によって構成されるシステムであってもよい。さらに、本発明の別の一例は、上記各装置(システム)において行われる方法であってもよい。
本発明によれば、頻度分析に基づかないデータの圧縮技術を提供することができる。
データ圧縮伸張装置10の機能構成を示すブロック図 本実施形態におけるデータ圧縮処理が行われる対象のデータの一例を示す図 データを表すために必要なビット数に基づいたブロックの生成および圧縮の一例を示す図 必要ビット数が異なる隣り合うデータが1つのブロックに含められる場合と、含められない場合の一例を示す図 必要ビット数が異なる隣り合うデータが1つのブロックに含められる場合と、含められない場合の他の例を示す図 エンコード部13によって実行されるエンコード処理の流れを示すメインフローチャート ステップS108の帯域毎のビット数削減処理の詳細を示すフローチャート ステップS109のブロック最適化処理の詳細を示すフローチャート ステップS304の分割判定処理の詳細を示すフローチャート 入力部11において入力された音声信号の波形を示す図 期間Tにおける音声信号の波形を示す図 取得された時間領域のデータを圧縮する様子を示す図 MDCTの実行によって得られる周波数領域のデータの一例を示す図 符号のデータ列と絶対値のデータ列との分離について説明するための図 ステップS107におけるビット数削減処理(5ビット化)について説明するための図 本実施形態におけるフレームの定義を示す図 本実施形態におけるブロックの定義を示す図 帯域毎のビット数削減処理の概要を示す図 第1手法による低ビット化を示す図であり、第1手法を用いてビット数を5ビットから4ビットに削減する処理を示す図 第2手法による低ビット化を示す図であり、第2手法を用いてビット数を5ビットから4ビットに削減する処理を示す図 データ列の値とその値を表現するために必要なビット数とを示す図 i+1番目のデータの必要ビット数が現在のブロックの設定ビット数と同じ場合に、i+1番目のデータが現在のブロックに含められる様子を示す図 ステップS405における現在のブロックの設定ビット数を拡張する処理を説明するための図 i+1番目のデータの必要ビット数が現在のブロックの設定ビット数よりも大きい場合における、分割条件の算出根拠を説明するための図 i+1番目のデータの必要ビット数が現在のブロックの設定ビット数よりも小さい場合における、分割条件の算出根拠を説明するための図 次のブロックのデータ数Mが確定される様子を示す図であり、現在のブロックと次のブロックとを分割する様子を示す図 フレームヘッダFHの領域FH2の設定値によるデータサイズの違いを示す図 デコード部15によって行われるデコード処理の流れを示すフローチャート
(データ圧縮伸張装置の構成)
以下、図面を参照して、一実施形態に係るデータ圧縮伸張装置10について説明する。データ圧縮伸張装置10は、例えば音声信号(画像信号でもよい)の入力を受け付け、当該音声信号をデジタル信号に変換して圧縮し、当該圧縮データを記憶する。また、データ圧縮伸張装置10は、記憶された圧縮データを伸張して音声信号に変換して出力する。また、データ圧縮伸張装置10は、音声や画像の圧縮に限らず、任意のデータを圧縮するために用いられてもよい。以下では、データ圧縮伸張装置10を用いて、例えば人の声などの音声(音楽等でもよい)を圧縮・伸張する場合について説明する。
図1は、データ圧縮伸張装置10の機能構成を示すブロック図である。図1に示すように、データ圧縮伸張装置10は、入力部11と、A/D変換部12と、エンコード部13と、圧縮データ記憶部14と、デコード部15と、D/A変換部16と、出力部17とを含む。
入力部11は、例えばマイクであり、例えば人の声等の音声信号の入力を受け付ける。A/D変換部12は、入力部11からのアナログ信号を受信して、デジタル信号に変換する。A/D変換部12は、アナログの音声信号を所定のサンプリング周期でサンプリングし、メモリ等の記憶部に一時的に記憶する。サンプリング周波数としては、例えば、44kHzであってもよいし、他の任意の周波数であってもよいし、可変であってもよい。
エンコード部13は、A/D変換部12からサンプリングデータを取得し、所定の処理を行う。具体的には、エンコード部13は、取得したサンプリングデータを周波数領域のデータに変換し、変換した周波数領域のデータを圧縮することにより、音声信号を圧縮した圧縮データを生成する。
圧縮データ記憶部14は、エンコード部13が生成した圧縮データを記憶する。圧縮データ記憶部14は、例えば不揮発性メモリによって構成される。
デコード部15は、圧縮データ記憶部14から圧縮データを読み取り、圧縮データを伸張する。D/A変換部16は、伸張されたデータをアナログ信号に変換し、出力部17に出力する。出力部17は、例えばスピーカであり、D/A変換部16からのアナログ信号を受け取って音声として出力する。
なお、データ圧縮伸張装置10は、ハードウェア構成として、CPU、メインメモリ、不揮発性メモリ、マイク、スピーカ等を備える。例えば、不揮発性メモリには、エンコード部13によって行われるデータ圧縮処理(後述する)やデコード部15によって行われるデータ伸張処理(後述する)を実行するためのプログラムが記憶される。そして、このプログラムがメインメモリに読み込まれ、CPUを上記各部として機能させる。また、データ圧縮伸張装置10は、上記各部のうちの一部又は全部として機能する専用回路を備えてもよい。すなわち、上記各部は、ソフトウェア、ハードウェア、またはこれらの組み合わせによって実現されることができる。
なお、データ圧縮伸張装置10の構成は単なる一例であり、後述する処理(エンコード処理、デコード処理)はどのような装置において行われてもよい。例えば、データ圧縮伸張装置10が、物理的に分離された複数の装置によって構成されてもよい。例えば、物理的に離れた場所に設置された複数の装置がネットワークで互いに接続されて、データ圧縮伸張装置(システム)が実現されてもよい。例えば、エンコード部13とデコード部15が物理的に離れており、エンコード部13でエンコードされた圧縮データがストリーミング形式でデコード部15に送信されて、デコード部15においてデコードされてもよい。
(データ圧縮処理の概要)
次に、データ圧縮伸張装置10によって行われるデータ圧縮処理の概要について説明する。図2は、本実施形態におけるデータ圧縮処理が行われる対象のデータの一例を示す図である。
図2に示すように、例えば、アナログの音声信号を所定のサンプリング周期でサンプリングしたサンプリングデータが取得される。ここでは、期間Tの間にm(mは正の整数)個のサンプリングデータが取得されるものとする。この時間領域のサンプリングデータのデータ列に対して、周波数領域のデータ(周波数スペクトル)に変換するための所定の変換が行われる。所定の変換としては、例えば、後述する修正離散コサイン変換(MDCT)であってもよいし、離散コサイン変換(DCT)、フーリエ変換あるいはその派生の変換等、どのような変換方法が用いられてもよい。
所定の変換が行われることによって、例えば、n(nは正の整数)個の周波数領域のデータが取得される。すなわち、所定の処理が行われることによって、期間Tにおいて取得された時間領域のデータ列が、周波数領域のデータ列として、例えば余弦関数を基底とする一次結合(様々な周波数と振幅を有する余弦関数の和)の係数に変換される。ここで得られる周波数領域のデータ列は、低い周波数から高い周波数の順に並んだn個の数列となる。なお、ここでは、所定の変換が行われた後の1の周波数領域のデータ(ある周波数の余弦関数の係数)を上記サンプリングデータと区別して「サンプルデータ」と呼ぶことがある。
以下では、所定の変換が行われることによって生成された複数のサンプルデータを並べたデータ列を圧縮する方法について説明する。本実施形態では、データの値を表すために最低限必要なビット数(以下、「必要ビット数」という場合がある)に基づいて、データ列を区切って複数のブロックを生成し、生成したブロックごとに圧縮が行われる。
図3は、データを表すために必要なビット数に基づいたブロックの生成および圧縮の一例を示す図である。図3に示すように、時間領域のデータに対して上記所定の変換が行われることにより、例えば、サンプルデータD1、サンプルデータD2、・・、サンプルデータDn(n個のデータ)からなる周波数領域のデータ列が得られたとする。各サンプルデータのサイズは、例えば5ビットであるとする。この場合、このサンプルデータ列の全体サイズは、5nビットとなる。
ここで、データサイズが5ビットの各データには、それぞれ図3に示す値が格納されているものとする。例えば、データD1、データD2、データD3、データD4には、それぞれ「3」、「3」、「3」、「2」が格納されている。これらの各データのサイズは5ビットであるが(これら各データのために5ビットが確保されるが)、これら各データの値を表すために最低限必要なビット数(必要ビット数)は、2ビットである。従って、必要ビット数が同じデータを1つのブロックにまとめる。そして、データを表すために必要なビットを残して不要なビットを削減することにより、ブロック内の各データを圧縮し、ブロック全体のサイズを圧縮する。
具体的には、図3に示すように、データD1〜データD6は、値が2〜3の範囲であるため、これらのデータは2ビットで表現することができる。このため、これらデータD1〜D6をブロック1にまとめる。また、データD7〜データD10は、値が8〜11の範囲であるため、これらのデータは4ビットで表現することができる。このため、データD7〜データD10をブロック2にまとめる。
そして、ブロック1に含まれる各データのサイズを削減する。例えば、ブロック1の各データは2ビットで表すことができるため、ブロック1の各データのサイズを5ビットから2ビットにして、それぞれ3ビット削減する。また、ブロック2の各データは4ビットで表すことができるため、ブロック2の各データのサイズを5ビットから4ビットにして、それぞれ1ビット削減する。
各ブロックには、ブロックヘッダBHが付加される。ブロックヘッダBHには、当該ブロックに含まれるデータを伸張(復号)するために必要な情報が含まれる。具体的には、ブロックヘッダBHには、当該ブロックに含まれる各データのビット数(1のデータに割り当てられるサイズ)を示すビット情報と、当該ブロックに含まれるデータの数(サンプル数)の情報が含まれる。
例えば、ブロック1のブロックヘッダBHには、各データのビット数として、「2」が記憶され、サンプル数として、「6」が記憶される。ブロックに含まれるデータのビット数とサンプル数によって、各データの区切りを判別することができ、各データを抽出することができる。そして、抽出した各データのサイズを2ビットから5ビットに戻すことにより、各データを正確に復元することができる。
本実施形態では、隣り合うデータの必要ビット数が異なる場合であっても、所定の条件を満たす場合は、これら隣り合うデータが同じブロックに含められる場合がある。
図4は、必要ビット数が異なる隣り合うデータが1つのブロックに含められる場合と、含められない場合の一例を示す図である。
図4に示すように、データD1〜データD6は、同じビット数「2」で表現することができるため、これらのデータはブロック1に含められる。ブロック1の次のデータD7は、値が8であり、2ビットで表現することはできず、データD7の必要ビット数は「4」である。また、データD8〜データD10の必要ビット数は、データD7と同様に、「4」である。
本実施形態では、データD7(データD7〜D10)をブロック1に含めるか、又は、ブロック2を生成して、当該ブロック2にデータD7を含めるかの判定が行われる。具体的には、1つのブロックにまとめたときの圧縮後のサイズが2つのブロックに分割したときの圧縮後のサイズよりも大きい場合、2つのブロックに分割される。
より具体的には、データD7〜データD10をブロック1に含めて不要なビットを削減する場合、データD7〜データD10を表現するために最低限必要なビット数は4であるため、ブロック1の各データのビット数(ブロックヘッダBHのビット情報が示すビット数)は4となる。すなわち、ブロック1に含まれる各データには4ビットが割り当てられる。このため、ブロック1の全体サイズは、ブロックヘッダBHのサイズと、40ビット(4ビット×10個)との和である。
一方、図4に示すように、データD7〜データD10をブロック1に含めずに、ブロック2に含めて不要なビットを削減する場合、全データ(データD1〜データD10)のサイズは、ブロック1のサイズと、ブロック2のサイズとの和である。ブロック1の各データは2ビットで表現することができるため、当該ブロック1の各データのビット数は2ビットとなり、ブロック1のデータサイズは、12ビット(2ビット×6個)にブロックヘッダBHのサイズを加えた値となる。また、ブロック2の各データは4ビットで表現することができるため、当該ブロック2の各データのビット数は4ビットとなり、ブロック2のデータサイズは、16ビット(4ビット×4個)にブロックヘッダBHのサイズを加えた値となる。
このように、図4に示す例において、ブロック1にデータD7〜データD10を含めた場合(ケース1)は、ブロック1に含まれる各データに4ビットが割り当てられる。データD1〜データD6は2ビットで表現可能であるため、12ビット(2ビット×6個)が余分なビットとなる。一方、ブロック1にデータD7〜データD10を含めずに、ブロック2を生成して当該ブロック2にデータD7〜データD10を含める場合(ケース2)は、ブロック2のブロックヘッダBHのサイズの分だけ余分にビットが必要となる。
このため、これらケース1とケース2における全体のデータサイズを考慮して、ブロック1にデータD7(〜データD10)を含めるか、ブロック2にデータD7(〜データD10)を含めるかが判定される。
詳細は後述するが、ブロック1の隣のデータD7をブロック1に含めるか否かは、ブロックヘッダBHのサイズ、及び、データD7の必要ビット数とブロック1に含まれる各データのビット数との差分に基づいて、決定される。具体的には、データD7の必要ビット数がブロック1の各データのビット数よりも大きい場合において、上記差分とブロック1に含まれるデータの数との積がブロックヘッダBHのサイズよりも小さい場合、当該データD7をブロック1に含める。すなわち、この場合、データD7をブロック1と分割しない。これにより、ブロック2を生成してデータD7をブロック2に含めるよりも、ブロック2を生成せずにブロック1に含めた方が、圧縮した場合のブロックヘッダを含めたサイズは小さくなる。
図5は、必要ビット数が異なる隣り合うデータが1つのブロックに含められる場合と、含められない場合の他の例を示す図である。
図5に示すように、データD1〜データD6は、図4と同様、同じビット数「2」で表現することができるため、これらのデータはブロック1に含められる。次のデータD7は、値が1であり、1ビットで表現することが可能である。また、データD8〜データD10を表現するために必要なビット数は、データD7と同様に、「1」である。
データD7〜データD10をブロック1に含めて不要なビットを削減する場合、データD7〜データD10の必要ビット数は1であっても、データD1〜データD6の必要ビット数は2であるため、ブロック1の各データのビット数(ブロックヘッダBHのビット情報が示すビット数)は2にする必要がある。すなわち、ブロック1に含まれる各データ(データD1〜データD10)には2ビットが割り当てられる。
一方、図5に示すように、データD7〜データD10をブロック1に含めずに、ブロック2に含めて不要なビットを削減する場合、当該ブロック2の各データのビット数は1ビットとなるが、ブロック2のブロックヘッダBHをさらに付加する必要がある。
このように、図5に示す例において、ブロック1にデータD7〜データD10を含めた場合(ケース1)は、ブロック1に含まれる各データに2ビットが割り当てられる。データD7〜データD10は1ビットで表現可能であるため、4ビット(1ビット×4個)が余分なビットとなる。一方、ブロック1にデータD7〜データD10を含めずに、ブロック2を生成して当該ブロック2にデータD7〜データD10を含める場合(ケース2)は、ブロック2のブロックヘッダBHのサイズの分だけ余分にビットが必要となる。これらケース1とケース2におけるデータサイズを考慮して、ブロック1にデータD7を含めるか否かが判定される。
詳細は後述するが、ブロック1の隣のデータD7の必要ビット数がブロック1の各データのビット数よりも小さい場合において、上記差分とブロック2に含まれるデータの数との積がブロックヘッダBHのサイズよりも小さい場合、当該データD7をブロック1に含める。これにより、ブロック2を生成してデータD7をブロック2に含めるよりも、ブロック2を生成せずにブロック1に含めた方が、圧縮した場合のブロックヘッダを含めたサイズは小さくなる。
例えば、音声信号の場合、サンプリングして得られた時間領域のデータを周波数領域のデータに変換すると、低い周波数から高い周波数まで順に並んだサンプルデータ列を得ることができる。この場合において、このデータ列から、人間の耳に聞こえない範囲の周波数に対応するサンプルデータを削除して、人間の耳に聞こえる周波数に対応するサンプルデータのみを取り出してもよい。このようにして、得られたサンプルデータ列は、比較的値の近いデータがまとまっている場合がある。このような値の近いデータは、同じ(又は近い)ビット数で表現することができるため、これらのデータを同じビット数で表して1つのブロックにまとめる。そして、ブロック単位でビット数を削減することによって、データを圧縮する。
以上のように、本実施形態では、データの値を表すために必要なビット数に基づいて、圧縮対象のデータ列を区切って複数のブロックを生成する。そして、生成した各ブロック内のデータのビットを削減することにより、圧縮対象のデータ列を圧縮する。
なお、上記では、一例として音声データを圧縮することとしたが、他の実施形態では、音声データに限らず、例えば画像データを圧縮してもよい。また、文字列のデータ、プログラムデータ等、任意のデータを圧縮してもよい。同じビット数で表現可能なデータが連続する傾向にあるデータの場合は、効率的に圧縮することができる。
(処理の詳細)
次に、データ圧縮伸張装置10において実行される処理の詳細を説明する。以下では、エンコード部13によって行われるエンコード処理、およびデコード部15によって行われるデコード処理について説明する。まず、エンコード部13によって行われるエンコード処理について、図6〜図9を参照して説明する。
なお、以下に示すエンコード処理およびデコード処理は、データ圧縮伸張装置10が備えるCPUが、メモリにロードされた音声圧縮伸張プログラムを実行することによって行われる。すなわち、エンコード部13およびデコード部15は、CPUが当該プログラムを実行することによって実現される。音声圧縮伸張プログラムは、例えば、記憶媒体(例えば、不揮発性メモリ、磁気ディスク、光ディスク等)に予め記憶されてもよいし、他の装置から無線又は有線で提供されてもよい。記憶媒体は、データ圧縮伸張装置10に着脱自在に接続されてもよいし、データ圧縮伸張装置10に内蔵されてもよい。
図6は、エンコード部13によって実行されるエンコード処理の流れを示すメインフローチャートである。
まず、ステップS101において、エンコード部13は、シークポイントから2nサンプルのデータを取得する。具体的には、エンコード部13は、シークポイントを基準として定められる一定期間Tにおいてサンプリングされた2n個のサンプリングデータを取得する。サンプリングデータは、A/D変換部12によってサンプリングされたデータである。
図10は、入力部11において入力された音声信号の波形を示す図である。図11は、期間Tにおける音声信号の波形を示す図である。図10及び図11において、横軸は時間を示し、縦軸は音声信号の振幅を示す。図10及び図11に示すように、エンコード部13は、ステップS101において、シークポイントを基準として定められる期間Tにおいてサンプリングされた2n個のサンプリングデータを取得する。A/D変換部12は、所定のサンプリング周期(例えば、44kHz)で音声信号をサンプリングし、メモリ等の記憶部(図示せず)に一時的にサンプリングデータを記憶する。各サンプリングデータは、ある時間における振幅を示すデータであり、時間領域のデータである。図11に示すように、ここで記憶されるサンプリングデータは、その値が例えば16ビットで表現される実数値を示すデータである。
エンコード部13は、2n個のサンプリングデータを取得した後、次にステップS102の処理を実行する。
ステップS102において、エンコード部13は、音量をv%にする。ここでは、取得された時間領域のデータについて、各データの値の範囲を圧縮する。図12は、取得された時間領域のデータを圧縮する様子を示す図である。
具体的には、図12に示すように、エンコード部13は、各サンプリングデータをv%(例えば、40%)にする。これにより、16ビットで表現されていたサンプリングデータを15ビットで表現する。すなわち、各サンプリングデータに割り当てるメモリ上の領域を15ビットに圧縮する。
ステップS102に続いて、エンコード部13は、取得した2n個のデータに対して例えばハニング窓(窓関数)を掛ける(ステップS103)。エンコード部13は、次にステップS104の処理を実行する。
ステップS104において、エンコード部13は、MDCT(修正離散コサイン変換)を実行する。MDCTの実行により、2n個のサンプリングデータからn個の周波数領域のデータが得られる。以降の処理では、n個のデータについての処理が行われる。図13は、MDCTの実行によって得られる周波数領域のデータの一例を示す図である。図13において、横軸は周波数を示す。図13に示すように、MDCTを実行することによって、2n個の時間領域のデータからn個の周波数領域のデータ(サンプルデータ)が得られる。このステップS104の処理の結果得られるn個のデータ列は、低い周波数から高い周波数に順に並んだ実数列である。
次に、ステップS105において、エンコード部13は、MDCTを実行して得られたn個のサンプルデータ列について、符号のデータ列と、絶対値のデータ列とを分離する。図14は、符号のデータ列と絶対値のデータ列との分離について説明するための図である。図14に示すように、MDCTの実行によって得られたサンプルデータには、負の数値が含まれている。ここでは、以降の計算を行いやすくするために、MDCTの実行によって得られたサンプルデータ列を、絶対値データ列と符号データ列とに分離をする。以降のステップS106〜ステップS109では、ステップS105において分離されたn個の絶対値データ列について処理が行われる。
次に、ステップS106において、エンコード部13は、ステップS105で得られた絶対値データ列の各データをそれぞれ対数化する。対数化して得られたデータ列は、メモリに一時的に記憶される。エンコード部13は、次にステップS107の処理を実行する。
ステップS107において、エンコード部13は、ビット数削減処理(5ビット化)を行う。ここでは、ステップS106の処理で得られた各データについて、例えば16ビットで表現されていたデータを、5ビットで表現する。
図15は、ステップS107におけるビット数削減処理(5ビット化)について説明するための図である。図15に示すように、対数化された各データは、例えば16ビットで表現されるデータである。ここで、ビット数削減処理(5ビット化)においては、ステップS106で対数化された各データについて、0よりも小さい値を0とし、31よりも大きな値を31として、各データを5ビットで表現するとともに、0〜31の整数値で表現する。ステップS106で対数化された各データのうち、値が0〜31の範囲である場合には、そのままの値が維持される(例えば小数点以下は切り捨てられる)。
例えば、対数化されたデータの値が負である場合、そのデータの絶対値は相対的に小さく(ある周波数成分の振幅は小さく)、そのようなデータについては無視(値を「0」にする)しても音声として伸張したときに音の聞こえ方に大きな影響はない。また、対数化されたデータの値が32以上の場合、振幅が非常に大きいため人間には31でも32以上でもその差を識別し難い。このため、このような人間には識別し難い、値が「32」以上のデータについては、「31」としても大きな影響はない。従って、ステップS107においては、各データを0〜31の範囲の値として、各データを5ビットで表現する。すなわち、各周波数領域のデータのために5ビットを再割り当てする。このようにして、各データのビット数が削減される。
次に、ステップS108において、エンコード部13は、帯域毎のビット数削減処理を実行する。ここでは、ステップS107の処理で得られたデータ列について、帯域毎にさらにビット数を削減する。この帯域毎のビット数削減処理の詳細については、図7を参照して後に詳述する。
ステップS108の処理の後、エンコード部13は、ブロック最適化処理を実行する(ステップS109)。ここでは、エンコード部13は、ステップS108で得られたデータ列を最適化して複数のブロックに分けるとともに、各ブロックを圧縮する。このブロック最適化処理の詳細については、図8を参照して後に詳述する。
次に、ステップS110において、エンコード部13は、ステップS105で分離した符号データ列と、ステップS109で得られた絶対値データ列とを結合する。
次に、ステップS111において、エンコード部13は、シークポイントが終了位置に達したか否かを判定する。判定結果が肯定である場合、エンコード部13は、図6に示すエンコード処理を終了する。一方、判定結果が否定である場合、エンコード部13は、シークポイントをn個のサンプリングデータの分だけ進め(ステップS112)、再びステップS101の処理を実行する。
このようにして、ステップS101〜ステップS111の処理が繰り返されることにより、音声データが圧縮されて圧縮データ記憶部14に記憶される。
次に、上述したステップS108の帯域毎のビット数削減処理、及び、ステップS109のブロック最適化処理について、説明する。これらの処理の詳細を説明する前に、本実施形態におけるブロックとフレームの定義について説明する。
(フレーム、ブロックのフォーマット)
図16は、本実施形態におけるフレームの定義を示す図である。図17は、本実施形態におけるブロックの定義を示す図である。
本実施形態では、図6に示すエンコード処理が、図16に示すフレーム単位で行われる。図16に示すように、フレームは、フレームヘッダFHと、複数のブロックとを含む。フレームヘッダFHは、フレームサイズを格納する領域FH1と、ブロックヘッダBHの「サンプル数」のビット数を指定するための領域FH2とを含む。「フレームサイズ」は、フレーム全体のサイズを示し、当該フレームサイズを示す領域FH1には、16ビットが割り当てられる。「ブロックヘッダBHの「サンプル数」のビット数」は、ブロックヘッダBHにおける「サンプル数」(図17参照)を示す領域BH1に割り当てられるビット数である。領域FH2には、2ビットが割り当てられる。
例えば、領域FH2に値0が格納される場合、ブロックヘッダBHにおける領域BH1には、7ビットが割り当てられる。また、領域FH2に値1が格納される場合、ブロックヘッダBHにおける領域BH1には、8ビットが割り当てられる。領域FH2に値2が格納される場合、ブロックヘッダBHにおける領域BH1には、9ビットが割り当てられ、領域FH2に値3が格納される場合、ブロックヘッダBHにおける領域BH1には、10ビットが割り当てられる。
図16に示すように、フレームには複数のブロックが含まれる。各ブロックは、図17に示すように、ブロックヘッダBHと、データ部とに分けられる。ブロックヘッダBHは、データ部に含まれる各サンプルデータを伸張する際に必要な情報である。具体的には、ブロックヘッダBHは、さらに、「サンプル数」を格納する領域BH1と、「サンプルデータのビット数」を示す領域BH2とに分けられる。なお、ブロックヘッダBHは、データ部に付加される必要はなく、ブロックのデータ部とブロックヘッダBHとが分離してもよい。
領域BH1のサイズは、可変であり、上述のように、フレームヘッダにおける領域FH2に格納される値によって定められる。例えば、フレームヘッダの領域FH2に「0」が格納される場合、ブロックヘッダの領域BH1のサイズは、7ビットとなる。この領域BH1に格納される値は、このブロックのデータ部に含まれるサンプルデータの数(サンプル数)を示す。例えば、領域BH1が7ビットである場合、最大で127個のサンプルデータをこのブロックのデータ部に含むことが可能である。例えば、領域BH1が7ビットであって、このブロックに4つのデータが含まれている場合、領域BH1に格納される値は「0000100」(2進数)となる。以下では、図17に示すブロックのブロックヘッダBHのサイズをH[bit]で表すことがある。
このように、本実施形態では、フレームにフレームヘッダFHと複数のブロックとが含まれる。フレームヘッダFHには、ブロックヘッダBHのサイズを示す情報が含まれる。すなわち、フレームヘッダFHにおいて値が指定されることで、このフレームに含まれるすべてのブロックヘッダBHのサイズ(領域BH1のサイズ)が指定される。これにより、各ブロックのヘッダサイズを指定することができる。
また、ブロックヘッダの「サンプルデータのビット数」は、データ部に含まれる各サンプルデータに割り当てられるビット数である。「サンプルデータのビット数」を示す領域BH2には、例えば3ビット(固定長)が割り当てられる。例えば、「サンプルデータのビット数」として、「101」(2進数表現;10進数では「5」)が設定される場合、データ部に含まれるサンプルデータのサイズは、全て「5」ビットであることを意味する。
上述のようにブロックヘッダBHは可変であり、ブロックヘッダBHの領域BH1のサイズによって、ブロックに含まれるデータの数の上限が定められる。例えば、領域BH1に8ビットが割り当てられる場合には、最大で256個のデータをブロックに含めることが可能であり、領域BH1に9ビットが割り当てられる場合には、最大で512個のデータをブロックに含めることができる。
本実施形態では、フレーム毎に領域FH2に設定される値が異なる。例えば、あるフレームでは、フレームヘッダFHの領域FH2に値「0」が格納されてデータが圧縮されて記憶される(このときのフレームの各ブロックの最大データ数は128個(7ビット)である)。また、他のフレームでは、フレームヘッダFHの領域FH2に値「1」が格納されてデータが圧縮されて記憶される(このときのフレームの各ブロックの最大データ数は256個(8ビット)である)。
なお、ブロックヘッダBHの「サンプルデータのビット数」に値「0」が格納される場合、このブロックのデータ部にはデータが存在しないことを意味する。また、「サンプル数」に値「0」が格納される場合、このフレームの最後のサンプルデータまでを意味する。すなわち、値が0のサンプルデータがフレームの最後まで続く場合、その値および数は省略される。
(帯域毎のビット数削減処理の詳細)
次に、ステップS108の帯域毎のビット数削減処理の詳細について説明する。図7は、ステップS108の帯域毎のビット数削減処理の詳細を示すフローチャートである。
図7に示すように、ステップS201において、エンコード部13は、データ列を8等分に分割する。具体的には、エンコード部13は、上記ステップS107の処理で5ビット化されたデータ列を、各グループに含まれるデータの数が等しくなるようにして、周波数の帯域毎に8つのグループに分割する。ここで、上述したブロックとは異なり、各グループに含まれるサンプルデータの数は同じである。従って、ステップS201で分割されるデータの集合を「グループ」と表記して、上述の「ブロック」と区別する。
次に、ステップS202において、エンコード部13は、カウンタKに1をセットする。続いて、ステップS203において、エンコード部13は、第1手法を用いるか否かを判定する。ステップS203においては、エンコード部13は、K番目のグループのデータを低ビット化する手法(ビット数を削減する手法)として、第1手法を用いるか否かを判定する。具体的には、エンコード部13は、Kの値に基づいて、第1手法を用いるか否かを判定する。なお、この「第1手法」については、後に詳述する。
ステップS203の判定結果が肯定の場合、エンコード部13は、ステップS204において、K番目のグループを第1手法で低ビット化する。一方、ステップS203の判定結果が否定の場合、エンコード部13は、ステップS205において、K番目のグループを第2手法で低ビット化する。なお、この「第2手法」については、後に詳述する。ステップS204又はステップS205の処理は、8等分したグループのうちのK番目のグループに含まれる各データのビット数を削減する処理である。
ステップS204又はステップS205の処理の後、エンコード部13は、ステップS206において、Kに1を加算する。そして、エンコード部13は、次のステップS207において、Kが8より大きいか否かを判定する。判定結果が肯定の場合は、エンコード部13は、図7に示す帯域毎のビット数削減処理を終了する。一方、判定結果が否定の場合は、エンコード部13は、再びステップS203の処理を実行する。ステップS203〜ステップS207の処理が繰り返し行われることによって、8等分された各グループが、第1手法又は第2手法を用いて低ビット化される。以上で、図7のフローチャートの説明を終了する。
次に、図7のフローチャートで示した帯域毎のビット数削減処理の概要について、図18を参照して説明する。
図18は、帯域毎のビット数削減処理の概要を示す図である。図18に示すように、ここで処理されるデータ列は、周波数領域のデータ列であって、低い周波数成分から高い周波数成分まで周波数の順に並んでいる。ステップS201では、n個のデータ列(データD1、データD2、・・、データDN)が、8つのグループに等分割される。そして、各グループについて、第1手法又は第2手法により、ビット数の削減処理が行われる(ステップS204、ステップS205)。このビット数削減処理によって、例えば、1番目のグループ及び2番目のグループの各データは、5ビットで表されていたものが、4ビットで表現される。また、3番目のグループの各データは、5ビットで表されていたものが、3ビットで表現され、8番目のグループの各データは2ビットで表現される。
例えば、n=512である場合、各グループには64個のサンプルデータが含まれる。この場合、1番目及び2番目のグループに含まれる1個目〜128個目までのサンプルデータは、比較的低い周波数の成分であるため、それぞれ1ビット削減される。一方、8番目のグループに含まれる449番目〜512番目のサンプルデータは、比較的高い周波数の成分であるため、それぞれ3ビット削減される。
図19は、第1手法による低ビット化を示す図であり、第1手法を用いてビット数を5ビットから4ビットに削減する処理を示す図である。
図19に示すように、第1手法では、5ビットで表された10進数の値0及び1を「0」とし、値2及び3を「1」とし、値4及び5を「2」として再定義する。すなわち、第1手法では、5ビットで表された10進数の値を2で除した場合において、その商を低ビット化後の値として定義する。これにより、0〜31(5ビット)の範囲の数は、0〜15(4ビット)の範囲の数となる。そして、各データに割り当てる領域が、5ビットから4ビットに変更される。このように、第1手法では、値の全範囲にわたって均等に圧縮される。
図20は、第2手法による低ビット化を示す図であり、第2手法を用いてビット数を5ビットから4ビットに削減する処理を示す図である。
図20に示すように、第2手法では、5ビットで表された10進数の値0〜16を「0」とし、値17〜31をそれぞれ「1〜15」として再定義する。すなわち、第2手法では、比較的小さな値0〜16を「0」として捨てて、比較的大きな値17〜31を残す。これにより、0〜31(5ビット)の範囲の数は、0〜15(4ビット)の範囲の数となる。このように、第2手法では、小さい値0〜16を捨てて、大きな値のみを残す。各データの値が小さいことは、その周波数成分の振幅(音量に関係する)が小さいことを示す。小さな音は人間には聞こえにくいため、このような小さな音を「0」にしても音の聞こえ方には影響しない場合がある。このため、第2手法では、小さな値を捨てて、大きな値のみを残す。
なお、周波数や音声の種類によっては小さな音でもカットすると音質が低下する場合がある。従って、周波数や音声の種類によっては、第2手法よりも第1手法が用いられる。例えば、比較的高い周波数成分では、小さな音をカットしても音質が低下し難い場合がある。また、周波数や音声の種類によっては、第1手法によって均等に低ビット化するよりも第2手法を用いる方が音質が低下し難い場合がある。第1手法によって均等に低ビット化すると、細かい振幅の違いを表現することができず、音質が低下する場合がある。一方で、第2手法では、ある値以下はカットされるが、それ以外の値はそのまま維持されるため、細かい振幅の違いを表現することができる。
このように、第1手法又は第2手法を用いて、周波数の帯域毎にビット数が削減される。具体的には、高い周波数帯域であるほど、ビット数の削減幅が大きくなる。例えば、低い周波数帯域である1番目のグループ及び2番目のグループでは、5ビットから4ビットにビット数が1だけ削減される。高い周波数帯域である7番目のグループ及び8番目のグループでは、5ビットから2ビットにビット数が3だけ削減される。
2ビット以上削減する場合は、第1手法又は第2手法によるビット数の削減処理が2回以上行われる。例えば、5ビットから3ビットに2ビットだけ削減される場合、5ビットから4ビットに削減された後、さらに、4ビットから3ビットに削減される。この場合において、5ビットから4ビットへの削減には、上記第1手法が用いられ、4ビットから3ビットへの削減には、同様に上記第1手法が用いられてもよいし、上記第2手法が用いられてもよい。
各グループに対してどの手法を用いてビット数の削減処理を行うかは、予め定められる。また、どの手法をどの順番で適用するかも予め定められる。例えば、1番目〜6番目のグループは、第1手法のみが用いられ、7番目のグループは第2手法のみが用いられてもよい。8番目のグループは、3回のビット数削減処理において、1回目及び2回目は第1手法が用いられ、3回目は第2手法が用いられてもよい。
なお、圧縮された音声データを伸張する場合は、圧縮した時の手法に合わせて上述した第1手法又は第2手法を用いたビット数削減処理と逆の処理を行う。すなわち、第1手法で圧縮されたデータは、第1手法の逆の処理(例えば、4ビットのデータについて値を2倍することで5ビットにする)を行って伸張する。
以上のようにして、サンプルデータ列を、8つのグループに等分割して、グループ単位でビット数が削減される。高い周波数帯域では削減幅が大きく(5ビットから2ビット)、低い周波数帯域では削減幅が小さい(5ビットから4ビット)。人間にはある一定の範囲の周波数の音しか聞こえず、また、聞こえる範囲の周波数であっても高い周波数帯域と、低い周波数帯域とでは敏感になる場合とそうでない場合とがある。一般的には、高い周波数(例えば10kHz)の音は聞こえにくく、このため、高い周波数の音の精度を下げて圧縮しても音質は劣化し難い。また、低い周波数(例えば1kHz)の音に対しては人間は敏感であるため、高い精度で復元できるようにすることが好ましい。従って、本実施形態では、高い周波数帯域ではビット数の削減幅を大きくしてデータ量を大幅に削減し、低い周波数帯域ではビット数の削減幅を小さくして、高い精度で復元できるようにする。
このように、帯域毎のビット数削減処理では、帯域毎に削減幅を変えて、各サンプルデータのビット数を削減する。上記第1手法および第2手法を用いたビット数削減処理は、非可逆変換であり、これらの手法を用いた処理を行った場合、処理の前のデータを正確には復元することはできない。しかしながら、音質に影響がない程度であれば、正確にデータを復元することができなくても問題はない。
なお、ビット数を削減する処理としては、第1手法および第2手法以外に、他の手法が用いられてもよい。他の手法は、非可逆変換であってもよいし、可逆変換であってもよい。
(ブロック最適化処理の詳細)
次に、ステップS109のブロック最適化処理の詳細について説明する。ステップS109のブロック最適化処理は、サンプルデータ列を、複数のブロック(図16参照)に分割する処理であり、各ブロックを最適化しつつ圧縮する処理である。
すなわち、ステップS109のブロック最適化処理では、上記ステップS108の帯域毎のビット数削減処理で8分割された各グループの区切り位置を無視して、サンプルデータ列が複数のブロックに分割される。そして、ブロック単位で圧縮が行われる。具体的には、ブロック最適化処理では、ステップS108の処理が行われた後のデータ列について、各データのビット数に基づいて、ブロックが生成される。
図21は、データ列の値とその値を表現するために必要なビット数とを示す図である。図21に示すように、ステップS108の処理が行われた後、データ列として、データD1、データD2、データD3、・・、データDNがメモリに一時的に記憶されている。このとき、例えば、データD1〜データD10は、ステップS108においては1番目のグループとして処理が行われ、その結果4ビットに圧縮されている。すなわち、データD1〜データD10の値を格納するための領域として、それぞれ4ビットの領域がメモリ上で確保されている。
一方、図21に示すように、例えばデータD1の値は、「6」(10進数表現)であり、この値を表現するために必要なビット数(必要ビット数)は、「3」である(3ビットで表現可能な値は0〜7)。3ビットの領域が確保されていれば、データD1は表現可能である。すなわち、データを表現するために必要なビット数が確保されていれば、それ以外のビットは不要である。
このようなことから、ブロック最適化処理では、上記必要ビット数に着目して、必要ビット数が同じデータを1つのグループにまとめる。また、必要ビット数が同じでなくても所定の条件を満たす場合には1つのグループにまとめる。以下、図8に示すフローチャートを参照して、ブロック最適化処理の詳細について説明する。
図8は、ステップS109のブロック最適化処理の詳細を示すフローチャートである。
図8に示すように、エンコード部13は、まず、変数iに1をセットする(ステップS301)。変数iは、処理するデータの位置を示し、以降の処理はデータ列のi番目のサンプルデータについて処理が行われる。
次に、エンコード部13は、i+1番目のデータの必要ビット数と現在のブロックの設定ビット数(現在のブロック内の各データのビット数;現在のブロックのブロックヘッダにより定められる「サンプルデータのビット数」)とが等しいか否かを判定する(ステップS302)。なお、1番目のデータは、1番目のブロックに含められる。判定結果が肯定の場合、エンコード部13は、次にステップS303の処理を実行する。一方、判定結果が否定の場合、エンコード部13は、次にステップS304の処理を実行する。
ステップS303において、エンコード部13は、i+1番目のデータを現在のブロックに含める。
図22は、i+1番目のデータの必要ビット数が現在のブロックの設定ビット数と同じ場合に、i+1番目のデータが現在のブロックに含められる様子を示す図である。図22に示すように、データD1〜データD3の必要ビット数(データを表現するために必要なビット数)が「3」である場合、図8に示すブロック最適化処理が行われると、データD1〜データD3が同じブロックに含められる(ステップS303)。この状態において、さらに、4番目のデータであるデータD4について図8に示す処理が行われると、現在のブロックの設定ビット数と、データD4の必要ビット数とが等しいか否かが判定される(ステップS302)。図22に示す例では、これらがともに「3」で等しいため、データD4は、現在のブロックに含められる(ステップS303)。このようにして、必要ビット数が等しいデータが現在のブロックに次々と含められる。
ステップS303の処理の後、エンコード部13は、ステップS307の処理を実行する。
一方、ステップS304において、エンコード部13は、分割判定処理を実行する。ここでは、i+1番目のデータの必要ビット数が現在のブロックの設定ビット数と異なるため、エンコード部13は、i+1番目のデータを現在のブロックと分割するか、又は現在のブロックに含めるかについての判定処理を行う。以下、図9に示すフローチャートを参照して、分割判定処理の詳細について説明する。
図9は、ステップS304の分割判定処理の詳細を示すフローチャートである。
図9に示すように、ステップS401において、エンコード部13は、i+1番目のデータの必要ビット数が現在のブロックの設定ビット数より大きいか否かを判定する。判定結果が肯定の場合(i+1番目のデータの必要ビット数>現在のブロックの設定ビット数)、エンコード部13は、次にステップS402の処理を実行する。一方、判定結果が否定の場合(i+1番目のデータの必要ビット数<現在のブロックの設定ビット数)、エンコード部13は、次にステップS406の処理を実行する。
ステップS402において、エンコード部13は、H<=α×Nが成立するか否かを判定する。ここで、「H」は、上述した図17に示すブロックヘッダBHのサイズ[bit]である。また、「α」は、現在のブロックの設定ビット数とi+1番目のデータの必要ビット数との差分(絶対値)である。また、「N」は、現在のブロックに含まれるデータの数である。
ステップS402の判定結果が肯定の場合(H<=α×Nが成立する場合)、エンコード部13は、ステップS403において、i+1番目のデータを現在のブロックと分割すると決定する。なお、この分割するか否かを決定するための分割条件(H<=αN)の算出根拠については、後述する。
一方、ステップS402の判定結果が否定の場合(H<=α×Nが成立しない場合)、エンコード部13は、ステップS404において、i+1番目のデータを現在のブロックと分割しないと決定する。すなわち、エンコード部13は、i+1番目のデータを現在のブロックに含めると決定する。そして、エンコード部13は、続くステップS405において、現在のブロックの設定ビット数をαだけ拡張する。
図23は、ステップS405における現在のブロックの設定ビット数を拡張する処理を説明するための図である。図23では、現在のブロックにデータD1〜データD3が含まれており、データD4に対する処理が行われる様子が示されている。図23に示すように、現在のブロックの設定ビット数(ブロックに含まれる各データのビット数)が「3」である場合において、データD4の必要ビット数が「4」である場合、H<=α×Nが成立しないため、データD4を分割しないと決定される(ステップS404)。このとき、現在のブロックの設定ビット数が、新たに加えられるデータD4の必要ビット数に拡張される。
具体的には、データD4の必要ビット数が「4」であるため、現在のブロックの設定ビット数も「4」に拡張される。ここでは、新たに加えられるデータD4を表現するためには「4」ビットが必要であるため、新たに加えられるデータD4の必要ビット数に合わせて、現在のブロックの設定ビット数も拡張される。すなわち、既に現在のブロックに属されている他のデータのビット数が、新たに加えられるデータD4の必要ビット数に合わせて拡張される。現在のブロックの設定ビット数が新たに加えられるデータの必要ビット数に合わせて拡張されることにより、既に現在のブロックに属している各データの値は維持され、かつ、新たに加えられるデータの値も表現することができる。
このように、ステップS402における分割条件(H<=αN)を満たすか否かによって、i+1番目のデータを現在のブロックと分割するか(i+1番目のデータを現在のブロックに含めるか)否かが決定される。
ここで、ステップS402における分割条件の算出根拠について、図24を参照して説明する。図24は、i+1番目のデータの必要ビット数が現在のブロックの設定ビット数よりも大きい場合における、分割条件の算出根拠を説明するための図である。
図24において、データD1〜データD3に対する処理が行われて、現在のブロックが形成されているものとする。次のブロックは、仮にデータD4を現在のブロックに含めずに分割した場合の仮のブロックであるものとする。図24に示すように、(A)現在のブロックを次のブロックと分割する場合、2つのブロックの合計サイズは、以下の式(1)によって算出することができる。
2つのブロックの合計サイズ(A)=(H+BN)+{H+M(B+α)} (1)
ここで、「B」は、現在のブロックの設定ビット数を示す。また、「M」は次のブロックに含まれるデータの数を示す。また、上述のように「N」は、現在のブロックに含まれるデータの数であり、「α」は、現在のブロックの設定ビット数と次のブロックの設定ビット数との差である。現在のブロックのデータサイズは、B×Nにヘッダを加えて、H+BNとなる。また、次のブロックの設定ビット数は、現在のブロックの設定ビット数Bよりもαだけ大きく、データの数がM個である。このため、次のブロックのデータサイズは、H+M(B+α)となる。従って、2つのブロックの合計サイズは、式(1)で表すことができる。
一方、(B)現在のブロックと次のブロックとを統合する場合、統合後のブロックのサイズは、以下の式(2)によって算出することができる。
1つのブロックに統合した場合のサイズ(B)=H+(N+M)(B+α) (2)
ここで、2つのブロックの合計サイズ(A)が、1つのブロックに統合した場合のサイズ(B)以下である場合、2つのブロックに分割した方が、全体としてのデータサイズが小さくなる。従って、分割するべき条件は、次の式(3)によって表される。
(H+BN)+{H+M(B+α)}<=H+(N+M)(B+α) (3)
この式(3)を展開することにより、以下の分割条件を示す式(4)が得られる。
H<=αN (4)
ブロックヘッダBHのサイズHは、フレームヘッダによって定められるため、固定である(ここでは、例えばH=11とする)。このため、式(4)に示すように、i+1番目のデータの必要ビット数が現在のブロックの設定ビット数よりも大きい場合の分割条件は、現在のブロックに含まれるデータの数Nと、現在のブロックの設定ビット数及びi+1番目のデータの必要ビット数の差分αと、に依存する。すなわち、i+1番目のデータの必要ビット数が現在のブロックの設定ビット数よりも大きい場合の分割条件は、次のブロックに含まれるデータの数Mには依存しない。
以上のように、i+1番目のデータの必要ビット数が現在のブロックの設定ビット数よりも大きい場合は、エンコード部13は、式(4)に示す分割条件の成否によって、分割すべきか否かを判定する。
図9に戻り、ステップS401の判定結果が否定の場合(i+1番目のデータの必要ビット数<現在のブロックの設定ビット数)、エンコード部13は、ステップS406の処理を実行する。
具体的には、ステップS406において、エンコード部13は、H<=α×Mが成立するか否かを判定する。ここで、「M」は、次のブロックに含まれるデータの数である。また、「H」は、上述した図17に示すブロックヘッダのサイズ(ビット数)である。また、「α」は、現在のブロックの設定ビット数とi+1番目のデータの必要ビット数との差分(絶対値)である。
ステップS406の判定結果が肯定の場合(H<=αMが成立する場合)、エンコード部13は、ステップS403において、i+1番目のデータを現在のブロックと分割すると決定する。
一方、ステップS406の判定結果が否定の場合(H<=αMが成立しない場合)、エンコード部13は、ステップS407において、i+1番目のデータを現在のブロックと分割しないと決定する(すなわち、i+1番目のデータを現在のブロックに含めると決定する)。
このように、ステップS406における分割条件(H<=αM)を満たすか否かによって、i+1番目のデータを現在のブロックと分割するか否かが決定される。
以下、ステップS406における分割条件(H<=αM)の算出根拠について説明する。
図25は、i+1番目のデータの必要ビット数が現在のブロックの設定ビット数よりも小さい場合における、分割条件の算出根拠を説明するための図である。
図25において、図24と同様に、データD1〜データD3に対する処理が行われて、現在のブロックが形成されているものとし、次のブロックは仮のブロックであるものとする。図25に示すように、(C)現在のブロックを次のブロックと分割する場合、2つのブロックの合計サイズは、以下の式(5)によって算出することができる。
2つのブロックの合計サイズ(C)=(H+BN)+{H+M(B−α)} (5)
ここで、「B」、「N」、「M」は上述の通りである。次のブロックの設定ビット数は、現在のブロックの設定ビット数Bよりもαだけ小さいため、次のブロックのデータサイズは、H+M(B−α)となっている。従って、2つのブロックの合計サイズは、式(5)で表すことができる。
一方、(D)現在のブロックと次のブロックとを統合する場合、統合後のブロックのサイズは、以下の式(6)によって算出することができる。
1つのブロックに統合した場合のサイズ(D)=H+(N+M)B (6)
図25に示すように、4番目のデータD4の必要ビット数が現在のブロックの設定ビット数よりも小さい場合、現在のブロックの設定ビット数を拡張しなくても、現在のブロックに含まれるデータ、及び、新たにブロックに追加されるデータD4〜データD7を表現するはできる。逆に、現在のブロックの設定ビット数を新たに追加されるデータD4の必要ビット数に削減すると、現在のブロックに含まれるデータD1〜データD3を表現できなくなる。このため、統合後のブロックの設定ビット数は、維持される。逆に、追加されるデータD4〜データD7は、B−α[bit]で表現可能であるが、統合後のブロックにおいては、B[bit]の領域が確保される。このように、現在のブロックの設定ビット数よりも新たに追加されるデータD4の必要ビット数が小さい場合、式(6)に示すように、統合後のブロックのサイズは、ヘッダHを加えて、H+(N+M)Bとなる。
ここで、分割した場合の2つのブロックの合計サイズ(C)が、分割しない場合のブロックのサイズ(D)以下である場合、2つのブロックに分割した方が、全体としてのデータサイズが小さくなる。従って、分割するべき条件は、次の式(7)によって表される。
(H+BN)+{H+M(B−α)}<=H+(N+M)B (7)
この式(7)を展開することにより、以下の分割条件を示す式(8)が得られる。
H<=αM (8)
ブロックヘッダBHのサイズHは、フレームヘッダによって定められるため、固定である。このため、式(8)に示すように、i+1番目のデータの必要ビット数が現在のブロックの設定ビット数よりも小さい場合の分割条件は、次のブロックのデータ数Mと、現在のブロックの設定ビット数及びi+1番目のデータの必要ビット数の差分αと、に依存する。
ここで、次のブロックのデータ数Mは、ステップS406の分割条件の判定が行われる時点では確定していない。このため、次のブロックのデータ数Mを確定するため、i+1番目のデータからブロック最適化処理を開始して、次のブロックのデータ数Mを算出する。
図26は、次のブロックのデータ数Mが確定される様子を示す図であり、現在のブロックと次のブロックとを分割する様子を示す図である。図26において、データD1〜データD3によって1番目のブロックが生成されており、データD4に対する処理がこれから行われる様子が示されている。データD1〜データD3によって1番目のブロックが生成された後、データD4に対する処理として、データD4の必要ビット数と1番目のブロックの設定ビット数とが比較される。
図26に示すように、データD4の必要ビット数は1番目のブロックの設定ビット数よりも小さい。この場合において、データD4を1番目のブロックに含めるか否かを判定するためには、次のブロックのデータ数Mが必要である。このため、データD4を1番目のブロックに含めるか否かを決定するための処理を中断して、次のブロックのデータ数Mを確定するために、データD4から新たな仮のブロック(2番目のブロック)の生成をスタートする。
データD4〜データD9までは、必要ビット数は「2」でそれぞれ等しいため、データD4〜データD9は2番目のブロックに含められる(上記ステップS303)。次に、データD10を2番目のブロックに含めるか、あるいは、このデータD10を2番目のブロックに含めずに、3番目のブロックに含めるかが判定される。データD10の必要ビット数は「4」であり、2番目のブロックの設定ビット数は「2」であるため、上記ステップS401において「YES」と判定されて、H<=αNが成立するか否かが判定される(ステップS402)。図26に示す例では、α=2、N(2番目のブロックのデータ数)=6であり、H<=αNが成立しているため、2番目のブロックとデータD10とは分割される。この時点で、2番目のブロックのデータ数は「6」に確定する。なお、この時点においても、1番目のブロックと分割されるか、統合されるかは確定していないため、2番目のブロックは「仮のブロック」である。
このようにして、2番目のブロックのデータ数Mが確定したため、データD4に対する処理が再開される。具体的には、H<=αMが成立しているか否かが判定される。1番目のブロックの設定ビット数は「4」であり、2番目のブロックの設定ビット数は「2」であるため、α=2であり、2番目のブロックのデータ数M=6である。従って、H<=αMが成立している(分割条件が成立している)。このため、エンコード部13は、1番目のブロックとデータD4とを分割すると決定する(S403)。すなわち、エンコード部13は、1番目のブロックと2番目のブロックとを分割すると決定する。なお、仮に、H<=αMが成立していなければ(分割条件が成立していなければ)、エンコード部13は、1番目のブロックと2番目のブロックとを分割せずにこれらを1つのブロックに統合して、1番目のブロックとして定義する。
このように、現在のブロックの設定ビット数よりも次のデータ(i+1番目のデータ)の必要ビット数が小さい場合、まず、次のブロックのデータ数が確定されてから、i+1番目のデータを現在のブロックに含めるか否かが判定される。
なお、図26において、データD10の必要ビット数が2番目のブロック(仮のブロック)の設定ビット数よりも小さい場合、エンコード部13は、さらに、データD10から新たなブロックの作成をスタートして、3番目のブロック(仮のブロック)のデータ数を確定する処理を行う。このように、次のブロックを暫定的に生成していき、ブロックに含まれるデータの数を順次確定していく。
ステップS403の処理、ステップS405の処理、又は、ステップS407の処理の後、エンコード部13は、図9に示す分割判定処理を終了して、処理を図8に戻す。
図8に戻り、エンコード部13は、ステップS304の分割判定処理の結果、ブロックを分割すると判定した場合(ステップS305:YES)は、ステップS306の処理を実行する。一方で、ブロックを分割しないと判定した場合(ステップS305:NO)、エンコード部13は、次に、上記ステップS303の処理を実行する。
ステップS306において、エンコード部13は、i+1番目のデータを次のブロックに含める。これにより、現在のブロックが確定され、新たに次のブロックが生成されて、以降では、次のブロックにデータを含めるか否かの処理が行われる。
ステップS306の処理の後、ステップS307において、エンコード部13は、変数iに1を加算する。そして、次のステップS308において、エンコード部13は、iがnより大きいか否かを判定し、判定結果が否定の場合は、再びステップS302の処理を実行する。iがnより大きい場合は、エンコード部13は、図8に示すブロック最適化処理を終了する。
以上のように、ステップS302〜ステップS308の処理が繰り返し行われることによって、n個のサンプルデータに対して処理が行われる。これにより、周波数領域のデータ列が複数のブロックに分割され、それぞれのブロックの最適化が行われる。
具体的には、ブロックを分割した場合のヘッダを含めた全体のデータサイズと、分割しない場合のヘッダを含めた全体のデータサイズとが考慮されて、全体のデータサイズが小さくなる場合の条件に基づいて、分割するか分割しないかが決定される。そして、分割されたブロックごとにデータが圧縮される。より具体的には、ブロックは、同じビット数で表現可能なデータの集合であり、圧縮後では、圧縮前に比べてデータのビット数が削減される。
このようにして、サンプルデータ列が、データの必要ビット数に基づいて複数の可変ブロックに分割されて、余分なビットが削減される。以上の説明から明らかであるが、図8のブロック最適化処理は、図7に示す帯域毎のビット数削減処理とは異なり、各サンプルデータの値を正確に復元可能な可逆変換である。
なお、図8に示すブロック最適化処理は、フレームヘッダFHの領域FH2の値毎に実行される。すなわち、領域FH2に0〜3の値が設定され、各値でのブロック最適化処理が行われる。そして、サイズが最も小さいフレームが選択されて、記憶される。
図27は、フレームヘッダFHの領域FH2の設定値によるデータサイズの違いを示す図である。図27に示すように、領域FH2に値0が設定されると各ブロックに含まれるデータの最大数が128個に定められ、領域FH2に値2が設定されると各ブロックに含まれるデータの最大数が512個に定められる。このとき、図27に示すように、ブロックに含まれるデータの最大数が異なることによって、データを圧縮した場合のフレームの全体サイズが異なる場合がある。
従って、本実施形態においては、フレームヘッダFHの領域FH2に各値(0〜3)を設定してデータを圧縮し、それぞれの圧縮後のデータサイズが最も小さいフレームが選択される。
(デコード処理)
次に、上述のようにして圧縮された圧縮データをデコードする処理について説明する。デコード処理は、上記エンコード処理と逆の処理である。すなわち、エンコード処理によって圧縮されて記憶されたデータがフレーム毎に読み込まれて、上述した処理と逆の処理が行われる。図28は、デコード部15によって行われるデコード処理の流れを示すフローチャートである。
図28に示すように、デコード部15は、まず、圧縮データ記憶部14から1フレームを抽出する(ステップS501)。続いて、デコード部15は、抽出したフレームに含まれる各ブロックのデータを取り出し、1つのデータ列として展開する(ステップS502)。
具体的には、デコード部15は、フレームヘッダFHの領域FH1と、領域FH2とに格納された値を読み取り、フレームのサイズを特定するとともに、ブロックヘッダの「サンプル数」のビット数を特定する。特定されたサンプル数のビット数によって、各ブロックヘッダのサイズが特定される。デコード部15は、先頭のブロックのブロックヘッダBHを読み取って、当該先頭のブロックに含まれるサンプルデータの数を特定するとともに、各サンプルデータのビット数を特定する。そして、デコード部15は、先頭のブロックに含まれる各サンプルデータを抽出する。また、デコード部15は、先頭のブロックのサンプルデータの数と各サンプルデータのビット数によって、次のブロックの区切り位置を特定することができる。これらの処理を先頭のブロックから最後のブロックまで繰り返すことにより、デコード部15は、フレームに含まれるすべてのサンプルデータ(n個の周波数領域のデータ)を抽出して、データ列として展開することができる。
次に、ステップS503において、デコード部15は、ステップS502の処理で得られたデータ列を、符号データ列と絶対値データ列とに分離する。そして、デコード部15は、分離したデータ列を16ビット化する(ステップS504)。ここでは、エンコード処理と逆の処理を行うことにより、各データが、16ビットで表現される。
次に、ステップS505において、デコード部15は、得られた各データを指数化する。すなわち、図6のステップS106における対数化と逆の処理が行われる。続いて、ステップS507において、デコード部15は、分離した符号データ列と絶対値データ列とを結合する。
次に、ステップS508において、デコード部15は、IMDCT(Inverse MDCT;逆修正離散コサイン変換)を実行する。これによって、周波数領域のデータから時間領域のデータに変換される。続いて、デコード部15は、得られた時間領域のデータにハニング窓を掛ける(ステップS509)。そして、デコード部15は、音量を100/v%にする(ステップS510)。このように、1フレームのデコード処理が行われる。
続いて、デコード部15は、圧縮データ記憶部14にデータが無くなったか否かを判定し(ステップS511)、データが無くなっていれば、図28のデコード処理を終了する。データが無くなっていなければ、デコード部15は、再びステップS501の処理を実行する。
以上のようにして、ステップS501〜S511の処理が繰り返し行われることで、圧縮された圧縮データが伸張されて音声として出力される。
なお、上記図6〜図9、及び図28に示したフローチャートにおける各ステップの処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよい。また、各ステップにおいて用いられた値は単なる例示に過ぎず、どのような値が用いられてもよい。また、本実施形態では、上記フローチャートの各ステップの処理をデータ圧縮伸張装置10のCPUが実行するものとして説明したが、上記フローチャートにおける一部又は全部のステップの処理を、CPU以外のプロセッサや専用回路が実行するようにしてもよい。
以上のように、本実施形態では、周波数領域のデータ列が複数の可変ブロックに分割され、ブロック毎に圧縮が行われる。これにより、データ圧縮により好ましいブロックを生成して、データを圧縮することができる。具体的には、ブロックを分割することによって増加するブロックヘッダのサイズを考慮してブロックを分割するか否かを判定し、分割した場合にデータサイズが小さくなる場合は、ブロックを分割する。このため、圧縮したときのデータの全体サイズをより小さくすることができる。
また、本実施形態では、各データの必要ビット数に基づいてブロックを生成し、ブロック内の各データの不要なビットを削減することにより、データの圧縮が行われる。これにより、簡易な計算により複数のデータをブロックにまとめて、データを圧縮することができる。また、本実施形態のブロック最適化処理では必要なビットを残して不要なビットのみを削減するため、可逆的にデータを圧縮することができる。
また、本実施形態では、上記帯域毎のビット数削減処理において、周波数帯域に応じてビット数の削減幅を異ならせた。これにより、必要に応じて特定の周波数帯域のデータについては高い精度でデータを復元できるとともに、それ以外の周波数帯域のデータについては高い圧縮率で圧縮することができる。このようにして、データの劣化を防止しつつ、全体としての圧縮率を向上することができる。
また、本実施形態では、上記帯域毎のビット数削減処理において、複数の手法(第1手法及び第2手法)のうちの何れかの手法によりビット数を削減した。これにより、例えば復号した時により影響が小さい手法を用いてデータを圧縮することができる。
また、本実施形態では、ブロックを分割するか否かについての評価(上記分割条件の判定)が行われて、その結果に基づいてブロックが分割される。このため、例えば、よりサイズが小さくなる方法でブロックを分割することができる。
また、本実施形態では、音声信号が時間領域のデータから周波数領域のデータに変換された後にデータの圧縮が行われるのみならず、周波数領域のデータに変換される前の時間領域のデータについても圧縮が行われる(上記ステップS102)。このため、より圧縮率を高めることができる。
以上のように、本実施形態では例えば音声を圧縮することができる。例えば、人の声の音声信号に対して本実施形態の圧縮方法を用いた場合は、特に有効である。音楽などの音声信号を周波数領域のデータに変換した場合に比べて、人の声の音声信号を周波数領域のデータに変換した場合の方が、偏った周波数帯(高周波数帯域ではない部分)にのみ大きな振幅が現れる傾向にある。また、人の声の場合、高周波数帯域では、比較的振幅が小さくなる傾向にある。このため、結果として同じブロックに属しやすくなり、圧縮効率が上がる。すなわち、人の声の場合、高周波数領域では、少ないビット数で表すことができるデータが出現しやすく、圧縮率の高いブロック(データ数が多く、かつ、ビット数が小さいブロック)が生成されやすい。
なお、上記データ圧縮方法は、任意の情報処理装置において実行されることができる。
例えば、任意の情報処理装置としては、パーソナルコンピュータ、サーバ、スマートフォン、携帯電話、PDA、ゲーム装置、タブレット型コンピュータ等が挙げられる。また、これら複数の装置が相互に接続されることによって構成されるシステムが、上記エンコード処理及びデコード処理を行ってもよい。
(変形例)
上記実施形態で示した各データの必要ビット数に基づくデータ圧縮方法に種々の変形が加えられてもよい。
例えば、上記実施形態では、必要ビット数が同じ隣り合うデータを1つのブロックに含めた。また、隣り合うデータの必要ビット数が異なる場合であっても、式(4)又は式(8)に示す条件を満たす場合は、これらのデータを1つのブロックに含めた。すなわち、ブロックを分割するかしないかを上記式(4)又は式(8)に基づいて判定した。他の実施形態では、ブロックを分割するかしないかの条件は上記式に限らず、圧縮後のデータサイズが小さくなるのであれば、他の条件式に基づいてブロックを分割する/しないが判定されてもよい。
また、他の実施形態では、隣り合うデータの必要ビット数が同じ場合にこれらのデータを1つのブロックにまとめ、隣り合うデータの必要ビット数が異なる場合は別のブロックにデータを含めることにより、複数のブロックを生成してもよい。この場合、上記式(4)や式(8)に示す判定は行われず、必要ビット数が異なるデータは異なるブロックに含められる。
また、他の実施形態では、例えば、隣り合うデータの必要ビット数の差分が所定値以下の場合に、これらのデータを1つのブロックに含め、所定値を超える場合は、別のブロックに含めてもよい。
また、上記実施形態では、現在のブロックに次のデータを含めるか否かを順に判定した。他の実施形態では、必要ビット数が同じブロックを仮のブロックとして生成した後、各仮ブロックを統合するか否かが判定され、複数のブロックが生成されてもよい。
また、上記実施形態では、各データの圧縮後のビット数(ブロックの設定ビット数)が、ブロックヘッダの領域BH2に設定され、当該ビット数に基づいて各データが抽出されて伸張された。他の実施形態では、各ブロックに含まれる各データを抽出することができれば、どのような情報がブロックヘッダに設定されてもよい。
10 データ圧縮伸張装置
11 入力部
12 A/D変換部
13 エンコード部
14 圧縮データ記憶部
15 デコード部
16 D/A変換部
17 出力部

Claims (23)

  1. 複数の入力データを圧縮して圧縮データを生成するデータ圧縮装置であって、
    前記入力データの値を表すために必要なビット数を示す必要ビット数に基づいて、前記複数の入力データのそれぞれが複数のブロックのいずれかに含まれるように、当該複数のブロックを生成するブロック生成手段と、
    前記ブロック生成手段により生成されたブロックごとに当該ブロックに含まれるデータを圧縮することにより、前記圧縮データを生成するデータ圧縮手段とを備え
    前記ブロック生成手段は、ブロック毎に設定ビット数を設定し、
    1のブロックに設定される前記設定ビット数は、当該ブロックに含まれる各データの必要ビット数以上に設定され、
    前記データ圧縮手段は、1のブロックに含まれる各データのサイズを当該ブロックに設定された設定ビット数に統一することにより、1のブロックに含まれる各データを圧縮する、データ圧縮装置。
  2. 前記ブロック生成手段は、前記必要ビット数に基づいて、前記複数の入力データを並べたデータ列を区切って前記複数のブロックを生成する、請求項1に記載のデータ圧縮装置。
  3. 前記データ圧縮手段は、ブロックに含まれる入力データの値を表すために必要なビットを残して不要なビットを削減することにより、当該ブロックの各データを圧縮する、請求項1又は2に記載のデータ圧縮装置。
  4. 前記ブロック生成手段は、隣り合う入力データの前記必要ビット数が同じ場合、当該隣り合う入力データを同じブロックに含める、請求項1から3の何れかに記載のデータ圧縮装置。
  5. 前記ブロック生成手段は、隣り合う入力データの前記必要ビット数が異なる場合であっても、所定条件が満たされている場合に、当該隣り合うデータを同じブロックに含める、請求項4に記載のデータ圧縮装置。
  6. 前記ブロック生成手段は、隣り合う入力データを1つのブロックに含めて当該1つのブロックを生成するよりも、隣り合う入力データを別のブロックに含めて2つのブロックを生成する方が圧縮後のデータサイズが小さくなる場合、当該隣り合う入力データを別のブロックに含めて2つのブロックを生成する、請求項1から5の何れかに記載のデータ圧縮装置。
  7. 前記データ圧縮手段は、前記必要ビット数に基づいて、前記圧縮データを伸張する際に用いられる伸張情報をブロックごとに生成し、当該伸張情報を含む前記圧縮データを生成する、請求項1から6の何れかに記載のデータ圧縮装置。
  8. 前記ブロック生成手段は、あるブロックの隣の入力データの前記必要ビット数と、当該あるブロックの前記設定ビット数との差分に基づいて、当該隣の入力データを当該あるブロックに含めて1つのブロックを生成するか、又は当該隣の入力データを別のブロックに含めて2つのブロックを生成するかを判定する、請求項に記載のデータ圧縮装置。
  9. 前記ブロック生成手段は、前記あるブロックの隣の入力データを前記あるブロックに含めて1つのブロックを生成するか、又は当該隣の入力データを前記別のブロックに含めて2つのブロックを生成するかを、前記伸張情報のサイズにも基づいて判定する、請求項に記載のデータ圧縮装置。
  10. 前記ブロック生成手段は、前記隣の入力データの前記必要ビット数が前記あるブロックの前記設定ビット数よりも大きい場合において、前記差分と前記あるブロックに含まれる入力データの数との積が前記伸張情報のサイズよりも小さい場合、前記あるブロックに前記隣の入力データを含める、請求項に記載のデータ圧縮装置。
  11. 前記ブロック生成手段は、前記隣の入力データの前記必要ビット数が前記あるブロックの前記設定ビット数よりも大きい場合において、前記あるブロックに前記隣の入力データを含める場合、前記あるブロックの前記設定ビット数を増加させる、請求項10に記載のデータ圧縮装置。
  12. 前記ブロック生成手段は、前記隣の入力データの前記必要ビット数が前記あるブロックの前記設定ビット数よりも小さい場合において、前記差分と前記別のブロックに含まれる入力データの数との積が前記伸張情報のサイズよりも小さい場合、前記あるブロックに前記隣の入力データを含める、請求項から11の何れかに記載のデータ圧縮装置。
  13. 前記ブロック生成手段は、隣り合うブロックの前記設定ビット数が異なるように複数のブロックを生成する、請求項1から12の何れかに記載のデータ圧縮装置。
  14. 前記データ圧縮手段によるデータ圧縮の前に、前記複数の入力データのビット数を予め定められた値に削減するビット数削減手段をさらに備える、請求項1から13の何れかに記載のデータ圧縮装置。
  15. 元データを対数化して前記入力データを生成する対数処理手段をさらに備え、
    前記ブロック生成手段は、前記対数化処理手段によって生成された前記入力データのそれぞれが複数のブロックのいずれかに含まれるように、当該複数のブロックを生成する、請求項1から14の何れかに記載のデータ圧縮装置。
  16. 前記複数の入力データは、音声信号をデジタル変換して得られる音声データである、請求項1から15の何れかに記載のデータ圧縮装置。
  17. 音声信号を所定の周期でサンプリングして得られた複数の時間領域のデータを複数の周波数領域のデータに変換する変換手段をさらに備え、
    前記ブロック生成手段は、前記複数の入力データとして、前記複数の周波数領域のデータのそれぞれが複数のブロックのいずれかに含まれるように、当該複数のブロックを生成する、請求項1から16の何れかに記載のデータ圧縮装置。
  18. 伸張対象データを伸張するデータ伸張装置であって、
    前記伸張対象データは、複数の圧縮されたデータを含む複数のブロックと、ブロックに設定された設定ビット数を示す情報とを含み、
    前記ブロックに含まれる各データのサイズは、当該ブロックに設定された前記設定ビット数に統一され、
    前記ブロックの前記設定ビット数に基づいて、当該ブロックに含まれる複数の圧縮されたデータのそれぞれを抽出する抽出手段と、
    前記抽出手段によって抽出された前記圧縮されたデータを伸張する伸張手段とを備える、データ伸張装置。
  19. 複数の入力データを圧縮して圧縮データを生成するデータ圧縮装置のコンピュータによって実行されるデータ圧縮プログラムであって、前記コンピュータを、
    前記入力データの値を表すために必要なビット数を示す必要ビット数に基づいて、前記複数の入力データのそれぞれが複数のブロックのいずれかに含まれるように、当該複数のブロックを生成するブロック生成手段と、
    前記ブロック生成手段により生成されたブロックごとに当該ブロックに含まれるデータを圧縮することにより、前記圧縮データを生成するデータ圧縮手段として機能させ
    前記ブロック生成手段は、ブロック毎に設定ビット数を設定し、
    1のブロックに設定される前記設定ビット数は、当該ブロックに含まれる各データの必要ビット数以上に設定され、
    前記データ圧縮手段は、1のブロックに含まれる各データのサイズを当該ブロックに設定された設定ビット数に統一することにより、1のブロックに含まれる各データを圧縮する、データ圧縮プログラム。
  20. 複数の入力データを圧縮して圧縮データを生成するデータ圧縮システムであって、
    前記入力データの値を表すために必要なビット数を示す必要ビット数に基づいて、前記複数の入力データのそれぞれが複数のブロックのいずれかに含まれるように、当該複数のブロックを生成するブロック生成手段と、
    前記ブロック生成手段により生成されたブロックごとに当該ブロックに含まれるデータを圧縮することにより、前記圧縮データを生成するデータ圧縮手段とを備え
    前記ブロック生成手段は、ブロック毎に設定ビット数を設定し、
    1のブロックに設定される前記設定ビット数は、当該ブロックに含まれる各データの必要ビット数以上に設定され、
    前記データ圧縮手段は、1のブロックに含まれる各データのサイズを当該ブロックに設定された設定ビット数に統一することにより、1のブロックに含まれる各データを圧縮する、データ圧縮システム。
  21. 複数の入力データを圧縮して圧縮データを生成するデータ圧縮システムにおいて行われるデータ圧縮方法であって、
    前記入力データの値を表すために必要なビット数を示す必要ビット数に基づいて、前記複数の入力データのそれぞれが複数のブロックのいずれかに含まれるように、当該複数のブロックを生成するブロック生成ステップと、
    前記ブロック生成ステップにおいて生成されたブロックごとに当該ブロックに含まれるデータを圧縮することにより、前記圧縮データを生成するデータ圧縮ステップとを含み、
    前記ブロック生成ステップでは、ブロック毎に設定ビット数を設定し、
    1のブロックに設定される前記設定ビット数は、当該ブロックに含まれる各データの必要ビット数以上に設定され、
    前記データ圧縮ステップでは、1のブロックに含まれる各データのサイズを当該ブロックに設定された設定ビット数に統一することにより、1のブロックに含まれる各データを圧縮する、データ圧縮方法。
  22. 伸張対象データを伸張するデータ伸張システムであって、
    前記伸張対象データは、複数の圧縮されたデータを含む複数のブロックと、ブロックに設定された設定ビット数を示す情報とを含み、
    前記ブロックに含まれる各データのサイズは、当該ブロックに設定された前記設定ビット数に統一され、
    前記ブロックの前記設定ビット数に基づいて、当該ブロックに含まれる複数の圧縮されたデータのそれぞれを抽出する抽出手段と、
    前記抽出手段によって抽出された前記圧縮されたデータを伸張する伸張手段とを備える、データ伸張システム。
  23. 複数の入力データを圧縮して圧縮データを生成するとともに、当該圧縮データを伸張するデータ圧縮伸張システムであって、
    前記入力データの値を表すために必要なビット数を示す必要ビット数に基づいて、前記複数の入力データのそれぞれが複数のブロックのいずれかに含まれるように、当該複数のブロックを生成するブロック生成手段と、
    前記ブロック生成手段により生成されたブロックごとに当該ブロックに含まれるデータを圧縮するとともに、ブロックに含まれる各データのビット数を示す情報を生成することにより、前記圧縮データを生成するデータ圧縮手段と、
    前記各データのビット数を示す情報に基づいて、前記ブロックに含まれる複数の圧縮されたデータを抽出する抽出手段と、
    前記抽出手段によって抽出された前記圧縮されたデータを伸張する伸張手段とを備え
    前記ブロック生成手段は、ブロック毎に設定ビット数を設定し、
    1のブロックに設定される前記設定ビット数は、当該ブロックに含まれる各データの必要ビット数以上に設定され、
    前記データ圧縮手段は、1のブロックに含まれる各データのサイズを当該ブロックに設定された設定ビット数に統一することにより、1のブロックに含まれる各データを圧縮する、データ圧縮伸張システム。
JP2012253144A 2012-08-01 2012-11-19 データ圧縮装置、データ圧縮プログラム、データ圧縮システム、データ圧縮方法、データ伸張装置、およびデータ圧縮伸張システム Active JP6125807B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2012253144A JP6125807B2 (ja) 2012-11-19 2012-11-19 データ圧縮装置、データ圧縮プログラム、データ圧縮システム、データ圧縮方法、データ伸張装置、およびデータ圧縮伸張システム
EP13174618.2A EP2693431B1 (en) 2012-08-01 2013-07-02 Data compression apparatus, data compression program, data compression method and data compression/decompression system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012253144A JP6125807B2 (ja) 2012-11-19 2012-11-19 データ圧縮装置、データ圧縮プログラム、データ圧縮システム、データ圧縮方法、データ伸張装置、およびデータ圧縮伸張システム

Publications (2)

Publication Number Publication Date
JP2014103496A JP2014103496A (ja) 2014-06-05
JP6125807B2 true JP6125807B2 (ja) 2017-05-10

Family

ID=51025652

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012253144A Active JP6125807B2 (ja) 2012-08-01 2012-11-19 データ圧縮装置、データ圧縮プログラム、データ圧縮システム、データ圧縮方法、データ伸張装置、およびデータ圧縮伸張システム

Country Status (1)

Country Link
JP (1) JP6125807B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018046406A (ja) * 2016-09-14 2018-03-22 株式会社ターボデータラボラトリー データ圧縮方法、データ圧縮装置、コンピュータプログラム及びデータベースシステム
CN114137348B (zh) * 2021-11-29 2023-11-24 国网湖南省电力有限公司 一种配电终端智能联调验收方法和验收设备

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3277692B2 (ja) * 1994-06-13 2002-04-22 ソニー株式会社 情報符号化方法、情報復号化方法及び情報記録媒体
JPH0937262A (ja) * 1995-07-14 1997-02-07 Canon Inc 画像処理装置及び方法
JP3618833B2 (ja) * 1995-07-14 2005-02-09 キヤノン株式会社 画像処理装置及び方法
JP3434260B2 (ja) * 1999-03-23 2003-08-04 日本電信電話株式会社 オーディオ信号符号化方法及び復号化方法、これらの装置及びプログラム記録媒体
JP4016662B2 (ja) * 2002-01-24 2007-12-05 ソニー株式会社 符号化処理装置、復号処理装置、および方法、並びにコンピュータ・プログラム
JP2005151327A (ja) * 2003-11-18 2005-06-09 Nec Micro Systems Ltd Pcmデータ圧縮・伸長方法及び装置

Also Published As

Publication number Publication date
JP2014103496A (ja) 2014-06-05

Similar Documents

Publication Publication Date Title
JP6021498B2 (ja) データ圧縮装置、データ圧縮プログラム、データ圧縮システム、データ圧縮方法、データ伸張装置、データ圧縮伸張システム、および圧縮データのデータ構造
JP4444296B2 (ja) オーディオ符号化
RU2607230C2 (ru) Адаптация взвешивающих окон анализа или синтеза для кодирования или декодирования путем преобразования
KR20100095585A (ko) 신호 처리 방법 및 장치
JP2005531024A (ja) 圧縮されたマルチメディアコンテンツからのハッシュを生成する方法
RU2015136789A (ru) Декодер для формирования аудиосигнала с улучшенной частотной характеристикой, способ декодирования, кодер для формирования кодированного сигнала и способ кодирования с использованием компактной дополнительной информации для выбора
JP2002041089A (ja) 周波数補間装置、周波数補間方法及び記録媒体
JP4444297B2 (ja) オーディオ符号化
CN111602197A (zh) 解码装置、编码装置、它们的方法以及程序
JP6125807B2 (ja) データ圧縮装置、データ圧縮プログラム、データ圧縮システム、データ圧縮方法、データ伸張装置、およびデータ圧縮伸張システム
JP2009253706A (ja) 符号化装置、復号装置、符号化方法、復号方法及びプログラム
JP6125808B2 (ja) データ圧縮装置、データ圧縮プログラム、データ圧縮システム、およびデータ圧縮方法
KR100601748B1 (ko) 디지털 음성 데이터의 부호화 방법 및 복호화 방법
JP6130128B2 (ja) 圧縮データのデータ構造、記録媒体、データ圧縮装置、データ圧縮システム、データ圧縮プログラム、およびデータ圧縮方法
EP3248190B1 (en) Method of encoding, method of decoding, encoder, and decoder of an audio signal
EP2693431B1 (en) Data compression apparatus, data compression program, data compression method and data compression/decompression system
JP2021167965A (ja) ステレオ信号処理方法及び装置
JPH03233500A (ja) 音声合成方式およびこれに用いる装置
JP5724338B2 (ja) 符号化装置および符号化方法、復号装置および復号方法、並びにプログラム
JP2020190606A (ja) 音声雑音除去装置及びプログラム
JPWO2019021552A1 (ja) 符号化装置、復号装置、符号列のデータ構造、符号化方法、復号方法、符号化プログラム、復号プログラム
JP4437703B2 (ja) 話速変換方法および装置
JP2002026738A (ja) オーディオデータ復号処理装置および方法、ならびにオーディオデータ復号処理プログラムを記録したコンピュータ読取可能な記録媒体
JP3787986B2 (ja) 音波形データ圧縮・復元方式とその動作を実行するためのプログラムを記録した記録媒体
JP3648931B2 (ja) 反復変換音声符号化方法および装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20151013

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160713

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160816

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20161012

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170331

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170406

R150 Certificate of patent or registration of utility model

Ref document number: 6125807

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250