以下、本発明の実施の形態に係る音声符号化兼復号装置について説明する。特に、残差信号を特徴付ける量を抽出する過程については、3種類の実施形態を挙げる。
図1は、図2に示される、本実施形態に係る音声符号化兼復号装置9211の、音声符号化装置9111としての機能構成と、音声復号装置9141としての機能構成を示す。
音声符号化装置9111としての音声符号化兼復号装置9211は、図1に示すように、マイクロフォン9113と、A/D変換部9115と、予測分析部9117と、残差信号特徴量抽出部9121と、符号化部9133と、送信部9135と、を備える。予測分析部9117は、予測分析用逆フィルタ算出器9119を内蔵している。残差信号特徴量抽出部9121が行う処理の内容は、実施形態(実施形態1、実施形態2、及び、実施形態3)毎にフローチャートにして示してある。いずれの実施形態を採用する場合も、周波数領域への変換等の変換処理(ステップS9123)と、その結果得られた周波数係数等を選択する処理(ステップS9125)と、が含まれる。特に、実施形態2においては、時間軸の縮小処理(ステップS9127)が、実施形態3においては、有声・無声判別処理(ステップS9129)と無声の場合の帯域毎の処理(ステップS9131)が、それぞれさらに含まれる。原則としては、かかる実施形態の何れかひとつが、図2に示される音声符号化兼復号装置9211において採用される。もっとも、該装置9211を上述の全ての実施形態に対応できるように設計しておき、ユーザの選択等により何れかの実施形態を採用するものとしてもよい。各実施形態における処理(ステップS9123〜ステップS9131)の詳細については後述する。
マイクロフォン9113に入力されたアナログ音声信号は、A/D変換部9115によりデジタル音声信号に変換されてから、予測分析部9117に引き渡される。予測分析部9117は、引き渡されたデジタル音声信号に、線型予測分析やMLSA(Mel Log Spectrum Approximation)分析等の予測分析を施す。予測分析部9117は、該デジタル音声信号を、所定の時間区間(例えば5ms)に区切って、Si={si、0、・・・、si、l-1}(0≦i≦M−1)という形にした後、各時間区間について予測係数を算出する。続いて、該予測係数から、予測分析用逆フィルタ算出器9119により、予測分析用逆フィルタを求める。次に、デジタル音声信号Siが該予測分析用逆フィルタに入力された結果として、残差信号Di={di、0、・・・、di、l-1}(0≦i≦M−1)が求まる。このように、予測分析部9117は、デジタル音声信号を、予測係数と残差信号とに分解する。
予測分析部9117により生成された予測係数は、そのまま符号化部9133に引き渡される。一方、同じく生成された残差信号は、残差信号特徴量抽出部9121により、該残差信号を特徴付ける量である残差信号特徴量に変換されてから、符号化部9133に引き渡される。符号化部は前記予測係数と前記残差信号とをまとめて、任意の既知の手法により、符号化し、生成した符号を送信部9135に引き渡す。送信部9135は、前記符号を、音声復号装置9141として動作する、別の音声符号化兼復号装置9211(図2)に向けて、送信する。
音声復号装置9141としての音声符号化兼復号装置9211は、図1に示すように、受信部9143、復号部9145、合成用逆フィルタ算出部9147、合成用逆フィルタ部9149、残差信号復元部9151、D/A変換部9153と、スピーカ9155と、を備える。別の音声符号化兼復号装置9211(図2)から送信された符号は、図1の受信部9143によって受信された後、復号部9145によって復号される。かかる復号の結果、予測係数と、残差信号特徴量と、が生成される。
生成された予測係数は、合成用逆フィルタ算出部9147に引き渡される。合成用逆フィルタ算出部は、引き渡された予測係数に基づいて、任意の既知の手法により、合成用逆フィルタの仕様を決定し、かかる決定の結果を合成用逆フィルタ部9149に通知する。合成用逆フィルタ部9149は、かかる通知に従って、自らの仕様を定める。
一方、復号部9145により生成された残差信号特徴量は、残差信号復元部9151に引き渡される。残差信号復元部9151は、音声符号化装置9111の内部の残差信号特徴量抽出部9121とほぼ逆の処理を行うことにより、受け取った残差信号特徴量から疑似残差信号を生成する。ここで「疑似」と称する理由は、残差信号特徴量を抽出する際(残差信号特徴量抽出部9121において行われるステップS9123〜ステップS9131)、残差信号特徴量以外の情報を捨象しているために、残差信号の復元側たる残差信号復元部9151は、元の残差信号を完全には復元できないからである。
残差信号復元部9151により生成された疑似残差信号は、合成用逆フィルタ部9149に励起信号として入力される(なお、既に述べたように、残差信号と励起信号とは、同じ信号を別の視点からみたものにすぎない。)。その結果、合成用逆フィルタ部9149からは復元されたデジタル音声信号が生成される。該信号はD/A変換部9153によりアナログ音声信号に変換された後、スピーカ9155に送られる。こうして、スピーカ9155からは、復元された音声信号が、人間の耳に聞こえる形で発せられる。
図1に示した機能ブロックや処理の流れは、物理的には、図2に示す音声符号化兼復号装置9211により実現される。より具体的な装置としては、例えば、携帯電話機が想定される。該装置は、図1で既に示してあるマイクロフォン9113及びスピーカ9155と、を備える。該装置は、アンテナ9253と、操作キー9263と、をさらに備える。該装置は、システムバス9271により相互に接続された、CPU9221と、ROM(Read Only Memory)9223と、記憶部9225と、音声処理部9241と、無線通信部9251と、操作キー入力処理部9261と、をさらに備える。記憶部9225は、例えば、RAM(Random Access Memory)9231と、ハードディスク9233と、を備える。
ROM9223には、音声符号化及び復号のための動作プログラムが格納されている。CPU9221は、該動作プログラムに従って動作する。そして、CPU9221は、内蔵のバッファ(図示せず。)と記憶部9225との間で適宜データのやりとりを行いながら、数値演算により、音声符号化兼復号装置9211に、図1に示す音声符号化装置9111又は音声復号装置9141としての機能を発揮させる。CPU9221は、その際、必要に応じて音声処理部9241、無線通信部9251、操作キー入力処理部9261とデータのやりとりを行う。
図2の音声処理部9241は、図1のA/D変換部9115及びD/A変換部9153として動作することができる。無線通信部9251は、図1の送信部9135及び受信部9143として動作することができる。符号の送受信は、基本的には、図2のアンテナ9253を用いた無線通信により行われるが、別の方法、例えば有線通信により行われてもよい。操作キー入力処理部9261は、操作キー9263からの操作信号を受け付けて、操作信号に対応するキーコード信号をCPU9221に伝達する。操作キー9263は、通信の相手方となる音声符号化兼復号装置9211を特定する、すなわちいわゆる電話番号を入力するのに使われる他、基本的には設定済みの既に与えられている各種パラメータ(例えば、後述の周波数変換係数をいくつ符号化するか、など。)をユーザの好みに応じて変化させるために用いられてもよい。
(予測分析の手順)
以下では、図1の予測分析部9117が行う予測分析について、図3に示すフローチャートを参照しつつ説明する。予測分析としては、例えば、線型予測分析やMLSA(Mel Log Spectrum Approximation)分析が知られている。図3では、後者を括弧書きにして、両分析が併記されている。
記憶部9225(図2)には、既に、デジタル音声信号(入力波形)Si={si、0、・・・、si、l−1}(0≦i≦M−1)が格納されているとする。CPU9221(図2)は、内蔵のカウンタレジスタ(図示せず)を入力信号サンプルカウンタiの格納に用いることとし、初期値として、i=0とする(図3のステップS9311)。
CPU9221は、内蔵の汎用レジスタ(図示せず)に、記憶部9225から、入力信号サンプルSi={si、0、・・・、si、l−1}をロードする(図3のステップS9313)。
CPU9221は、線型予測分析の場合は、入力信号サンプルSiから、線型予測係数Ai={ai、1、・・・、ai、n}を計算する(ステップS9315)。ただし、nは線型予測分析の次数である。計算方法としては、残差信号が所定の尺度に基づき十分に小さいと評価されることになるような計算方法であれば、任意の既知の手法を採用してよい。例えば、よく知られている、自己相関関数の計算とレビンソン・ダービンアルゴリズムを組み合わせた計算方法を採用するのが好適である。
CPU9221は、MLSA分析の場合は、入力信号サンプルSiから、まず、ケプストラムCi={ci、0、・・・、ci、(l/2)−1}を計算する。かかる計算には、任意の既知の手法を採用してよい。どの手法においても、概ね、離散フーリエ変換をする、絶対値をとる、対数をとる、逆離散フーリエ変換をする、といった手続が行われる。次に、求めたケプストラムCiから、任意の既知の手法により、MLSAフィルタ係数Mi={mi、0、・・・、mi、p−1}を計算する(ステップS9315)。
線型予測分析の場合は線型予測係数Ai={ai、1、・・・、ai、n}が、MLSA分析の場合はMLSAフィルタ係数Mi={mi、0、・・・、mi、p−1}が、記憶部9225に予測係数として記憶される(ステップS9317)。
続いて、線型予測分析の場合、線型予測係数Aiから、任意の既知の手法により、予測分析用逆線型予測フィルタAIAiが計算され、MLSA分析の場合、MLSAフィルタ係数Miから、任意の既知の手法により、予測分析用逆MLSAフィルタAIMiが計算される。(ステップS9319)これらの計算は、図1の予測分析用逆フィルタ算出器9119が行う計算に相当する。
求めた予測分析用逆線型予測フィルタAIAi又は予測分析用逆MLSAフィルタAIMiに入力信号サンプルSi={si、0、・・・、si、l−1}が通されることにより、残差信号Di={di、0、・・・、di、l−1}が求まる(図3のステップS9321)。残差信号Diは記憶部9225に記憶される(ステップS9323)。
ここで、入力信号サンプルカウンタiがM−1に達しているか否かが判別される(ステップS9325)。達していれば(ステップS9325;Yes)、終了する。一方、達していなければ(ステップS9325;No)、次の時間区間の入力信号サンプルについての処理を行うために、iを1だけインクリメントし(ステップS9327)、ステップS9313以降の処理を繰り返す。
(実施形態1における残差信号特徴量の抽出の手順)
以下では、図1のステップS9123及びステップS9125に示した、実施形態1における残差信号特徴量の抽出の手順を、より詳しく説明する。かかる手順にはいくつかのバリエーションがある。
まず、周波数変換係数毎に分配されたエネルギーに基づいて指定個数の周波数係数を符号化対象として選択する場合について、図4のフローチャートを参照しつつ説明する。符号化の対象となる周波数変換係数の個数uは、符号化の際の情報圧縮率や伝達可能情報量が勘案された上で、図2のROM9223に格納された動作プログラムに記述済みであるか、または、ユーザにより操作キー9263を介して指定済みであるものとする(図4のステップS9411)。はじめ、図2のCPU9221において、入力信号サンプルカウンタがi=0に設定され(図4のステップS9413)、残差信号Di={di、0、・・・、di、l−1}が記憶部からレジスタにロードされる(ステップS9415)。次に、残差信号Diは、離散フーリエ変換により、残差信号スペクトルFD、i={fD、i、0、・・・、fD、i、(l/2)−1}に変換される。つまり、時系列データである残差信号Diは、周波数領域に変換される。さらに、残差信号スペクトルの係数毎に、該係数に分配されたエネルギーが計算される(ステップS9417)。該エネルギーは、例えば、(fD、i、j)2(0≦j≦(l/2)−1)、と定義するのが好適である。次に、係数fD、i、0、・・・、fD、i、(l/2)−1は、計算されたエネルギーの降順にソートされる(ステップS9419)。
次に、係数カウンタjが初期値j=0に設定され(ステップS9421)、ステップS9419におけるソートの結果に基づいて、係数fD、i、jのエネルギーの高さが、ステップS9411で指定された個数uに対応した順位であるu番目以内か否かが判別される(ステップS9423)。u番目以内であれば(ステップS9423;Yes)、符号化対象周波数変換係数f 'D、i、jをf 'D、i、j=fD、i、jと定義(ステップS9425)する一方、u番目以内ではないのであれば(ステップS9423;No)、符号化対象周波数変換係数をf 'D、i、j=0と定義する(ステップS9427)。続いて、jが(l/2)−1に達したか否かが判別され(ステップS9429)、まだ達していないのであれば(ステップS9429;No)、jを1増加して(ステップS9431)、ステップS9423に戻る。jがl−1に達していれば(ステップS9429;Yes)、符号化対象残差信号スペクトルF 'D、i={f 'D、i、0、・・・、f 'D、i、(l/2)−1}は記憶部9225(図2)に格納される(ステップS9433)。かかる符号化対象残差信号スペクトルF 'D、iは、元の残差信号スペクトルFD、iのうち、高いエネルギーを有する係数から順にu個を維持し、他の係数を0としたものである。事実上、かかるu個の係数だけが、残差信号特徴量として、符号化部9133(図1)における符号化の対象になるので、符号長が短くて済み、低ビットレート通信に適する。続いて、ステップS9435において、iがM−1に達したか否かが判別され、達していない場合には(ステップS9435;No)、iを1だけ増加して(ステップS9437)、ステップS9415に戻り、達している場合には(ステップS9435;Yes)、終了する。
なお、残差信号が有声音、すなわちピッチとしての性質を有する場合、ピッチ周波数が重要であるので、ピッチ周波数に関する情報は確実に符号化の対象となるのが望ましい。この点、上述のようにエネルギーの高い順に係数を選択すれば、ほぼ確実に、ピッチ周波数に相当する周波数変換係数が符号化の対象となり、好都合である。有声音の残差信号を周波数領域に変換した場合、ピッチ周波数に相当する周波数変換係数は、一般に、他の係数に比べて大きなエネルギーを有するからである。
以下では、実施形態1における残差信号特徴量の抽出の手順の、別のバリエーションについて、図5のフローチャートを参照しつつ説明する。このバリエーションは、符号化対象とする周波数変換係数の選択を、エネルギーと、エネルギーの所定の閾値に基づいて行うことを特徴とする。周波数変換係数のエネルギーの閾値は、符号化の際の情報圧縮率や伝達可能情報量が勘案された上で、図2のROM9223に格納された動作プログラムに記述済みであるか、または、ユーザにより操作キー9263を介して指定済みであるものとする(図5のステップS9511)。はじめ、入力信号サンプルカウンタがi=0に設定され(図5のステップS9513)、残差信号Di={di、0、・・・、di、l−1}が記憶部からレジスタにロードされる(ステップS9515)。次に、図4のステップS9417と同様に、残差信号Diは、離散フーリエ変換により、残差信号スペクトルFD、iに変換され、該残差信号スペクトルの係数毎に、該係数に分配されたエネルギーが計算される(ステップS9517)。
次に、係数カウンタjが初期値j=0に設定され(ステップS9519)た後、係数fD、i、jのエネルギーの高さが、ステップS9511で指定された閾値よりも高いか否かが判別される(ステップS9521)。高い場合には(ステップS9521;Yes)、符号化対象周波数変換係数f 'D、i、jをf 'D、i、j=fD、i、jと定義(ステップS9523)する一方、高くなければ(ステップS9521;No)、符号化対象周波数変換係数をf 'D、i、j=0と定義する(ステップS9525)。続いて、jが(l/2)−1に達したか否かが判別され(ステップS9527)、まだ達していないのであれば(ステップS9527;No)、jを1増加して(ステップS9529)、ステップS9521に戻る。jが(l/2)−1に達していれば(ステップS9527;Yes)、符号化対象残差信号スペクトルF 'D、i={f 'D、i、0、・・・、f 'D、i、(l/2)−1}は記憶部9225(図2)に格納される(ステップS9531)。かかる符号化対象残差信号スペクトルF 'D、iは、元の残差信号スペクトルFD、iのうち、所定の閾値より高いエネルギーを有する係数だけを維持し、他の係数を0としたものである。続いて、ステップS9533において、iがM−1に達したか否かが判別され、達していない場合には(ステップS9533;No)、iを1だけ増加して(ステップS9535)、ステップS9515に戻り、達している場合には(ステップS9533;Yes)、終了する。
実施形態1における残差信号特徴量の抽出の手順として、図4により説明したものと、図5により説明したものとを、折衷した手順も考えられる。例えば、図4のステップS9419におけるソートの結果から、最も高いエネルギー値を求め、該エネルギー値に所定の値、例えば0.9を乗じた値を、図5のステップS9511におけるエネルギーの所定値とすることが考えられる。
以下では、実施形態1における残差信号特徴量の抽出の手順の、さらにまた別のバリエーションについて、図6のフローチャートを参照しつつ説明する。このバリエーションは、符号化対象とする周波数変換係数の選択に際し、選択される係数の個数をあらかじめ指定した上で、実時間領域に逆変換した後に得られる元の信号との誤差が最小となるような組み合わせを見つけることを特徴とする。符号化対象となる周波数変換係数の個数は、符号化の際の情報圧縮率や伝達可能情報量が勘案された上で、図2のROM9223に格納された動作プログラムに記述済みであるか、または、ユーザにより操作キー9263を介して指定済みであるものとする(図6のステップS9611)。また、残差信号Diは既に求まっており、図2の記憶部9225に格納されていることを前提とする。かかる前提によれば、残差信号Diが求まっているということは、図1の予測分析部9117により、予測係数も求まっているということである。そして、ここでは図2の音声符号化兼復号装置9211が図1の音声符号化装置9111として機能する場合について述べているのであるが、本バリエーションの場合は、特別に、音声復号装置9141として機能する場合の合成用逆フィルタ算出部9147及び合成用逆フィルタ部9149も必要となる。
はじめ、入力信号サンプルカウンタがi=0に設定され(図6のステップS9613)、残差信号Di={di、0、・・・、di、l−1}が記憶部からレジスタにロードされる(ステップS9615)。次に、残差信号Diは、離散フーリエ変換により、残差信号スペクトルFD、i={fD、i、0、・・・、fD、i、(l/2)−1}に変換される(ステップS9617)。次に、得られたl個の係数fD、i、0、・・・、fD、i、(l/2)-1のうち、ステップS9611にて指定されたu個の係数の値はそのまま保持する一方、他の係数の値は0としたスペクトルを全て生成する。l個の係数からu個の係数を選択するのであるから、かかるスペクトルは全部でlCu個存在する(Cはコンビネーションであり、組み合わせの数を表す。)。かかる多数のスペクトルを、変数i 'で相互に識別することにし、仮残差信号スペクトル候補F ''D、i、i 'と表記することにする(ステップS9619)。1≦i '≦lCuである。
次に、候補カウンタがi '=1に、暫定乖離指標δ’i、i 'が十分大きな値に、それぞれ設定され(ステップS9621)、i 'がlCu以下であるか否かが判別される(ステップS9623)。i 'がlCu以下ではない場合(ステップS9623;No)、ステップS9637に進む。i 'がlCu以下である場合(ステップS9623;Yes)、仮残差信号スペクトル候補F ''D、i、i 'は、逆離散フーリエ変換により、仮残差信号D ''i、i '={d ''i、i '、0、・・・、d ''i、i '、l−1}に変換される(ステップS9625)。先にことわった通り、既に求まっている予測係数から、本来は復号側の機能ブロックである、図1の合成用逆フィルタ算出部9147により、合成用逆フィルタ部9149の仕様が定められる。そして仮残差信号D ''i、i 'が該合成用逆フィルタ部9149に入力された結果として、仮復元信号S ''i、i '={s ''i、i '、0、・・・、s ''i、i '、l−1}が求まる(ステップS9627)。続いて元の信号(入力信号サンプル)Si={si、0、・・・、si、l−1}がロードされ、仮復元信号S ''i、i 'の元の信号Siに対する乖離指標δi、i 'が計算される(ステップS9629)。乖離指標δi、i 'は、仮復元信号S ''i、i 'と元の信号Siとの誤差を表す指標であればいかなるものであってもよい。換言すれば、乖離指標δi、i 'が小さいほど、仮復元信号S ''i、i 'は元の信号Siのよい近似となるようにすればよい。よって、例えば、
δi、i '
=(s ''i、i '、0−si、0)2+・・・+(s ''i、i '、l−1−si、l−1)2
と定義してもよい。あるいは、後に図8を参照して説明するように、両信号をいったん周波数領域に変換してから比較し乖離指標δi、i 'を求めることとしてもよい。いずれにしろ、この後、乖離指標δi、i 'が暫定乖離指標δ’i、i 'よりも小さいか否かが判別され(ステップS9631)、小さい場合(ステップS9631;Yes)、δ’i、i '=δi、i 'としかつ符号化対象残差信号スペクトルF 'D、iがF 'D、i=F ''D、i、i 'として記憶部9225に記憶(ステップS9635)される一方、乖離指標δi、i 'が暫定乖離指標δ’i、i '以上の場合(ステップS9631;No)、暫定乖離指標δ’i、i '及び符号化対象残差信号スペクトルF 'D、iは維持されたまま、いずれの場合も、ステップS9633にてi 'が1だけ増加されてから、ステップS9623に戻る。
ステップS9623においてi 'がlCuよりも大きいと判別された場合(ステップS9623;No)、iがM−1に達しているか否かが判別される(ステップS9637)。達していないのであれば(ステップS9637;No)、iを1だけ増加して(ステップS9639)、ステップS9615に戻り、達しているのであれば(ステップS9637;Yes)、終了する。終了した時点で記憶部9225に保存されている符号化対象残差信号スペクトルF 'D、iが、符号化対象となる。
以下では、実施形態1における残差信号特徴量の抽出の手順の、さらにまた別のバリエーションについて、図7のフローチャートを参照しつつ説明する。このバリエーションは、符号化対象とする周波数変換係数の選択に際し、実時間領域に逆変換した後に得られる元の信号との誤差として許容される誤差(許容誤差)をあらかじめ指定した上で、なるべく少ない個数の係数の選択により該許容誤差に係る条件を満たすようにすることを特徴とする。許容誤差δは、指定済みであるものとする(ステップS9711)。また、本バリエーションにおいても、先のバリエーションの場合と同様に、図1に示す合成用逆フィルタ算出部9147及び合成用逆フィルタ部9149が必要となる。
はじめ、入力信号サンプルカウンタがi=0に設定され(図7のステップS9713)、周波数変換係数個数カウンタがu=1に設定され(ステップS9715)、残差信号Di={di、0、・・・、di、l-1}が記憶部からレジスタにロードされる(ステップS9717)。次に、残差信号Diは、離散フーリエ変換により、残差信号スペクトルFD、i={fD、i、0、・・・、fD、i、(l/2)−1}に変換される(ステップS9719)。次に、得られた(l/2)個の係数fD、i、0、・・・、fD、i、(l/2)-1のうち、u個の係数の値はそのまま保持する一方、他の係数の値は0としたスペクトルを全て生成する。かかるスペクトルは全部でlCu個存在する。かかる多数のスペクトルを、変数i 'で相互に識別することにし、仮残差信号スペクトル候補F ''D、i、i 'と表記することにする(ステップS9721)。1≦i '≦lCuである。
次に、候補カウンタがi '=1に設定され(ステップS9723)、i 'がlCu以下であるか否かが判別される(ステップS9725)。i 'がlCu以下ではない場合(ステップS9725;No)、周波数変換係数個数カウンタuが1だけ増加されてから(ステップS9727)、ステップS9717に戻る。i 'がlCu以下である場合(ステップS9725;Yes)、仮残差信号スペクトル候補F ''D、i、i 'は、逆離散フーリエ変換により、仮残差信号D ''i、i '={d ''i、i '、0、・・・、d ''i、i '、l−1}に変換される(ステップS9729)。かかる仮残差信号D ''i、i 'が合成用逆フィルタ部9149に入力された結果として、仮復元信号S ''i、i '={s ''i、i '、0、・・・、s ''i、i '、l−1}が求まる(ステップS9731)。続いて元の信号(入力信号サンプル)Si={si、0、・・・、si、l−1}がロードされ、仮復元信号S ''i、i 'の元の信号Siに対する乖離指標δi、i 'が先のバリエーションの場合と同様に計算される(ステップS9733)。この後、乖離指標δi、i 'がステップS9711にて指定された許容誤差δよりも小さいか否かが判別され(ステップS9735)、小さい場合(ステップS9735;Yes)、符号化対象残差信号スペクトルF 'D、iがF 'D、i=F ''D、i、i 'として記憶部9225に記憶(ステップS9739)されステップS9741に進む一方、乖離指標δi、i 'が許容誤差δ以上の場合(ステップS9735;No)、ステップS9737にてi 'が1だけ増加されてから、ステップS9725に戻る。
ステップS9741では、iがM−1に達しているか否かが判別される。達していないのであれば(ステップS9741;No)、iを1だけ増加して(ステップS9743)、ステップS9715に戻り、達しているのであれば(ステップS9741;Yes)、終了する。終了した時点で記憶部9225に保存されている符号化対象残差信号スペクトルF 'D、iが、符号化対象となる。
なお、上述の各バリエーションの説明においては、周波数領域への変換方法として、離散フーリエ変換を挙げたが、他の変換方法、例えば、DCT(Discrete Cosine Transform、離散コサイン変換)、を用いてもよい。
(乖離指標の計算手順の一例)
以下では、図6のステップS9629及び図7のステップS9733における、仮復元信号S ''i、i 'の元の信号Siに対する乖離指標δi、i 'の計算手順の一例を図8のフローチャートを用いて説明する。既に図6のステップS9629についての説明の際に、実時間領域における両信号の比較に基づいて乖離指標を計算する手順について触れたが、以下で説明する計算手順は、周波数領域における両信号の比較に基づいて乖離指標を計算する。
仮復元信号S ''i、i '={s ''i、i '、0、・・・、s ''i、i '、l−1}は、離散フーリエ変換やDCT等により、仮復元信号スペクトルF ''S、i、i '={f ''S、i、i '、0、・・・、f ''S、i、i '、(l/2)−1}に変換される(ステップS9811)。続いて元の信号(入力信号サンプル)Si={si、0、・・・、si、l−1}がロードされ(ステップS9813)、周波数領域への先と同じ変換方法により、元の信号のスペクトルFS、i={fS、i、0、・・・、fS、i、(l/2)−1}に変換される(ステップS9815)。次に、係数カウンタがj=0に、乖離指標がδi、i '=0に初期化設定される(ステップS9817)。
乖離指標δi、i 'の意味を考慮すると、この後は、基本的には、例えば、
δi、i '=|f ''S、i、i '、0−fS、i、0|+・・・
+|f ''S、i、i '、(l/2)−1−fS、i、(l/2)−1|
のように、係数毎に差をとって加算すればよい。ただし、ここでは、聴覚特性を考慮し、係数の差に、低域の係数ほど大きな値を乗じて(つまり重み付けをして)乖離指標δi、i 'を求めることとする。j番目の成分についての、かかる重み付けのための数をW(j)として、ステップS9819にて、δi、i 'を、δi、i '+W(j)×|f ''S、i、i '、j−fS、i、j|に更新する。その後、係数カウンタが(l/2)−1に達したか否かが判別され(ステップS9821)、達していないのであれば(ステップS9821;No)、jを1だけ増加(ステップS9823)してからステップS9819に戻り、達しているのであれば(ステップS9821;Yes)、終了する。
(実施形態2における残差信号特徴量の抽出の手順)
以下では、図1のステップS9127、ステップS9123、及び、ステップS9125、に示した、実施形態2における残差信号特徴量の抽出の手順を、より詳しく説明する。本実施形態の上述の各ステップのうち、ステップS9123及びステップS9125は、実施形態1と同じものである。したがって、本実施形態は、実施形態1の上述の全てのバリエーションを含む。本実施形態が実施形態1と異なるのは、残差信号に対して、はじめに時間軸縮小処理(ステップS9127)が施されることである。かかる時間軸縮小処理により、残差信号は短縮される。換言すれば、残差信号を表すサンプル値が減少する。これにより、ステップS9123及びステップS9125における処理が高速化され得る。
または、時間軸縮小処理を施した残差信号をそのまま符号化部9133に残差信号特徴量として引き渡し、符号化及び送信の対象としてもよい。時間軸縮小処理により残差信号のデータ量が減少しているため、伝達可能な情報容量が限られている場合に有利である。
いずれにしろ、本実施形態においては、時間軸縮小処理に特徴がある。また、音声符号化兼復号装置9211(図2)が音声復号装置9141(図1)として機能する場合には、送信側で行われた時間軸縮小処理に対応した時間軸伸張処理が必要となる。
そこで、以下では、時間軸伸縮処理について、その一例を、図9〜図15を参照しつつ説明する。
残差信号は、繰り返し単位をピッチとして分割される。この結果、残差信号は、図9に示すように、N個のピッチ波形S WF、0、S WF、1、・・・、S WF、N-1が連続したものとして扱われる。また、サンプリングの時間間隔をqとする。
ピッチ波形S WF、j(0≦j≦N−1)は、pl(j)個の離散データで表現され、時間長pl(j)×qを有する。以後このことを、単に、ピッチ波形の長さがpl(j)である、と述べることがある。また、以下では、S WF、j={s WF、j、0、・・・、s WF、j、pl(j)−1}と表す。
例えば、残差信号の時間変化を表した図2においては、j番目のピッチ波形S WF、jのi番目のサンプリング点(図9の白四角印)は、ピッチ波形SWF、jの始点から時間長(i−1)×qの位置にあり、波高はs WF、j、i−1である。より具体的には例えば、残差信号の始点を時間の原点にとった場合、最初のピッチ波形が継続中の時刻7qにおける波高はs WF、0、7である(図9の左から8番目の白丸印)。
まず、残差信号縮小処理について説明する。
連続する2つのピッチ波形に基づいて、新たなピッチ波形が生成され、元の連続する2つのピッチ波形が、該新たなピッチ波形により置き換えられることにより、ピッチ波形の長さ1個ぶんずつ、音声波形データを縮小していく。かかる置換動作の繰り返しにより、最終的には、所定の長さとなるような音声波形データが生成される。
図10に示すように、新規ピッチ波形の配置予定先に存在している元の2つのピッチ波形(図10(a))をそれぞれ適当に波形変形処理し(図10(b))、かかる処理済みの波形を重ね合わせることにより、元の2つのピッチ波形の中間的な形状を有する新規ピッチ波形を生成し、該新規ピッチ波形を元の2つのピッチ波形の代わりに配置して音声信号を縮小する(図10(c))。
元のN個のピッチ波形の全ての境界に新たなピッチ波形をひとつずつ配置したとしても、縮小度は0.5倍にしかならない。そこで、0.5倍より短く縮小したい場合には、0.5倍までの縮小を終えた直後の縮小済残差信号を、残差信号の新たな初期値であると考え、同じ手順を繰り返せば足りる。ゆえに、以下では、元の音声信号を0.5倍まで縮小可能な手順だけを説明する。
要求される縮小度が0.5倍より大きい場合には、元のピッチ波形のうちには、新規波形に置換されるものと、そのまま残るものとが、生じることになる。そこで、残差信号を所定の縮小長に達せしめるために、元のピッチ波形のうち、新規ピッチ波形に置換すべきものと、そのまま残すべきものとを判別する必要が生じる。
そこで、元のピッチ波形の境界毎に乖離度ej(0≦j≦N−1)を計算することにする。乖離度ejは、図9に示すように、2つのピッチ波形がどの程度似ているかを定量的に示す指標である。ピッチ波形S WF、jとS WF、j+1との乖離度ejは、
ej={(s WF、j、0−s WF、j+1、0)2+
・・・
+(s WF、j、pl(j)−1−sWF、j+1、pl(j)−1)2}/pl(j)
のように定義する。
この値が小さい境界を挟む2個のピッチ波形から優先して、新たなピッチ波形に置き換えることにする。そして、優先順位の高い所から順番に置換して残差信号を縮小していき、指定された縮小度まで縮小した時点で置換を止める、という方針を採る。
残差信号の縮小処理の具体的な手順を、図11を参照しつつ説明する。すでに図2の記憶部9225には、処理対象となる残差信号がN個のピッチ波形S WF、0、・・・、S WF、N-1に分割された状態で格納されているとする。各ピッチ波形SWF、j(0≦j≦N−1)は、サンプリング時間間隔qで採取された波高の列{s WF、j、0、・・・、s WF、j、pl(j)−1}である。
まず、CPU9221は、記憶部9225に、縮小後のピッチ波形を構成要素とする構造体S WF、reducedを格納する領域を確保する。そして、S WF、reducedの初期値SWF、initとしては、記憶部9225に格納されている元の残差信号のピッチ波形の列{S WF、0、・・・、S WF、N−1}をそのままコピーしたものを採用する。すなわち、S WF、reduced=S WF、init={S WF、0、・・・、S WF、N−1}とする(ステップS1101)。
新規波形の配置先の決定には、上述のように、隣接ピッチ波形乖離度e0、・・・、eN-1を利用する。乖離度はあらかじめ計算されて記憶部9225に格納されているものとする。乖離度の小さいピッチ波形境界ほど優先して新規ピッチ波形を挿入することになるため、CPU9221は、乖離度を昇順にならべたときの順番を表す変数kをレジスタにカウンタとして格納することとし、初期値は1とする(ステップS1103)。乖離度e0、・・・、eN-1を昇順に並べ替えたとき、ejがk番目になるとすれば、それは、ピッチ波形S WF、jとピッチ波形S WF、j+1との境界が、置換操作の対象としてはk番目の候補となることを意味する。
次に、CPU9221は、記憶部9225に格納されている乖離度e0、・・・、eN-1のうち、k番目に小さいものを検索し、その添字を取り出し、kが格納されているレジスタとは別のカウンタ用レジスタにロードする(ステップ1105)。例えば、k番目に小さい乖離度がejであれば、jをロードする。
上述の例のとおり、ステップ1105においてjがロードされたとすれば、ピッチ波形S WF、jとピッチ波形S WF、j+1とを新規ピッチ波形に置き換えることになる。新規ピッチ波形は、図10に示したとおり、元の2つのピッチ波形から生成される。よって、CPU9221は、まず、元となるピッチ波形S WF、jとS WF、j+1とがどのようなものであるかを調べる必要がある。そこで、CPU9221は、汎用レジスタに、記憶部9225からピッチ波形S WF、jとS WF、j+1とをロードする(ステップS1107)。
次に、CPU9221は、ピッチ波形S WF、jの波高列データs WF、j、0、・・・、s WF、j、pl(j)−1と、ピッチ波形S WF、j+1の波高列データs WF、j+1、0、・・・、s WF、j+1、pl(j+1)−1と、から、新しいピッチ波形C WF、j={c WF、j、0、・・・、c WF、j、pl(j)−1}を生成する(ステップS1109)。具体的には、元の2つのピッチ波形に図10(a)の鎖線で示すような重み付けを行ってから、重ね合わせる。SWF、jには、1から始まり0で終わる、直線的に変化する重み付け係数を乗じることにより、図10(b)の左側に示すような波形
{s WF、j、0×(pl(j)−1)/(pl(j)−1)、sWF、j、1×(pl(j)−2)/(pl(j)−1)、・・・、s WF、j、pl(j)−1×0/(pl(j)−1)}
を生成する。一方、S WF、j+1には、0から始まり1で終わる、直線的に変化する重み付け係数を乗じることにより、図10(b)の右側に示すような波形
{s WF、j+1、0×0/(pl(j)−1)、s WF、j+1、1×1/(pl(j)−1)、・・・、s WF、j+1、pl(j)−1×(pl(j)−1)/(pl(j)−1)}
を生成する。その後、重み付けの完了した2つの波形を重ね合わせて新しいピッチ波形
C WF、j={c WF、j、i(0≦i≦pl(j)−1)|c WF、j、i={s WF、j、i×(pl(j)−1−i)+sWF、j+1、i×i)/(pl(j)−1)}
を生成する。
新しいピッチ波形C WF、jの生成が完了したら、図10(c)に示すように、それを元のピッチ波形S WF、jとS WF、j+1の代わりに配置することにより、残差信号の長さをpl(j+1)だけ縮める。そのために、CPU9221は、記憶部9225からピッチ波形列S WF、reduced={S WF、r、0、・・・、S WF、r、N-k}を取り出す。なお、S WF、reducedは、(k-1)回の置換を経ているためにピッチ波形の数が(k-1)個減って、結局、合計(N-k+1)個のピッチ波形で構成されている。CPU9221は、S WF、reducedからS WF、r、j+1を削除することにより第1暫定ピッチ波形列S WF、tmp={S WF、r、0、・・・、S WF、r、j、S WF、r、j+2、・・・、S WF、r、N-k}を生成した後、C WF、jをS WF、r、jに代入する操作を行う。続いて、S WF、r、j+2の値をS WF、r、j+1に代入する操作、S WF、r、j+3の値をS WF、r、j+2に代入する操作、等を、S WF、r、N−kの値をS WF、r、N−k−1に代入するまで継続する。こうして第2暫定ピッチ波形列S’ WF、tmp={S WF、r、0、・・・、S WF、r、N−k−1}を生成し、S WF、reducedをS WF、reduced=S’ WF、tmpに更新する。さらに、CPU9221は、縮小の目標値との比較のために、この更新されたS WF、reducedの長さを測った後、更新されたS WF、reducedを記憶部9225に保存する(ステップS1111)。
ステップS1111で測られたS WF、reducedの長さが、縮小の目標値に到達しているかどうかは、ステップS1113において判別される。目標値に到達しているならば(ステップS1113;Yes)、これ以上の縮小は不要なので、CPU9221は伸張処理を終了し、この時点におけるS WF、reducedを縮小の最終結果として記憶部9225に格納する。それに対して、ステップS1111で更新されたS WF、reducedが目標長に到達していないと判別された場合(ステップS1113;No)、新規ピッチ波形配置先となる境界を検索するステップS1105に戻る。このとき、まだ新規ピッチ波形の配置に関わっていない境界のうちから挿入の優先度が最も高い境界を選び出すために、優先順位を表すカウンタkを1だけ増加する(ステップS1115)。
次に、残差信号伸張処理について説明する。
波形伸張は、ピッチ単位で行う。基本的には、隣接する2つのピッチ波形の間に、なんらかのピッチ波形を割り込ませることを繰り返すことにより、伸張を行う。かかる繰り返しによれば、原理的には、残差信号を任意の長さに伸張することが可能である。
図12に示すように、新規ピッチ波形の挿入予定先を境界としていた元の2つのピッチ波形(図12(a))をそれぞれ適当に波形変形処理し(図12(b))、かかる処理済みの波形を重ね合わせることにより、元の2つのピッチ波形の中間的な形状を有する新規ピッチ波形を生成し(図12(c))、該新規ピッチ波形を挿入して残差信号を伸張する(図12(d))。
元のN個のピッチ波形の全ての境界に新たなピッチ波形をひとつずつ挿入したとしても、伸張度は2倍にしかならない。2倍より長く伸張したい場合には、元のピッチ波形の境界の少なくとも1カ所以上で、新規ピッチ波形を複数挿入する必要が生じる。
ここで、全く同一の波形が連続するのは避けるべきである。音声が不自然になってしまうからである。元のピッチ波形の境界のひとつに新規ピッチ波形を複数挿入する場合、かかる複数の新規ピッチ波形は、元のピッチ波形のいずれとも同一でないことはもちろんのこと、新規ピッチ波形同士であっても、少なくとも伸張処理後に隣接関係になるものについては、同一であってはならない。このことは、元の2つのピッチ波形から図12に示す手順により新規波形を生成する場合に、新規波形の生成の仕方が複数要求されることを意味する。生成の仕方がひとつで済まないため、処理は、縮小処理の場合に比べて複雑である。
そこで、以下では、まず、より簡単な処理である、伸張が2倍より小さい場合の処理について説明する。その後、2倍より大きい場合の処理について説明する。
伸張が2倍より小さい場合には、元のピッチ波形の境界のうち、いくつかには新規波形を挿入し、残りのいくつかには何も挿入しないことになる。そこで、残差信号を所定の伸張度に達せしめるために、元のピッチ波形の境界のうち、新規ピッチ波形を挿入すべき境界と、そうでない境界とを判別する必要が生じる。
かかる判別の際には、縮小処理の説明で述べた乖離度ejを用いるのが好適である。元のピッチ波形の各境界に該乖離度により優先順位を割り当て、優先順位の高い所から順番に新規ピッチ波形を挿入して残差信号を伸張していき、指定された伸張度まで伸びた時点で挿入を止める、という方針を採る。
乖離度を用いた残差信号伸張処理の具体的な手順を、図13を参照しつつ説明する。すでに図2の記憶部9225には、処理対象となる残差信号がN個のピッチ波形S WF、0、・・・、S WF、N−1に分割された状態で格納されているとする。各ピッチ波形S WF、j(0≦j≦N−1)は、サンプリング時間間隔qで採取された波高の列{s WF、j、0、・・・、s WF、j、pl(j)−1}である。
まず、CPU9221は、記憶部9225に、伸張後ピッチ波形を構成要素とする構造体Smagnifiedを格納する領域を確保する。そして、Smagnifiedの初期値Sinitとしては、記憶部9225に格納されている元の残差信号のピッチ波形の列{S WF、0、・・・、S WF、N-1}をそのままコピーしたものを採用する。すなわち、S WF、magnified=S WF、init={S WF、0、・・・、S WF、N-1}とする(ステップS1301)。
上述のように、伸張の倍率が2倍より小さいか大きいかにより、処理の手順は異なる。そこで、倍率が2倍より小さいかどうかを判別し(ステップS1303)、2倍より大きい場合には(ステップS1303;No)、後に詳しく説明する2倍以上の伸張処理を行う(ステップS1319)。一方、倍率が2倍より小さいと判別された場合には(ステップS1303;Yes)、新規波形の割り込み先を決定するステップS1305に進む。
新規波形の割り込み先の決定には、上述のように、隣接ピッチ波形乖離度e0、・・・、eN-1を利用する。乖離度はあらかじめ計算され記憶部9225に格納されているものとする。乖離度の小さいピッチ波形境界ほど優先して新規ピッチ波形を挿入することになるため、CPU9225は、乖離度を昇順にならべたときの順番を表す変数kをレジスタにカウンタとして格納することとし、初期値は1とする(ステップS1305)。乖離度e0、・・・、eN-1を昇順に並べ替えたとき、例えばejがk番目になるとすれば、それは、ピッチ波形S WF、jとピッチ波形S WF、j+1との境界が、新規ピッチ波形の挿入先としてはk番目の候補となることを意味する。
次に、CPU9221は、記憶部9225に格納されている乖離度e0、・・・、eN-1のうち、k番目に小さいものを検索し、その添字を取り出し、kが格納されているレジスタとは別のカウンタ用レジスタにロードする(ステップ1307)。例えば、k番目に小さい乖離度がejであれば、jをロードする。ステップ1307においてjがロードされたとすれば、ピッチ波形SWF、jとピッチ波形S WF、j+1との境界に新規ピッチ波形を挿入することになる。新規ピッチ波形は、図12に示したとおり、元の2つのピッチ波形から生成される。よって、CPU9221は、元の2つのピッチ波形に基づいた新規ピッチ波形を生成するに際して、まず、元となるピッチ波形S WF、jとS WF、j+1とがどのようなものであるかを調べる必要がある。そこで、CPU9221は、汎用レジスタに、記憶部9225からピッチ波形S WF、jとS WF、j+1とをロードする(ステップS1309)。
次に、CPU9221は、ピッチ波形S WF、jの波高列データs WF、j、0、・・・、s WF、j、pl(j)−1と、ピッチ波形S WF、j+1の波高列データs WF、j+1、0、・・・、s WF、j+1、pl(j+1)−1と、から、新しいピッチ波形D WF、j={d WF、j、0、・・・、d WF、j、pl(j)−1}を生成する(ステップS1311)。具体的には、元の2つのピッチ波形に図12(a)の鎖線で示すような重み付けを行ってから、重ね合わせる。伸張後に新規ピッチ波形からみて時間的に過去のピッチ波形となるS WF、jには、0から始まり1で終わる、直線的に変化する重み付け係数を乗じることにより、図12(b)の左側に示すような波形
{s WF、j、0×0/(pl(j)−1)、s WF、j、1×1/(pl(j)−1)、・・・、s WF、j、pl(j)−1×(pl(j)−1)/(pl(j)−1)}
を生成する。一方、伸張後に新規ピッチ波形からみて時間的に未来のピッチ波形となるS WF、j+1には、1から始まり0で終わる、直線的に変化する重み付け係数を乗じることにより、図12(b)の右側に示すような波形
{s WF、j+1、0×(pl(j)−1)/(pl(j)−1)、s WF、j+1、1×(pl(j)−2)/(pl(j)−1)、・・・、s WF、j+1、pl(j)−1×0/(pl(j)−1)}
を生成する。その後、重み付けの完了した2つの波形を重ね合わせて新しいピッチ波形
D WF、j={d WF、j、i(0≦i≦pl(j)−1)|d WF、j、i=(sWF、j、i×i+s WF、j+1、i×(pl(j)−1−i))/(pl(j)−1)}
を生成する。
新しいピッチ波形D WF、jの生成が完了したら、図12(d)に示すように、それを元のピッチ波形S WF、jとS WF、j+1の間に挿入することにより、残差信号の長さをpl(j)だけ伸張する。そのために、CPU9221は、記憶部9225からピッチ波形列S WF、magnifiedを取り出し、D WF、jをS WF、jとS WF、j+1の間に挿入してS WF、magnifiedをS WF、magnified={S WF、0、・・・、S WF、j、D WF、j、S WF、j+1、・・・、S WF、N−1}のように更新する。さらに、CPU9221は、伸張の目標値との比較のために、この更新されたS WF、magnifiedの長さを測った後、更新されたS WF、magnifiedを記憶部9225に保存する(ステップS1313)。
ステップS1313で測られたS WF、magnifiedの長さが、伸張の目標値に到達しているかどうかは、ステップS1315において判別される。目標値に到達しているならば(ステップS1315;Yes)、これ以上の伸張は不要なので、CPU9221は伸張処理を終了し、この時点におけるS WF、magnifiedを伸張の最終結果として記憶部9225に格納する。
それに対して、ステップS1313で更新されたS WF、magnifiedが目標長に到達していないと判別された場合(ステップS1315;No)、CPU9225はさらに新たなピッチ波形を生成してS WF、magnifiedに追加しS WF、magnifiedを伸張すべきであるから、新規ピッチ波形挿入先となる境界を検索するステップS1307に戻る。このとき、まだ新規ピッチ波形が挿入されていない境界のうちから挿入の優先度が最も高い境界を選び出すために、優先順位を表すカウンタkを1だけ増加する(ステップS1317)。
次に、指定された伸張が、2倍より大きい場合(ステップS1303;No)の処理(ステップS1319)について、図を改めて説明する。
図14が、2倍より大きい場合の伸張処理の具体的な手順を示したフローチャートである。2倍より小さく伸張する場合に比べると、元の連続する2つのピッチ波形の境界の一つ以上について、新規ピッチ波形を複数挿入しなければならないぶんだけ、処理が煩雑になる。基本的には、2倍より小さく伸張する場合と同じく、優先度の高い境界から順に新規ピッチ波形を挿入していく。しかし、全ての境界にひとつずつ新規ピッチ波形を挿入し終えても、信号を目標長にまで伸張させることができない。よって、さらにもう一回り、再び優先度の高い境界から順に、今度は2つずつ、新規ピッチ波形を挿入していく必要がある。その手順を終えてもなお目標長に到達しない場合には、さらにもう一回り、今度は3つずつ新規ピッチ波形を挿入する。このため、2倍より大きい場合の伸張処理(図14)は、おおまかにいって、2倍より小さい場合の伸張処理(図13)に対して、全境界を何回巡回しているかをカウントするループがひとつ増えた処理となる。
上述の、全境界を何回巡回しているかをカウントするカウンタを、全ピッチ波形間巡回回数カウンタmと呼ぶことにする。初期値は、1巡目を表すために、m=1とする(ステップS1401)。
次に、元のピッチ波形のなす境界に、新規ピッチ波形の挿入先としての優先順位を割り当てるために、優先順位を表すカウンタkをk=1に初期化し(ステップS1403)、k番目の候補である境界を表す添字jを求め(ステップS1405)、jに対応した元のピッチ波形であるSj及びSj+1を取り出す(ステップS1407)。これらは、2倍以下の伸張の際に行った手続(図13のステップS1305、S1307、S1309)と同一である。
この後、ステップS1409においては、S WF、jとS WF、j+1とから、新しいピッチ波形を生成する。全ピッチ波形間の巡回が1回目のとき、すなわち、m=1のときには、新しいピッチ波形をひとつだけ生成すればよいので、2倍以下の伸張手続における新規波形生成方法(図13のステップS1311)と変わるところがない。前述のとおり、適切な重み付けを行った上で、加算して新規ピッチ波形をひとつ生成すればよい。
ところが、全ピッチ波形間の巡回を1回だけ行って伸張することができるのは、たかだか2倍までである。2倍以上の伸張処理の場合には、全ピッチ波形間の巡回は、1回では済まない。すなわち、全ピッチ波形間巡回回数カウンタmの最大値は、必ず、2以上となる。m回目の全ピッチ波形間巡回に際しては、すでに(m−1)個の新規ピッチ波形が挿入済みである境界の中から、乖離度の小ささにより定まる優先度の高い境界を順に選び取り、該境界に挿入済みの(m−1)個の新規ピッチ波形をいったん破棄し、その代わりに、新たにm個の新規ピッチ波形を生成して該境界に挿入する。これにより、ピッチ波形1個分だけ、残差信号を伸張することができる。
ここで問題となるのは、新規ピッチ波形は、元となる2つのピッチ波形のいずれとも異なっていなければならないばかりでなく、新規ピッチ波形同士も、複数生成された場合には、少なくとも挿入後に隣り合うことになるもの同士は異なっていなければならないということである。これは、全く同じ波形の繰り返しにより人の音声として不自然なものとなってしまう事態を、避けるための要請である。
かかる問題のうち、元となる2つのピッチ波形のいずれとも異なっていなければならないという要請については、伸張度が2倍より小さい場合と同じ要請である。よって、伸張度が2倍より小さい場合と同じく、重み付き加算により新たなピッチ波形の生成を行えばよい。
それに対して、新たに生成する複数の新規ピッチ波形を、相互に異なるものとしなければならないという要請は、伸張度が2倍以上の場合になって初めて生じたものである。かかる要請に応えるために、ここでは、簡便な方法を採用する。元のピッチ波形1個1個の長さは、オーダーとしては同程度ではあるものの、一般には、異なることが期待される。特に隣接ピッチ波形同士で、長さが同一になる可能性はほぼゼロである。そこで、このような、元の隣接ピッチ波形同士の長さが異なる性質を利用する。すなわち、新規ピッチ波形の生成方法としては、元の2つのピッチ波形の重み付け加算を行うという、上述の方法1種類だけにする。これにより、処理が簡潔になる。そして、新規ピッチ波形相互に差をつけなければならないという要請を満たすためには、生成された新規ピッチ波形を時間軸方向に何通りも伸縮することにより、同じ新規ピッチ波形が生じないようにする。
新規ピッチ波形を時間軸方向に伸縮するということは、波形の長さを変化させるということである。長さの変化の範囲としては、元の2つのピッチ波形の長さの間に収まる範囲が適切であると考えられる。すなわち、m個の新規ピッチ波形を生成する場合(ステップS1409)、まず、2倍以下伸張時と同じく重み付け加算により新たなピッチ波形D WF、jを生成する。このD WF、jを時間軸上で伸縮することにより、m個のバリエーションのピッチ波形
D WF、1、j={d WF、1、j、0、・・・、d WF、1、j、pl(j)−1}、・・・、D WF、m、j={d WF、m、j、0、・・・、d WF、m、j、pl(j+1)−1}
を生成する。すなわち、D WF、1、j、・・・、D WF、m、jの長さは、pl(j)からpl(j+1)までのm段階の長さに調節されている。pl(j)からpl(j+1)の間をどのようにm段階に分割するかについては、例えば最も簡潔には、比例的に分割するものとする。すなわち、i番目(1≦i≦m)の新規ピッチ波形D WF、i、jの長さを、
pl(j)+[{pl(j+1)−pl(j)}×(i−1)/(m−1)]
とする。
なお、ピッチ波形の長さを変化させるに方法は、様々なものが考えられるが、サンプリング位置の変更を行うのが簡便である。この方法については、後に詳しく説明する。
結局、元の2つのピッチ波形SWF、jとSWF、j+1とから、m個の新しいピッチ波形D WF、i、j(1≦i≦m)が生成される(ステップS1409)。D WF、1、jの長さはS WF、jと同じくpl(j)であり、D WF、m、jの長さはS WF、j+1と同じくpl(j+1)であり、D WF、2、j〜D WF、m−1、jの長さはpl(j)とpl(j+1)との間である。こうしてm個の新規ピッチ波形が生成されたら、これらを、この時点での残差信号伸張結果であるS WF、magnifiedに付加してS WF、magnifiedを更新する。S WF、magnifiedは、伸張処理の際に用意されている(図13のステップS1301)、伸張信号の候補である。より具体的には、CPU9221は、記憶部9225からピッチ波形列S WF、magnifiedを取り出し、D WF、1、j、・・・、D WF、m、jをS WF、jとS WF、j+1との間に挿入することにより、S WF、magnified={S WF、0、・・・、S WF、j、D WF、1、j、・・・、D WF、m、j、S WF、j+1、・・・、S WF、N−1}のように更新し、記憶部9225に保存する。また、同時に、目標長との比較に役立てるために、S WF、magnifiedの長さを測っておく(ステップS1411)。
上述のように、m回目の全ピッチ波形間巡回においてm個の新規ピッチ波形を生成し適切な位置に挿入する際には、前回のピッチ波形巡回において該位置に挿入された(m−1)個の新規波形は、破棄される。一方、この時点での挿入対象になっていない境界にすでに挿入されている(m−1)個またはm個の新規ピッチ波形は、そのままにしておく。
すると、挿入されたピッチ波形が1個増えたことになるため、残差信号S WF、magnifiedは、ピッチ波形の長さ1個ぶんだけ伸張したことになる。そこで、ステップS1411にて測っておいたS WF、magnifiedの長さが、この時点で伸張度の目標値に達しているか否かを判別し(ステップS1413)、達している場合には(ステップS1413;Yes)、伸張処理を完了し、S WF、magnifiedを最終的な伸張結果とする。目標値に達していない場合(ステップS1413;No)、次に、優先順位のカウンタであるkが、元のピッチ波形の個数Nより小さいかどうかを判別する。小さい場合には(ステップS1415;Yes)、まだm個の新規波形を挿入していない境界が存在するので、kを1だけ増やして(ステップS1419)、次の優先順位の挿入箇所を検索する処理に戻る(ステップS1405)。一方、kがNになった場合には(ステップS1415;No)、全ての境界にm個の新規波形を挿入し終えたので、mを1だけ増加させて(ステップS1417)、全ピッチ波形間を乖離度により定まる優先順に巡回する操作を繰り返す(ステップS1403)。
2倍以上の伸張時には、上述のとおり、ピッチ波形の長さを様々に変更する処理が必要とされる。かかるピッチ波形長の変更方法としては、既に述べたように、サンプリング位置の変更を行うのが簡便である。以下ではこの方法について、図15を参照して具体的に説明する。
図15(a)は、ピッチ波形S WF、jの時間依存性を模式的に示したものである。横軸が時間を表す。サンプリング周期をqとすると、ピッチ波形S WF、jは、時間間隔qごとの波高の配列として表現され(図15(a)の白丸印)、ピッチ波形長はpl(j)×qである。
サンプリング位置の変更によるピッチ波形長変更方法の原理は、ピッチ波形長を伸張する場合も、縮小する場合も、同じである。ここでは、縮小する場合を例に、説明する。
サンプリング周期をr(ただし、r>qである。)として、再サンプリングを行うと仮定する。この新たなサンプリングが行われる時刻は、図15(a)の黒三角印で示され、新たなサンプリングにより採取される波形は、図15(a)の白四角印で示される。理解を容易にするため、さらに、rのqに対する関係は、図15に示すようなものであるとする。すなわち、ピッチ波形S WF、jの開始時刻から順に時系列を追ったときに、新たなサンプリング時刻が、元のサンプリング時刻からしだいに遅れていき、ピッチ波形S WF、jが終了する時刻には、新旧のサンプリング時刻が一致するとする。
新たなサンプリング周期rは、元来は、元のサンプリング周期qよりも長いのであるが、計算上は、新たなサンプリング周期rで採取された波高を、元のサンプリング周期qで採取されたものであるとして扱う。つまり、ピッチ波形長pl(j)×qの長さのピッチ波形が新たなサンプリング周期rの波高配列で離散的に表現されている状態(図15(b))から、波高配列はそのままにして、サンプリング周期がqになったものとみなす処理を行う。この処理は、図15(b)において、白四角印で表されたサンプリング点を白矢印のように移動させることを意味する。
該移動の結果、図15(c)に示す新たなピッチ波形が生成された。この図から明らかなように、新たなピッチ波形は、元のピッチ波形SWF、jを、時間軸上で縮めたものである。そして、新たなピッチ波形の波形長pl’は、元のピッチ波形SWF、jの波形長p(j)×qより、時間qだけ短縮されたものである。すなわち、
pl’={pl(j)−1}×q
である。あるいは、倍率にして
〔{pl(j)−1}/{pl(j)}〕
倍の縮小が完了したということもできる。
以上では、元のピッチ波形に忠実に、再サンプリングを行うことを前提として説明してきた。しかし、装置の仕様によっては、ピッチ波形SWF、jをひとたび周期qでサンプリングし終えた後、アナログデータとしてのピッチ波形S WF、jを破棄してしまう場合も考えられる。あるいは、破棄しないまでも、再サンプリングに要する手続を省略したい場合も考えられる。かかる場合には、元々サンプルのない位置での再サンプリングが必要となる。そのためには様々な方法が考えられるが、最も簡単な方法は、以下に説明する1次補間を用いる方法である。
図15(d)には、アナログデータとしてのピッチ波形が鎖線で描かれ、最初のサンプリングが行われた箇所を白丸印で表している。波形縮小処理のために、図15(d)の黒三角印の時刻で再サンプリングをしようとしたときに、アナログデータとしてのピッチ波形が既に失われているか、または、もうアナログデータの処理を繰り返したくないとする。このとき、厳密な再サンプリングは、たまたま最初のサンプリング時刻と重なっている時刻を除き、もはや不可能である。よって、次善の策として、図15(d)に示すように、例えば元の波高aとbとに挟まれ元のサンプリング間隔をt:uに内分する時刻における再サンプリング値が必要になったときには、1次補間
a+[{(b−a)×t}/(t+u)]
により計算される値で近似する。
(実施形態3における残差信号特徴量の抽出の手順)
以下では、図1のステップS9129、ステップS9131、ステップS9123、及び、ステップS9125、に示した、実施形態3における残差信号特徴量の抽出の手順を、より詳しく説明する。本実施形態は、ステップS9129にて有声・無声判別処理を行うことと、該判別の結果無声であると判別された場合には(ステップS9129;無声)、帯域別処理(ステップS9131)を行うことと、に特徴がある。その他は、実施形態1と同様である。
図16は、本実施形態における、雑音に関係する処理の流れを示す。本実施形態においては、図1の符号化部9133及び送信部9135における符号化及び送信の対象として、有声音に相当するピッチを選択するか、無声音に相当する雑音を選択するか、の択一となる。
まず、入力信号サンプルカウンタがi=0に初期化設定される(ステップS1601)。続いて、残差信号Di={di、0、・・・、di、l-1}が記憶部9225からCPU9221の内蔵レジスタにロードされる(ステップS1603)。該残差信号Diは、離散フーリエ変換やDCT等、周波数領域への変換手法により、周波数変換係数Fi={fi、0、・・・、fi、(l/2)-1}に変換される(ステップS1605)。
得られた周波数変換係数Fiに基づいて、残差信号Diが雑音か否かが判別される(ステップS1607)。判別法としては、例えば、高域と低域とで周波数変換係数の大きさを比較することにより判別する方法を用いる。かかる方法は、次の前提に基づいている。すなわち、有声音を特徴付けるピッチ周波数は比較的低い周波数であるため、かかるピッチ周波数が存在するとすれば、低域に大きな周波数変換係数が存在するはずである。よって、低域に大きな周波数変換係数が存在しないということは、残差信号Diは雑音(無声音に対応する。)であるはずである。例えば入力音声信号Siが16kHzサンプリングであって、256点の離散フーリエ変換が採用された場合には、係数fi、j(0≦j≦(l/2)−1)のうち、3kHz以下に相当する係数の絶対値の和
|fi、0|+・・・+|fi、47|
と、3〜6kHzに相当する係数の絶対値の和
|fi、48|+・・・+|fi、95|
とを比較して、前者が後者よりも小さいならば残差信号Diは雑音であり、前者が後者以上であれば残差信号Diは有声音である、と判別する。その結果、雑音であると判別された場合には(ステップS1607;Yes)、ステップS1609に進む。一方、雑音ではないと判別された場合には(ステップS1607;No)、実施形態1及び実施形態2と同様の、周波数変換係数の選択(例えば、図4〜図7を参照して既に説明した処理)を行った(ステップS1611)後、ステップS1613に進む。
残差信号Diが雑音か否かを判別する他の方法として、次のような方法がある。すなわち、好ましくは500Hz〜1kHzのローパスフィルタを通した後の残差信号Diについて、規格化された自己相関関数
CREG(t)=C(t)/REG(t)
(ただし、
C(t)=di、0×di、t+・・・+di、l-1-t×di、l-1
であり、
REG(t)={(di、0 2+・・・+di、l-1-t 2)
×(di、t 2+・・・+di、l-1 2)}0.5
である。)
を計算し、CREG(t)が例えば0.5よりも大きい極大値を有する場合は有声音であると判別し、そうでない場合は雑音である、と判別する方法である。なお、有声音であると判別された場合には、CREG(t)に極大値をもたらしたtの値を符号化及び送信して、音声の再生に役立てることも考えられる。その場合、音声復号装置9141の残差信号復元部9151は、かかるtに対応した周期を有するパルス信号を、励起信号として出力するようにする。
ステップS1609においては、残差信号Diをいくつかの帯域に分割し、帯域毎の残差信号の強度(信号の大きさ)を求める。例えば、0Hz〜125Hz、125Hz〜250Hz、250Hz〜500Hz、500Hz〜1kHz、1kHz〜2kHz、2kHz〜3kHz、3kHz〜5kHz、5kHz〜6.5kHz、6.5kHz〜8kHzという9個の帯域に分割するのが望ましい。仮に、0Hz〜125Hzに対応する周波数変換係数がfi、0〜fi、4の計5個であり、125Hz〜250Hzに対応する周波数変換係数がfi、5〜fi、9の計5個であるならば、0Hz〜125Hzの信号の大きさg(1)iは、
g(1)i=(|fi、0|+・・・+|fi、4|)/5
であり、125Hz〜250Hzの信号の大きさg2は、
g(2)i=(|fi、5|+・・・+|fi、9|)/5
であり、以下、g(3)i〜g(9)iが同様に求められる。信号の大きさg(1)i〜g(9)iは残差信号特徴量として後に符号化及び送信の対象となるのに備えて、記憶部9225に格納される。その後、ステップS1613に進む。なお、符号化及び送信の対象に、残差信号特徴量が周波数係数ではなく雑音であることを受信・復号側に伝達するための所定のフラグ等を含めるのが望ましい。
ステップS1613では、iがM−1に達しているか否かが判別される。達していない場合(ステップS1613;No)は、iを1だけ増加してから(ステップS1615)、ステップS1603に戻る。達している場合(ステップS1613;Yes)は、処理を終了する。
(音声信号復元の手順)
以下では、図17を参照しつつ、図1の音声復号装置9141の内部で行われる、音声信号復元の手順について説明する。ここでは、予測分析としてMLSA分析が用いられた場合の手順を例に説明するが、線型予測分析など他の予測分析が用いられた場合の手順も、同様である。受信部9143は、元の音声の予測係数と残差信号特徴量とがまとめられて符号化された結果である符号を、受信して、復号部9145に引き渡す。復号部9145は、引き渡された符号を復号して、予測係数と、残差信号特徴量とを生成する。これらは図2の記憶部9225に格納される。予測係数は、MLSA分析の場合は、MLSAフィルタ係数{mi、0、・・・、mi、p−1}(0≦i≦M−1)である。残差信号特徴量は、主に、符号化対象残差信号スペクトルF 'D、i={f 'D、i、0、・・・、f 'D、i、(l/2)−1}(0≦i≦M−1)である。ただし、上述の実施形態3の場合は、残差信号が雑音であったときには、帯域毎の残差信号の強度である。残差信号が雑音であった場合については、後に図18を用いて雑音信号の発生手順を説明する。また、上述の実施形態2の場合には、図1の受信部9143は、時間軸の縮小処理(図1のステップS9127)が施された残差信号が直接的に符号化されたものを受信するときがあるが、そのときには、音声復号装置9141は、既に述べた時間軸の伸張処理により、音声を再生するものとする。
入力信号サンプルカウンタがi=1に設定(図17のステップS1711)された後、予測係数Miが記憶部9225からCPU9221の内部のレジスタにロードされる(ステップS1713)。次に、予測係数Miから合成用逆フィルタCIMiが計算される(ステップS1715)。これは、図1において、予測係数を引き渡された合成用逆フィルタ算出部9147により、合成用逆フィルタ部9149の仕様が定められることに相当する。続いて、符号化対象残差信号スペクトルF 'D、iがロードされ(ステップS1717)、逆離散フーリエ変換や逆DCTなどの逆変換により、実時間の信号である励起用疑似残差信号D 'i={d 'i、0、・・・、d 'i、l−1}(0≦i≦M−1)が求まる(ステップS1719)。続いて、励起用疑似残差信号D 'iが、ステップS1715にて求められた合成用逆フィルタCIMiに通される。その結果、復元信号(復元された音声信号)S 'i={s 'i、0、・・・、s 'i、l−1}(0≦i≦M−1)が生成される(ステップS1721)。復元信号S 'iは記憶部9225(図2)に格納される(図17のステップS1723)。続いて、iがM−1に達しているか否かが判別され(ステップS1725)、達していないのであれば(ステップS1725;No)、iを1だけ増加してから(ステップS1727)、ステップS1713に戻る。iがM−1に達しているのであれば(ステップS1725;Yes)、処理を終了する。
図1の音声復号装置9141が、残差信号特徴量として帯域毎の残差信号の強度を受信した場合には、残差信号復元部9151は、その旨を判別するとともに、図17のフローチャートに示した処理とは異なる処理を行う。すなわち、残差信号復元部9151は、受信した帯域毎の残差信号の強度に基づいて、自ら雑音信号を生成し、合成用逆フィルタ部9149へ入力する励起信号とする。雑音信号は帯域毎に生成された後に、重ね合わせられる。そこで、以下では、帯域毎に雑音列(雑音信号)D '(ωRANGE)i={d '(ωRANGE)i、0、・・・、d '(ωRANGE)i、l-1}(0≦i≦M−1)を生成しそれらを重ね合わせる手順を、図18に示すフローチャートを参照しつつ、説明する。ただし、ωRANGEは、帯域を識別するための変数である。例えば上述のように周波数領域が9個の帯域に分割されている場合には、ωRANGEには、1から9までの整数が代入される。
まず、大きさが±1で時間間隔がランダムである基本雑音列Ri={r i、0、・・・、r i、l−1}が生成される(ステップS1811)。後述の初期化(ステップS1812)の後、Riが帯域識別用変数ωRANGEに対応した帯域の帯域フィルタを通されることによって、該帯域の基本雑音列R(ωRANGE)i={r(ωRANGE)i、0、・・・、r(ωRANGE)i、l−1}が生成される(ステップS1813)。次に、図1の復号部9145から残差信号復元部9151に引き渡された、ωRANGEで示される帯域の残差信号の大きさg(ωRANGE)iを、該帯域の基本雑音列R(ωRANGE)iに乗じることにより、雑音列D '(ωRANGE)iが生成される(ステップS1815)。
ステップS1812、ステップS1817、ステップS1819、及び、ステップS1821、は、各帯域の雑音列D '(ωRANGE)iを合算して励起用疑似残差信号D 'iを生成するためのループ処理である。ステップS1812においては、帯域識別用変数ωRANGEを、最低帯域を指す値、すなわち上述の例の場合であれば1、に初期化する。それとともに、前記合算の準備のために、雑音列D'iの要素d'i、0、・・・、d'i、l-1を全て0に初期化する。ステップS1817においては、前記合算を順次進めていくために、雑音列D'iを、各要素の重ね合わせにより、D'i+D '(ωRANGE)iに更新する。ステップS1819においては、ωRANGEが最高帯域を指す値、すなわち上述の例の場合であれば9、に達しているか否かが判別される。達している場合(ステップS1819;Yes)には処理を終了し、達していない場合(ステップS1819;No)には、ステップS1821においてωRANGEをひとつ高帯域側に更新してから、すなわち、上述の例の場合であれば1だけ増加してから、ステップS1813に戻る。処理が終了した時点におけるD'iが、前記合算の最終結果である。このようにして、励起用疑似残差信号が生成される。
(ケプストラムからMLSA係数を求める手順の一例)
図19は、ケプストラムCi={ci、0、・・・、ci、(l/2)-1}からMLSAフィルタ係数Mi={mi、0、・・・、mi、p-1}を求める具体的な手順の一例をフローチャートにしたものである。ステップS1911〜S1935に示した計算を行うことにより、MLSAフィルタ係数が求まる。αは近似用の数値であり、音声信号が10kHzでサンプリングされている場合にはα=0.35とするのが好適である。また、β=1−α2である。mi(0≦i≦p−1)は0に初期化しておく。
このようにして求まったMLSAフィルタ係数を用いたMLSAフィルタの構成の一例を、図20に示す。P1〜P4は近似用係数であり、例えば、P1=0.4999、P2=0.1067、P3=0.0117、P4=0.0005656とするのが好適である。
なお、この発明は、上記実施形態に限定されず、種々の変形及び応用が可能である。上述のハードウェア構成やブロック構成、フローチャートは例示にすぎない。上記実施形態は説明のためのものであり、本願発明の範囲を制限するものではない。
例えば、図2に示される音声符号化兼復号装置9211として携帯電話機を想定して説明したが、PHS(Personal Handyphone System)、PDA(Personal Digital Assistance)、ノート型及びデスクトップ型パーソナルコンピュータ等による音声処理においても、同様に本発明を適用することができる。例えば本発明をパーソナルコンピュータに適用する場合には、パーソナルコンピュータに音声入出力装置や通信装置等を付加すれば、ハードウェアとしては携帯電話機の機能を有するようにすることができる。そして、上述の処理をコンピュータに実行させるためのコンピュータプログラムが記録媒体や通信により配布されれば、これをコンピュータにインストールして実行させることにより、該コンピュータをこの発明に係る音声符号化装置又は音声復号装置として機能させることも可能である。
9111・・・音声符号化装置、9113・・・マイクロフォン、9115・・・A/D変換部、9117・・・予測分析部、9119・・・予測分析用逆フィルタ算出器、9121・・・残差信号特徴量抽出部、9133・・・符号化部、9135・・・送信部、9141・・・音声復号装置、9143・・・受信部、9145・・・復号部、9147・・・合成用逆フィルタ算出部、9149・・・合成用逆フィルタ部、9151・・・残差信号復元部、9153・・・D/A変換部、9155・・・スピーカ、9211・・・音声符号化兼復号装置、9221・・・CPU、9223・・・ROM、9225・・・記憶部、9231・・・RAM、9233・・・ハードディスク、9241・・・音声処理部、9251・・・無線通信部、9253・・・アンテナ、9261・・・操作キー入力処理部、9263・・・操作キー、9271・・・システムバス