以下、図面に基づいて、本発明の実施の形態を説明する。以下の実施形態の構成は例示であり、本発明は実施形態の構成に限定されない。
<第1実施形態>
以下の実施形態の説明では、音声信号の符号化方式の例として、MEPG−2 AACを用いた場合について説明する。但し、本実施形態で説明する音声符号化方式は、AACで適用されるSHORTブロックのような、1フレームを複数のサブブロックに分割し、複数のサブブロックをサイズの異なる複数種類のブロックにグループ化する音声符号化方式についても適用が可能である。
<<グルーピング>>
図1は、SHORTブロックのグルーピングの例について説明する図である。図1では、パルス符号変調(PCM:Pulse Code Modulation)で変換された音声信号の波形が模式的に示されている。図1に示される例では、1フレームに8つのSHORTブロックw0からw7が含まれる。
図1に示される例では、連続するSHORTブロックw0とw1とがグループ化されてグループg0を形成する。SHORTブロックw2がグループg1を形成する。連続するSHORTブロックw3とw4とがグループ化されてグループg2を形成する。連続するSHORTブロックw5〜w7がグループ化されてグループg3を形成する。形成されたグループg0,g1,g2,g3のグループごとに、音声信号の周波数スペクトルが量子化される。
グルーピングは、上述のように、1フレーム中の連続する1つ以上のSHORTブロックを1つのグループとする。SHORTブロックのグルーピングによって、SHORTブロックの補助情報が共通化されるので、フレーム全体としての補助情報の情報量が削減される。また、SHORTブロック毎に符号化を行うことに比べて、グルーピングされたグループごとに符号化する方が符号化処理に要する時間や負荷が少なくて済み、効率もよい。
図1に示される例のSHORTブロックw2に含まれる音声信号の振幅は、急激に変化している。このような急激な音声信号の振幅の変化は、突発的に発生する大きな音によるものである。急激な音声信号の変化は「アタック」と呼ばれる。すなわち、SHORTブロックw2には、アタックが含まれる。
音声フレームにアタックが含まれる場合には、まず、アタックを検出し、アタックを含むSHORTブロックとその直前のSHORTブロックとの間でグループ境界が設定され
る。しかし、複数のSHORTブロックにまたがってアタックが存在する場合には、特に、音声信号の変化の開始点がSHORTブロックのブロック境界に近い箇所に存在する場合には、アタックが検出されない可能性がある。
図2は、アタックが複数のSHORTブロックにまたがって存在する場合のグルーピングの例を示す図である。図2に示される例では、説明を容易にするため、1フレームは、4つのSHORTブロックに分割される。また、1フレームは、SHORTブロックよりも小さい時間長のサブブロックB0からB7に分割される。サブブロックは、アタック検出の処理の単位である。図2に示される例では、1フレームは、SHORTブロックw0,w1,w2,w3を含み、それぞれのSHORTブロックは、2つのサブブロックを含む。SHORTブロックw0は、サブブロックB0とサブブロックB1とを含む。SHORTブロックw1は、サブブロックB2とサブブロックB3とを含む。SHORTブロックw2は、サブブロックB4とサブブロックB5とを含む。SHORTブロックw3は、サブブロックB6とサブブロックB7とを含む。
図2に示される例では、入力音声信号のアタックがサブブロックB3とB4とにまたがって存在する。図2に示される例では、音声信号の急激な変化の開始点、すなわち、アタックの開始点が、サブブロックB3のサブブロックB4とのブロック境界付近に存在する。図2に示される例の入力音声信号のグループ化は、例えば、以下に示す順番で行われる。
(1)図2に示される例の入力音声信号では、アタックの開始点は、サブブロックB3に存在し、アタックはサブブロックB3,B4,B5にまたがって存在する。すなわち、アタックが、SHORTブロックw1とSHORTブロックw2にまたがって存在する。
(2)図2に示される例では、SHORTブロックのグルーピングを行う場合に、まず、それぞれのサブブロックB0〜B7に含まれる音声信号のパワーが求められる。このとき、図2に示される例では、アタックがサブブロックB3〜B5にまたがって存在するため、アタックのパワーがサブブロックB3〜B5に分散する。
(3)図2に示される例では、サブブロック毎にパワーが求められると、求められたサブブロックのパワーに基づいて、過去のサブブロックからのパワー変化率が求められる。アタック検出用の閾値を超えるパワー変化率を有するサブブロックがある場合には、そのサブブロックにアタックが含まれることが検出される。アタックが検出されないサブブロックのアタック検出結果は“0”となる。アタックが検出されたサブブロックのアタック検出結果は“1”となる。
図2に示される例では、入力音声信号のパワー変化率が求められると、アタックのパワーがサブブロックB3,B4,B5に分散しているために、サブブロックB3,B4,B5のパワー変化率は、いずれも、アタック検出用の閾値に達しない。そのため、アタックが検出されず、サブブロックB0からB7のいずれのアタック検出結果も“0”になる。(4)各SHORTブロックのグルーピング判定結果が、SHORTブロックに含まれる各サブブロックのアタック検出結果の論理和として求められる。グルーピング判定結果が“1”のSHORTブロックの開始点がグループの境界となる。しかし、図2に示される例では、すべてのサブブロックのアタック検出結果が“0”となり、すべてのSHORTブロックのグルーピング判定結果も“0”となる。グルーピングの単位にLONGブロックが選択される。
図2に示される例のように、アタックを含んだ音声信号の符号化が、時間長の長いLONGブロックを用いて実施されると、フレーム中のアタックの前の時間がマスキング効果
の時間より長くなり、プリエコーが発生してしまう。図2に示される例では、アタックが適正に検出されなかったため、プリエコーが発生してしまうおそれがある。
<<音声符号化装置の構成例>>
第1実施形態において説明される音声符号化装置は、音声信号をMPEG−2 AACによって符号化する。音声符号化装置は、音声信号の符号化の際に、アタックの検出と、アタックの検出結果に基づくグルーピングとを行い、グループに基づいて符号化を実施する。音声符号化装置は、アタックの検出精度を高め、適切にグルーピングを行うために、アタックの検出の前に、まず、アタックが含まれる可能性のある候補のサブブロックを検出する。音声符号化装置は、検出された候補のサブブロックのパワーを補正し、補正したパワーに基づいて、パワー変化率を求め、アタックの検出を実施し、そのアタック検出結果に基づいてグループの境界を決定する。サブブロックの時間長は、自由に設定可能であるが、第1実施形態では、サブブロックは、SHORTブロックと同じ時間長であるとする。
図3は、第1実施形態の音声符号化装置の構成例を示す図である。音声符号化装置1は、主記憶装置2と、CPU3と、二次記憶装置4とを備える。
二次記憶装置4は、音声ファイル41と、音声符号化プログラム45とを格納する。音声ファイル41は、音声信号が、例えば、PCMによってアナログディジタル変換された音声ファイルである。以降、「音声信号」とは、ディジタル信号に変換されたPCM形式の音声信号を示す。音声符号化プログラム45は、音声ファイルをMPEG−2 AACで符号化する処理を音声符号化装置1に実行させるためのプログラムである。
主記憶装置2は、CPU3によって二次記憶装置4からロードされた音声符号化プログラム45の音声符号化プログラムコード25が格納される。主記憶装置2は、音声データ21を格納する。音声データ21は、CPU3によって、二次記憶装置4から読み出された音声ファイル41が主記憶装置1の作業領域に格納されたものである。また、音声データ21は、マイクロフォン(図示せず)によって収集され、アナログ―ディジタル変換器(図示せず)によってディジタル信号に変換された音声信号が、一時的に主記憶装置2の作業領域に格納されたものであってもよい。
CPU3は、二次記憶装置4に格納される音声符号化プログラム45を主記憶装置2上にロードする。また、CPU3は、主記憶装置2上にロードされた音声符号化プログラムコード25を実行する際に、処理対象の音声ファイル41を二次記憶装置4から読み出し、音声データ21として主記憶装置2の作業領域に格納する。
CPU3は、主記憶装置2上にロードされた音声符号化プログラムコード25を随時読み出し、主記憶装置2の作業領域に格納された音声データ21を符号化してMPEG−2
AACファイル23を生成する。CPU3は、生成されたMPEG−2 AACファイル23を主記憶装置2に格納する。
CPU3は、音声符号化プログラムコード25を読み出して実行することで、フレーム分割部31,アタック検出部32,ブロック判定部33,直交変換部34,グルーピング部35,量子化部36,ビットストリーム生成部37,及び出力部38として動作する。
フレーム分割部31は、主記憶装置2に格納される音声データ21を読み出して、フレーム単位に分割する。フレーム分割部31は、フレームに分割された音声信号をアタック検出部32と直交変換部34とに出力する。
アタック検出部32は、フレームに分割された1フレーム処理分の音声信号を入力として得る。アタック検出部32は、フレーム中のアタックを検出する。アタック検出部32は、アタックの検出結果をブロック判定部33に出力する。
また、アタック検出部32は、アタックの検出結果に基づいて、フレーム中のSHORTブロックのグルーピングを判定する。アタック検出部32は、グルーピング判定結果をグルーピング部35に出力する。アタック検出部32が実行する処理の詳細については、後述する。
ブロック判定部33は、アタック検出部32からアタックの検出結果を入力として得る。ブロック判定部33は、アタックの検出結果に基づいて、直交変換を行う単位がSHORTブロックであるか、又は、LONGブロックであるかを決定する。フレーム中にアタックが含まれる場合には、ブロック判定部33は、SHORTブロック単位で直交変換を行うことを決定する。フレーム中にアタックが含まれない場合には、ブロック判定部33は、LONGブロック単位で直交変換を行うことを決定する。ブロック判定部33は、決定された直交変換を行うブロック単位を直交変換部34に出力する。
直交変換部34は、フレーム分割部31から1フレーム処理分の音声信号と、ブロック判定部33から直交変換時のブロック単位とを入力として得る。直交変換部34は、1フレーム処理分の音声信号に、ブロック判定部33から入力されるブロック単位によって、直交変換を施す。MPEG−2AACでは、直交変換として修正離散コサイン変換(MDCT:Modified Discrete Cosine Transform)を使用する。直交変換を施すことによって、音声信号は、周波数スペクトルに変換される。ブロック判定部33から入力される直交変換のブロック単位がLONGブロックである場合には、直交変換部34は、LONGブロックで音声信号の直交変換を実行する。ブロック判定部33から入力される直交変換のブロック単位がSHORTブロックである場合には、直交変換部34は、SHORTブロックごとに音声信号の直交変換を実行する。直交変換部34は、周波数スペクトルに変換されたフレームをグルーピング部35に出力する。
グルーピング部35は、アタック検出部32からグルーピング判定結果と、直交変換部34から周波数スペクトルに変換された1フレーム処理分の音声信号とを入力として得る。グルーピング部35は、グルーピング判定結果に基づいて、1フレーム処理分の音声信号に含まれるSHORTブロックのグルーピングを行う。グルーピング部35は、グルーピングされたフレームを量子化部36に出力する。
量子化部36は、グルーピング部35から、グルーピングされた1フレーム分の音声信号を入力として得る。量子化部36は、フレーム中のグループごとに周波数スペクトルを量子化する。量子化部36は、量子化された1フレーム分の音声信号をビットストリーム生成部37に出力する。
ビットストリーム生成部37は、量子化部36から量子化された1フレーム分の音声信号を入力として得る。ビットストリーム生成部37は、量子化された1フレーム分の音声信号を符号化し、「0」と「1」のビットストリームを生成する。ビットストリーム生成部37は、例えば、ハフマン符号化等を用いて、符号化を行う。ビットストリーム生成部37は、生成されたビットストリームを出力部38に出力する。
出力部38は、ビットストリーム生成部37からビットストリームを入力として得る。出力部38は、ビットストリームを出力し、MPEG−2 AACファイル23として主記憶装置2に格納する。
<<アタック検出部の構成>>
第1実施形態の音声符号化装置1のアタック検出部32は、フレーム中に含まれるアタックを検出し、グルーピング境界を決定する。アタック検出部32は、1フレームを所定時間長のサブブロックに分割し、サブブロック毎に含まれる音声信号のパワーの変化率を求め、アタック検出用の閾値を超えるパワー変化率の音声信号を含むサブブロックを検出することによって、アタックを検出する。アタックが検出されると、アタック検出部32は、アタックを含むサブブロックを含むSHORTブロックの開始点をグルーピング境界として決定する。
図4は、アタック検出部32の構成例を示す図である。アタック検出部32は、ハイパスフィルタ321,サブブロック分割部322,ブロックパワー算出部323,補正部324,パワー変化率算出部325,アタック決定部326,およびグルーピング判定部327を含む。
ハイパスフィルタ321は、フレーム分割部31から1フレーム処理分の入力音声信号を入力として得る。ハイパスフィルタ321は、音声信号に含まれる低周波で必要のない信号を取り除き高周波の信号のみを通過させる。ハイパスフィルタ321は、1フレーム処理分の音声信号をサブブロック分割部322に出力する。
サブブロック分割部322は、ハイパスフィルタ321を通過した1フレーム処理分の音声信号を入力として得る。サブブロック分割部322は、1フレームを複数の所定数のサブブロックに等分割する。1つのサブブロックのブロック長は、Nサンプル(N:0を含まない自然数)である。例えば、音声信号がサンプル周波数48kHzでサンプリングされたPCM信号の場合には、1フレームのブロック長は1024サンプルである。1つのフレームが8個のサブブロックに等分割される場合には、1つのサブブロックのブロック長はN=128サンプルである。なお、サンプル周波数48kHzにおけるLONGブロックのブロック長は、1フレームと同じ1024サンプルである。SHORTブロックのブロック長は、128サンプルであり、1フレームは8個のSHORTブロックを含む。サブブロックのブロック長及び時間長は、SHORTブロックと同じでもよいし、SHORTブロックより小さくてもよい。第1実施形態では、サブブロックのブロック長はSHORTブロックと同じであるとする。サブブロック分割部322は、サブブロックに分割された音声信号をブロックパワー算出部323に出力する。
ブロックパワー算出部323は、サブブロックに分割された音声信号を入力として得る。ブロックパワー算出部323は、サブブロック毎に、音声信号のパワーを求める。例えば、ブロックパワー算出部323は、各サブブロックのパワーとして、各サブブロックに含まれる、ハイパスフィルタ321を通過した後のサンプルの振幅による電力の値の二乗和を求める。
ブロックパワー算出部323は、算出された1フレームに含まれる各サブブロックの音声信号のパワーを補正部324に出力する。
補正部324は、ブロックパワー算出部323から各サブブロックの音声信号のパワーを入力として得る。補正部324は、各サブブロックの音声信号のパワーからパワー変化率をもとめ、パワー変化率に基づいて、アタックを含む可能性のあるサブブロックを検出する。アタックを含む可能性のあるサブブロックは、以降、“アタック候補”のサブブロックと呼ばれる。アタック候補のサブブロックが検出された場合には、補正部324は、アタック候補のサブブロックおよびアタック候補のサブブロックの直前のサブブロックにアタックの開始点が含まれているか否かを検査する。補正部324は、アタックの開始点が検出された場合には、アタックの開始点を含むサブブロックの音声信号のパワーを補正する。補正部324は、1フレーム分の、補正されたサブブロックの音声信号のパワーを含む、サブブロックの音声信号のパワーをパワー変化率算出部325に出力する。補正部324の詳細については、後述する。
パワー変化率算出部325は、補正部324から、1フレーム分の、補正されたサブブロックの音声信号のパワーを含む、サブブロックの音声信号のパワーを入力として得る。パワー変化率算出部325は、1フレームに含まれるサブブロックの音声信号のパワーから、各サブブロックのパワー変化率を算出する。パワー変化率算出部325は、算出された各サブブロックのパワー変化率を、アタック決定部326とグルーピング判定部327とに出力する。
アタック決定部326は、各サブブロックのパワー変化率を入力として得る。アタック決定部326は、各サブブロックのパワー変化率と、アタック検出用の閾値1とを比較し、閾値1より大きいパワー変化率のサブブロックを、アタックを含むサブブロックであるとして検出する。アタック決定部326は、アタックを含むサブブロックをアタック検出結果としてグルーピング判定部327と、ブロック判定部33とに出力する。
グルーピング判定部327は、各サブブロックのパワー変化率とアタック検出結果とを入力として得る。グルーピング判定部327は、各サブブロックのパワー変化率とアタック検出結果とから、1フレーム中のグルーピング境界を判定する。グルーピング判定部327は、1フレーム中のグルーピング境界をグループ判定結果としてグルーピング部35に出力する。グルーピング判定部327の詳細については、後述する。
<<補正部の構成>>
図5は、アタック検出部32に含まれる補正部324の構成例を示す図である。補正部324は、アタック候補決定部324a,アタック検査部324b,およびブロックパワー補正部324cを含む。
アタック候補決定部324aは、1フレームに含まれる各サブブロックの音声信号のパワーを入力として得る。アタック候補決定部324aは、各サブブロックの音声信号のパワーに基づいて、アタックを含む可能性のあるサブブロックを検出する。以降、アタックを含む可能性のあるサブブロックはアタック候補のサブブロックと呼ばれる。アタック候補決定部324aは、アタック候補のサブブロックの情報を含むアタック候補検出結果と、サブブロックに分割されたフレームを、アタック検査部324bに出力する。
図6は、アタック候補決定部324aが実行するアタック候補検出処理の例を説明する図である。図6に示される例には、サブブロックB0からサブブロックB7に分割されたフレームのサブブロックのうち、サブブロックB0からサブブロックB3までが抽出されて示されている。図6に示される例では、アタックがサブブロックB1とサブブロックB2とにまたがって存在し、アタックの開始点がサブブロックB1とサブブロックB2とのブロック境界の近くに存在する。図6に示される例には、入力音声信号の波形S1と、入
力音声信号の各サブブロックのパワーP1が示されている。
アタック候補決定部324aは、ブロックパワー算出部323から入力される各サブブロックの音声信号のパワーに基づいて、各サブブロックのパワー変化率を求める。アタック候補決定部324aは、サブブロックbのパワー変化率を求めるために、まず、過去の音声信号の電力の平均avepow[b]を求める。アタック候補決定部324aは、メモリ324mを含んでおり、サブブロック毎に求められる過去の音声信号の電力の平均avepow[b]をメモリ324mに格納する。サブブロックbの過去の音声信号の電力の平均avepow[b]は、例えば、以下の式2のような加重平均等で求められる。
αは、サブブロックbの直前のサブブロックb−1における音声信号の電力の急激な変化の影響を受けないための重み係数である。なお、フレームの先頭のサブブロックについて、過去の音声信号の電力の平均を求める場合には、メモリ342mに格納されている、直前のフレームの最後尾のサブブロックの過去の音声信号の電力の平均の値を用いればよい。
次に、アタック候補決定部324aは、サブブロックbの過去の音声信号の電力の平均avepow[b]とサブブロックbのパワーpow[b]との比から、例えば、以下の式3を用いて、パワー変化率powRatio_tmp[b]を求める。
アタック候補決定部324aは、フレーム中の全サブブロックのパワー変化率を求める。図6に示される例では、フレーム中のサブブロックB0からサブブロックB3までのパワー変化率がパワー変化率R1として示される。
アタック候補決定部324aは、各サブブロックのパワー変化率と、アタック検出用の閾値1と、アタック候補検出用の閾値2とを比較する。
閾値1は、サブブロックにアタックが含まれていることを検出するためのアタック検出用閾値である。サブブロックのパワー変化率が閾値1を超えている場合には、アタック候補決定部324aは、当該サブブロックにアタックが含まれることを検出する。閾値1には、例えば、10から25(比率のため単位はない)までの値が設定される。
閾値2は、サブブロックにおいてアタックの検出を確定することはできないが、当該サブブロックにアタックが含まれる可能性が高いことを判定するためのアタック候補検出用閾値である。閾値2は閾値1より小さい値であり、閾値2<閾値1の関係である。サブブ
ロックのパワー変化率が閾値2と閾値1との間に存在する場合には、当該サブブロックにおいてアタックが含まれることを確定することはできないが、当該サブブロックにアタックが含まれる可能性が高いことが判定される。すなわち、サブブロックのパワー変化率が閾値2と閾値1との間に存在する場合には、アタック候補決定部324aは、当該サブブロックをアタック候補のサブブロックとして検出する。閾値2には、閾値1に10から25までの値が設定される場合、例えば、1.5から8までの値が設定される。
図6に示される例では、閾値1を超えるパワー変化率のサブブロックは存在していない
。図6に示される例では、サブブロックB2のパワー変化率が閾値2と閾値1との間に存在するので、アタック候補決定部324aは、サブブロックB2をアタック候補として検出する。
図7は、アタック候補決定部324aが実行するアタック候補検出処理の例のフローを示す図である。
アタック候補決定部324aは、1フレームに含まれる各サブブロックの音声信号のパワーを入力として得ると、アタック候補検出処理を開始する。
アタック候補決定部324aは、フレーム中のサブブロックの位置を示す変数bの初期値として、b=0と設定する(OP1)。例えば、変数b=0は、サブブロックB0を指す。図6に示される例のように、1フレームが8個のサブブロックに分割される場合には、変数bの範囲は、0≦b≦7である。
アタック候補決定部324aは、サブブロックbのパワー変化率を、例えば、式2および式3を用いて求める。アタック候補決定部324aは、サブブロックbのパワー変化率(powRatio_tmp[b])が閾値1(thr1)より大きいか否かを判定する。すなわち、アタック候補決定部324aは、サブブロックbがアタックを含むか否かを判定する(OP2)。
サブブロックbのパワー変化率が閾値1より大きい場合には(OP2:Yes)、サブブロックbはアタックを含むことが検出される。ただし、アタック候補決定部324aは、アタックを含むサブブロックを検出するのではなく、アタック候補のサブブロックを検出することが目的であるため、アタックが含まれるサブブロックを検出しても、特に処理は行わない。その後、処理がOP5に進む。
サブブロックbのパワー変化率が閾値1以下場合には(OP2:No)、アタック候補決定部324aは、サブブロックbのパワー変化率が閾値2(thr2)より大きいか否かを判定する(OP3)。すなわち、アタック候補決定部324aは、サブブロックbがアタック候補であるか否かを判定する。
サブブロックbのパワー変化率が閾値2より大きい場合には(OP3:Yes)、サブブロックbがアタック候補のサブブロックであることが判定される。アタック候補決定部324aは、サブブロックbがアタック候補のサブブロックであることを記録する(OP4)。アタック候補決定部324aは、例えば図6に示される例において、サブブロックB2がアタック候補として検出される場合には、attack_band=B2を記録する。また、attack_band=−1は、アタック候補のサブブロックが検出されないことを示す。その後、処理がOP5に進む。
サブブロックbのパワー変化率が閾値2以下の場合には(OP3:No)、サブブロックbが、アタックを含まず、さらに、アタック候補でもないことが示される。その後、処
理がOP5に進む。
OP5において、アタック候補決定部324aは、処理を次のサブブロックに進めるために、変数bに1を加算する。例えば、変数bがb=0である場合には、アタック候補決定部324aは、変数bをb=0+1=1に変更する。
アタック候補決定部324aは、変数bが1フレームに含まれるサブブロックの数Mより小さい値であるかを判定する(OP6)。すなわち、アタック候補決定部324aは、フレームに含まれるサブブロックでアタック候補検出処理が行われていないサブブロックが残っているか否かを判定する。図6に示される例では、1フレームがサブブロックB0からB7の8個のサブブロックに分割されるため、アタック候補決定部324aは、変数bが8より小さい値か否かを判定する。
変数bが1フレームに含まれるサブブロックの数Mより小さい値である場合には(OP6:Yes)、アタック候補検出処理が行われていないサブブロックが存在することが示される。アタック候補決定部324aは、OP2からOP4の処理を繰り返し実行する。
変数bが1フレームに含まれるサブブロックの数M以上の値である場合には(OP6:No)、フレームに含まれるすべてのサブブロックに対してアタック候補検出処理が終了したことが示される。アタック候補決定部324aは、アタック候補検出結果としてattack_bandをアタック検査部324bに出力し、アタック候補検出処理を終了する。
図6に示される例においては、アタック候補決定部324aは、サブブロックB2をアタック候補として検出するので、アタック候検出定結果として、attack_band=B2をアタック検査部324bに出力する。また、アタック候補が検出されない場合には、アタック候補決定部324aは、アタック候補検出結果として、attack_band=−1をアタック検査部324bに出力する。
図7に示されるアタック候補検出処理によって検出されたアタック候補のサブブロックに、実際にアタックの開始点が含まれているとは限らない。アタック候補のサブブロックには、実際にアタックの開始点が含まれる場合と、アタックの開始点は含まれておらず、図6に示される例の入力音声信号のように、アタック候補の直前のサブブロックにアタックの開始点が含まれる場合とがある。
図5に戻って、アタック検査部324bは、アタック候補決定部324aからアタック候補検出結果attack_bandを入力として得る。アタック検査部324bは、アタック候補検出結果に基づいて、アタックの開始点を含むサブブロックを特定するアタック特定処理を行う。アタック検査部324bは、アタック特定処理の結果としてアタックを含むサブブロックを示すアタック特定結果attack_bandをブロックパワー補正部324cに出力する。
図8は、アタック検査部324bが実行するアタック特定処理の例を説明する図である。図8に示される例では、図6に示される例における入力音声信号のサブブロックB1およびサブブロックB2が抽出されて示されている。
図8に示される例では、アタック候補検出結果として、attack_band=B2が入力された場合の、アタック検査部324bが実行するアタック特定処理を示す。
(1)アタック検査部324bは、アタック候補のサブブロックと、アタック候補のサブブロックより時間的に1つ前のサブブロックとについて、アタックの開始点が含まれているか調査する。なぜならば、アタックの開始点がアタック候補のサブブロックに含まれる場合と、アタックの開始点がアタック候補の直前のサブブロックに含まれる場合とが考えられるからである。アタック検査部324bは、まず、アタック候補のサブブロックの時間的に1つ前のサブブロックを選択する。図8に示される例では、アタック候補検出結果がattack_band=B2であるので、サブブロックB2がアタック候補である。したがって、図8に示される例では、アタック検査部324bは、まず、調査の対象として、アタック候補であるサブブロックB2の時間的に1つ前のサブブロックB1を選択する。
(2)アタック検査部324bは、選択されたサブブロックについて、より詳細にアタックの開始点が含まれているか否かの調査を行うため、サンプル単位で音声信号のパワーを算出する。図8に示される場合では、アタック検査部324bは、サブブロックB1に含まれるサンプルごとに音声信号のパワーを算出する。
(3)選択されたサブブロックに含まれる各サンプルの音声信号のパワーに基づいて、アタック検査部324bは、各サンプルのパワー変化率を算出する。このときの、サブブロックに含まれる各サンプルのパワー変化率の算出は、例えば、式2及び式3のサブブロックをサンプルに置き換えて行われればよい。図8に示される例では、サブブロックB1に含まれる各サンプルのパワーに基づいて、アタック検査部324bは、各サンプルのパワー変化率を算出する。
(4)アタック検査部324bは、アタックの開始点を特定するための閾値3(開始点特定用閾値)よりも音声信号のパワー変化率が大きいサンプルがあるか否かを判定する。選択されたサブブロックに音声信号のパワー変化率が閾値3よりも大きいサンプルがある場合には、アタック検査部324bは、選択されたサブブロックにアタックの開始点が含まれることを特定する。図8に示される例では、音声信号のパワー変化率が閾値3よりも大きいサンプルが、サブブロックB1に含まれているので、アタック検査部324bは、サブブロックB1にアタックの開始点が含まれることを特定する。閾値3には、アタック検出用の閾値1と同じ範囲の値が用いられる。例えば、アタック検出用の閾値1が10から25までの範囲の値である場合には、開始点特定用の閾値3は、10から25までの値が用いられる。
閾値3より音声信号のパワー変化率が大きいサンプルが存在しない場合には、アタック検査部324bは、次にアタック候補のサブブロックを選択し、上記(2)から(4)の処理を実行する。
なお、アタック候補決定部324aから入力されるアタック候補検出結果が、attack_band=−1である場合、及び、attack_band=0である場合、アタック検査部324bはアタック特定処理(上述の(1)から(4))は行わない。attack_band=−1である場合とは、すなわち、アタック候補のサブブロックが検出されなかった場合である。attack_band=0である場合とは、すなわち、アタック候補として、フレーム中の先頭のサブブロックが検出された場合である。アタック候補としてフレーム中の先頭のサブブロックが検出された場合には、アタックの開始点が1つ前のフレーム、又は、フレーム中の先頭のサブブロックに含まれていることが予想される。アタックの開始点が1つ前のフレームに含まれている場合でも、フレームの先頭のサブブロックに含まれている場合でも、フレームの先頭のサブブロックと直前のサブブロック(直前のフレーム)との境界がグルーピング境界になる。従って、アタック候補としてフレームの先頭のサブブロックが検出される場合には、アタック検査部324bは、アタ
ック特定処理を行わない。以上より、アタック候補決定部324aから入力されるアタック候補検出結果が、attack_band=−1である場合、及び、attack_band=0である場合には、アタック検査部324bは、アタック特定処理を実行しない。
図9は、アタック検査部324bが実行するアタック特定処理のフローを示す図である。アタック検査部324bは、アタック候補決定部324aからアタック候補検出結果(attack_band)が入力されると、アタック特定処理を開始する。
アタック検査部324bは、アタック候補決定部324aから入力されるアタック候補検出結果が、attack_band=−1、又は、attack_band=0であるか否かを判定する(OP11)。アタック候補検出結果がattack_band=−1の場合には、アタック候補となるサブブロックが検出されなかったことが示される。ただし、アタック候補検出結果がattack_band=−1であっても、アタックが含まれるサブブロックが検出される場合もある。アタック候補検出結果がattack_band=0の場合には、フレーム中の先頭のサブブロックがアタック候補であることが示される。上述のとおり、アタック候補のサブブロックが検出されなかった場合、及び、フレームの先頭のサブブロックがアタック候補である場合には、アタック特定処理を実行しなくてよい。したがって、アタック候補検出結果がattack_band=−1、又は、attack_band=0である場合には(OP11:Yes)、アタック検査部324bは、アタック特定結果attack_band=−1とし(OP17)、アタック特定処理を終了する。アタック特定結果を示す変数attack_bandが、attack_band=−1である場合、サブブロックに含まれる音声信号のパワーの補正を行う必要のあるサブブロックが存在しないことを示す。
アタック候補検出結果がattack_band=−1、又は、attack_band=0でない場合には(OP11:No)、アタックの開始点は、アタック候補のサブブロック、又は、アタック候補の直前のサブブロックに含まれる可能性が高い。まず、アタック検査部324bは、アタック候補の直前のサブブロックからアタックの開始点の調査を行うために、サンプルの位置を示す変数iの初期値を、アタック候補の直前のサブブロックの先頭サンプルの位置に設定する(OP12)。図9におけるattack_bandは、アタック候補のサブブロックを示す。attack_band−1は、アタック候補のサブブロックの直前のサブブロックを示す。band_top[b](bはサブブロックの位置を示す0を含む自然数)は、サブブロックbの先頭サンプルの位置を示す。なお、フレームに含まれるサンプルには、0から順に通し番号が付される。例えば、1フレームが1024サンプルを含むとすると、各サンプルには0から1023までの番号が付される。従って、フレームに含まれるサンプルの位置を示す変数iの範囲は、0から1フレームに含まれるサンプル数から1を減算した数の範囲である。
図8に示される例の場合、アタック検査部324bは、例えば、アタック候補のサブブロックB2の直前のサブブロックとしてサブブロックB1を選択し、変数iとしてサブブロックB1の先頭サンプルの位置を設定する。
次に、アタック検査部324bは、サンプルiのパワー変化率subPowRtio[i]を、例えば、式2及び式3を用いて求める。アタック検査部324bは、サンプルiのパワー変化率subPowRtio[i]がアタックの開始点を検出するための閾値3(thr3)より大きいか否かを判定する(OP13)。すなわち、アタック検査部324bは、アタックの開始点がサンプルiに含まれている否かを判定する。
サンプルiのパワー変化率が閾値3より大きい場合には(OP13:Yes)、アタッ
ク検査部324bは、アタックの開始点がサンプルiに含まれることを判定する。アタック検査部324bは、アタックの開始点がサンプルiを含むサブブロックに含まれることを特定し、アタック特定結果attack_bandを設定する(OP14)。閾値3よりパワー変化率が大きいサンプルiが、アタック候補のサブブロックに含まれている場合には、アタック検査部324bは、attack_band=attack_bandに設定する。閾値3よりパワー変化率が大きいサンプルiが、アタック候補の直前のサブブロックに含まれている場合には、アタック検査部324bは、attack_band=attack_band−1に設定する。その後、アタック検査部324bは、アタック特定結果としてattack_bandをブロックパワー補正部324cに出力し、アタック特定処理を終了する。
図8に示される例の場合、アタック候補の直前のサブブロックB1に含まれるサンプルのパワー変化率が閾値3より大きいので、アタック検査部324bは、アタックがサブブロックB1に含まれることを判定し、attack_band=attack_band−1=2−1=1と記録する。その後、アタック検査部324bは、アタック特定結果としてattack_band=1をブロックパワー補正部324cに出力し、アタック特定処理を終了する。
サンプルのパワー変化率が閾値3以下の場合には(OP13:No)、アタック検査部324bは、次のサンプルの処理を行うために、サンプルの位置を示す変数iに1を加算する(OP15)。
アタック検査部324bは、OP15において1を加算された変数iが示すサンプルの位置が、アタック候補のサブブロック及びアタック候補のサブブロックの直前のサブブロックに含まれるサンプルの位置を示すか否かを判定する(OP16)。アタック検査部324bは、以下の式4を用いて、変数iが示すサンプル位置を判定する。
式4は、サンプル位置を示す変数iが、アタック候補の1つ後のサブブロックの先頭サンプルの位置の値より小さいか否かを判定する式である。変数iが式4を満たす間は、アタック候補のサブブロック又はアタック候補のサブブロックの直前のサブブロックに含まれるサンプルについて、アタック特定処理が実行されていることを示す。
変数iが式4を満たす場合には(OP16:Yes)、アタック検査部324bは、OP13〜OP16の処理を繰り返し実行する。
変数iが式4を満たさない場合には(OP16:No)、アタック候補のサブブロック及びアタック候補の直前のサブブロックに含まれる全サンプルのアタックの開始点の調査が終了し、且つ、アタックの開始点が含まれるサンプルが検出されなかったことが示される。次に、アタック検査部324bは、アタック候補及びアタック候補の直前のサブブロックにアタックが検出されなかったので、attack_band=−1と記録する(OP17)。アタック検査部324bは、アタック特定結果として、アタックが特定されなかったことを示すattack_band=−1をブロックパワー補正部324cに出力し、アタック特定結果を終了する。
図9に示されるアタック特定処理においては、アタック検査部324bは、まず、アタック候補のサブブロックの直前のサブブロックからアタックの開始点の調査を行う。アタック候補のサブブロックの直前のサブブロックからアタックの開始点が検出されない場合に、アタック検査部324bは、アタック候補のサブブロックのアタックの開始点の調査を行う。しかしながら、アタック検査部324bは、アタックの開始点の調査をアタック候補の直前のサブブロックから行うことに限定されず、アタック候補のサブブロックの調査から行ってもよい。
次に、ブロックパワー補正部324cは、アタック検査部324bからアタック特定結果attack_bandを入力として得る。ブロックパワー補正部324cは、アタック特定結果attack_bandに基づいて、アタック検査部324bによって特定されたアタックの開始点を含むサブブロックの音声信号のパワーを補正する。ブロックパワー補正部324cは、アタックの開始点が含まれるサブブロックの音声信号のパワーが補正された、1フレーム分の音声信号をパワー変化率算出部325に出力する。
図10は、ブロックパワー補正部324cが実行するパワー補正処理の例を説明する図である。図10に示される例では、図6に示される各サブブロックのパワーP1を、サブブロック毎にプロットしたグラフである。したがって、図10に示される例では、サブブロックB1にアタックの開始点が含まれているが、サブブロックB2の方が音声信号のパワーが大きい。サブブロックB1がアタックが含まれるサブブロックとしてアタック決定部326(図4)に判定されるために、ブロックパワー補正部324cはサブブロックB1の音声信号のパワーを補正する。すなわち、ブロックパワー補正部324cは、サブブロックB1の音声信号のパワーの変化率が、アタック検出用の閾値1を超えるように、サブブロックB1のパワーを補正する。
図10に示される例では、ブロックパワー補正部324cは、アタック特定結果attack_band=B1によって特定されるサブブロックB1の音声信号のパワーに、サブブロックB2のサブブロックの音声信号のパワーを加算して補正する。補正されたサブブロックB1のパワーは、アタックがサブブロックB1にのみ含まれる場合のパワーと近い値になる。
サブブロックB1にサブブロックB2の音声信号が加算されることによって、サブブロックB1の音声信号のパワーがアタック検出用閾値である閾値1より大きい値となる。従って、アタック決定部326において、アタックがサブブロックB1に含まれると判定されるようになる。
ブロックパワー補正部324cは、サブブロックB1の補正されたパワーを含む、1フレーム分の音声信号をパワー変化率算出部325に出力する。
図11は、ブロックパワー補正部324cが実行するパワー補正処理の例のフローを示す図である。
ブロックパワー補正部324cは、アタック検査部324bからアタック特定結果attack_bandが入力されると、パワー補正処理を開始する。
ブロックパワー補正部324cは、サブブロックの音声信号のパワーを補正する必要があるか否かを判定するために、アタック特定結果がattack_band=−1であるか否かを判定する(OP21)。アタック特定結果がattack_band=−1である場合には(OP21:Yes)、アタック候補が検出されなかった、又は、アタック候
補及びアタック候補の直前のサブブロックにアタックの開始点が検出されなかったことが示される。従って、ブロックパワー補正部324cは、サブブロックの音声信号のパワーを補正せず、パワー補正処理を終了する。
アタック特定結果がattack_band=−1でない場合には(OP21:No)
、ブロックパワー補正部324cは、サブブロックの音声信号のパワーの補正を行うために、サブブロックの位置を示す変数bの初期値をb=0と設定する(OP22)。
次に、ブロックパワー補正部324cは、変数bがattack_bandと同じ値を示すか否かを判定する(OP23)。すなわち、ブロックパワー補正部324cが、現在処理しているサブブロックbに、アタックが含まれるか否かを判定する。
変数bがattack_bandと同じ値の場合には(OP23:Yes)、ブロックパワー補正部324cが現在処理中のサブブロックbにアタックが含まれることが示される。ブロックパワー補正部324cは、アタックが含まれるサブブロックbの音声信号の補正を行う。ブロックパワー補正部324cは、アタックが含まれるサブブロックbに、1つ後のサブブロックb+1の音声信号のパワーを加算し、アタックが含まれるサブブロックbの音声信号のパワーの補正を行う(OP24)。図11のOP24に示されるpow[b]は、サブブロックbの音声信号のパワーを表す。
変数bがattack_bandと同じ値でない場合には(OP23:No)、現在処理中のサブブロックbに、アタックが含まれないことが示されるので、ブロックパワー補正部324cは、サブブロックbの音声信号のパワーの補正を行わない。ブロックパワー補正部324cは、処理をOP25に進める。
次に、ブロックパワー補正部324cは、ブロックの位置を示す変数bに1を加算する(OP25)。ブロックパワー補正部324cは、OP25において1を加算された変数bが、1フレームに含まれるサブブロックの数Mより小さい値か否かを判定する(OP26)。変数bが1フレームに含まれるサブブロックの数Mより小さい値である場合には(OP26:Yes)、パワー補正処理を行っていないサブブロックが存在することが示されるので、ブロックパワー補正部324cは、処理をOP23に戻す。変数bが1フレームに含まれるサブブロックの数M以上の値である場合には(OP26:No)、フレームに含まれる全サブブロックについてパワー補正処理が行われたことを示すので、ブロックパワー補正部324cは、パワー補正処理を終了する。
ブロックパワー補正部324cは、パワー補正処理が施された1フレーム分のサブブロックの音声信号のパワーをパワー変化率算出部325に出力する。
パワー変化率算出部325は、ブロックパワー補正部324cから、パワー補正処理が施された1フレーム分のサブブロックの音声信号のパワーを入力として得る。パワー変化率算出部325は、フレーム分のサブブロックの音声信号のパワーから、各サブブロックのパワー変化率を、例えば、式2及び式3を用いて算出する。パワー変化率算出部325は、算出された各サブブロックのパワー変化率をアタック決定部326及びグルーピング判定部327に出力する。
アタック決定部326は、パワー変化率算出部325から各サブブロックのパワー変化率を入力として得る。アタック決定部326は、アタック検出用閾値である閾値1(図6)と、各サブブロックのパワー変化率とを比較する。アタック決定部326は、各サブブロックのパワー変化率が閾値1より大きい値の場合には、当該サブブロックのアタック検出結果をattack[b]=1とする。アタック決定部326は、各サブブロックのパ
ワー変化率が閾値1以下である場合には、当該サブブロックのアタック検出結果をattack=0とする。アタック検出結果attack[b]は、0か1のどちらかの値をとる。アタック検出結果attack[b]=0である場合には、アタックはサブブロックbには含まれないことが示される。アタック検出結果attack[b]=1である場合には、アタックがサブブロックbに含まれることが示される。アタック決定部326は、各サブブロックのアタック検出結果attack[b]を、グルーピング判定部327とブロック判定部33(図3)とに出力する。
ブロック判定部33は、アタック検出結果に基づいて、直行変換をSHORTブロック単位で行うか、LONGブロック単位で行うかを決定する。アタック検出結果がattack[b]=1であるサブブロックが少なくとも1つある場合には、すなわち、フレームにアタックが検出された場合には、ブロック判定部33は、SHORTブロック単位で直交変換することを決定する。すべてのサブブロックのアタック検出結果がattack[b]=0である場合には、ブロック判定部33は、直行変換をLONGブロック単位で行うことを決定する。ブロック判定部33は、ブロック判定結果として、直交変換をLONGブロック、又は、SHORTブロックのどちらの単位で行うかを、直交変換部34に出力する。
直交変換部34は、フレーム分割部31から1フレーム処理分の入力音声信号と、ブロック判定部33からブロック判定結果とを入力として得る。直交変換部34は、ブロック判定結果がSHORTブロックの場合には、SHORTブロック単位で1フレーム分の音声信号の直交変換を行う。直交変換部34は、ブロック判定結果がLONGブロックの場合には、LONGブロック単位で1フレーム分の音声信号の直交変換を行う。直交変換部34は、直交変換が施された1フレーム分の音声信号をグルーピング部35に出力する。
<<グルーピング判定部>>
グルーピング判定部327は、各サブブロックのアタック検出結果attack[b]と、各サブブロックのパワー変化率とを入力として得る。グルーピング判定部327は、グルーピング決定用の閾値4を用いて、グルーピングを決定する。グルーピング決定用の閾値4は、アタック検出用の閾値1と同じ又は閾値1よりも大きい値を設定する。例えば、アタック検出用の閾値1が、10〜25であるならば、グルーピング決定用の閾値4は、70〜170の範囲で設定される。
図12は、グルーピング判定部327が実行するグルーピング判定処理の例を説明する図である。図12に示される入力音声信号の波形は、図6に示される入力音声信号と同じものである。図12に示される例では、入力音声信号のパワー変化率のグラフの下に、各サブブロックのアタック検出結果attack[b]とグルーピング判定結果group[b]とを表示する。
グルーピング判定部327は、各サブブロックのパワー変化率とグルーピング決定用の閾値4とを比較する。グルーピング判定部327は、グルーピング決定用の閾値4より大きい値のパワー変化率のサブブロックのグルーピング判定結果をgroup[b]=1とする。グルーピング判定部327は、グルーピング決定用の閾値4以下の値のパワー変化率のサブブロックのグルーピング判定結果をgroup[b]=0とする。グルーピング判定部327は、フレームに含まれるすべてのサブブロックについて、グルーピング判定結果group[b]を求める。グルーピング判定結果group[b]は0か1かどちらかの値のみをとる。
グルーピング判定部327から各サブブロックのグルーピング判定結果group[b]を得るグルーピング部35は、各サブブロックのグルーピング判定結果がgroup[
b]=0からgroup[b]=1に変わるサブブロック間でグループ境界を設定する。
図12に示される例では、サブブロックB0のグルーピング判定結果がgroup[B0]=0、サブブロックB1のグルーピング判定結果がgroup[B1]=1であるので、サブブロックB0とサブブロックB1との境界がグループ境界として選択される。グルーピング部35は、グループg0にサブブロックB0を含め、グループg1にサブブロックB1〜B3を含める。なお、第1実施形態では、サブブロックはSHORTブロックと同じ時間長であるので、グループg0はSHORTブロックw0、グループg1はSHORTブロックw1〜w3が含まれることと同意である。
図13は、図12に示されるグルーピング判定部327が実行するグルーピング判定処理の例のフロー図である。グルーピング判定部327は、各サブブロックのアタック検出結果attack[b]と、各サブブロックのパワー変化率とを入力として得ると、グルーピング判定処理を開始する。
グルーピング判定部327は、グルーピングを行う単位がSHORTブロックであるか、LONGブロックであるかを判定する(OP31)。グルーピング判定部327は、フレームにアタックが含まれるか否か、すなわち、アタック検出結果がattack[b]=1であるサブブロックが少なくとも1つあるか否かを判定する。アタック検出結果がattack[b]=1であるサブブロックが少なくとも1つある場合には(OP31:Yes)、グルーピング判定部327は、グルーピングをSHORTブロック単位で行うことを判定する。
アタック検出結果がattack[b]=1であるサブブロックがない場合には(OP31:No)、グルーピング判定部327は、グルーピングをLONGブロック単位で行うことを判定する。グルーピングをLONGブロック単位で行うとは、すなわち、グルーピングを行わないことを示すので、グルーピング判定部327は、グルーピング判定処理を終了する。
次に、グルーピング判定部327は、サブブロックの位置を示す変数bの初期値をb=0に設定する(OP32)。
グルーピング判定部327は、サブブロックbのパワー変化率PowRatio[b]を、例えば、式2および式3を用いて求める。グルーピング判定部327は、サブブロックbのパワー変化率PowRatio[b]がグルーピング決定用の閾値4より大きいか否かを判定する(OP33)。サブブロックbのパワー変化率PowRatio[b]がグルーピング決定用の閾値4以下の場合には(OP33:No)、グルーピング判定部327は、サブブロックbはグループ境界ではないと判定する(OP34)。グルーピング判定部327は、サブブロックbのグルーピング判定結果をgroup[b]=0とする(OP34)。その後、処理がOP36に進む。
サブブロックbのパワー変化率PowRatio[b]がグルーピング決定用の閾値4より大きい場合には(OP33:Yes)、グルーピング判定部327は、サブブロックbはグループ境界であると判定する(OP35)。グルーピング判定部327は、サブブロックbのグルーピング判定結果をgroup[b]=1とする(OP35)。その後、処理がOP36に進む。
グルーピング判定部327は、サブブロックの位置を示す変数bに1を加算する(OP36)。次に、グルーピング判定部327は、変数bが1フレームに含まれるサブブロックの数Mより小さい値か否かを判定する(OP37)。すなわち、グルーピング判定部3
27は、1フレームに含まれるすべてのサブブロックについて、グルーピング判定結果が求められたか否かを判定する。
変数bが1フレームに含まれるサブブロックの数Mより小さい値である場合には(OP37:Yes)、グルーピング判定結果が求められていないサブブロックがあることが示される。グルーピング判定部327は、残りのサブブロックのグルーピング判定結果を求めるため、OP33〜OP37の処理を繰り返し実行する。
変数bが1フレームに含まれるサブブロックの数M以上の場合には(OP37:No)、フレームに含まれるすべてのサブブロックについてグルーピング判定結果が求められたことが示される。グルーピング判定部327は、フレームに含まれる全サブブロックのグルーピング判定結果group[b]をグルーピング部35に出力して、グルーピング判定処理を終了する。
図14は、グルーピング判定部327が実行するグルーピング判定処理の結果の例を示す図である。図14に示される例では、1フレームはサブブロックB0からB7(SHORTブロックw0〜w7)の8つに分割される。図14に示される例では、フレームに2つのアタックが含まれ、アタックは、サブブロックB1とサブブロックB4と含まれる。また、図14に示される例では、グルーピング決定用の閾値4は、アタック検出用の閾値1よりも大きい値である。
図14に示される例では、アタック検出用の閾値1を超えるパワー変化率のサブブロックB1とサブブロックB4とが存在する。サブブロックB1の音声信号のパワー変化率は、グルーピング決定用の閾値4も超える。一方、サブブロックB4の音声信号のパワー変化率は、グルーピング決定用の閾値4を超えない。従って、図12及び図13において説明されたグルーピング判定処理が実行された結果、サブブロックB1のグルーピング判定結果はgroup[B1]=1となり、サブブロックB4のグルーピング判定結果はgroup[B4]=0となる。すなわち、サブブロックB0とサブブロックB1との境界はグループ境界として選択されるが、サブブロックB3とサブブロックB4との境界はグループ境界として選択されない。
従って、図14に示される例では、グルーピング部35は、グループg0にサブブロックB0が含まれ、グループg1にサブブロックB1〜B7が含まれるようにグルーピングを行う。
以上より、アタック検出用の閾値1よりも大きい値のグルーピング決定用の閾値4を用いると、1フレーム中に2つ以上のアタックが含まれる場合に、より強いパワーのアタックを優先してグルーピングすることができる。より強いパワーのアタックほど、聴く人間は音質の劣化を知覚しやすいので、より強いパワーのアタックを優先してグルーピングすることによって、主観的な音質を向上することができる。また、1フレーム中に2つ以上のアタックが含まれる場合には、アタック毎にグルーピングするよりも、より強いアタックを優先して(閾値4を超えるパワー変化率のサブブロックのみで)グルーピングする方が、グループ数が少なくなり、符号化の効率が上がる。
グルーピング部35は、直交変換部34から直交変換された1フレーム処理分の音声信号と、アタック検出部32(グルーピング判定部327)から各サブブロックのグルーピング判定結果とを入力として得る。グルーピング部35は、各サブブロックのグルーピング判定結果がgroup[b]=0からgroup[b]=1に変化するサブブロック間の境界をグループ境界として定め、グルーピングを行う。グルーピング部35は、直交変換された1フレーム処理分の音声信号をグルーピングし、量子化部36に出力する。
量子化部36は、グルーピングされた1フレーム処理分の音声信号入力として得て、それぞれのグループ毎に量子化する。量子化された1フレーム処理分の音声信号は、ビットストリーム生成部37に入力され、符号化されてビットストリームに変換される。符号化された1フレーム処理分の音声信号は、出力部38を経由して、主記憶装置2のAACファイルの一部として格納される。
<<第1実施形態の作用効果>>
第1実施形態で説明された音声符号化装置1は、音声ファイルをMPEG−2 AACファイルに変換する際に、アタックを含む可能性のあるアタック候補のサブブロックを検出する。音声符号化装置1は、検出されたアタック候補のサブブロックについて、より詳細なサンプル単位で調査を行い、アタック候補のサブブロック、又は、アタック候補のサブブロックの直前のサブブロックにアタックの開始点が含まれることを検出する。さらに、音声符号化装置1は、アタックの開始点が検出されたアタック候補のサブブロック、又は、アタック候補のサブブロックの直前のサブブロックの音声信号のパワーを補正する。音声符号化装置1は、補正されたサブブロックの音声信号のパワーからパワー変化率を算出し、アタック候補のサブブロック、又は、アタック候補のサブブロックの直前のサブブロックにアタックが含まれることを検出する。したがって、アタックの開始点が検出されたアタック候補のサブブロック、又は、アタック候補のサブブロックの直前のサブブロックの音声信号のパワーが補正されることによって、アタックの検出の精度が上がる。アタックの検出の精度が上がることによって、適切なグルーピングが行われる。適切なグルーピングが行われることによって、量子化誤差によるプリエコーの発生が抑えられ、符号化された音声データの再生時の音質が向上する。
また、音声符号化装置1のグルーピング判定部327は、グルーピング判定処理の際に、アタック検出用の閾値1よりも大きい値(厳しい条件)のグルーピング決定用の閾値4を用いることができる。アタック検出用の閾値1よりも大きい値のグルーピング決定用の閾値4が用いられる場合には、1フレーム中に2以上のアタックが含まれていても、より強いパワーを持つアタック(閾値4を超えるパワー変化率のサブブロック)が優先されてグルーピングされる。より強いパワーを持つアタックが優先されてグルーピングされることによって、グループの数を少なくすることができ、符号化の効率が上がる。
図15は、第1実施形態で説明された音声符号化装置1による音声符号化の実行結果の例を示す図である。図15では、音声信号(原音)の時間信号の波形と周波数信号の波形とが示される。また、図15では、アタック候補のサブブロックまたはアタック候補の直前のサブブロックの音声信号のパワーの補正を行わない装置によってMPEG−2 AAC−LC(Low Complexity)で符号化された原音の再生音声信号の周波数信号が示される。さらに、図15では、第1実施形態で説明された音声符号化装置1によってMPEG−2 AAC−LCで符号化された原音の再生音声信号の周波数信号が示される。これらの音声信号の波形は、いずれも同じ時間軸上で示される。図15では、原音は、48kHzでサンプリングされた音声信号が示される。また、図15では、符号化方式としてMPEG−2 AAC−LC、ビットレート64kbpsを用いて符号化を行った場合の例が示される。
図15において、原音の波形中で、丸で囲まれているアタックA1は、ブロック境界に存在するアタックである。サブブロックの音声信号のパワーの補正が行われずに符号化された場合の音声信号の波形を注目すると、アタックA1の前にプリエコーによる波形が表れている。これは、装置がブロック境界に存在するアタックA1を検出できずに、LONGブロックで符号化してしまったために、プリエコーが発生したと考えられる。
一方、第1実施形態の音声符号化装置1によって符号化された音声信号の波形を注目すると、アタックA1の前には波形が表れておらず、プリエコーも発生していないことがわかる。すなわち、第1実施形態の音声符号化装置1は、アタックA1を検出し、SHORTブロックでグルーピングして符号化を行ったため、プリエコーの発生を防ぐことができたものと考えられる。
以上より、第1実施形態の音声符号化装置1によると、音声信号を符号化する際の音質の劣化を少なくすることができ、結果として、符号化による音声信号を再生した場合の音質が改善する。
第1実施形態では、MPEG−2 AACを用いる音声符号化装置1について説明された。音声符号化装置1に適用できる符号化技術は、MPEG−2 AACに限られない。音声符号化装置1に適用できる符号化技術として、例えば、MPEG−4 AAC,MPEG−2 HE−AAC,MPEG−4 HE−AAC,MPEG−4 HE−AAC v2,MPEG Sorround,MPEG−4 BSAC等がある。
<<第1実施形態のハードウェア構成>>
図16は、第1実施形態のハードウェア構成の例を示す図である。第1実施形態の音声符号化装置1は、情報処理装置(コンピュータ)を適用できる。情報処理装置とは、例えば、パーソナルコンピュータのような汎用のコンピュータや音声の符号化を実施する専用のコンピュータ等である。また、音声符号化装置1は、ビデオカメラやミュージックプレイヤーなどの音声をディジタルデータとして録音可能な装置を適用できる。
音声符号化装置100は、入力装置101,主記憶装置102,プロセッサ103,二次記憶装置104,媒体読み取り装置105,ネットワークインタフェース106のような周辺装置とのインタフェース装置,及び出力装置107を含む。また、これらは、バス108でそれぞれ接続されている。主記憶装置102及び二次記憶装置104はコンピュータ読み取り可能な記録媒体である。
音声符号化装置100は、プロセッサ103が記録媒体に記憶された音声符号化プログラム104pを主記憶装置102の作業領域にロードして実行する。音声符号化プログラム104pの実行を通じて周辺装置が制御されることによって、所定の目的に合致した機能を実現することができる。
プロセッサ103は、例えば、CPU(Central Prosessing Unit)や、DSP(Digital Signal Processor)である。主記憶装置102は、例えば、RAM(Random Access Memory)やROM(Read Only Memory)を含む。
二次記憶装置104は、例えば、EPROM(Erasable Programmable ROM),又はハードディスクドライブ(Hard Disk Drive)で
ある。
また、音声符号化装置100は、媒体読み取り装置105を備えており、媒体読み取り装置105にセットされたリムーバブルメディア、すなわち可搬記録媒体からデータを読み取ることができる。リムーバブルメディアは、例えば、USB(Universal Serial Bus)メモリ、或いは、CD(Compact Disc)やDVD(Degital Versatile Disc)のようなディスク記録媒体である。
ネットワークインタフェース106は、有線のネットワーク、および、無線のネットワ
ークと接続する。通信インタフェース装置は、例えば、LAN(Local Area Network)インタフェースボートや、無線通信のための無線通信回路である。
さらに、周辺装置は、キーボードやポインティングデバイスのような入力装置101や、ディスプレイ装置やプリンタのような出力装置107を含む。入力装置101がユーザに操作されることによって、音声符号化プログラムが起動する。また、出力装置107は、ユーザに音声符号化プログラムの操作画面等を提供する。
また、入力装置101はマイクロフォンのような音声の入力装置を含むことができ、マイクロフォンで収集された音声は二次記憶装置104に格納されてもよい。さらに、2次記憶装置104に格納された音声データは、アナログ−ディジタル変換によりディジタル信号の音声データに変換されてもよい。マイクロフォンで収集され、アナログ―ディジタル変換でディジタル信号に変換された音声データは、音声符号化プログラム104が実行されることによって、MPEG−2 AACファイルに符号化されることができる。また、出力装置107は、スピーカのような音声の出力装置を含むことができ、音声符号化プログラム104によって生成されたMPEG−2 AACファイルの再生音声を出力することができる。
音声符号化装置100として使用されるコンピュータは、プロセッサ103が実行する音声符号化プログラム104pの音声符号化プロセスにおいて、周辺装置が制御されることによって、フレーム分割部31,アタック検出部32,ブロック判定部33,直交変換部34,グルーピング部35,量子化部36,ビットストリーム生成部37,及び出力部38としての機能を実現する。また、音声符号化装置100として使用されるコンピュータは、プロセッサ103が実行する音声符号化プログラム104pの音声符号化プロセスにおいて、サブブロック分割部322,ブロックパワー算出部323,補正部324,パワー変化率算出部325,アタック決定部326,グルーピング判定部327としての機能を実現する。さらに、音声符号化装置100として使用されるコンピュータは、プロセッサ103による記録媒体上の音声符号化プログラム104pの実行を通じて、アタック候補決定部324a,アタック検査部324b,及びブロックパワー補正部324cとしての機能を実現する。メモリ324mは、静的に又はプログラムの実行過程で主記憶装置102又は二次記憶装置104の記憶領域に作成される。
<<第1実施形態の第1変形例>>
第1実施形態におけるアタック候補決定部324a,アタック検査部324b,ブロックパワー補正部324cは、以下に説明されるような処理をそれぞれ行ってもよい。
図17A及び図17Bは、第1実施形態の第1変形例におけるアタック候補決定部324aが実行するアタック候補検出処理のフローを示す図である。アタック候補決定部324aは、1フレームに含まれる各サブブロックの音声信号のパワーをブロックパワー算出部323から入力として得ると、アタック候補検出処理を開始する。
アタック候補決定部324aは、サブブロックの位置を示す変数bの初期値として、b=0を設定する(OP41)。1フレームが8個のサブブロックに分割される場合には、変数bの範囲は、0から7の範囲である。また、アタック候補決定部324aは、フレームにアタックが含まれるか否かを示す変数attackの初期値をattack=0とする(OP41)。attack=0の場合には、フレームにアタックが含まれないことが示される。attack=1の場合には、フレームにアタックが含まれることが示される。
アタック候補決定部324aは、サブブロックbのパワー変化率PowRatio_t
mp[b]を、例えば、式2および式3を用いて求める。アタック候補決定部324aは、サブブロックbのパワー変化率PowRatio_tmp[b]が閾値1(thr1)より大きいか否かを判定する(OP42)。
サブブロックbのパワー変化率が閾値1より大きい場合には(OP42:Yes)、サブブロックbはアタックを含むことが検出される。アタック候補決定部324aは、サブブロックbにアタックが含まれることが検出された、すなわち、フレームにアタックが含まれることが検出されたので、attack=1に更新する(OP43)。次に処理がOP46に進む。
サブブロックbのパワー変化率が閾値1以下の場合には(OP42:No)、アタック候補決定部324aは、変数bに1を加算する(OP44)。アタック候補決定部324aは、変数bが1フレームに含まれるサブブロックの数Mより小さい値であるかを判定する(OP45)。
変数bが1フレームに含まれるサブブロックの数Mより小さい値である場合には(OP5:Yes)、アタック候補決定部324aは、処理をOP42に進め、次のサブブロックに対してOP42からOP45の処理をくりかえし実施する。
変数bが1フレームに含まれるサブブロックの数M以上の値である場合には(OP45:No)、フレームに含まれるすべてのサブブロックに対してOP42の処理を実行したことが示される。アタック候補決定部324aは、処理をOP46に進める。
アタック候補決定部324aは、attack=1であるか否かを判定する(OP46)。attack=1である場合には(OP46:Yes)、フレームにアタックが含まれていることが検出されているので、アタック候補決定部324aは、アタック候補のサブブロックを検出する必要がない。アタック候補決定部324aは、サブブロックがアタック候補であるか否かを示すattack_band[b]をすべてのサブブロックについてattack_band[b]=0とする(OP53)。アタック候補決定部324aは、全サブブロックのアタック候補検出結果attack_band[b]をアタック検査部324bに出力して、アタック候補検出処理を終了する。attack_band[b]=0は、サブブロックbがアタック候補ではないことを示す。attack_band[b]=1は、サブブロックbがアタック候補であることを示す。
attack=1でない場合には(OP46:No)、フレームにアタックは検出されていないことが示される。次に、アタック候補決定部324aは、アタック候補を検出するための処理を行う。アタック候補決定部324aは、サブブロックの位置を示す変数bをb=0に設定する(OP47)。
次に、アタック候補決定部324aは、サブブロックbのパワー変化率PowRatio_tmp[b]がアタック候補検出用の閾値2(thr2)より大きいか否かを判定する(OP48)。すなわち、アタック候補決定部324aは、サブブロックbがアタック候補であるか否かを判定する。
サブブロックbのパワー変化率が閾値2以下の場合には(OP48:No)、サブブロックbはアタック候補でないことが判定される。アタック候補決定部324aは、サブブロックbのアタック候補検出結果をattack_band[b]=0と記録する(OP49)。その後、処理がOP51に進む。
サブブロックbのパワー変化率が閾値2より大きい場合には(OP48:Yes)、サ
ブブロックbがアタック候補であることが判定される。アタック候補決定部324aは、アタック候補検出結果をattack_band[b]=1と記録する(OP50)。その後、処理がOP51に進む。
次に、アタック候補決定部324aは、サブブロックの位置を示す変数bに1を加算する(OP51)。アタック候補決定部324aは、変数bが1フレームに含まれるサブブロックの数Mより小さい値であるかを判定する(OP52)。すなわち、アタック候補決定部324aは、フレームに含まれるサブブロックでアタック候補検出処理が行われていないサブブロックが残っているか否かを判定する。1フレームがサブブロックB0からB7の8個のサブブロックに分割される場合には、アタック候補決定部324aは、変数bが8より小さい値か否かを判定する。
変数bが1フレームに含まれるサブブロックの数Mより小さい値である場合には(OP52:Yes)、アタック候補検出処理が行われていないサブブロックが存在することが示される。この場合、アタック候補決定部324aは、処理をOP48に進め、OP48からOP52の処理を繰り返し実行する。
変数bが1フレームに含まれるサブブロックの数M以上の値である場合には(OP52:No)、フレームに含まれるすべてのサブブロックに対してアタック候補検出処理を実行完了したことが示される。この場合、アタック候補決定部324aは、アタック候補検出結果として各サブブロックのattack_band[b]をアタック検査部324bに出力して、アタック候補検出処理を終了する。
アタック検査部324bは、各サブブロックのアタック検出結果attack_band[b]がアタック候補決定部324aから入力されると、アタック特定処理を開始する。
図18は、第1変形例におけるアタック検査部324bが実行するアタック特定処理のフローを示す図である。
アタック検査部324は、attack=1であるか否かを判定する(OP61)。変数attack=1である場合には(OP61:Yes)、フレームにアタックが含まれていることが検出されているので、アタック検査部324bは、アタック特定処理を実行する必要がない。アタック検査部324bは、アタック特定処理を終了する。
attack=1でない場合には(OP61:No)、フレームにアタックは検出されていないことが示される。アタック検査部324bは、サブブロックの位置を示す変数bの初期値をb=0に設定する(OP62)。
次に、アタック検査部324bは、サブブロックbのアタック候補検出結果がattack_band[b]=1であるか否かを判定する(OP63)。すなわち、アタック検査部324bは、サブブロックbがアタック候補のサブブロックであるか否かを判定する。
サブブロックbのアタック候補検出結果がattack_band[b]=1でない場合には(OP63:No)、サブブロックbはアタック候補のサブブロックでないことが示される。アタック検査部324bは、サブブロックbのパワー補正が必要か否かの判定結果であるパワー補正判定結果をrevise_band[b]=0と記録する(OP64)。サブブロックbにパワー補正が不要である場合には、パワー補正判定結果はrevise_band[b]=0と示される。サブブロックbにパワー補正が必要である場合
には、パワー補正判定結果はrevise_band[b]=1と示される。また、アタック検査部324bは、サブブロックbにおいてアタックの開始点を含むサンプルの位置を示す変数をattack_pos[b]=−1と記録する(OP64)。変数attack_pos[b]=−1は、サブブロックbにアタックの開始点が含まれるサンプルは含まれていないことを示す。その後、アタック検査部324bは、処理をOP70に移す。
サブブロックbのアタック候補検出結果がattack_band[b]=1である場合には(OP63:Yes)、サブブロックbはアタック候補のサブブロックであることが示される。この場合、アタックの開始点は、アタック候補であるサブブロックb、又は、サブブロックbの直前のサブブロックb−1のどちらかに含まれる可能性が高い。アタック検査部324bは、アタックの開始点が含まれるサンプルを特定するために、アタック候補のサブブロックbとサブブロックbの直前のサブブロックb−1とをサンプル単位で調査する。
アタック検査部324bは、フレーム内でのサンプルの位置を示す変数iの初期値をi=band_top[b−1]に設定する(OP65)。band_top[b−1]は、アタック候補のサブブロックbの直前のサブブロックに含まれる先頭のサンプルの位置を示す。
次に、アタック検査部324bは、サンプルiに含まれる音声信号のパワー変化率subPowRatio[i]を算出し、アタックの開始点を特定するための閾値3(thr3)より大きいか否かを判定する(OP66)。すなわち、アタック検査部324bは、サンプルiにアタックの開始点が含まれているか否かを判定する。
サンプルiに含まれる音声信号のパワー変化率subPowRatio[i]がアタックの開始点特定用の閾値3より大きい場合には(OP66:Yes)、サンプルiにアタックの開始点が含まれることが示される。アタック検査部324bは、パワー補正判定結果revise_bandと、アタックの開始点が含まれるサンプルの位置を示すattack_posとを記録する(OP67)。サンプルiがアタック候補であるサブブロックbに含まれている場合には、アタック検査部324bは、パワー補正結果をrevise_band[b]=1、アタックの開始点が含まれるサンプルの位置を示す変数attack_pos[b]=iと記録する。サンプルiがアタック候補の直前のサブブロックb−1に含まれる場合には、アタック検査部324bは、パワー補正結果をrevise_band[b−1]=1、アタックの開始点が含まれるサンプルの位置を示す変数attack_pos[b−1]=iと記録する。その後、処理がOP70に進む。
サンプルiに含まれる音声信号のパワー変化率subPowRatio[i]がアタックの開始点を特定するための閾値3以下の場合には(OP66:No)、サンプルiにアタックの開始点が含まれないことが示される。アタック検査部324bは、サンプルiの調査を終え、次のサンプルを調査するために、サンプルの位置を示す変数iに1を加算する(OP68)。
アタック検査部324bは、サンプルの位置を示す変数iが現在調査中のサブブロックbの次のサブブロックb+1の先頭のサンプル位置を示す値(band_top[b+1])より小さいか否かを判定する(OP69)。すなわち、アタック検査部324bは、サブブロックbおよび直前のサブブロックb−1に含まれるすべてのサンプルの調査が終了したか否かを判定する。
サンプルの位置を示す変数iが現在調査中のサブブロックbの次のサブブロックb+1
の先頭のサンプル位置を示す値より小さい場合には(OP69:Yes)、サブブロックbに未調査のサンプルが残っていることが示される。アタック検査部324bは、OP66〜OP69の処理を繰り返し実行する。
サンプル位置を示す変数iが現在調査中のサブブロックbの次のサブブロックb+1の先頭のサンプル位置を示す値以上の場合には(OP69:No)、サブブロックbに含まれるすべてのサンプルの調査が終了したことが示される。その後、処理がOP70に移る。
サブブロックbについて、アタックの調査が終了すると(OP64、OP67,OP6
9:Yes)、アタック検査部324bは、次のサブブロックについてアタックの検出を行うために、サブブロックの位置を示す変数bに1を加算する(OP70)。アタック検査部324bは、サブブロックの位置を示す変数bが1つのフレームに含まれるサブブロックの数Mよりも小さいか否かを判定する(OP71)。すなわち、アタック検査部324bは、フレーム中にアタック特定処理が実行されていないサブブロックがあるか否かを判定する。
サブブロックの位置を示す変数bが1つのフレームに含まれるサブブロックの数Mよりも小さい場合には(OP71:Yes)、フレーム中にアタック特定処理が実行されていないサブブロックがあることが示される。アタック検査部324bは、OP63〜OP70の処理を繰り返し実行する。
サブブロックの位置を示す変数bが1つのフレームに含まれるサブブロックの数M以上の場合には(OP71:No)、フレーム中の全てのサブブロックについてアタック特定処理が実行されたことが示される。アタック検査部324bは、各サブブロックのパワー補正判定結果revise_band[b]とattack_pos[b]とをブロックパワー補正部324cに出力して、アタック特定処理を終了する。
図18に示されるアタック特定処理においては、アタック検査部324bは、まず、アタック候補のサブブロックの直前のサブブロックからアタックの開始点の調査を行う。アタック候補のサブブロックの直前のサブブロックからアタックの開始点が検出されない場合に、アタック検査部324bは、アタック候補のサブブロックのアタックの開始点の調査を行う。しかしながら、アタック検査部324bは、アタックの開始点の調査をアタック候補の直前のサブブロックから行うことに限定されず、アタック候補のサブブロックの調査から行ってもよい。
ブロックパワー補正部324cは、アタック検査部324bから各サブブロックのパワー補正判定結果revise_band[b]とattack_pos[b]とを入力されると、パワー補正処理を開始する。
図19は、第1変形例におけるブロックパワー補正部324cが実行するパワー補正処理を示す図である。図19では、図6に示される例における入力音声信号のサブブロックB1およびサブブロックB2が抽出されて示されている。図19に示される入力音声は、サブブロックB1とサブブロックB2にアタックがまたがっており、サブブロックB1のパワーが補正される必要がある。ブロックパワー補正部324cは、サブブロックB2に含まれるアタックのパワー分だけ抽出して、サブブロックB1のパワー補正を行う。
(1)ブロックパワー補正部324cは、アタック検査部324bによって特定されたアタックの開始点が含まれるサンプルattack_pos[b]のパワーをピークパワーpeak_powとする。
(2)ブロックパワー補正部324cは、ピークパワーからg[db](g<0)だけ減衰したパワーの閾値Pthを以下の式5を用いて決定する。
(3)パワー補正部324は、各サンプルのパワーと閾値Pthとを比較して、サンプルのパワーが閾値Pthを下回るサンプルの位置attack_endを探索する。
(4)ブロックパワー補正部324cは、サブブロックB2の先頭のサンプルband_top[B2]からパワーが閾値Pthを下回るサンプルattack_endまでのサンプルのパワーの和Δpowを以下の式6を求める。
(5)ブロックパワー補正部324cは、サブブロックB1のパワーにΔpowを加算し、サブブロックB2のパワーにΔpowを減算して、補正する。
このように補正することによって、サブブロックB1とサブブロックB2にまたがって存在するアタックが、サブブロックB1のみに存在するように見せかけることができる。
図20は、図19で示された第1変形例におけるブロックパワー補正部324cが実行するパワー補正処理のフローである。
ブロックパワー補正部324cは、フレームにアタックが含まれることを示す変数attackがattack=1であるか否かを判定する(OP81)。attack=1である場合には(OP81:Yes)、アタック候補決定部324aによって、フレームにアタックが含まれていることが検出されている、すなわち、アタック検出用の閾値1より大きいパワー変化率のサブブロックが存在することが示される。したがって、ブロックパワー補正部324cは、パワー補正処理を実行する必要がない。ブロックパワー補正部324cは、パワー補正処理を終了する。
attack=1でない場合には(OP81:No)、ブロックパワー補正部324cは、サブブロックの位置を示す変数bの初期値をb=0に設定する(OP82)。ブロックパワー補正部324cは、サブブロックbのパワー補正判定結果がrevise_band[b]=1であるか否かを判定する(OP83)。すなわち、ブロックパワー補正部324cは、サブブロックbはパワー補正が必要であるか否かを判定する。
サブブロックbのパワー補正判定結果がrevise_band[b]=0である場合には(OP83:No)、サブブロックbはパワー補正が必要ないことが示される。その後、処理がOP85に進む。
サブブロックbのパワー補正判定結果がrevise_band[b]=1である場合には(OP83:Yes)、サブブロックbはパワー補正が必要であることが示される。ブロックパワー補正部324cは、Δpowを算出し、サブブロックbのパワー補正を行う(OP84)。図19で説明されたように、ブロックパワー補正部324cは、まず、ブロックパワー補正部324cは、閾値Pthを求める。次に、ブロックパワー補正部324cは、Δpowを求める。ブロックパワー補正部324cは、サブブロックbのパワーに、Δpowを加算して補正する。それとともに、ブロックパワー補正部324cは、サブブロックb+1のパワーからΔpowを減算して補正する。
ブロックパワー補正部324cは、サブブロックbのパワー補正が終了すると、サブブロックの位置を示す変数bに1を加算する(OP85)。ブロックパワー補正部324cは、サブブロックの位置を示す変数bが1つのフレームに含まれるサブブロックの数Mよりも小さいか否かを判定する(OP86)。すなわち、ブロックパワー補正部324cは、フレーム中にパワー補正処理が実行されていないサブブロックがあるか否かを判定する。
サブブロックの位置を示す変数bが1つのフレームに含まれるサブブロックの数Mよりも小さい場合には(OP86:Yes)、フレーム中にパワー補正処理が実行されていないサブブロックがあることが示される。ブロックパワー補正部324cは、OP83〜OP86の処理を繰り返し実行する。
サブブロックの位置を示す変数bが1つのフレームに含まれるサブブロックの数M以上の場合には(OP86:No)、フレーム中の全てのサブブロックについてパワー補正処理が実行されたことが示される。ブロックパワー補正部324cは、パワー補正された各サブブロックのパワーをパワー変化率算出部325に出力して、パワー補正処理を終了する。
その後、音声信号は、補正された各サブブロックのパワーに基づいて、アタック検出、グルーピングがなされ、符号化される。
<<第1実施形態の第2変形例>>
第1実施形態のアタック検査部324bは、アタック候補のサブブロックとアタック候補のサブブロックの直前のサブブロックとをサンプル単位で調査し、アタックの開始点を検出する。これに代えて、アタック検査部324bは、サブブロック単位でアタックの開始点を検出する。
アタック検査部324bは、アタック候補決定部324aからアタック候補検出結果attack_bandを入力として得る。アタック検査部324bは、アタック候補のサブブロックとアタック候補のサブブロックの直前のサブブロックとについて、アタックの開始点を検出する処理を実行する。
まず、アタック検査部324bは、サブブロックbまでの過去の電力の平均パワーavepow_short[b]を求める。例えば、アタック検査部324bは、サブブロックbまでの過去の電力の平均パワーavepow_short[b]として、以下の式8に示されるような加重平均を求める。
アタック候補決定部324aは、第1実施形態においては、式2を用いて過去の電力の平均パワーavepow[b]を求める場合には、重み係数α=0.7とし、直前のサブフレームb−1までの電力の平均パワーavepow[b−1]の重みを大きくした。これに対して、アタック検査部324bは、直前のサブフレームb−1のパワーの重みを大きくすることによって、アタックによる急激なパワーの変化をとらえることが可能となる。
アタック検査部324bは、サブブロックbのパワー変化率powRatio_tmp[b]を、過去の平均パワーavepow_short[b]と、サブブロックbのパワーとから、以下の式9を用いて求める。
図21は第2変形例におけるアタック検査部324bが実行するアタック特定処理のフローを示す図である。アタック検査部324bは、アタック候補検出結果attack_bandが入力されると、アタック特定処理を実行する。
アタック検査部324bは、アタック候補決定部324aから入力されるアタック候補検出結果が、attack_band=−1、又は、attack_band=0であるか否かを判定する(OP91)。アタック候補検出結果がattack_band=−1の場合には、アタック候補となるサブブロックが検出されなかったことが示される。アタック候補検出結果がattack_band=0の場合には、サブブロックB0がアタック候補であることが示される。アタック候補のサブブロックが検出されなかった場合、及び、サブブロックB0がアタック候補である場合には、アタック検査部324bは、アタック特定処理を実行しなくてよい。したがって、アタック候補検出結果がattack_band=−1、又は、attack_band=0である場合には(OP91:Yes)、アタック検査部324bは、アタック特定結果attack_band=−1とし(OP97)、アタック特定処理を終了する。アタック特定結果を示す変数attack_bandが、attack_band=−1である場合、サブブロックに含まれる音声信号のパワーの補正を行う必要のあるサブブロックが存在しないことを示す。
アタック候補検出結果がattack_band=−1、又は、attack_band=0でない場合には(OP91:No)、すなわち、アタック候補検出結果が何れかのサブブロックを指し示す場合には、アタック候補のサブブロックの存在が示される。この場合、アタックの開始点は、アタック候補のサブブロック、又は、アタック候補の直前のサブブロックに含まれる可能性が高い。したがって、アタック検査部324bは、アタック候補のサブブロックとアタック候補の直前のサブブロックとに対して、アタックの検出の処理を実行する。まず、アタック検査部324bは、アタック候補の直前のサブブロックからアタックの検出を行うために、サブブロックの位置を示す変数bをアタック候補の
直前のサブブロックに設定する(OP92)。すなわち、アタック検査部324bは、b=attack_band−1とする。
次に、アタック検査部324bは、サブブロックbのパワー変化率を、例えば、式8及び式9を用いて求める。アタック検査部324bは、サブブロックbのパワー変化率powRatio_tmp[b]がアタックの開始点を検出するための閾値3(thr3)より大きいか否かを判定する(OP93)。すなわち、アタック検査部324bは、サブブロックbにアタックの開始点が含まれているか否かを判定する。
サブブロックbのパワー変化率が閾値3より大きい場合には(OP93:Yes)、アタック検査部324bは、サブブロックbにアタックの開始点が含まれることを判定する。アタック検査部324bは、サブブロックbにアタックの開始点が含まれることを特定し、アタック特定結果attack_band=bを設定する(OP94)。その後、アタック検査部324bは、アタック特定結果としてattack_bandをブロックパワー補正部324cに出力し、アタック特定処理を終了する。
サブブロックbのパワー変化率が閾値3以下の場合には(OP93:No)、アタック検査部324bは、次のサブブロックについてアタックの開始点を検出する処理を行うために、変数bに1を加算する(OP95)。
アタック検査部324bは、OP95において1を加算された変数bが、アタック候補の次のサブブロックの位置(attack_band+1)より小さいか否かを判定する(OP96)。第2変形例では、アタック検査部324bは、アタック候補のサブブロックとアタック候補の直前のサブブロックについてのみ、アタックの開始点の検出処理を実行するためである。
変数bがアタック候補の次のサブブロックの位置を示す値より小さい値の場合には(OP96:Yes)、アタック検査部324bは、次のサブブロックについてOP93〜OP96の処理を繰り返し実行する。
変数bがアタック候補の次のサブブロックの位置を示す値以上である場合には(OP96:No)、アタック候補のサブブロックとアタック候補の直前のサブブロックとのアタックの開始点の調査が終了し、且つ、アタックの開始点が検出されないことが示される。次に、アタック検査部324bは、アタック候補及びアタック候補の直前のサブブロックにアタックが検出されなかったので、attack_band=−1と記録する(OP97)。アタック検査部124bは、アタック特定結果として、アタックが特定されなかったことを示すattack_band=−1をブロックパワー補正部324cに出力し、アタック特定処理を終了する。
以上のように、アタック検査部324bが、アタックの開始点を検出する際に、サンプル単位ではなく、サブブロック単位で処理を実行することによって、処理量を少なくすることができる。
図21に示されるアタック特定処理においては、アタック検査部324bは、まず、アタック候補のサブブロックの直前のサブブロックからアタックの開始点の調査を行う。アタック候補のサブブロックの直前のサブブロックからアタックの開始点が検出されない場合に、アタック検査部324bは、アタック候補のサブブロックのアタックの開始点の調査を行う。しかしながら、アタック検査部324bは、アタックの開始点の調査をアタック候補の直前のサブブロックから行うことに限定されず、アタック候補のサブブロックの調査から行ってもよい。
<<第1実施形態の第3変形例>>
第1実施形態で説明されたグルーピング判定部327は、以下に説明される処理を行ってもよい。
第3変形例では、グルーピング判定部327は、グルーピング決定用の閾値4より大きいパワー変化率のサブブロックが複数ある場合でも、フレーム中で最初に閾値4を超えるサブブロックをグループ境界とする。すなわち、グルーピング判定部327は、フレーム中で、グルーピング判定結果がgroup[1]となるサブブロックbが検出されると、サブブロックbとサブブロックbの直前のサブブロックb−1との境界をグループ境界とする。グルーピング判定部327は、それ以降のサブブロックについては、閾値4との比較を行わない。
図22は、第3変形例におけるグルーピング判定部327が実行するグルーピング判定処理のフローを示す図である。グルーピング判定部327は、アタック決定部326から各サブブロックのアタック検出結果attack[b]と、パワー変化率算出部325から各サブブロックのパワー変化率とを入力として得ると、グルーピング判定処理を開始する。
グルーピング判定部327は、グルーピングを行う単位がSHORTブロックであるか、LONGブロックであるかを判定する(OP101)。グルーピング判定部327は、フレームにアタックが検出されるか否か、すなわち、アタック検出結果がattack[b]=1であるサブブロックが少なくとも1つあるか否かを判定する。アタック検出結果がattack[b]=1であるサブブロックが少なくとも1つある場合には(OP101:Yes)、グルーピングをSHORTブロック単位で行うことが判定される。
アタック検出結果がattack[b]=1であるサブブロックが存在しない場合には(OP101:No)、グルーピングをLONGブロック単位で行うことが判定される。グルーピングをLONGブロック単位で行うとは、すなわち、グルーピングが行われないことが示されるので、グルーピング判定部327は、グルーピング判定処理を終了する。
グルーピング判定部327は、サブブロックの位置を示す変数bの初期値をb=0に設定する(OP102)。続いて、グルーピング判定部327は、サブブロックbのグルーピング判定結果の初期値としてgroup[b]=0を設定する(OP103)。
グルーピング判定部327は、サブブロックbのパワー変化率PowRatio[b]がグルーピング決定用の閾値4(thr4)より大きいか否かを判定する(OP104)。サブブロックbのパワー変化率PowRatio[b]がグルーピング決定用の閾値4より大きい場合には(OP104:Yes)、グルーピング判定部327は、サブブロックbはグループ境界であると判定する(OP105)。グルーピング判定部327は、サブブロックbのグルーピング判定結果をgroup[b]=1とする(OP105)。この時点で、サブブロックbと直前のサブブロックb−1との境界をグループ境界とすることが決定する。それ以降のサブブロックについては、アタックが含まれていたとしても、グルーピング判定部327は、処理を行わず一律にグルーピング判定結果をgroup[b]=0とする。すなわち、サブブロックbを含め、サブブロックb以降のサブブロックに、アタックが含まれていたとしても、1つのグループとしてグルーピングされる。グルーピング判定部327は、各サブブロックのグルーピング判定結果group[b]をグルーピング部35に出力して、グルーピング判定処理を終了する。
サブブロックbのパワー変化率PowRatio[b]がグルーピング決定用の閾値4
以下の場合には(OP104:No)、グルーピング判定部327は、サブブロックbはグループ境界ではないと判定する(OP106)。グルーピング判定部327は、サブブロックbのグルーピング判定結果をgroup[b]=0とする(OP106)。その後、処理がOP107に進む。
グルーピング判定部327は、サブブロックの位置を示す変数bに1を加算する(OP107)。次に、グルーピング判定部327は、変数bが1フレームに含まれるサブブロックの数Mより小さい値か否かを判定する(OP108)。すなわち、グルーピング判定部327は、1フレームに含まれるすべてのサブブロックについて、グルーピング判定結果が求められたか否かを判定する。
変数bが1フレームに含まれるサブブロックの数Mより小さい値である場合には(OP108:Yes)、グルーピング判定結果が求められていないサブブロックがあるため、グルーピング判定部327は、OP103〜OP108の処理を繰り返す。
変数bが1フレームに含まれるサブブロックの数M以上の場合には(OP108:No)、フレームに含まれるすべてのサブブロックについてグルーピング判定結果が求められたことが示される。このとき、全サブブロックのグルーピング判定結果はgroup[b]=0である。グルーピング判定部327は、各サブブロックのグルーピング判定結果group[b]をグルーピング部35に出力し、グルーピング判定処理を終了する。
図23は、第3変形例における、グルーピング判定部327のグルーピング判定処理の結果の例を示す図である。図23に示される例では、1フレームはサブブロックB0からB7(SHORTブロックw0〜w7)の8つに分割される。図23に示される例では、アタック検出用の閾値1を超えるパワー変化率のサブブロックが、サブブロックB1,サブブロックB2,サブブロックB4である。そのうち、グルーピング判定用の閾値4を超えるパワー変化率のサブブロックは、サブブロックB1及びサブブロックB2である。
図22に示されるグルーピング判定処理が実行された場合には、フレーム中のパワー変化率が最初に閾値4を超えるサブブロックであるサブブロックB1のみのグルーピング判定結果がgroup[B1]=1となる。サブブロックB1以降のサブブロックB2〜B7のグルーピング判定結果は、一律にgroup[b]=0となる。サブブロックB2に至っては、パワー変化率がグルーピング判定用の閾値4を超えているにもかかわらず、グルーピング判定結果がgroup[b]となる。
従って、図23に示される例では、各サブブロックのグルーピング判定結果group[b]に基づいて、グルーピング部35は、サブブロックB0がグループg0に、サブブロックB1〜B7がグループg1に含まれるようにグルーピングする。
<第2実施形態>
第1実施形態では、サブブロックのブロック長及び時間長はSHORTブロックと同じであることを前提として、音声符号化装置1について説明がなされた。第2実施形態では、SHORTブロックよりも短いブロック長および時間長のサブブロックを扱う音声符号化装置について説明される。第2実施形態では、サブブロックのブロック長および時間長はSHORTブロックよりも短く、SHORTブロックブロック長および時間長を所定数に等分割ものと等しい。
第2実施形態の音声符号化装置は、第1実施形態の音声符号化装置1と、グルーピング判定部327の処理が異なるのみであるため、第2実施形態では、グルーピング判定部についてのみ説明される。その他の処理部については、第1実施形態と共通するため、その
説明は省略される。
図24は、第2実施形態における、グルーピング判定部327のグルーピング判定処理の例を示す図である。フレームは8つのSHORTブロックw0〜w7を含んでおり、そのうち、図24では、SHORTブロックw0〜w3のみが抽出されて表示されている。また、図24では、サブブロックは、SHORTブロックを4等分した時間長である。すなわち、SHORTブロックは4つのサブブロックを含む。
グルーピング判定部327は、パワー変化率算出部325からフレームに含まれる各サブブロックのパワー変化率と、アタック決定部326から各サブブロックのアタック検出結果attack[b]とを入力として得る。なお、各サブブロックのパワー変化率には、補正されたパワーに基づいて算出されたパワー変化率も含まれる。
グルーピング判定部327は、各サブブロックのパワー変化率と、グルーピング決定用の閾値4とを比較し、サブブロックのパワー変化率が閾値4より大きい場合、サブブロックのパワー変化率と閾値4との比較結果をsubgroup[b]=1とする。グルーピング判定部327は、サブブロックのパワー変化率が閾値4以下の場合には、サブブロックのパワー変化率とサブブロックの閾値4との比較結果をsubgroup[b]=0とする。図24に示される例では、各サブブロックのパワー変化率と閾値4との比較結果subgourp[b]が表示される。
グルーピング判定部327は、まず、各SHORTブロックに含まれるサブブロックのパワー変化率と閾値4との比較結果subgroup[b]の和sum[w]を求める。図24に示される例では、各SHORTブロックのsum[w]が、各SHORTブロックに含まれるサブブロックのパワー変化率と閾値4との比較結果subgroup[b]の下方にそれぞれ示される。
図24に示される例では、SHORTブロックw0に含まれるサブブロックは、サブブロックB0〜B3である。サブブロックB0とサブブロックB2のパワー変化率と閾値4との比較結果はsubgroup[b]=0である。サブブロックB1とサブブロックB3のパワー変化率と閾値4との比較結果はsubgroup[b]=1である。従って、SHORTブロックw0に含まれるサブブロックのパワー変化率と閾値4との比較結果の和はsum[w0]=0+1+0+1=2となる。同様の処理が、SHORTw1〜w7についても行われる。図24に示される例では、各SHORTブロックのsum[w]が、各SHORTブロックに含まれるサブブロックのパワー変化率と閾値4との比較結果subgroup[b]の下方にそれぞれ示される。
次に、グルーピング判定部327は、算出された和sum[w]が最大値であるSHORTブロックを抽出する。図24に示される例では、SHORTブロックw1の和sum[w1]=4が最大値であるので、SHORTブロックw1が抽出される。グルーピング判定部327は、抽出された和sum[w]が最大であるSHORTブロックのグルーピング判定結果をgroup[w]=1とし、抽出されなかったSHORTブロックのグルーピング判定結果をgroup[w]=0とする。図24に示される例では、SHORTブロックw1のグルーピング判定結果がgroup[w1]=1となり、SHORTブロックw0,w2,w3のグルーピング判定結果がgroup[w]=0となる。図24に示される例では、各SHORTブロックのsum[w]の下方に、各SHORTブロックのグルーピング判定結果group[w]が示される。
グルーピング判定部327は、各SHORTブロックのグルーピング判定結果group[w]をグルーピング部35に出力する。グルーピング部35は、グルーピング判定結
果がgroup[w]=0からgroup[w]=1に変化するSHORTブロック間の境界をグルーピング境界として選択する。
従って、図24に示される例では、SHORTブロックw0とSHORTブロックw1との境界がグルーピング境界とされる。グループg0にSHORTブロックw0、グループg1にSHORTブロックw1〜w7(図24ではSHORTブロックw1〜w3のみ表示)が含まれるようにグルーピングされる。
図25は、図24で示されたグルーピング判定部327が実行するグルーピング判定処理のフローの例を示す図である。グルーピング判定部327は、フレームに含まれる各サブブロックのアタック検出結果attack[b]と、各サブブロックのパワー変化率とが入力されると、グルーピング判定処理を開始する。
グルーピング判定部327は、グルーピングを行う単位がSHORTブロックであるか、LONGブロックであるかを判定する(OP111)。グルーピング判定部327は、フレームにアタックが含まれるか否か、すなわち、アタック検出結果がattack[b]=1であるサブブロックが少なくとも1つあるか否かを判定する。アタック検出結果がattack[b]=1であるサブブロックが少なくとも1つある場合には(OP111:Yes)、グルーピングをSHORTブロック単位で行うことが判定される。
アタック検出結果がattack[b]=1であるサブブロックがない場合には(OP111:No)、グルーピングをLONGブロック単位で行うことが判定される。グルーピングをLONGブロック単位で行うとは、すなわち、グルーピングが行われないことが示されるので、グルーピング判定処理が終了する。
グルーピング判定部327は、各変数の初期値を設定する(OP112)。変数には、SHORTブロックの位置を示す変数wと、サブブロックの位置を示す変数bとが含まれる。また、変数には、SHORTブロックに含まれるサブブロックのパワー変化率と閾値4との比較結果subgroup[b]の和を示すsum[w]と、和sum[w]の最大値を示す変数maxと、和sum[w]が最大となるSHORTブロックを示す変数idxも含まれる。さらに、SHORTブロックのグルーピング判定結果group[w]も含まれる。これらの変数は、いずれも、初期値が0に設定される。なお、1フレームが8つのSHORTブロックを含み、1つのSHORTブロックが4つのサブブロックを含む場合には、変数wは0≦w≦7、変数bは0≦b≦31の範囲の値をとる。
次に、グルーピング判定部327は、SHORTブロックwに含まれるサブブロックのパワー変化率と閾値4との比較結果subgroup[b]の和sum[w]を求める(OP113〜OP115)。
まず、グルーピング判定部327は、以下の式10を計算する(OP113)。すなわち、グルーピング判定部327は、サブブロックのパワー変化率と閾値4との比較結果の和sum[w]に、サブブロック4×w+bのパワー変化率と閾値4との比較結果subgroup[4×w+b]を加算する。
次に、グルーピング判定部327は、サブブロックの位置を示す変数bに1を加算する(OP114)。グルーピング判定部327は、変数bが1つのSHORTブロックに含
まれるサブブロックの数Sより小さい値か否かを判定する(OP115)。すなわち、グルーピング判定部327は、現在処理中のSHORTブロックwに含まれるすべてのサブブロックのパワー変化率と閾値4との比較結果subgroup[b]を加算し終わったか否かを判定する。1つのSHORTブロックに含まれるサブブロックの数が4つの場合には、S=4であるので、グルーピング判定部327は、変数bが4より小さいか否かを判定する。
変数bが1つのSHORTブロックに含まれるサブブロックの数Sより小さい場合には(OP115:Yes)、SHORTブロックw中に、未加算のサブブロックのパワー変化率と閾値4との比較結果subgroup[b]があることが示される。グルーピング判定部327は、OP113、OP114を繰り返して、sum[w]を求める。
変数bが1つのSHORTブロックに含まれるサブブロックの数S以上の場合には(OP115:No)、SHORTブロックwに含まれるすべてのサブブロックのパワー変化率と閾値4との比較結果subgroup[b]を加算し終わったことが示される。すなわち、SHORTブロックwに含まれる各サブブロックのパワー変化率と閾値4との比較結果subgroup[b]の和sum[w]が求められたことが示される。
次に、グルーピング判定部327は、SHORTブロックwに含まれる各サブブロックのパワー変化率と閾値4との比較結果subgroup[b]の和sum[w]が最大値maxより大きいか否かを判定する(OP116)。sum[w]が最大値max以下の場合には(OP116:No)、処理がOP118に進む。
sum[w]が最大値maxより大きい場合には(OP116:Yes)、グルーピング判部327は、maxをsum[w]の値に、idxを最大値maxとなるときのサブブロックの位置を示すwの値に更新する(OP117)。
グルーピング判定部327は、SHORTブロックの位置を示す変数wに1を加算する(OP118)。グルーピング判定部327は、変数wが1フレームに含まれるSHORTブロックの数Nより小さいか否かを判定する(OP119)。すなわち、グルーピング判定部327は、サブブロックのパワー変化率と閾値4との比較結果を加算する処理がフレーム中の全てのSHORTブロックについて行われたか否かを判定する。1つのフレームに含まれるSHORTブロックが8つの場合には、N=8であるので、グルーピング判定部327は、変数wが8より小さいか否かを判定する。
変数wが1フレームに含まれるSHORTブロックの数Nより小さい場合には(OP119:Yes)、サブブロックのパワー変化率と閾値4との比較結果を加算する処理がなされていないSHORTブロックが残っていることが示される。グルーピング判定部327は、OP113〜OP118を繰り返して、各SHORTブロックに含まれるサブブロックのパワー変化率と閾値4との比較結果の和sum[w]を求める。
変数wが1フレームに含まれるSHORTブロックの数N以上の場合には(OP119:No)、フレーム中の全てのSHORTブロックについてサブブロックのパワー変化率と閾値4との比較結果の和sum[w]を求める処理が終了したことが示される。グルーピング判定部327は、サブブロックのパワー変化率と閾値4との比較結果の和sum[w]が最大値となるSHORTブロックidxのグルーピング判定結果をgroup[idx]=1とする(OP120)。グルーピング判定部327は、SHORTブロックidx以外のSHORTブロックwのグルーピング判定結果をgroup[w]=0(w≠idx)とする(OP120)。グルーピング判定部327は、各SHORTブロックのグルーピング判定結果gourp[w]をグルーピング部35に出力して、グルーピング
判定結果を終了する。
グルーピング部35には、グルーピング判定部327から各SHORTブロックのグルーピング判定結果gorup[w]が入力される。グルーピング部35は、グルーピング判定結果がgroup[w]=0からgroup[w]=1に変化するサブブロック間の境界をグループ境界として、グルーピングを行う。以降、第1実施形態で説明された様に、グルーピングされた音声信号は、量子化部36で量子化され、ビットストリーム生成部37で符号化されてビットストリームに変換される。
以上のように、サブブロックがSHORTブロックを所定数で等分割した時間長である場合には、グループ判定部327が、各SHORTブロックに含まれるサブブロックのパワー変化率と閾値4との比較結果を加算し、最大値となるSHORTブロックをグループ境界とする。これによって、音声符号化装置は、サブブロックをSHORTブロックよりも短い時間長にして、音声信号を符号化することができる。
また、グループ判定部327が、各SHORTブロックに含まれるサブブロックのパワー変化率と閾値4との比較結果の和が最大値となるSHORTブロックのみをグループ境界とすることによって、グループの数を少なくすることができ、効率の良い符号化を行うことができる。
<<第2実施形態の変形例>>
グループ判定部327は、sum[w]を、SHORTブロックに含まれるサブブロックのパワー変化率と閾値4との比較結果subgroup[b]を加算して求めることに代えて、以下に説明する処理によってsum[w]を求める。
図26は、第2実施形態の変形例における、グループ判定部327が実行するグルーピング判定処理を説明する図である。図26に示される例は、図24と同様に、1フレームはSHORTブロックを8つ含み、そのうち、SHORTブロックw0〜w3のみが抽出されて表示されている。また、図26に示される例は、1つのSHORTブロックは4つのサブブロックを含んでおり、1つのフレームは32個のサブフレームを含む。
図26に示される例では、各サブブロックのアタック検出結果attack[b]と、各サブブロックのパワー変化率と閾値4との比較結果subgroup[b]とが、表示される。
グルーピング判定部327は、各サブブロックのアタック検出結果attack[b]と、各サブブロックのパワー変化率と閾値4との比較結果subgroup[b]とをそれぞれ加算し、加算値subgroup2[b]を求める。図26に示される例のサブブロックB1は、アタック検出結果はattack[B1]=1、サブブロックB1のパワー変化率と閾値4との比較結果subgroup[B1]=1であるので、加算値はsubgroup2[B1]=1+1=2となる。図26に示される例では、それぞれのサブブロックの加算値は、各サブブロックのパワー変化率と閾値4との比較結果subgroup[b]の下方に示される。
グルーピング判定部327は、SHORTブロックに含まれる各サブブロックの加算値subgroup2[b]の和sum[w]を求める。図26に示される例のSHORTブロックw0は、サブブロックB0〜B3を含む。サブブロックB0とサブブロックB2の加算値が共にsubgroup2[b]=0である。サブブロックB1の加算値がsubugroup2[B1]=2である。サブブロックB3の加算値がsubgroup2[B3]=1である。従って、図26に示される例のSHORTブロックw0に含まれる
各サブブロックの加算値subgroup2[b]の和は、sum[w0]=0+2+0+1=3となる。図26に示される例では、各SHORTブロックに含まれる各サブブロックの加算値subgroup2の和sum[w]は、各SHORTブロックに含まれる各サブブロックの加算値subgroup2の下方に示される。
次に、グルーピング判定部327は、算出された和sum[w]が最大値であるSHORTブロックを抽出する。図26に示される例では、SHORTブロックw1の和sum[1]=6が最大値であるので、SHORTブロックw1が抽出される。グルーピング判定部327は、抽出された和sum[w]が最大であるSHORTブロックのグルーピング判定結果をgroup[w]=1とし、抽出されなかったSHORTブロックのグルーピング判定結果をgroup[w]=0とする。図26に示される例では、SHORTブロックw1のグルーピング判定結果がgroup[w1]=1となり、SHORTブロックw0,w2,w3のグルーピング判定結果がgroup[w]=0となる。図26に示される例では、各SHORTブロックのsum[w]の下方に、各SHORTブロックのグルーピング判定結果group[w]が示される。
グルーピング判定部327は、各SHORTブロックのグルーピング判定結果group[w]をグルーピング部35に出力する。グルーピング部35は、グルーピング判定結果がgroup[w]=0からgroup[w]=1に変化するSHORTブロック間の境界をグルーピング境界として選択する。
従って、図26に示される例では、SHORTブロックw0とSHORTブロックw1との境界がグルーピング境界とされ、グループg0にSHORTブロックw0、グループg1にSHORTブロックw1〜w7(図26ではSHORTブロックw1〜w3のみ表示)が含まれる。
図27は、図26で示されたグルーピング判定部327が実行するグルーピング判定処理のフローの例を示す図である。グルーピング判定部327は、フレームに含まれる各サブブロックのアタック検出結果attack[b]と、各サブブロックのパワー変化率とが入力されると、グルーピング判定処理を開始する。
グルーピング判定部327は、グルーピングを行う単位がSHORTブロックであるか、LONGブロックであるかを判定する(OP131)。グルーピング判定部327は、フレームにアタックが検出されるか否か、すなわち、アタック検出結果がattack[b]=1であるサブブロックが少なくとも1つあるか否かを判定する。アタック検出結果がattack[b]=1であるサブブロックが少なくとも1つある場合には(OP131:Yes)、グルーピングをSHORTブロック単位で行うことが判定される。
アタック検出結果がattack[b]=1であるサブブロックがない場合には(OP131:No)、グルーピングをLONGブロック単位で行うことが判定される。グルーピングをLONGブロック単位で行うとは、すなわち、グルーピングが行われないことが示されるので、グルーピング判定処理が終了する。
グルーピングをSHORTブロック単位で行うことが判定された場合には(OP131:Yes)、グルーピング判定部327は、変数bの初期値を0に設定する(OP132)。
次に、グルーピング判定部327は、各サブブロックについて、アタック検出結果attack[b]とパワー変化率と閾値4との比較結果subgroup[b]との加算値subgroup2[b]を求める(OP133)。
グルーピング判定部327は、変数bに1を加算する(OP134)。グルーピング判定部327は、変数bが1フレームに含まれるサブブロックの数Mより小さい値か否かを判定する(OP135)。すなわち、グルーピング判定部327は、フレーム中に含まれるすべてのサブフレームについて加算値subgroup2[b]を求めたか否かを判定する。1フレーム中に8つのSHORTブロックが含まれ、1つのSHORTブロックに4つのサブブロックが含まれる場合には、1つのフレームに32個のサブブロックが含まれるので、M=32である。グルーピング判定部327は、変数bが32より小さい値か否かを判定する。
変数bが1フレームに含まれるサブブロックの数Mより小さい値である場合には(OP135:Yes)、フレーム中に加算値subgroup2[b]が求められていないサブフレームが存在することが示される。グルーピング判定部327は、OP133〜OP135の処理を繰り返して、フレームに含まれるすべてのサブブロックについて加算値subgroup2[b]を求める。
変数bが1フレームに含まれるサブブロックの数M以上である場合には(OP135:No)、フレームに含まれるすべてのサブブロックについて、加算値subgroup2[b]が求められたことを示す。グルーピング判定部327は、処理をOP136に移す。
OP136では、図25で説明されたOP112〜OP120の処理が実行される。ただし、図25におけるsubgroup[b]はsubgroup2[b]に置き換えられる。
グルーピング判定部327は、各SHORTブロックのグルーピング判定結果group[w]をグルーピング部35に出力する。グルーピング部35は、グルーピング判定結果がgroup[w]=0からgroup[w]=1に変化するサブブロック間の境界をグループ境界としてグルーピングする。以降、音声信号は、量子化部36で量子化され、ビットストリーム生成部37で符号化されてビットストリームに変換される。
<第3実施形態>
図28は、第3実施形態における、情報処理装置200の構成例を示す図である。情報処理装置200は、分割部201,決定部202,探索部203,補正部204,判定部205,グループ化部206を含む。
分割部201は、単位時間に含まれる音声信号を所定数の時間区間に分割する。分割部201は、所定数の時間区間に分割された単位時間に含まれる音声信号を決定部202に出力する。
決定部202は、所定数の時間区間に分割された単位時間に含まれる音声信号を入力として得る。決定部202は、各時間区間における音声信号のパワーの変化率が、第1の閾値より大きい時間区間をアタック候補として決定する。決定部202は、アタック候補の時間区間が含まれる、所定数の時間区間に分割された単位時間に含まれる音声信号を探索部203に出力する。
探索部203は、アタック候補の時間区間が含まれる、所定数の時間区間に分割された単位時間に含まれる音声信号を入力として得る。探索部203は、少なくとも、アタック候補の時間区間、又は、アタック候補の時間区間の直前の時間区間からアタックの開始点を探索する。探索部203は、アタックの開始点を含む時間区間が含まれる、所定数の時
間区間に分割された単位時間に含まれる音声信号を補正部204に出力する。
補正部204は、アタックの開始点を含む時間区間が含まれる、所定数の時間区間に分割された単位時間に含まれる音声信号を入力として得る。補正部204は、アタックの開始点を含む時間区間における音声信号のパワーを、アタックの開始点を含む時間区間の直後の時間区間における音声信号のパワーを用いて補正する。補正部204は、音声信号のパワーが補正されたアタックの開始点を含む時間区間が含まれる、所定数の時間区間に分割された単位時間に含まれる音声信号を、判定部205に出力する。
判定部205は、音声信号のパワーが補正されたアタックの開始点を含む時間区間が含まれる、所定数の時間区間に分割された単位時間に含まれる音声信号を、入力として得る。判定部205は、音声信号のパワーが補正されたアタックの開始点を含む時間区間における音声信号のパワー変化率が、第1の閾値より大きいアタック検出用の第2の閾値を超えるか否かを判定する。判定部205は、判定の結果をグループ化部206に出力する。
グループ化部206は、単位時間に含まれる音声信号にアタックが含まれる場合には、単位時間が所定数に分割されたブロックを音声符号化の単位となる複数のグループにグループ化する。グループ化部206は、音声信号のパワーが補正されたアタックの開始点を含む時間区間における音声信号のパワーの変化率が、第1の閾値より大きいアタック検出用の第2の閾値を超えるか否かの判定結果を入力として得る。グループ化部206は、補正されたアタックの開始点を含む時間区間の音声信号のパワーの変化率が第2の閾値を超える場合に、アタックの開始点を含む時間区間を基準として、単位時間を少なくとも二つのグループにグループ化する。グループ化部206は、グループ化された単位時間に含まれる音声を出力する。
情報処理装置200は、アタック候補の時間区間を決定し、アタック候補の時間区間又はアタック候補の時間区間の直前の時間区間からアタックの開始点を探索する。情報処理装置200は、アタックを含む時間区間における音声信号のパワーを、アタックを含む時間区間の直後の時間区間における音声信号のパワーを用いて、補正する。情報処理装置200は、さらに、補正されたアタックを含む時間区間における音声信号のパワーの変化率がアタック検出用の第2の閾値を超えるか否かを判定する。情報処理装置200によって、アタックの開始点を含むにも関わらず、音声信号のパワーの変化率がアタック検出用の第2の閾値に満たない時間区間でも、音声信号のパワーが補正され、補正されたパワーの変化率が第2の閾値を超える場合には、アタックを含む時間区間として検出される。従って、情報処理装置200によれば、アタックを検出する精度を上げることができる。
また、情報処理装置200は、補正されたアタックの開始点を含む時間区間の音声信号のパワーの変化率が第2の閾値を超える場合に、アタックの開始点を含む時間区間を基準として、単位時間を少なくとも二つのグループにグループ化する。従って、アタックの検出の精度が上がることによって、適切なグルーピングが行われる。適切なグルーピングが行われることによって、量子化誤差によるプリエコーの発生が抑えられ、符号化された音声データの再生時の音質が向上する。
また、情報処理装置200の補正部204は、アタックの開始点を含む時間区間における音声信号のパワーに、アタックの開始点を含む時間区間の直後の時間区間における音声信号のパワーを加算して補正してもよい。補正部204によって、アタックの開始点を含む時間区間における補正された音声信号のパワーが、アタック全体がアタックの開始点を含む時間区間に含まれている場合の音声信号のパワーに近い値になる。これによって、アタックを含む時間区間に含まれる音声信号のパワーの変化率が、アタック検出用の第2の閾値を超える可能性が高くなり、アタックの検出精度が向上する。
また、情報処理装置200の判定部205は、単位時間に含まれる各時間区間における音声信号のパワーの変化率が第2の閾値を超えるか否かを判定してもよい。このとき、グループ化部206は、2以上の時間区間がブロックに含まれる場合に、単位時間に含まれるブロックの中で、パワーの変化率が第2の閾値よりも大きい時間区間の数が最大となるブロックを基準として、単位時間を二つのグループにグループ化してもよい。これによって、時間区間がブロックより短い時間長である場合にも、適正にグループ化することができる。
<その他>
以上の実施形態は、以下の付記を開示する。
(付記1)
単位時間の音声信号を所定数の時間区間に分割する分割部と、
各時間区間における音声信号のパワーの変化率が、第1の閾値より大きい時間区間をアタック候補として決定する決定部と、
少なくとも前記アタック候補の時間区間または前記アタック候補の時間区間の直前の時間区間からアタックの開始点を探索する探索部と、
前記探索部によって探索されたアタックの開始点を含む時間区間における音声信号のパワーを、前記アタックの開始点を含む時間区間の直後の時間区間における音声信号のパワーを用いて補正する補正部と、
前記補正部によって音声信号のパワーが補正された前記アタックの開始点を含む時間区間における音声信号のパワーの変化率が前記第1の閾値より大きいアタック検出用の第2の閾値を超えるか否かを判定する判定部と、
を含む情報処理装置。
(付記2)
前記補正部は、前記アタックの開始点を含む時間区間における音声信号のパワーに、前記アタックの開始点を含む時間区間の直後の時間区間における音声信号のパワーを加算して補正する
付記1に記載の情報処理装置。
(付記3)
前記補正部は、前記アタックの開始点を含む時間区間の直後の時間区間に含まれる先頭から所定数のサンプルに含まれる音声信号のパワーの合計値を、前記アタック開始点を含む時間区間の直後の時間区間に含まれる音声信号のパワーから減じて、前記アタック開始点を含む時間区間に含まれる音声信号のパワーに加算して補正する
付記1に記載の情報処理装置。
(付記4)
前記情報処理装置は、
前記単位時間に含まれる音声信号にアタックが含まれる場合には、前記単位時間が所定数に分割されたブロックを、音声符号化の単位となる複数のグループにグループ化するグループ化部をさらに備え、
前記グループ化部は、前記補正されたアタックの開始点を含む時間区間の音声信号のパワーの変化率が前記第2の閾値を超える場合に、前記アタックの開始点を含む時間区間を基準として、前記単位時間を少なくとも二つのグループにグループ化する
付記1から3の何れか1つに記載の情報処理装置。
(付記5)
前記判定部は、前記単位時間に含まれる各時間区間における音声信号のパワーの変化率が前記第2の閾値を超えるか否かを判定し、
前記グループ化部は、パワーの変化率が前記第2の閾値を超える時間区間が複数ある場合には、前記単位時間において、時間的に最も前であるパワーの変化率が第2の閾値を超える時間区間を基準として、前記単位時間を二つのグループにグループ化する
付記4に記載の情報処理装置。
(付記6)
前記グループ化部は、前記基準となる時間区間を含むブロックと前記前記基準となる時間区間を含むブロックの直前のブロックとの境界をグループの境界とする
付記4又は5に記載の情報処理装置。
(付記7)
前記判定部は、前記単位時間に含まれる各時間区間における音声信号のパワーが前記第2の閾値を超えるか否かを判定し、
前記グループ化部は、2以上の前記時間区間が前記ブロックに含まれる場合に、前記単位時間に含まれるブロックの中で、前記パワーの変化率が前記第2の閾値よりも大きい時間区間の数が最大となるブロックを基準として、前記単位時間を二つのグループにグループ化する
付記4に記載の情報処理装置。
(付記8)
前記グループ化部は、前記基準のブロックと前記基準のブロックの直前のブロックとの境界をグループの境界とする
付記7に記載の情報処理装置。
(付記9)
前記グループ化部は、前記パワーの変化率が、前記第2の閾値より大きい第3の閾値よりも大きい時間区間の数が最大となるブロックを基準として、前記単位時間を少なくとも二つのグループにグループ化する
付記7又は8に記載の情報処理装置。
(付記10)
コンピュータに、
単位時間の音声信号を所定数の時間区間に分割するステップと、
各時間区間における音声信号のパワーの変化率が、第1の閾値より大きい時間区間をアタック候補として決定するステップと、
少なくとも前記アタック候補の時間区間または前記アタック候補の時間区間の直前の時間区間からアタックの開始点を探索するステップと、
前記探索部によって探索されたアタックの開始点を含む時間区間における音声信号のパワーを、前記アタックの開始点を含む時間区間の直後の時間区間における音声信号のパワーを用いて補正するステップと、
前記補正部によって音声信号のパワーが補正された前記アタックの開始点を含む時間区間における音声信号のパワーの変化率が前記第1の閾値より大きいアタック検出用の第2の閾値を超えるか否かを判定するステップと、
を実行させるためのプログラム。