JP2011107602A - 信号処理装置、および信号処理方法、並びにプログラム - Google Patents

信号処理装置、および信号処理方法、並びにプログラム Download PDF

Info

Publication number
JP2011107602A
JP2011107602A JP2009265075A JP2009265075A JP2011107602A JP 2011107602 A JP2011107602 A JP 2011107602A JP 2009265075 A JP2009265075 A JP 2009265075A JP 2009265075 A JP2009265075 A JP 2009265075A JP 2011107602 A JP2011107602 A JP 2011107602A
Authority
JP
Japan
Prior art keywords
signal
separation
learning
spatial filter
sound
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.)
Granted
Application number
JP2009265075A
Other languages
English (en)
Other versions
JP5299233B2 (ja
Inventor
Atsuo Hiroe
厚夫 廣江
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.)
Sony Corp
Original Assignee
Sony Corp
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 Sony Corp filed Critical Sony Corp
Priority to JP2009265075A priority Critical patent/JP5299233B2/ja
Priority to US12/944,304 priority patent/US8818001B2/en
Priority to CN201010553983.3A priority patent/CN102075831B/zh
Publication of JP2011107602A publication Critical patent/JP2011107602A/ja
Application granted granted Critical
Publication of JP5299233B2 publication Critical patent/JP5299233B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04RLOUDSPEAKERS, MICROPHONES, GRAMOPHONE PICK-UPS OR LIKE ACOUSTIC ELECTROMECHANICAL TRANSDUCERS; DEAF-AID SETS; PUBLIC ADDRESS SYSTEMS
    • H04R17/00Piezoelectric transducers; Electrostrictive transducers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04RLOUDSPEAKERS, MICROPHONES, GRAMOPHONE PICK-UPS OR LIKE ACOUSTIC ELECTROMECHANICAL TRANSDUCERS; DEAF-AID SETS; PUBLIC ADDRESS SYSTEMS
    • H04R7/00Diaphragms for electromechanical transducers; Cones
    • H04R7/16Mounting or tensioning of diaphragms or cones
    • H04R7/18Mounting or tensioning of diaphragms or cones at the periphery
    • H04R7/20Securing diaphragm or cone resiliently to support by flexible material, springs, cords, or strands

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Acoustics & Sound (AREA)
  • Signal Processing (AREA)
  • Multimedia (AREA)
  • Circuit For Audible Band Transducer (AREA)

Abstract

【課題】突発音等が含まれる混合信号に対する高精度な音源分離を可能とする装置、方法を提供する。
【解決手段】複数音源からの出力を混合した混合信号からなる観測信号に対して、独立成分分析(ICA)を適用した学習処理により分離行列を求めて分離信号を生成するとともに、観測信号として検出された音源に対する死角を持つ全死角空間フィルタを適用して検出音を除去した全死角空間フィルタ適用信号を生成する。さらに、分離信号に含まれる全死角空間フィルタ適用信号に対応する信号成分を除去するフィルタリング処理を実行し、周波数フィルタリング処理結果から音源分離結果を生成する。
【選択図】図12

Description

本発明は、信号処理装置、および信号処理方法、並びにプログラムに関する。さらに、詳細には複数の信号が混合された信号を独立成分分析(ICA:Independent Component Analysis)を用いて分離する処理に関し、特にリアルタイム処理、すなわち連続的に入力される観測信号を少ない遅延で独立な成分へと分解し、それを連続的に出力する信号処理装置、および信号処理方法、並びにプログラムに関する。
まず、本発明の背景技術として、独立成分分析(ICA:Independent Component Analysis)について説明し、さらに、独立成分分析(ICA)のリアルタイム化の方法について説明する。
[A1.ICAの説明]
ICAとは、多変量分析の一種であり、信号の統計的な性質を利用して多次元信号を分離する手法のことである。ICA自体の詳細については、例えば非特許文献1[『入門・独立成分分析』(村田昇著、東京電機大学出版局)]などを参照されたい。
以下では、音信号のICA、特に時間周波数領域のICAについて説明する。
図1に示すように、N個の音源から異なる音が鳴っていて、それらをn個のマイクで観測するという状況を考える。音源が発した音(原信号)がマイクに届くまでには、時間遅れや反射などがある。従って、マイクロホンkで観測される信号(観測信号)は式[1.1]のように、原信号と伝達関数(transfer function)との畳み込み演算(convolution)を全音源について総和した式して表わすことができる。この混合を以下では「畳み込み混合」(convolutive mixtures)と呼ぶ。
なお、マイクnの観測信号をx(t)とする。マイク1、マイク2の観測信号はそれぞれx(t),x(t)となる。
全てのマイクについての観測信号を一つの式で表わすと、以下に示す式[1.2]のように表わせる。
ただし、x(t),s(t)はそれぞれx(t),s(t)を要素とする列ベクトルであり、A[l]はa[l] kjを要素とするn×Nの行列である。以降では、n=Nとする。
時間領域の畳み込み混合は、時間周波数領域では瞬時混合で表わされることが知られており、その特徴を利用したのが時間周波数領域のICAである。
時間周波数領域ICA自体については、非特許文献2[『詳解 独立成分分析』の「19.2.4.フーリエ変換法」]や、特許文献1(特開2006−238409号公報 『音声信号分離装置・雑音除去装置および方法』)などを参照されたい。
以下では、主に本発明と関係ある点を説明する。
上記の式[1.2]の両辺を短時間フーリエ変換すると、以下に示す式[2.1]が得られる。
上記式[2.1]において、
ωは周波数ビンの番号、
tはフレームの番号、
である。
ωを固定すると、この式は瞬時混合(時間遅れのない混合)と見なせる。そこで、観測信号を分離するには、分離結果[Y]の算出式[2.5]を用意した上で、分離結果:Y(ω,t)の各成分が最も独立になるように分離行列W(ω)を決める。
従来の時間周波数領域ICAでは、パーミュテーション問題と呼ばれる、「どの成分がどのチャンネルに分離されるか」が周波数ビンごとに異なるという問題が発生していたが、本願と同一発明者による前の特許出願である特許文献1(特開2006−238409号公報)『音声信号分離装置・雑音除去装置および方法』]に示した構成によって、このパーミュテーション問題は、ほぼ解決することができた。本発明でもこの方法を用いるため、特許文献1(特開2006−238409号公報)に開示したパーミュテーション問題の解決手法ついて簡単に説明する。
特許文献1(特開2006−238409号公報)では、分離行列W(ω)を求めるために、以下に示す式[3.1]から式[3.3]までを分離行列W(ω)が収束するまで(または一定回数)繰り返し実行する。
この繰り返し実行を以降では「学習」と呼ぶ。ただし、式[3.1]〜式[3.3]は、全ての周波数ビンに対して行ない、さらに式[3.1]は、蓄積された観測信号の全てのフレームに対しても行なう。また、式[3.2]において、<・>は全フレームについての平均を表わす。Y(ω,t)の右上についている上付きのHはエルミート転置(ベクトルや行列の転置を取ると共に、要素を共役複素数に変換する)である。
分離結果Y(t)は式[3.4]で表わされる、分離結果の全チャンネル・全周波数ビンの要素を並べたベクトルである。φω(Y(t))は、式[3.5]で表わされるベクトルである。各要素φω(Y(t))はスコア関数と呼ばれ、Y(t)の多次元(多変量)確率密度関数(PDF)の対数微分である(式[3.6])。多次元PDFとして、例えば式[3.7]で表わされる関数を用いることができ、その場合、スコア関数φω(Y(t))は式[3.9]のように表わせる。ただし、‖Y(t)‖はベクトルY(t)のL−2ノルム(全要素の2乗和を求め、さらに平方根をとったもの)である。L−2ノルムを一般化したL−mノルムは式[3.8]で定義される。式[3.7]および式[3.9]のγは、Y(ω,t)のスケールを調整するための項であり、例えばsqrt(M)(周波数ビン数の平方根)といった適切な正の定数を代入しておく。式[3.3]のηは学習率や学習係数と呼ばれる正の小さな値(例えば0.1程度)である。これは、式[3.2]で計算されたΔW(ω)を分離行列W(ω)に少しずつ反映させるために用いられる。
なお、式[3.1]は一つの周波数ビンにおける分離(図2(A)参照)を表わしているが、全周波数ビンの分離を一つの式で表わす(図2(B)参照)ことも可能である。
そのためには、上述した式[3.4]で表わされる全周波数ビンの分離結果Y(t)および、式[3.11]で表わされる観測信号X(t)、さらに式[3.10]で表わされる全周波数ビン分の分離行列を用いればよく、それらのベクトルと行列を用いることで、分離は式[3.12]のように表わすことができる。本発明は、必要に応じて式[3.1]と式[3.11]とを使い分ける。
なお、図2に示したX1〜XnおよびY1〜Ynの図はスペクトログラムと呼ばれ、短時間フーリエ変換(STFT)の結果を周波数ビン方向とフレーム方向とに並べたものである。縦方向が周波数ビン、横方向がフレームである。式[3.4]や式[3.11]では低い周波数を上に書いてあるが、スペクトログラムでは低い周波数を下に描いてある。
ここまでの説明では、音源数Nはマイクロホン数nと等しいとしていたが、N<nであっても分離は可能である。その場合、n個の出力チャンネルの内のN個には音源に対応した信号がそれぞれ出力されるが、残りのn−Nチャンネルには、どの音源にも対応しない、無音に近い信号が出力される。
[A2.ICAのリアルタイム化]
「A1.ICAの説明」で説明した式[3.1]から式[3.3]までを分離行列W(ω)が収束するまで(または一定回数)繰り返し実行する学習処理は、例えばバッチ処理によって行われる。すなわち、観測信号全体を蓄積した後で、式[3.1]〜式[3.3]を繰り返す方式である(式[3.1]〜式[3.3]の繰り返し実行は、前述したように、学習と呼ばれる。
このバッチ処理は、ある工夫を行なうことで、リアルタイム(低遅延)の音源分離に適用することができる。リアルタイム処理方式を実現した音源分離処理例として、本願と同一出願人の先の特許出願である特許文献2(特開2008−147920号公報「リアルタイム音源分離装置および方法」)に開示した構成について説明する。
特許文献2(特開2008−147920号公報)で開示した処理方式は、図3に示すように、観測信号のスペクトログラムを重複のある複数のブロック1〜Nに分割し、ブロックごとに学習を行なって分離行列を求めている。ブロックに重複を持たせる理由は、分離行列の精度と更新頻度とを両立させるためである。
なお、特許文献2(特開2008−147920号公報)より以前に開示されていたリアルタイムICA(ブロック単位のICA)ではブロック間に重複がなかった。従って、分離行列の更新間隔を短くするにはブロック長(=観測信号を蓄積する時間)を短くする必要があったが、ブロック長を短くすると分離精度は低下するという問題があった。
このように、観測信号の各ブロックに対してバッチ処理を適用する方法を、以降では「ブロック単位(blockwise)バッチ処理」と呼ぶ。
各ブロックから求まった分離行列は、それより以降の観測信号へ適用する(同一ブロックへは適用しない)ことで分離結果を生成する。ここでは、その方式を「ずらし適用」と呼ぶ。
図4は、「ずらし適用」の説明である。現時点において、t番目のフレームの観測信号X(t)42が入力されたとする。この時点では、観測信号X(t)を含むブロック(例えば現在時刻を含む観測信号ブロック46)に対応した分離行列はまだ求まっていない。そこで、ブロック46の代わりに、それより前のブロックである学習データブロック41から学習された分離行列を観測信号X(t)に乗じることで、X(t)に対応した分離結果、すなわち現在時刻の分離結果Y(t)44を生成する。なお、学習データブロック41から学習された分離行列は、フレームtの時点で既に求まっているものとする。
前述の通り、分離行列は混合過程の逆の過程を表わしていると考えられる。
そのため、学習データのブロック設定区間41の観測信号と現在時刻の観測信号42とで混合過程が同一であれば(例えば、音源とマイクとの位置関係が変化していなければ)、異なる区間で学習された分離行列を適用しても信号を分離することができ、そうすることで遅延の少ない分離を実現することができる。
特許文献2(特開2008−147920号公報)において開示した構成では、重複のあるブロックから分離行列を求めるためスレッドと呼ばれる処理の単位を、時刻をずらして複数並列に起動する方式を提案している。図5を参照してこの並列処理方式について説明する。
図5には、処理単位としてのスレッド各々の時間経過に従った処理推移を示している。図5には6つのスレッド1〜6を示している。各スレッドはA)蓄積、B)学習、C)待機、という3つの状態を繰り返す。すなわち、スレッド長は、A)蓄積、B)学習、C)待機の3つの処理のトータル時間長に対応する。図5の左から右に時間が推移する。
「A)蓄積」は図5の濃い灰色の区間であり、スレッドがこの状態にあるときは、観測信号を蓄積する。蓄積を開始する時刻をスレッドごとにずらすことで、図5の重複つきブロックが表現できる。図5では蓄積時間の1/4だけずらしているので、1つのスレッドの蓄積時間を例えば4秒とすると、各スレッド間のずらし時間は1秒となる。
観測信号を一定時間(例えば4秒)蓄積すると、各スレッドは「B)学習」に状態を遷移させる。「B)学習」は図5の薄い灰色の区間であり、この状態にあるときは、蓄積された観測信号に対して先に説明した式[3.1]〜式[3.3]を繰り返し実行する。
学習(式[3.1]〜式[3.3]の繰り返し)によって分離行列Wが十分に収束したら(または単に一定回数繰り返したら)、学習を終了し、スレッドは「C)待機」状態に遷移する(図5の白い区間)。「待機」は、蓄積開始時刻および学習開始時刻をスレッド間で一定の間隔に保つためであり、その結果、学習終了時刻(=分離行列が更新される時刻)もほぼ一定の間隔に保たれる。
学習で求まった分離行列Wは、次のスレッドの学習が終了するまでの間、分離に使用される。すなわち、図4の分離行列43として使用される。これを説明するのが図5の最下段に示す分離行列の時間推移に示す適用分離行列規定区間51〜53に使用される分離行列である。
システムが起動してから、最初の分離行列が学習されるまでの適用分離行列規定区間51では、図4の分離行列43として初期値(例えば単位行列)が使用される。図5に示すスレッド1の学習が終了してからスレッド2の学習が終了するまでの区間52では、スレッド1の観測信号蓄積区間54に由来する分離行列が図4の分離行列43として使用される。図5の区間52に示す数字「1」は、この期間に使用される分離行列Wがスレッド1の処理によって求められたことを表わす。適用分離行列規定区間52よりも右側の数字も同様に、分離行列が何番目のスレッドに由来するかを表わす。
なお、学習を開始する時点において、他のスレッドで求まった分離行列が存在する場合は、それを学習の初期値として使う。これを「分離行列の引継ぎ」と呼ぶことにする。図5に示す例では、スレッド3の最初の学習が始まるタイミングである学習開始タイミング55では、スレッド1に由来する分離行列52が既に求まっているので、それを学習の初期値として使う。
このような処理を行うことで、スレッド間でパーミュテーション(permutation)の発生を防止または低減することができる。スレッド間のパーミュテーションとは、例えば、1番目のスレッドで求まった分離行列では1番目のチャンネルに音声、2番目のチャンネルに音楽が出力されるのに対し、3番目のスレッドで求まった分離行列ではそれが逆転しているなどの問題である。
図5を参照して説明したように、他のスレッドで求まった分離行列が存在する場合は、それを学習の初期値として使う「分離行列の引継ぎ」を行うことで、スレッド間のパーミュテーションを低減することが可能となる。また、スレッド1の学習では分離行列が十分には収束していなくても、それを次のスレッドが引き継ぐことで、収束の度合いを向上させることができる。
このように時間をずらしながら複数のスレッドを起動することで、分離行列は、スレッド間のずれ、すなわちブロックシフト量56とほぼ同じ間隔で更新されていくのである。
[B.従来技術の問題点]
次に、上述の「A2.ICAのリアルタイム化」の問題点について検証する。上述の「A2.ICAのリアルタイム化」において説明した「ブロック単位バッチ処理」と「ずらし適用」との組み合わせでは、音源分離が正確に行われない場合が発生する。それは以下の2つの要因に分けて考えることができる。
B1.追従遅れ
B2.消し残り
以下、この2つの要因によって音源分離が正確に行われない理由について各々説明する。
[B1.追従遅れ]
「ずらし適用」を用いると、分離行列の学習に用いた区間(例えば図4に示す学習データブロック41)と現在時刻の観測信号42との間で音源が変化した場合(音源が移動したり、急に鳴り始めたりした場合)に、一時的に不整合が生じる。
その後、変化した音源を観測した学習処理によって新たな分離行列が求まるため、やがて不整合は消える。しかし、その新たな分離行列が生成されるまでの間は、不整合が発生することになる。ここではその現象を「追従遅れ」と呼ぶ。追従遅れは、たとえ音源が移動しなくても、音が急に鳴り始めた場合や、音がいったん鳴り止んだ後に再び鳴り始めた場合などにも発生する。以降では、これらの音を「突発音」と呼ぶ。
図6は突発音と観測信号との対応について説明する図である。この図6の例は音源が2つあると想定している。
(a)音源1
(b)音源2
これらの2つの音源である。
左から右に時間が経過している。(a)音源1、(b)音源2、(c)観測信号に示すブロックの高さは音量を示すものとする。
(a)音源1は無音区間67を挟んで2回鳴っている。音源出力区間をそれぞれ音源1出力区間61,62とする。現在時刻の観測信号66を観測している現在時刻においても出力されている。
(b)音源2は、連続的に鳴っているとする。すなわち音源2出力区間63を有する。
(c)観測信号は、これらの音源1、音源2からマイクロホンへ到達した信号の和として表せる。
(c)観測信号中に点線枠で示す学習データのブロック64は、図4に示す学習データのブロック41と同じ区間であり、学習データのブロック64の区間の観測信号から学習された分離行列を現在時刻(t1)の観測信号66に適用することで分離を行なう。学習データのブロック64と現在時刻(t1)の観測信号66との間には区間65(ブロック終端から現在時刻までの区間65)が存在する。
現在時刻(t1)の観測信号66は、現在時刻の音源出力69に基づく観測信号である。
しかし、音源1の無音区間67と学習データのブロック長64(図4に示す学習データのブロック41と同一)との長さによっては、学習データと現在の観測信号との間で不整合が発生する場合がある。
例えば(c)観測信号中、現在時刻(t1)の観測信号66には音源1由来の音源1出力区間62と、音源2由来の音源2出力区間63との両方が観測信号として含まれるのに対し、学習データのブロック64は音源2由来の音源2出力区間63しか観測されていない。
現在時刻(t1)の観測信号66のように、学習データのブロックには含まれない音が現在鳴っていることを、「突発音が発生した」と表現する。言い換えると、学習データのブロック64には音源1の観測信号が含まれていないため、たとえそのブロックよりも前に音源1が鳴っていた(音源1出力区間61に相当)としても、学習データのブロック64において学習された分離行列にとって音源1(音源1出力区間62の区間)は突発音である。
図7は突発音の発生が分離結果に及ぼす影響、特に追従遅れについて説明する図である。図7には、
(a)観測信号
(b1)分離結果1
(b2)分離結果2
(b3)分離結果3
これらのデータを示している。
図の左から右に時間が経過している。
図7に示す例において、ICA(独立成分分析)システムは3個以上のマイクロホンを有し、出力チャンネルも3以上であると想定している。
(a)観測信号には、時間t0〜t5の間、継続して鳴り続けている継続音71と、時間t1〜t4の間のみ出力される突発音72が含まれている。
図7の(a)観測信号は、図6(c)観測信号と同様の観測信号であり、継続音71は、例えば図6の(b)音源2に、突発音72は図6の(a)音源1に対応する。
突発音72の出力開始前、継続音71のみが鳴っているt0〜t1区間73において分離行列が十分に収束した後では、継続音71に対応した信号は一つのチャンネルのみに出力される。これが(b1)分離結果1である。他のチャンネル、すなわち(b2)分離結果2と、(b3)分離結果3にはほぼ無音が出力される。
ここで、突発音72が発生したとする。例えば、それまで黙っていた人がしゃべり始めた場合などである。この時点で観測信号に適用可能な分離行列は、突発音72が発生する以前のデータ、すなわち、時間t1以前の継続音71のデータのみを観測データとして学習して生成された分離行列となる。
この結果、時間t1以前の観測信号に基づいて生成した分離行列を適用して、時間t1以降の突発音72が観測された観測信号を分離することになり、観測信号に対応する正しい分離結果は得られない、すなわち、時間t1以前の観測信号に基づいて生成した分離行列は、時間t1以降の観測信号に含まれる突発音72を考慮しない分離行列であるからである。この結果、その分離行列を適用した分離結果、例えば、時間t1〜t3の分離結果と、実際の観測信号、すなわち継続音71と突発音72との混合である観測信号との間に不整合が発生する。
突発音が鳴り始めてから、その突発音を反映した分離行列が学習されるまでの間(時間t1〜t2の区間74)は、全部のチャンネル((b1)分離結果1、(b2)分離結果2、(b3)分離結果3)に突発音が出力されるという現象が発生する。すなわち、突発音については全く音源分離がなされない。この時間は、最小で学習時間より若干大きい値、最大で学習時間とブロックシフト幅との和である。例えば、学習時間が0.3秒、ブロックシフトが0.2秒というシステムでは、最小で0.3秒強、最大で0.5秒は突発音が分離せずに全チャンネルに出力される。
その後、新たな学習ブロックにおける学習処理により逐次、新たな分離行列が生成され更新される。この分離行列更新処理によって、突発音が分離行列に反映されるにつれて一つのチャンネル(図7では(b2)分離結果2)を除いて突発音の出力が小さくなる(時間t2〜t3の区間75)。やがて一つのチャンネル((b2)分離結果2)のみに出力されるようになる(t3〜の区間76)。
この図7に示す例において、追従遅れの発生区間は、時間t1〜t2の区間74と時間t2〜t3の区間75を合わせた区間、すなわち時間t1〜t3の区間77である。
突発音発生時に生ずる追従遅れの問題点がどこにあるかについては、突発音が目的音であるか妨害音であるかによって異なる。以降、それぞれの場合について説明する。目的音とは、解析対象とする音である。
突発音が妨害音である場合、言い換えると鳴りっぱなし継続音71が目的音である場合、突発音は除去されるのが望ましい。従って、問題は、図7に示す(b1)分離結果1において妨害音が除去されずに残っていることである。
一方、突発音が目的音である場合、突発音は残すが、妨害音である鳴りっぱなしの継続音71は除去されるのが望ましい。一見すると、図7に示す(b2)分離結果2
はそのような出力に見える。しかし、追従遅れが発生している時間t1〜t3の区間77では入力と分離行列とで不整合が発生しているため、出力の音が歪む(周波数間のバランスが原信号とは異なったものとなっている)可能性がある。すなわち、突発音が目的音である場合、問題は出力音が歪む場合があることである。
このように、突発音の性質によって、除去するか残すかという相反する処理を行なう必要があるため、単一の方法で解決するのは困難である。
[B2.消し残り]
次に、前述の「A2.ICAのリアルタイム化」において説明した「ブロック単位バッチ処理」と「ずらし適用」との組み合わせにおいて、音源分離が正確に行われないもう1つの要因である「消し残り」について説明する。
例えば、図7の時間t0〜t1の区間73、あるいは時間t3〜t4の区間76等では分離行列が十分収束し、先行する学習データに基づく分離行列を適用して観測データの分離を行えば、正確な分離が行えているはずである。しかし、このような区間でも一つのチャンネルに完全に一つの音源が出力されるとは限らず、他の音源がある程度残る。これを「消し残り」と呼ぶ。例えば、図7に示す消し残り78は、(b2)分離結果には残るべきでない音である。同様に、消し残り79も(b3)分離結果3には出現すべきでない音である。
このような消し残りが発生する主な要因として、以下の点が考えられる。
a)その空間の残響の長さが、短時間フーリエ変換(STFT)のフレーム長よりも長い。
b)音源の数が、マイクロホンの数よりも多い。
c)マイク間隔が狭いため低い周波数において妨害音が消しきれない。
リアルタイムICAを用いた音源分離システムにおいては、追従遅れの短縮と消し残りの減少とがトレードオフになり得る。なぜなら、追従遅れの短縮には学習時間の短縮が有効だが、その方法によっては消し残りが増加してしまうからである。
ICAの学習の計算量(computational cost)は、短時間フーリエ変換(STFT)のフレーム長に比例し、また、チャンネル数(マイクロホンの個数)の2乗に比例する。従って、それらの値を小さくすると、ループ回数が同じでも学習時間を短縮できるため、追従遅れも短縮できる。
しかし、フレーム長の短縮は、上記の消し残り発生の要因の1つ、すなわち、要因a)をさらに悪化させることになる。
また、マイクロホン数の減少は上記の消し残り発生の要因の1つ、すなわち要因b)をさらに悪化させることになる。
従って、短時間フーリエ変換(STFT)のフレーム長を短くする処理や、チャンネル数(マイクロホンの数)を減少させる処理は、追従遅れの短縮には貢献するが、その一方で、消し残りが発生しやすくなるという問題を生じさせる。
このように、追従遅れの短縮と消し残りは一方を解消しようとすると一方が悪化するという関係にある。
図7に示す消し残り78は、鳴りっぱなしの継続音、すなわち、(b1)分離結果1に対応する音として分離されるべきであり、消し残りが発生すると、そのチャンネルで支配的に出力されている成分((b1)分離結果1においては突発音72)に対する分離性能が低下することになる。
一方、前述の「追従遅れ」が大きいと、突発音の正確な分離結果を得る時間が遅延することになる。具体的には、図7に示す突発音の発生時間t1から、突発音に対応するチャンネル、すなわち(b2)分離結果2にのみ、突発音に対応する音が分離される時間である時間t3に至るまでの時間が延びてしまうことになる。
複数の音源からどの音源の音を取得したいか、これは目的に応じて異なる場合がある。ここで正確な分離結果を取得したい目的とする音を「目的音」とする。
この「目的音」が、鳴りっぱなしの継続音と突発音とのどちらであるかによって、異なる処理や設定をすることが望ましいということになる。
上記の消し残り発生の要因の残りの1つ、すなわち、
c)マイク間隔が狭いため低い周波数において妨害音が消しきれない。
この要因はリアルタイム処理とは無関係である。しかし、以下に説明する本発明の構成によって解決できる課題であるため、ここで説明する。時間周波数領域のICAにおいて、マイクロホンの間隔が狭い(例えば2〜3cm程度)と、特に低い周波数で分離が十分には行なわれないことがある。これは、マイクロホン間で十分な位相差が得られないのが原因である。マイクロホン間隔を広げることで低い周波数での分離精度は向上できるが、逆に空間エリアシング(spatial ariasing)と呼ばれる現象により、高い周波数での分離精度が低下する可能性もある。また、物理的制約により、マイクロホンを広い間隔では設置できない場合もある。
以上の問題点をまとめると、以下の通りである。
(A)「ブロック単位処理」および「ずらし適用」を用いたリアルタイムICAでは、突発音に対して「追従遅れ」や「消し残り」が発生し、音源分離が正確に行われない場合が発生する。
(B)音源分離を正確に行うための「追従遅れ」や「消し残り」の対処は、突発音が目的音か妨害音かで相反しているため、単一の方法では解決が難しい。
(C)従来のリアルタイムICAの枠組みでは、「追従遅れ」の短縮と「消し残り」の解消とはトレードオフの関係になる場合がある。
特開2006−238409号公報 特開2008−147920号公報
『入門・独立成分分析』(村田昇著、東京電機大学出版局) 『詳解 独立成分分析』の「19.2.4.フーリエ変換法」
本発明は、このような状況に鑑みてなされたものであり、独立成分分析(Independent Component Analysis;ICA)を用いて各音源信号単位の高精度な分離処理を遅延の少ないリアルタイム処理として実行する信号処理装置、および信号処理方法、並びにプログラムを提供することを目的とする。
本発明の第1の側面は、
複数のセンサが取得した複数音源の出力の混合信号に対する短時間フーリエ変換(STFT)によって時間周波数領域の観測信号を生成し、該観測信号に対する線形フィルタリング処理により各音源対応の音源分離結果を生成する分離処理部を有し、
前記分離処理部は、
前記観測信号に対する線形フィルタリング処理を実行して各音源対応の分離信号を生成する線形フィルタリング処理部と、
前記複数のセンサによって取得された観測信号に含まれる全ての音源方向に死角を形成した全死角空間フィルタを適用して死角方向の音を除去した全死角空間フィルタ適用信号を生成する全死角空間フィルタ適用部と、
前記分離信号と前記全死角空間フィルタ適用信号を入力し、前記分離信号に含まれる前記全死角空間フィルタ適用信号に対応する信号成分を除去するフィルタリング処理を実行する周波数フィルタリング部を有し、前記周波数フィルタリング部の処理結果を音源分離結果として生成する信号処理装置にある。
さらに、本発明の信号処理装置の一実施態様において、前記信号処理装置は、複数音源からの出力を混合した混合信号からなる観測信号に対して、独立成分分析(ICA:Independent Component Analysis)を適用した学習処理により、前記混合信号を分離する分離行列を求め、さらに前記観測信号から取得された全ての音源方向に死角を形成した全死角空間フィルタを生成する学習処理部を有し、前記線形フィルタリング処理部は、前記観測信号に対して、前記学習処理部の生成した分離行列を適用して前記混合信号を分離して各音源対応の分離信号を生成し、前記全死角空間フィルタ適用部は、前記観測信号に対して、前記学習処理部の生成した全死角空間フィルタを適用して死角方向の音を除去した全死角空間フィルタ適用信号を生成する。
さらに、本発明の信号処理装置の一実施態様において、前記周波数フィルタリング部は、前記分離信号から前記全死角空間フィルタ適用信号を減算する処理により、前記分離信号に含まれる前記全死角空間フィルタ適用信号に対応する信号成分を除去するフィルタリング処理を実行する。
さらに、本発明の信号処理装置の一実施態様において、前記周波数フィルタリング部は、前記全死角空間フィルタ適用信号を雑音成分としたスペクトル減算による周波数フィルタリング処理により、前記分離信号に含まれる前記全死角空間フィルタ適用信号に対応する信号成分を除去するフィルタリング処理を実行する。
さらに、本発明の信号処理装置の一実施態様において、前記学習処理部は、前記観測信号を区分したブロック単位での学習処理を実行してブロック単位の学習結果に基づく分離行列および全死角空間フィルタを生成する処理を実行し、前記分離処理部は、前記学習処理部の生成した最新の分離行列および全死角空間フィルタを適用した処理を実行する。
さらに、本発明の信号処理装置の一実施態様において、前記周波数フィルタリング部は、前記分離信号からの前記全死角空間フィルタ適用信号対応成分の除去レベルを分離信号チャネルに応じて変更する処理を行う。
さらに、本発明の信号処理装置の一実施態様において、前記周波数フィルタリング部は、前記分離信号からの前記全死角空間フィルタ適用信号対応成分の除去レベルを分離信号チャネルのパワー比に応じて変更する処理を行う。
さらに、本発明の信号処理装置の一実施態様において、前記分離処理部は、観測信号からの切り出しデータ単位であるフレーム中、現在の観測信号を含むフレームを適用したスケール調整としてのリスケーリング処理を実行した分離行列と、全死角空間フィルタを生成して、リスケーリング処理後の分離行列と全死角空間フィルタを適用した処理を行う。
さらに、本発明の第2の側面は、
信号処理装置において音源分離処理を実行する信号処理方法であり、
分離処理部において、複数のセンサが取得した複数音源の出力の混合信号に対する短時間フーリエ変換(STFT)によって時間周波数領域の観測信号を生成し、該観測信号に対する線形フィルタリング処理により各音源対応の音源分離結果を生成する分離処理ステップを有し、
前記分離処理ステップは、
前記観測信号に対する線形フィルタリング処理を実行して各音源対応の分離信号を生成する線形フィルタリング処理ステップと、
前記複数のセンサによって取得された観測信号に含まれる全ての音源方向に死角を形成した全死角空間フィルタを適用して死角方向の音を除去した全死角空間フィルタ適用信号を生成する全死角空間フィルタ適用ステップと、
前記分離信号と前記全死角空間フィルタ適用信号を入力し、前記分離信号に含まれる前記全死角空間フィルタ適用信号に対応する信号成分を除去するフィルタリング処理を実行する周波数フィルタリングステップを有し、前記周波数フィルタリングステップの処理結果を音源分離結果として生成する信号処理方法にある。
さらに、本発明の第3の側面は、
信号処理装置において音源分離処理を実行させるプログラムであり、
分離処理部において、複数のセンサが取得した複数音源の出力の混合信号に対する短時間フーリエ変換(STFT)によって時間周波数領域の観測信号を生成し、該観測信号に対する線形フィルタリング処理により各音源対応の音源分離結果を生成する分離処理ステップを実行させ、
前記分離処理ステップにおいては、さらに、
前記観測信号に対する線形フィルタリング処理を実行して各音源対応の分離信号を生成する線形フィルタリング処理ステップと、
前記複数のセンサによって取得された観測信号に含まれる全ての音源方向に死角を形成した全死角空間フィルタを適用して死角方向の音を除去した全死角空間フィルタ適用信号を生成する全死角空間フィルタ適用ステップと、
前記分離信号と前記全死角空間フィルタ適用信号を入力し、前記分離信号に含まれる前記全死角空間フィルタ適用信号に対応する信号成分を除去するフィルタリング処理を実行する周波数フィルタリングステップを実行させて、前記周波数フィルタリングステップの処理結果を音源分離結果として生成させるプログラムにある。
なお、本発明のプログラムは、例えば、様々なプログラム・コードを実行可能な画像処理装置やコンピュータ・システムに対して、コンピュータ可読な形式で提供する記憶媒体、通信媒体によって提供可能なプログラムである。このようなプログラムをコンピュータ可読な形式で提供することにより、情報処理装置やコンピュータ・システム上でプログラムに応じた処理が実現される。
本発明のさらに他の目的、特徴や利点は、後述する本発明の実施例や添付する図面に基づくより詳細な説明によって明らかになるであろう。なお、本明細書においてシステムとは、複数の装置の論理的集合構成であり、各構成の装置が同一筐体内にあるものには限らない。
本発明の一実施例の構成によれば、複数音源からの出力を混合した混合信号からなる観測信号に対して、独立成分分析(ICA:Independent Component Analysis)を適用した学習処理により、混合信号を分離する分離行列を求めて分離信号を生成するとともに、観測信号として検出された音源に対する死角を持つ全死角空間フィルタを適用して検出音を除去した全死角空間フィルタ適用信号を生成する。さらに、分離信号に含まれる全死角空間フィルタ適用信号に対応する信号成分を除去するフィルタリング処理を実行し、周波数フィルタリング処理結果から音源分離結果を生成する。本構成により、例えば突発音等が含まれる混合信号に対する高精度な音源分離が可能となる。
N個の音源から異なる音が鳴っていて、それらをn個のマイクで観測するという状況について説明する図である。 周波数ビンにおける分離(図2(A)参照)と、全周波数ビンの分離処理(図2(B)参照)について説明する図である。 観測信号のスペクトログラムを重複のある複数のブロック1〜Nに分割し、ブロックごとに学習を行なって分離行列を求める処理例について説明する図である。 各ブロックから求まった分離行列を、それより以降の観測信号へ適用する「ずらし適用」について説明する図である。 重複のあるブロックから分離行列を求めるためスレッドと呼ばれる処理の単位を、時刻をずらして複数並列に起動する方式について説明する図である。 突発音の発生と観測信号との対応について説明する図である。 突発音の発生が分離結果に及ぼす影響、特に追従遅れについて説明する図である。 フレーム単位のリスケーリング処理について説明する図である。 例えば図7に示す(b1)分離結果1から全死角空間フィルタの結果を減算して突発音を相殺して音源対応出力のみを残す処理について説明する図である。 2チャンネル周波数フィルタリングについて説明する図である。 本発明の具体的な2チャンネル周波数フィルタリング処理について説明する図である。 本発明の一実施例に従った信号処理装置の構成例について説明する図である。 学習処理部のスレッド制御部の詳細構成例について説明する図である。 スレッド演算部において実行する処理について説明する図である。 学習スレッドの状態遷移について説明する図である。 学習スレッドの状態遷移について説明する図である。 音源分離処理の全体シーケンスについて説明するフローチャートを示す図である。 短時間フーリエ変換の詳細について説明する図である。 図17に示すフローチャートにおけるステップS101の初期化処理の詳細について説明するフローチャートを示す図である。 スレッド制御部131による複数の学習スレッド1,2に対する制御シーケンスを示す図である。 図17に示すフローチャートにおけるステップS105においてスレッド制御部131によって実行されるスレッド制御処理について説明するフローチャートを示す図である。 図21に示すフローチャートにおけるステップS203において実行される待機中状態における処理について説明するフローチャートを示す図である。 図21に示すフローチャートのステップS204において実行される蓄積中状態における処理について説明するフローチャートを示す図である。 図21に示すフローチャートのステップS205において実行される学習中状態における処理について説明するフローチャートを示す図である。 図24に示すフローチャートのステップS239において実行される、分離行列等更新処理について説明するフローチャートを示す図である。 図24に示すフローチャートのステップS241において実行される待機時間の設定処理について説明するフローチャートを示す図である。 図17に示すフローチャートにおけるステップS106において実行される分離処理について説明するフローチャートを示す図である。 パワー比の算出に適用する関数の例を示す図である。 学習スレッドの処理について説明するフローチャートを示す図である。 図29に示すフローチャートのステップS394において実行される、コマンド処理について説明するフローチャートを示す図である。 図30に示すフローチャートのステップS405において実行される処理の一例である分離行列の学習処理例について説明するフローチャートを示す図である。 図31に示すフローチャートのステップS420において実行する後処理について説明するフローチャートを示す図である。 「全死角空間フィルタ&周波数フィルタリング」と線形フィルタリングとを組み合わせた場合の構成例について説明する図である。 線形フィルタリングを行う分散最小ビームフォーマ(MVBF)の適用例について説明する図である。
以下、図面を参照しながら本発明の信号処理装置、および信号処理方法、並びにプログラムの詳細について説明する。説明は以下の項目に従って行う。
1.本発明の構成と処理の概要について
2.本発明の信号処理装置の具体的実施例について
3.本発明の信号処理装置の実行する音源分離処理について
3−1.全体シーケンス
3−2.初期化処理について
3−3.スレッド制御処理について
3−4.分離処理について
4.スレッド演算部における学習スレッドの処理について
5.本発明の信号処理装置のその他の実施例(変形例)について
6.本発明の信号処理装置の構成に基づく効果についてのまとめ
[1.本発明の構成と処理の概要について]
まず、本発明の構成と処理の概要について説明する。
本発明は、複数の信号が混合された信号を独立成分分析(ICA:Independent Component Analysis)を用いて分離する処理を行うものである。しかしながら、前述したように、先行する観測データに基づいて生成した分離行列を用いた音源分離処理を行うと、突発音に対する分離ができないという問題がある。本発明では、例えばこのような突発音に関する問題を解決するため、例えば本出願人の先の特許出願(特開2008−147920号公報)に開示した従来のリアルタイムICAシステムに対して以下の要素を新規に追加した構成を持つ。
(1)突発音の歪みの問題に対処するため、分離結果のリスケーリング(周波数間のバランスを原信号に近づける処理)をフレーム単位で行なう構成。
なお、この処理を「頻繁リスケーリング」と呼ぶ。
(2)突発音を除去するために、検出された全部の音源方向に死角を向けるフィルタ(以降「全死角空間フィルタ(all−null spatial filter)」)をICAの学習データと同一の区間から生成する構成。さらに、観測信号にICAの分離結果を適用した結果と、同観測信号に全死角空間フィルタを適用した結果との間で、周波数フィルタリングに相当する処理または周波数フィルタリングを行なう構成。
なお、この処理構成を、「全死角空間フィルタ&周波数フィルタリング」と呼ぶ。
(3)突発音の性質によって異なる対処をするため、ICAの各出力チャンネルが音源に対応した信号を出力しているかどうか判別し、その結果に応じて以下のどちらかの処理をする構成。
i)音源に対応していると判別された場合は、「頻繁リスケーリング」と「全死角空間フィルタ&周波数フィルタリング」との両方を適用する。
その結果、突発音はそのチャンネルからは除去される。
ii)音源に対応していないと判別された場合は、「頻繁リスケーリング」のみを適用する。その結果、突発音はそのチャンネルから出力される。
なお、この処理構成を「チャンネル別の判別」と呼ぶ。
以下では、まず、上記(1)〜(3)のそれぞれについての概要を説明する。
(1)頻繁リスケーリング
本出願人の先の特許出願である特開2008−147920では、リスケーリングは学習終了時に分離行列に対して行なわれていた。
図5を参照して、この分離行列のリスケーリング処理について説明する。
例えば図5に示すスレッド2の学習区間58の学習が終了したときに、学習データ59を用いて分離行列のスケール(周波数間のバランス)が決定され、次に分離行列が更新されるまでスケールは一定であった。その場合、学習データ59に含まれている音源に対しては正しいスケールで出力されるが、それ以外の音源(すなわち突発音)に対しては正しくないスケールで出力される可能性があった。
そこで本発明では、リスケーリング(周波数間のバランスを原信号に近づける処理)をフレーム単位で行なうことで、突発音の歪みを低減させる。フレーム単位のリスケーリング処理について図8を参照して説明する。
図8には、先に説明した図4と同様、
(A)観測信号スペクトログラム
(B)分離結果スペクトログラム
これらの各データを示している。
図8に示す学習データのブロック81は、図4に示す学習データのブロック41に対応する。
図8に示す現在時刻の観測信号82は、図4に示す現在時刻の観測信号42に対応する。
図8に示す分離行列83は、図4に示す分離行列43に対応する。図8に示す分離行列83は、学習データブロック81から求められた分離行列である。
従来のリスケーリングは、学習データブロック81の学習データを用いて行なわれていた。それに対して、以下に説明する本発明の処理では、現在時刻を終端とする一定長のブロック、すなわち、図8に示す現在時刻を含むブロック87を設定し、この現在時刻を含むブロック87の区間の観測信号を用いてリスケーリングを行なう。リスケーリングの具体的な式については後述する。このようなリスケーリング処理を行うことで、突発音に対しても早い段階でスケールを合わせる(=歪みを低減する)ことができる。
(2)全死角空間フィルタ&周波数フィルタリング
次に、突発音を除去するための有効な処理である「全死角空間フィルタ&周波数フィルタリング」処理について図8を用いて説明する。図8に示す「学習データのブロック81」は、図4に示した学習データのブロック41と同一であり、従来はこのデータから分離行列83(図4の分離行列43と同一)のみを生成していた。それに対して本発明では、同一のデータ(学習データのブロック81)から図8に示す分離行列83のみならず全死角空間フィルタ84も生成する。この全死角空間フィルタ84の生成方法については後述する。
全死角空間フィルタ84は、学習データのブロック81の区間内に存在する全ての音源方向に死角を形成したフィルタ(ベクトルまたは行列)であり、これは突発音、すなわち、学習データのブロック81では鳴っていなかった方向の音のみを透過する働きをする。なぜなら、学習データのブロック81で鳴っていた音については、位置を変えずに鳴り続けている限り、全死角空間フィルタ84が形成する死角によって除去されるのに対し、突発音については、その方向に死角が形成されておらず、素通ししてしまうからである。
一方、分離行列83も突発音を素通しする。その結果は出力チャンネルによって異なり、あるチャンネルではそれまで出力されていた音源に突発音が重畳され(図7の(b1)分離結果1)、他のあるチャンネルでは突発音のみが出力される(図7の(b2)分離結果2、および(b3)分離結果3)。
ここで、図7に示す(b1)分離結果1のような結果から全死角空間フィルタの結果を減算(またはそれに類する操作)すると、突発音が相殺され、音源に対応した出力のみが残る。その処理シーケンスについて図9を参照して説明する。
図9には、
(a)観測信号
(b)全死角空間フィルタ適用信号
(c1)処理結果1
(c2)処理結果2
(c3)処理結果3
これらの各信号を示している。左から右に時間(t)が経過し、ブロックの高さが音量を示している。
(a)観測信号は、先に説明した図7の(a)観測信号と同じ観測信号である。観測信号には、時間t0〜t5の間、継続して鳴り続けている継続音91と、時間t1〜t4の間のみ出力される突発音92が含まれている。
図9に示す(a)観測信号に対して、全死角空間フィルタを適用すると、(b)全死角空間フィルタ適用信号が得られる。すなわち、鳴りっぱなしの継続音91はほぼ除去されるのに対し、突発音92は鳴り始めが除去されずに残る。
(b)全死角空間フィルタ適用信号では、時間t0〜t5の間、鳴りっぱなしの継続音91はほぼ除去される。一方、突発音92は鳴り始め(時間t1〜)が除去されずに残る。時間t1〜t2の区間94では、突発音92は全く除去されない。
全死角空間フィルタは、時間的に先行する観測信号に含まれる音源を除去する働きを持つが、時間t1〜t2の区間94の直前の観測信号には突発音92が含まれず、全死角空間フィルタによって除去されないためである。
この図9(b)に示す全死角空間フィルタ適用信号を、分離行列適用結果の一つである図7(b1)分離結果1から減算する。と、突発音が除去され、鳴りっぱなしの継続音91のみが残った結果が得られる。これが、図9(c1)処理結果1の信号である。すなわち、図9(c1)処理結果1は、図7(b1)分離信号と、図9(b)全死角空間フィルタ適用信号を利用した以下の演算の結果として得られる信号である。
処理結果1=(分離結果1)−(全死角空間フィルタ適用信号)
なお、減算の際に突発音を完全に除去するためには、全死角空間フィルタ適用結果のスケールを、分離行列適用結果に含まれる突発音のスケールと合わせる必要がある。これを「全死角空間フィルタのリスケーリング」と呼ぶ。なおリスケーリング処理は一方の信号のスケール(信号の変動の範囲)をもう一方の信号に合わせる処理として行われる。この場合は、全死角空間フィルタ適用結果のスケールを、分離行列適用結果に含まれる突発音のスケールに近づける処理として行われる。スケールはICAの出力チャンネルごとに合わせる必要があるため、リスケーリング後の全死角空間フィルタ適用結果は、ICAのチャンネル数と同一である。(リスケーリング前の全死角空間フィルタ適用結果のチャンネル数は1である。)
上記の「減算」は、通常の引き算(複素数領域の引き算)でも良いが、一般化して、2チャンネル周波数フィルタリングと呼ばれる処理を用いても良い。
図10を参照して、2チャンネル周波数フィルタリングについて説明する。
一般的に、2チャンネル周波数フィルタリングは2つの入力を持つ。
一方は観測信号102[X(ω,t)]、
もう一方は推定ノイズ101[N(ω,t)]
である。これらは同一の時刻と周波数の信号である。
この2つの信号から、ゲイン104(観測信号に乗じる係数)[G(ω,t)]をゲイン推定部103で計算し、そのゲインをゲイン適用部105において観測信号に乗じることで処理結果106を得る。処理結果U(ω,t)は、下式によって示される。
U(ω,t)=G(ω,t)×X(ω,t)
具体的には、ノイズが支配的な周波数ではゲインを小さく、ノイズが少ない周波数ではゲインを大きくすることで、ノイズの除去された信号を生成するのである。通常の減算も周波数フィルタリングの一種とみなすことができるが、他に、スペクトル減算(spectral subtraction)やMimimum Mean Sqaure Error (MMSE)・Wiener フィルタ・Joint MAPといった既知の方式も適用可能である。
本発明の具体的な2チャンネル周波数フィルタリング処理について図11を参照して説明する。本発明の処理では、観測信号の入力として分離行列適用結果112、すなわち、
Y'k(ω,t)
を入力する。
また、推定ノイズの入力として、突発音である全死角空間フィルタ適用結果(リスケーリング後)111、すなわち、
Z'k(ω,t)
を入力する。
ゲイン推定部113は、これら全死角空間フィルタ適用結果111と分離行列適用結果112を入力してゲイン114[Gk(ω,t)]を求める。ゲイン適用部115が、ゲイン114[Gk(ω,t)]を、分離行列適用結果112、すなわち、Y'k(ω,t)に乗じることで、突発音が除去された結果であるUk(ω,t)を求める。処理結果Uk(ω,t)は下式によって示される。
Uk(ω,t)=Gk(ω,t)×Y'k(ω,t)
なお、周波数フィルタリングにおいてスペクトル減算のような非線形な方式を用いると、「背景技術」の欄で述べた「消し残り」も消すことが可能である。すなわち、「消し残り」は分離行列でも全死角空間フィルタでも消せないため、それぞれの結果同士を減算すると相殺される。そのため、追従遅れと消し残りとがトレードオフになるという課題も解消できる。
(3)チャンネル別の判別
前述の「全死角空間フィルタ&周波数フィルタリング」処理を全てのチャンネルに対して適用すると、かえって弊害となることがある。それは、突発音が目的音である場合である。例えば図7において、(b2)分離結果2には突発音のみが出力されており、このチャンネルに対して、図9に示した(b)全死角空間フィルタ適用信号との減算を行なうと、突発音の鳴り始め(図7に示す時間t1〜t2の区間74)が除去され、無音が出力される。突発音が妨害音である場合はこれでも問題ないが、突発音が目的音である場合にはこれは望ましくない。
そこで、以下に述べる基準を用いて、「全死角空間フィルタ&周波数フィルタリング」を適用すべきか否かをチャンネルごとに判別する。あるいは、周波数フィルタリングの度合いをチャンネルごとに変更する。そうすることで、鳴りっぱなしの音(突発音が発生する前から鳴っている音)のみが出力されるチャンネルと、突発音のみが出力されるチャンネルとの両方が同時に実現できる。
あるチャンネルに「全死角空間フィルタ&周波数フィルタリング」を適用するか否か、すなわち、突発音を除去するのが望ましいか否かは、突発音が発生する直前にそのチャンネルから音源に対応した信号が出力されているかに依存する。音源に対応した信号が既に出力されている場合は周波数フィルタリングを行ない(あるいは減算する量を大きくし)、そのような信号が出力されていない場合には周波数数フィルタリングをスキップする(あるいは減算する量を小さくする)。
例えば、図7において、突発音72が発生する直前の時間t0〜t1の区間73に注目すると、(b1)分離結果1のチャンネルには音源の継続音71に対応した信号が出力されている。このチャンネルに対しては全死角空間フィルタおよび周波数フィルタリングを適用する。そうすることで、突発音が発生しても、その突発音は除去され、継続音71に由来する信号のみが出力され続ける。
これは、図9の(c1)処理結果1に対応する。
一方、他のチャンネルである図7に示す(b2)分離結果2、(b3)分離結果3の時間t0〜t1の区間73では、継続音71由来の成分は除去され、無音に近い信号が出力されている。このようなチャンネルに対しては、周波数フィルタリングは適用しない。すなわち、図9の(c2)処理結果2、(c3)処理結果3である。これらのチャンネルには頻繁リスケーリングのみ適用する。「頻繁リスケーリング」とは、前述したように、分離結果のリスケーリング(周波数間のバランスを原信号に近づける処理)をフレーム単位で行なう処理である。
この様な処理を行うことで、突発音が発生したときに突発音のみからなる信号が出力される。その場合でも、頻繁リスケーリングはフレーム毎に行なわれているため、従来法と異なり、突発音の鳴り始めの歪みは低減される。
ICAの各出力(分離行列の適用結果)が音源に対応しているか否かは、分離行列に依存する。従ってその判別はフレーム毎に行なう必要はなく、分離行列が更新されたタイミングで行えばよい。判別のための具体的な尺度については後述する。
なお、上記の判別を「周波数フィルタリングを適用する/しない」の2値で行なうと、適用の有無が切り替わった時点で処理結果が大きく変化してしまう。そのような現象を防ぐには、ICAの出力が音源に対応しているか否かを連続値で表現し、その値に応じて周波数フィルタリングを作用させる度合い(減算量)を連続的に変化させる処理を行なえばよい。詳細は後述する。
[2.本発明の信号処理装置の具体的実施例について]
以下、本発明の信号処理装置の具体的な実施例について説明する。本発明の信号処理装置の一構成例を図12に示す。なお、図12に示す装置構成は、本出願人が先に出願した特許出願である特開2008−147920「リアルタイム音源分離装置および方法」をベースとした構成である。この特開2008−147920において示した構成に、全死角空間フィルタおよび周波数フィルタリングに関するモジュールである共分散行列計算部125,全死角空間フィルタ適用部127、周波数フィルタリング部128、全死角空間フィルタ保持部134、パワー比保持部135を追加した構成を有する。なお、図12に示す信号処理装置は、具体的には例えばPCによって実現可能である。すなわち、図12の示す信号処理装置内の各処理部の処理は、例えば、予め規定されたプログラムに従った処理を実行するCPUによって実行可能である。
図12の左側に示す分離処理部123は主に観測信号の分離を行なう。図12の右側に示す学習処理部130は主に分離行列の学習を行なう。具体的には、分離行列の生成、全死角空間フィルタの生成、パワー比の算出等を実行する。全死角空間フィルタは、前述したように学習データのブロック区間で検出された全ての音源方向に死角を形成したフィルタ(ベクトルまたは行列)であり、これは突発音、すなわち、学習データブロックでは鳴っていなかった方向の音のみを透過する働きをする。また、パワー比は、各チャンネルの音のパワー(音量)の比率情報である。
なお、分離処理部123における処理と、学習処理部130の処理は並列に行われる。分離処理部123の処理は表(foreground)の処理であり、学習処理部130の処理は裏(background)の処理であると言える。
システム全体で見ると、観測信号に対する音源分離処理をフレーム毎に行なって分離結果を生成する一方で、これらの分離処理に適用する分離行列や全死角空間フィルタを、適宜、最新のものに置き換えるという動作をする。分離行列や全死角空間フィルタの提供を学習処理部130が行い、分離処理部123が、学習処理部130から提供された分離行列や全死角空間フィルタを適用して音源分離処理を実行する。本発明で追加された3つの要素の内、全死角空間フィルタの生成自体は分離行列の学習と同様に学習処理部130内で裏の処理として行なわれるが、分離行列および全死角空間フィルタの頻繁リスケーリングや、それぞれを観測信号に適用することや、周波数フィルタリングなどは、分離処理部123内で表の処理として行なわれる。
以下では、それぞれの構成要素の処理について説明する。
複数のマイクロホン121で収録された音はAD変換部122でデジタル信号に変換され、分離処理部123のフーリエ変換部124へ送られる。フーリエ変換部124では窓つきの短時間フーリエ変換(STFT)によって周波数領域のデータへ変換する(詳細は後述する)。その際、フレームと呼ばれる一定個数のデータが生成される。以降の処理は、このフレームを単位として行なわれる。フーリエ変換されたデータは、共分散行列計算部125、分離行列適用部126、全死角空間フィルタ適用部127、スレッド制御部131にそれぞれ送られる。
以下では、先に分離処理部123における表の処理の信号の流れについて説明し、その後で学習処理部130の処理について説明する。
分離処理部123の共分散行列計算部125は、フーリエ変換部124の生成する観測信号のフーリエ変換データを入力し、観測信号の共分散行列をフレーム毎に計算する。計算の詳細は後述する。ここで求めた共分散行列は、分離行列適用部126および全死角空間フィルタ適用部127のそれぞれで、フレーム毎にリスケーリングを行なうために利用される。また、周波数フィルタリング部128において周波数フィルタリングを適用する度合いを決める尺度としても利用される。
分離行列適用部126では、学習処理部130において現在時刻より前に求められた分離行列、すなわち分離行列保持部133に保持された分離行列に対してリスケーリングを行なった後、1フレーム分の観測信号とリスケーリング後の分離行列とを乗算して1フレーム分の分離行列適用結果を生成する。
全死角空間フィルタ適用部127では、学習処理部130において現在時刻より前に求められた全死角空間フィルタ、すなわち全死角空間フィルタ保持部134に保持された全死角空間フィルタに対してリスケーリングを行なった後、1フレーム分の観測信号とリスケーリング後の全死角空間フィルタとを乗算して1フレーム分の全死角空間フィルタ適用結果を生成する。
周波数フィルタリング部128は、観測信号に基づくフーリエ変換データに対する分離行列の適用結果を分離行列適用部126から受け取る一方で、観測信号に基づくフーリエ変換データに対する全死角空間フィルタの適用結果を全死角空間フィルタ適用部127から受け取り、両方の適用結果から、先に図11を参照して説明した2チャンネル周波数フィルタリングを行なう。その結果は、フーリエ逆変換部129へ送られる。
フーリエ逆変換部129へ送られた分離結果は時間領域の信号に変換され、後段処理部136へ送られる。後段処理部136の実行する後段の処理とは、例えば音声認識や話者識別やサウンド出力などである。後段の処理によっては、周波数領域のデータをそのまま使用することも可能であり、その場合、フーリエ逆変換は省略可能である。
次に、フーリエ変換部124は、観測信号に基づくフーリエ変換データを学習処理部130のスレッド制御部131にも提供する。
スレッド制御部131へ送られた観測信号は、スレッド演算処理部132の複数の学習スレッド132−1〜Nへ送られる。それぞれの学習スレッドは、与えられた観測信号を一定量だけ蓄積した後、ICAのバッチ処理を用いて観測信号から分離行列を求める。この処理は、先に図5を参照して説明した処理と同様の処理である。さらに、スレッド制御部131は分離行列から全死角空間フィルタおよびパワー比も計算で求める。求まった分離行列、全死角空間フィルタ、パワー比は、分離行列保持部133、全死角空間フィルタ保持部134、パワー比保持部135に保持され、それぞれスレッド制御部131の制御の下、分離処理部123の分離行列適用部126、全死角空間フィルタ適用部127、周波数フィルタリング部128へ送られる。
なお、全死角空間フィルタ適用部127および分離行列適用部126からスレッド制御部131への点線は、その時点で最新のリスケーリング済み全死角空間フィルタおよび分離行列を学習初期値に反映させることを表している。詳細は後段の[3.本発明の信号処理装置のその他の実施例(変形例)について]において説明する。
次に、図12に示す装置構成における学習処理部130のスレッド制御部131の詳細構成について、図13を参照して説明する。
現フレーム番号保持カウンタ151は、観測信号が1フレーム分供給されるごとに値が1インクリメントされ、所定の値に達すると初期値に戻るようになされている。
学習初期値保持部152は、それぞれのスレッドにおいて学習処理を実行する場合の分離行列Wの初期値を保持するものである。分離行列Wの初期値は、基本的には最新の分離行列と同一であるが、異なる値を用いるものとしても良い。例えば、学習初期値にはリスケーリング(周波数ビン間のパワーを調整する処理。詳細は後述)を適用する前の分離行列を用い、分離行列にはスケーリング適用後のものを用いるようにする。
蓄積開始予定タイミング指定情報保持部153は、蓄積を開始するタイミングを複数のスレッド間で一定間隔にするために用いられる情報である。使用方法は後述する。なお、蓄積開始予定タイミングは、相対時刻を用いて表されていてもよいし、相対時刻の代わりにフレーム番号で管理してもよいし、時間領域信号のサンプル番号で管理しても良い。これについては他の「時刻」や「タイミング」を管理するための情報についても同様である。
観測信号蓄積タイミング情報保持部154は、分離部127で現在使用されている分離行列Wが、どのタイミングで取得された観測信号を基に学習されたものであるかを示す情報、すなわち、最新の分離行列に対応した観測信号の相対時刻またはフレーム番号を保持するものである。観測信号の蓄積タイミング情報保持部154には、対応する観測信号の蓄積開始タイミングと蓄積終了タイミングとの両方を格納しても良いが、ブロック長、すなわち、観測信号の蓄積時間が一定ならば、いずれか一方だけを保存すれば十分である。
また、スレッド制御部131は、それぞれのスレッドへリンクされているポインタを保持したポインタ保持部155を有し、これを用いて、複数のスレッド132−1〜Nの処理を制御している。
次に、図14を参照してスレッド演算部132において実行する処理について説明する。スレッド132−1〜Nのそれぞれは、観測信号バッファ161、分離結果バッファ162、学習演算部163、および、分離行列保持部164の各モジュールの機能を用いて、バッチ処理のICAを実行する。
観測信号バッファ161は、スレッド制御部131から供給される観測信号を保持する。
分離結果バッファ162には、学習演算部163により演算された分離行列収束前の分離結果が保持される。
学習演算部163は、観測信号バッファ161に蓄積されている観測信号を、分離行列保持部164に保持されている分離処理用の分離行列Wに基づいて分離して、分離結果バッファ162に蓄積するとともに、分離結果バッファ162に蓄積される分離結果を用いて、学習中の分離行列を更新する処理を実行する。
スレッド演算部132(=学習スレッド)は状態遷移マシンであり、現在の状態は状態格納部165に格納される。スレッドの状態はカウンタ166のカウンタ値によって、スレッド制御部131により制御される。カウンタ166は、観測信号が1フレーム分供給されるのと同期して値が変化し、この値によって状態を切り替える。詳細は後述する。
観測信号の開始・終了タイミング保持部167には、学習に使用されている観測信号の開始タイミングと終了タイミングを示す情報のうちの少なくともいずれか一方が保持されている。タイミングを示す情報は、上述したように、フレーム番号やサンプル番号であっても良いし、相対時刻情報であっても良い。ここでも、開始タイミングと終了タイミングとの両方を格納しても良いが、ブロック長、すなわち、観測信号の蓄積時間が一定ならば、いずれか一方だけを保存すれば十分である。
学習終了フラグ168は、学習が終了したことをスレッド制御部131に通知するために用いられるフラグである。スレッドの起動時においては、学習終了フラグ168はOFF(フラグが立っていない)にセットされ、学習が終了した時点でONにセットされる。そして、スレッド制御部131が、学習が終了したことを認識した後、スレッド制御部131の制御により、学習終了フラグ168は、再び、OFFにセットされる。
なお、状態格納部165、カウンタ166、観測信号の開始・終了タイミング保持部167のデータは、スレッド制御部131等の外部モジュールから値を書き換えることができるものとする。例えば、スレッド演算部132において学習のループが回っている間も、スレッド制御部131はカウンタ166の値を変更することができる。
前処理用データ保持部169は、前処理が施された観測信号を元に戻す際に必要となるデータを保存しておく領域である。具体的には、例えば、前処理において観測信号の正規化(分散を1に、平均を0にそろえる)が実行される場合、前処理用データ保持部169には、分散(または標準偏差やその逆数)や平均などの値が保持されるので、これを用いて正規化前の信号を復元することができる。また、例えば、前処理として無相関化(pre−whiteningとも称される)が実行される場合、前処理用データ保持部169には、無相関化で乗じた行列が保持される。
全死角空間フィルタ保持部160は、観測信号バッファ161に含まれる全ての音源の方向に死角を形成するフィルタであり、学習終了時の分離行列から生成する。または、観測信号バッファのデータから生成する方法も存在する。生成方法については後述する。
次に、学習スレッド132−1〜Nの状態遷移について図15および図16を参照して説明する。実装としては、カウンタ166の値に基づいて学習スレッド自身が自分の状態を変化させるという仕様にしても良いが、スレッド制御部がカウンタの値や「学習終了フラグ」168の値に応じて状態遷移コマンドを発行し、学習スレッドはそのコマンドを受けて状態を変化させるという仕様でも良い。以下の実施例では、後者の仕様を採用している。
図15は、先に図5を参照して説明したスレッド中の1つを示している。スレッドの各々は、観測信号の「蓄積中」状態において指定された時間、すなわち1ブロック長の観測信号がバッファに蓄えられる。指定された時間が経過した後、状態は学習中に遷移する。
学習中の状態において、分離行列Wが収束するまで(または一定回数)学習処理ループが実行され、蓄積中の状態において蓄積された観測信号に対応した分離行列が求められる。分離行列Wが収束した後(または一定回数の学習処理ループが実行された後)状態は、待機中に遷移する。
そして、待機中の状態において、指定された時間だけ、観測信号の蓄積や学習は実行されず、待機される。待機中の状態を維持する時間は、学習にかかった時間によって決まる。すなわち、図15に示されるように、予め、「蓄積中」状態と「学習中」状態と「待機中」状態との合計の時間幅であるスレッド長(thread_len)が定められ、基本的には、「学習中」状態が終了したときからスレッド長が終了するまでの間の時間が、「待機中」状態の時間(待機時間)とされる。待機時間が過ぎた後、状態は、観測信号の「蓄積中」状態へ戻る。
これらの時間は、例えば、ミリ秒などの単位で管理してもよいが、短時間フーリエ変換で生成されるフレームを単位として計測するものとしても良い。以降の説明では、フレームを単位として計測する(たとえば、カウントアップをおこなう)ものとする。
図16を参照してスレッドの状態遷移についてさらに説明する。システムの起動直後において各スレッドは「初期状態」181にあるが、その内の1つは「蓄積中」183へ、残りは「待機中」182へ状態を遷移させる(状態遷移コマンドを発行する)。先に説明した図5を例にとると、スレッド1が「蓄積中」へ遷移したスレッド、それ以外が「待機中」へ遷移したスレッドである。以下では、「蓄積中」へ遷移したスレッドについて先に説明する。
観測信号の蓄積に要する時間をブロック長(block_len)と呼ぶ(図15参照)。また、蓄積・学習・待機の1周期に要する時間をスレッド長(thread_len)と呼ぶ。これらの時間は、ミリ秒などの単位で管理してもよいが、短時間フーリエ変換で生成されるフレームを単位としても良い。以降の説明では、フレームを単位としている。
「蓄積中→学習中」および「待機中→蓄積中」の状態遷移については、カウンタの値に基づいて行なう。すなわち、「蓄積中」(図15の蓄積中状態171および図16の蓄積中状態183)から始まったスレッドの中では、観測信号が1フレーム分供給されるごとにカウンタを+1し、カウンタの値がブロック長(block_len)と同じ値になったら、「学習中」(図15の学習中状態172および図16の学習中状態184)へ状態を遷移させる。学習は、分離処理と並列にバックグラウンドで行なわれるが、その間も観測信号のフレームと連動してカウンタを+1していく。
学習が終了したら、状態を「待機中」(図15の待機中状態173および図16の待機中状態182)へ遷移させる。待機中も学習中と同様に、観測信号のフレームと連動してカウンタを+1していく。そしてカウンタがスレッド長(thread_len)と同じ値になったら、状態を「蓄積中」(図15の蓄積中状態171および図16の蓄積中状態183)へ遷移させると共に、カウンタを0(または適切な初期値)に戻す。
一方、「初期状態」181から「待機中」(図15の待機中状態173および図16の待機中状態182)へ遷移したスレッドについては、待機させたい時間に対応した値にカウンタをセットする。例えば、図5のスレッド2は、ブロックのシフト幅(block_shift)だけ待機してから「蓄積中」へ遷移する。同様に、スレッド3はブロックのシフト幅の2倍(block_shift×2)だけ待機している。これらを実現するためには、
スレッド2のカウンタを、
(スレッド長)−(ブロックシフト幅):(thread_len)−(block_shift)にセットする。
また、スレッド3のカウンタを、
(スレッド長)−(2×ブロックシフト幅):(thread_len)−(block_shift×2)にセットする。
このような設定にすれば、カウンタの値がスレッド長(thread_len)に達した後で「蓄積中」へ遷移し、それ以降はスレッド1と同様に「蓄積中→学習中→待機中」の周期を繰り返す。
学習スレッドを何個用意する必要があるかは、スレッド長とブロックのシフト幅とで決める。スレッド長を thread_len、ブロックのシフト幅をblock_shiftとすると、必要な個数は、
(スレット長)/(ブロックシフト幅)、すなわち、
thread_len/block_shift
で求まる。
なお、端数は切り上げる。
例えば図5では、
[スレッド長(thread_len)]=1.5×[ブロック長(block_len)]、
[ブロックシフト幅(block_shift)]=0.25×ブロック長(block_len)]
に設定してあるため、必要なスレッド数は1.5/0.25=6である。
[3.本発明の信号処理装置の実行する音源分離処理について]
(3−1.全体シーケンス)
次に、本発明の信号処理装置におけるリアルタイム音源分離処理の全体シーケンスについて、図17に示すフローチャートを参照して説明する。図17に示すフローチャートは、分離処理部123の処理を中心として説明するフローチャートである。学習処理部130の「裏の処理(学習)」については、分離処理とは別の処理単位(別スレッド・別プロセス・別プロセッサなど)で動かすことが可能であるため、別のフローチャートを用いて説明する。また、両者でやりとりするコマンド等については、図20に示すシーケンス図で説明する。
最初に、図17に示すフローチャートを参照して分離処理部123の処理について説明する。システムが起動したら、ステップS101において、各種の初期化を行なう。初期化の詳細は後述する。ステップS103の音入力から、ステップS108の分離結果の送信までの処理を、システムでの処理が終了(ステップS102でYes)するまで繰り返す。
ステップS103の音入力は、オーディオデバイス(実施形態によってはネットワークやファイルなど)から一定数のサンプルを取り込み(この処理を「キャプチャー」と呼ぶ)、バッファに蓄える処理である。これをマイクロホンの個数分だけ行なう。以降では、キャプチャーされたデータを観測信号と呼ぶ。
次に、ステップS104において、観測信号を一定長ごとに切り出して、短時間フーリエ変換(STFT)を行う。短時間フーリエ変換の詳細について図18を参照して説明する。
例えば図1に示すような環境においてk番目のマイクによって収録された観測信号xを図18(a)に示す。この観測信号xから一定長を切り出した切り出しデータであるフレーム191〜193にハニング窓やサイン窓等の窓関数を作用させる。なお、切り出した単位をフレームと呼ぶ。1フレーム分のデータに対して、離散フーリエ変換(有限区間のフーリエ変換のこと。略称DFT)または高速フーリエ変換(FFT)を施すことにより、周波数領域のデータであるスペクトルXk(t)を得る(tはフレーム番号)。
切り出すフレームの間には、図に示すフレーム191〜193のように重複があってもよく、そうすることで連続するフレームのスペクトルXk(t−1)〜Xk(t+1)を滑らかに変化させることができる。また、スペクトルをフレーム番号に従って並べたものをスペクトログラムと呼ぶ。図18(b)がスペクトログラムの例である。
本発明では入力チャンネルが複数(マイクの個数分)あるため、フーリエ変換もチャンネル数だけ行なう。以降では、全チャンネル・1フレーム分のフーリエ変換結果をX(t)というベクトルで表わす(先に説明した式[3.11])。式[3.11]において、nはチャンネル数(=マイク数)である。Mは周波数ビンの総数であり、短時間フーリエ変換のポイント数をJとすると、M=J/2+1である。
図17のフローに戻り、説明を続ける。ステップS104において、観測信号を一定長ごとに切り出して、短時間フーリエ変換(STFT)を行った後、ステップS105において、それぞれの学習スレッドに対する制御を行なう。詳細は後述する。
次に、ステップS105で生成された観測信号X(t)に対して、ステップS106において分離を行なう。分離行列をWとすると(前記の式[3.10])、分離結果Y(t)(式[3.4])は
Y(t)=WX(t)
で求まる(式[3.12])。
次に、ステップS107において、分離結果Y(t)に対して逆フーリエ変換(逆FT)をかけることで、時間領域の信号に戻す。それからステップS108において、分離結果を後段の処理へ渡す。以上のステップS103〜S108を、終了まで繰り返す。
(3−2.初期化処理について(S101))
図17に示すフローチャートにおけるステップS101の初期化処理の詳細について、図19に示すフローチャートを参照して説明する。
ステップS151において、図12および図13に示すスレッド制御部131は、初期化処理を実行する。具体的には、図13に示す各構成についてして以下の処理を行う。
現フレーム番号保持カウンタ151(図13参照)を初期化してその値を0とする。
学習初期値保持部152(図13参照)に適切な初期値を代入する。例えば、初期値は単位行列でも良いし、前回のシステム終了時の分離行列Wが保存されている場合は、前回のシステム終了時の分離行列W、またはこの分離行列に適切な変換を作用させたものを使用しても良い。また、例えば、画像や先見知識等の情報により、音源の方向がある程度の精度で推定できるような場合には、音源方向に基づいて初期値を算出して、設定するものとしてもよい。
さらに、
蓄積開始予定タイミング指定情報保持部153には、
(必要スレッド数−1)×[ブロックシフト幅(block_shift)]
上記式の算出値が設定される。
この値は、一番大きなスレッド番号を有するスレッドの蓄積が開始するタイミング(フレーム番号)である。
そして、観測信号の蓄積タイミング情報保持部134には、最新の分離行列に対応した観測信号を示すタイミング情報(フレーム番号または相対時刻情報)が保持されるので、ここでは、初期化されて、0が保持される。
なお、分離行列保持部133(図12参照)にも、初期化された場合の学習初期値保持部152と同様に、適切な初期値が保持される。分離行列保持部133に保持される初期値は、単位行列でも良いし、前回のシステム終了時の分離行列が保存されている場合は、前回のシステム終了時の分離行列W、またはこの分離行列に適切な変換を作用させたものを使用しても良い。
さらに、全死角空間フィルタ保持部134(図12参照)にも初期値を代入する。この初期値は分離行列の初期値に依存する。分離行列として単位行列を用いる場合は、全死角空間フィルタには「無効」を表わす値を代入し、この値のときは後述の周波数フィルタリングが機能しないようにしておく。一方、分離行列の初期値として他に適切な値を用いる場合は、そこから全死角空間フィルタの値を計算する。
パワー比保持部135(図12参照)にも初期値を代入する。初期値として例えば0を代入しておくと、最初の分離行列が学習で求まるまでの間(例えば図5の区間51)は周波数フィルタリングを機能させないようにすることができる。
ステップS152において、スレッド制御部131は、スレッド演算部132において実行されるスレッドを必要な数Nだけ確保し、それらの状態を「初期化」状態とする。
ここで、必要なスレッドの数Nは、スレッド長/ブロックシフト幅(thread_len/block_shift)の小数点以下を切り上げる(すなわち、thread_len/block_shiftよりも大きく最も値の近い整数)ことにより求められる。
ステップS153において、スレッド制御部131は、スレッドループを開始して、全てのスレッドの初期化が終了するまで、初期化未処理のスレッドを検出して、ステップS154乃至ステップS159の処理を実行する。ステップS152で生成された個数だけループを回す。なお、スレッド番号は1から順に振ってき、ループ内では変数sで表わされるものとする。(ループの代わりに、学習スレッドの個数だけ並列に処理しても構わない。以降の学習スレッドのループについても同様である。)
ステップS154において、スレッド制御部131は、スレッド番号は1であるか否かを判断する。1番目のスレッドとそれ以外では初期設定が異なるため、ステップS154で処理を分岐する。
ステップS154において、スレッド番号が1であると判断された場合、ステップS155において、スレッド制御部131は、スレッド番号1のスレッド(例えば、スレッド132−1)を制御して、そのカウンタ166(図14参照)を初期化(例えば0にセット)する。
ステップS156において、スレッド制御部131は、スレッド番号1のスレッド(例えば、スレッド132−1)に、「蓄積中」状態に状態を遷移させるための状態遷移コマンドを発行して、処理は、後述するステップS159に進む。状態遷移はスレッド制御部から学習スレッドに対して「指定された状態に遷移せよ」というコマンド(以降「状態遷移コマンド」)を発行することで行なう。(以降の説明における状態遷移は全て同様である。)
ステップS154において、スレッド番号は1ではないと判断された場合、ステップS157において、スレッド制御部131は、対応するスレッド(スレッド132−2乃至スレッド132−Nのうちのいずれか)のカウンタ166の値を、thread_len−block_shift×(スレッド番号−1)に設定する。
ステップS158において、スレッド制御部131は、「待機中」状態に状態を遷移させるための状態遷移コマンドを発行する。
ステップS156、または、ステップS158の処理の終了後、ステップS159において、スレッド制御部131は、スレッド内のまだ初期化されていない情報、すなわち、状態格納部165(図14参照)に格納された状態を示す情報、および、カウンタ166のカウンタ値以外の情報を初期化する。具体的には、例えば、スレッド制御部131は、学習終了フラグ168(図14参照)をOFFにセットし、観測信号の開始・終了タイミング保持部167、および、前処理用データ保持部169の値を初期化(例えば、0にセット)する。
スレッド演算部132に確保された全てのスレッド、すなわち、スレッド132−1乃至スレッド132−Nが初期化された場合、ステップS160において、スレッドループが終了され、初期化は終了する。
このような処理により、スレッド制御部131は、スレッド演算部132に確保された複数のスレッドのすべてを初期化する。
なお、図19のステップS154〜S158の処理は、図20のシーケンス図では最初の「初期化」処理と、その直後の状態遷移コマンド送信に該当する。なお、図20は、スレッド制御部131による複数の学習スレッド1,2に対する制御シーケンスを示している。各スレッドは、待機、蓄積、学習という処理を繰り返し実行する。スレッド制御部は観測信号を各スレッドに提供して、各スレッドが観測データを蓄積した後、学習処理を行い、分離行列を生成してスレッド制御部に提供する。
(3−3.スレッド制御処理について(S105))
次に、図21に示すフローチャートを参照して、図17のフローチャート中のステップS105の処理、すなわち、スレッド制御部131によって実行されるスレッド制御処理について説明する。
なお、このフローチャートは、スレッド制御部131から見たものであり、学習スレッド132−1〜Nから見たものではないことに注意されたい。例えば「学習中処理」とは、学習スレッドの状態が「学習中」であるときにスレッド制御部131が行なう処理のことである。(学習スレッド自体の処理については、図29を参照されたい。)
ステップS201〜S206は学習スレッドについてのループであり、図21に示すフローのステップS152で生成された個数だけループを回す(並列処理でも構わない)。ステップS202において、学習スレッドの現在の状態を状態保持部165(図14参照)から読み込み、その値によってそれぞれ「待機中処理」・「蓄積中処理」・「学習中処理」を実行する。それぞれの処理の詳細は後述する。
フローの各ステップについて説明する。ステップS201において、スレッド制御部131は、スレッドループを開始し、制御実行するスレッドのスレッド番号を示す変数sをs=1として、1つのスレッドの処理が終了すると変数sを1インクリメントして、s=Nとなるまで、ステップS202乃至ステップS207のスレッドループの処理を繰り返し実行する。
ステップS202において、スレッド制御部131は、変数sで示されるスレッド番号のスレッドの状態格納部165に保持されている、そのスレッドの内部状態を示す情報を取得する。変数sで示されるスレッド番号のスレッドの状態として、「待機中」状態であると検出された場合、ステップS203において、スレッド制御部131は、図22のフローチャートを用いて後述する待機中状態における処理を実行し、処理は、後述するステップS206に進む。
ステップS202において、変数sで示されるスレッド番号のスレッドの状態が「蓄積中」状態であると検出された場合、ステップS204において、スレッド制御部131は、図23のフローチャートを用いて後述する蓄積中状態における処理を実行し、処理は、後述するステップS206に進む。
ステップS202において、変数sで示されるスレッド番号のスレッドの状態が「学習中」状態であると検出された場合、ステップS205において、スレッド制御部131は、図24のフローチャートを用いて後述する学習中状態における処理を実行する。
ステップS203、ステップS204、または、ステップS205の処理の終了後、ステップS206において、スレッド制御部131は、変数sを1インクリメントする。そして、制御実行するスレッドのスレッド番号を示す変数sが、s=iとなったとき、スレッドループを終了する。
ステップS207において、スレッド制御部131は、現フレーム番号保持カウンタ151(図13参照)に保持されているフレーム番号を1インクリメントし、スレッド制御処理を終了する。
このような処理により、スレッド制御部131は、複数のスレッドの全てを、それらの状態に応じて制御することができる。
なお、ここでは、立ち上げられたスレッドの数iだけ、スレッドループが繰り返されるものとして説明したが、スレッドループを繰り返す代わりに、スレッドの個数iの並列処理を実行するものとしてもよい。
次に、図22のフローチャートを参照して、図21に示すフローチャートにおけるステップS203において実行される、待機中状態における処理について説明する。
この待機中状態における処理は、図21を用いて説明したスレッド制御処理における変数sに対応するスレッドの状態が「待機中」状態であるときに、スレッド制御部131において実行される処理である。
ステップS211において、スレッド制御部131は、対応するスレッド132のカウンタ166(図14参照)を、1インクリメントする。
ステップS212において、スレッド制御部131は、対応するスレッド132のカウンタ166の値は、スレッド長(thread_len)より小さいか否かを判断する。ステップS212において、カウンタ166の値は、スレッド長より小さいと判断された場合、待機中処理を終了し、図21のステップS206に進む。
ステップS212において、カウンタ166の値がスレッド長より小さくないと判断された場合、ステップS213において、スレッド制御部131は、「蓄積中」状態に状態を遷移させるための状態遷移コマンドを、対応するスレッド132に発行する。
すなわち、スレッド制御部131は、図16を用いて説明した状態遷移図において、「待機中」であるスレッドを、「蓄積中」に遷移させるための状態遷移コマンドを発行する。
ステップS214において、スレッド制御部131は、対応するスレッド132のカウンタ166(図14参照)を初期化(例えば、0にセット)し、観測信号の開始・終了タイミング保持部167(図14参照)に、観測信号の蓄積開始タイミング情報、すなわち、スレッド制御部131の現フレーム番号保持カウンタ151(図13参照)に保持されている現在のフレーム番号、または、それと同等の相対時刻情報などを設定して、待機中処理を終了し、図21のステップS206に進む。
このような処理により、スレッド制御部131は、「待機中」状態であるスレッドを制御し、そのカウンタ166の値に基づいて、「蓄積中」に状態を遷移させることができる。
次に、図23のフローチャートを参照して、図21に示すフローチャートのステップS204において実行される蓄積中状態における処理について説明する。
この蓄積中状態における処理は、図21を用いて説明したスレッド制御処理における変数sに対応するスレッドの状態が「蓄積中」状態であるときに、スレッド制御部131において実行される処理である。
ステップS221において、スレッド制御部131は、1フレーム分の観測信号X(t)を、学習のために、対応するスレッド132に供給する。この処理は、図20に示すスレッド制御部からそれぞれのスレッドへの観測信号の供給に対応する。
ステップS222において、スレッド制御部131は、対応するスレッド132のカウンタ166を、1インクリメントする。
ステップS223において、スレッド制御部131は、対応するスレッド132のカウンタ166の値がブロック長(block_len)より小さいか否か、換言すれば、対応するスレッドの観測信号バッファ161(図14参照)が満杯であるか否かを判断する。ステップS223において、カウンタ166の値がブロック長より小さい、換言すれば、対応するスレッドの観測信号バッファ161が満杯ではないと判断された場合、蓄積中処理を終了し、図21のステップS206に進む。
ステップS223において、カウンタ166の値がブロック長より小さくない、換言すれば、対応するスレッドの観測信号バッファ161が満杯であると判断された場合、ステップS224において、スレッド制御部131は、「学習中」状態に状態を遷移させるための状態遷移コマンドを、対応するスレッド132に発行して、蓄積中処理を終了し、図21のステップS206に進む。
すなわち、スレッド制御部131は、図16を用いて説明した状態遷移図において、「蓄積中」であるスレッドを、「学習中」に遷移させるための状態遷移コマンドを発行する。
このような処理により、スレッド制御部131は、「蓄積中」状態であるスレッドに観測信号を供給してその蓄積を制御し、そのカウンタ166の値に基づいて、「蓄積中」から「学習中」に状態を遷移させることができる。
次に、図24のフローチャートを参照して、図21に示すフローチャートのステップS205において実行される、学習中状態における処理について説明する。
この学習中状態における処理は、図21を用いて説明したスレッド制御処理における変数sに対応するスレッドの状態が「学習中」状態であるときに、スレッド制御部131において実行される処理である。
ステップS231において、スレッド制御部131は、対応するスレッド132の学習終了フラグ168(図14参照)がONであるか否かを判断する。ステップS231において、学習フラグがONであると判断された場合、処理は、後述するステップS237に進む。
ステップS231において、学習フラグがONではないと判断された場合、すなわち、対応するスレッドにおいて学習処理が実行中である場合、ステップS232に進み、時刻の比較処理を行う。「時刻の比較」とは、学習スレッド132内に記録されている、観測信号の開始時刻167(図14参照)と、スレッド制御部131に保存されている、現在の分離行列に対応した蓄積開始時刻154(図13参照)とを比較する処理である。スレッド132内に記録されている観測信号の開始時刻167(図14参照)が、スレッド制御部131に保存されている現在の分離行列に対応した蓄積開始時刻154よりも前である場合は、以降の処理をスキップする。
一方、スレッド132内に記録されている観測信号の開始時刻167(図14参照)が、スレッド制御部131に保存されている現在の分離行列に対応した蓄積開始時刻154よりも後または同じである場合は、ステップS233に進む。ステップS233において、スレッド制御部131は、対応するスレッド132のカウンタ166を、1インクリメントする。
次にステップS234において、スレッド制御部131は、対応するスレッド132のカウンタ166の値がスレッド長(thread_len)より小さいか否かを判断する。ステップS234において、カウンタ166の値がスレッド長より小さいと判断された場合、学習中処理を終了し、図21のステップS206に進む。
ステップS234において、カウンタ166の値がスレッド長より小さくないと判断された場合、ステップS235において、スレッド制御部131は、カウンタ166の値から所定の値を減算し、学習中処理を終了し、図21のステップS206に進む。
学習中にカウンタの値がスレッド長に達した場合とは、学習にかかる時間が長くなってしまい、「待機中」状態の時間が存在しなくなった場合である。その場合、学習はまだ継続しており、観測信号バッファ161は利用されているため、次の蓄積を開始することができない。そこで、スレッド制御部131は、学習が終了するまで、次の蓄積の開始、すなわち、「蓄積中」状態へ状態を遷移させるための状態遷移コマンドの発行を延期する。そのため、スレッド制御部131は、カウンタ166の値から所定の値を減算する。減算する値は、例えば、1であっても良いが、それよりも大きな値でも良く、例えば、スレッド長の10%などといった値であっても良い。
なお、「蓄積中」状態への遷移の延期を行なうと、蓄積開始時刻がスレッド間で不等間隔となり、最悪の場合、複数のスレッドでほぼ同一の区間の観測信号を蓄積してしまう可能性もある。そうなると、いくつかのスレッドが無意味になるだけでなく、例えば、CPUが実行するOSのマルチスレッドの実装によっては、1つのCPUで複数の学習が同時に動くことになって、更に学習時間が増大し、間隔が一層不均等になってしまう可能性がある。
そのような事態を防ぐためには、他のスレッドの待機時間を調整して蓄積開始タイミングが再び等間隔になるように調整すればよい。この処理は、ステップS241において実行される。この待機時間の調整処理の詳細については後述する。
ステップS231において、学習終了フラグがONであると判断された場合の処理について説明する。これは、学習スレッド内の学習ループが終了する度に一回実行される処理である。ステップS231において、学習終了フラグがONであり、対応するスレッドにおいて学習処理が終了したと判断した場合、ステップS237において、スレッド制御部131は、対応するスレッド132の学習終了フラグ168をOFFにする。この処理は、この分岐が連続実行されるのを防ぐための操作である。
その後、スレッド制御部131はスレッドの打ち切りフラグ170(図14参照)がONであるかOFFであるかを確認し、ONである場合は、ステップS239において分離行列等の更新処理を行い、ステップS241において待機時間の設定処理を行なう。一方、スレッドの打ち切りフラグ170(図14参照)がOFFである場合は、ステップS239の分離行列等の更新処理は省略し、ステップS241において待機時間の設定処理を行なう。ステップS239の分離行列等の更新処理と、ステップS241の待機時間の設定処理の詳細については後述する。
このような処理により、スレッド制御部131は、対応するスレッドの学習終了フラグ168を参照して、「学習中」状態のスレッドの学習が終了したか否かを判断し、学習が終了した場合、分離行列Wを更新し、待機時間を設定するとともに、「学習中」状態から、「待機中」または「蓄積中」に状態を遷移させることができる。
次に、図25のフローチャートを参照して、図24に示すフローチャートのステップS239において実行される分離行列等の更新処理について説明する。これは、学習で求まった分離行列と、全死角空間フィルタとパワー比を、他のモジュールに反映させる処理である。
ステップS251において、スレッド制御部131は、スレッドの観測信号の開始・終了タイミング保持部167(図14参照)に保持されている観測信号の開始タイミングと、観測信号の蓄積タイミング情報保持部154(図13参照)に保持されている、現在の分離行列に対応した蓄積開始タイミングとを比較し、観測信号の開始タイミングが蓄積開始タイミングより早いか否かを判断する。
すなわち、図5に示されるように、スレッド1の学習とスレッド2の学習とは、その一部で時間が重なっている。図5では、学習区間57のほうが、学習区間58より先に終了しているが、例えば、それぞれの学習にかかる時間によっては、学習区間57よりも学習区間58のほうが先に終了してしまう場合もあり得る。
ここで、ステップS251の判断が実行されず、学習の終了が遅いものが最新の分離行列として扱われてしまった場合、スレッド2由来の分離行列W2が、より古いタイミングで取得された観測信号によって学習されて得られたスレッド1由来の分離行列W1に上書きされてしまう。そこで、新しいタイミングで取得された観測信号によって得られた分離行列が最新の分離行列として扱われるように、観測信号の開始・終了タイミング保持部167に保持されている観測信号の開始タイミングと、観測信号の蓄積タイミング情報保持部154に保持されている現在の分離行列に対応した蓄積開始タイミングとが比較される。
ステップS251において、観測信号の開始タイミングが現在の分離行列に対応した蓄積開始タイミングよりも早いと判断された場合、換言すれば、このスレッドの学習の結果得られた分離行列Wは、現在、観測信号の蓄積タイミング情報保持部154に保持されている分離行列Wよりも早いタイミングで観測された信号に基づいて学習されていると判断された場合、このスレッドの学習の結果得られた分離行列Wは利用されないので、分離行列更新処理は終了する。
ステップS251において、観測信号の開始タイミングが現在の分離行列に対応した蓄積開始タイミングよりも早くないと判断された場合、すなわち、このスレッドの学習の結果得られた分離行列Wは、現在、観測信号の蓄積タイミング情報保持部154に保持されている分離行Wよりも遅いタイミングで観測された信号に基づいて学習されていると判断された場合、ステップS252において、スレッド制御部131は、対応するスレッドの学習によって得られた分離行列Wを取得し、分離行列保持部133(図12参照)に供給して設定する。同様に同様に最新の全死角空間フィルタを全死角空間フィルタ保持部134に設定し、分離行列適用結果のパワー比をパワー比保持部135に設定する。
ステップS253において、スレッド制御部131は、学習初期値保持部152に保持されるそれぞれのスレッドにおける学習の初期値を設定する。
具体的には、スレッド制御部131は、学習初期値として、対応するスレッドの学習によって得られた分離行列Wを設定するものとしてもよいし、対応するスレッドの学習によって得られた分離行列Wを用いて演算される、分離行列Wとは異なる値を設定するものとしても良い。例えば、分離行列保持部133(図12参照)にはリスケーリング適用後の値を代入し、学習初期値保持部152にはリスケーリング適用前の値を代入するようにする処理としてもよい。それ以外の例については、変形例で説明する。なお、学習初期値の計算は、「分離行列の更新処理」において行なう他に、学習の前処理として行なうことも可能である。詳細は変形例を参照されたい。
ステップS254において、スレッド制御部131は、対応するスレッドの観測信号の開始・終了タイミング保持部167(図14参照)に保持されているタイミング情報を、観測信号の蓄積タイミング情報保持部154(図13参照)に設定する。これらの処理によって、分離行列等更新処理を終了する。
ステップS254の処理により、現在使用中、すなわち、分離行列保持部133に保持されている分離行列Wが、どの時間区間の観測信号から学習されたものであるかが示される。
次に、図26のフローチャートを参照して、図24に示すフローチャートのステップS241において実行される待機時間の設定処理について説明する。
ステップS281において、スレッド制御部131は、残りの待機時間を計算する。
具体的には、スレッド制御部131は、残り待機時間(フレーム個数)をrest、蓄積開始予定タイミング指定情報保持部153(図13参照)に保持されている蓄積開始予定タイミング(フレーム番号、または、対応する相対時刻)をCt、現フレーム番号保持カウンタ151に保持されている現フレーム番号をFt、ブロックのシフト幅をblock_shiftとして、残り待機時間restを、
rest=Ct+block_shift−Ft
として算出する。すなわち、Ct+block_shiftが、次々回蓄積開始予定時刻を意味するため、そこからFtを引くことで、「次々回蓄積開始予定時刻までの残り時間」が求まるのである。
ステップS282において、スレッド制御部131は、残りの待機時間restの計算結果は正の値であるか否かを判断する。ステップS282において、残りの待機時間restの計算結果は正の値ではない、すなわち、ゼロまたは負の値であると判断された場合、処理は、後述するステップS286に進む。
ステップS282において、残りの待機時間restの計算結果は正の値であると判断された場合、ステップS283において、スレッド制御部131は、「待機中」状態に状態を遷移させるための状態遷移コマンドを、対応するスレッドに発行する。
ステップS284において、スレッド制御部131は、対応するスレッドのカウンタ166(図14参照)の値を、thread_len−restに設定する。そうすることで、カウンタの値が、thread_lenに達するまでの間は、「待機中」状態が継続される。
ステップS285において、スレッド制御部131は、蓄積開始予定タイミング指定情報保持部153(図13参照)に保持されている値Ctに、block_shiftの値を加算する、すなわち、蓄積開始予定タイミング指定情報保持部153に次回の蓄積開始タイミングである、Ct+block_shiftの値を設定し、残り待機時間の計算処理を終了する。
ステップS282において、残りの待機時間restの計算結果は正の値ではない、すなわち、ゼロまたは負の値であると判断された場合、予定された蓄積開始タイミングを過ぎているのにもかかわらず蓄積が始まっていないことを意味するので、直ちに蓄積を開始する必要がある。そこで、ステップS286において、スレッド制御部131は、「蓄積中」状態に状態を遷移させるための状態遷移コマンドを、対応するスレッドに発行する。
ステップS287において、スレッド制御部131は、カウンタの値を初期化(例えば0をセット)する。
ステップS288において、スレッド制御部131は、蓄積開始予定タイミング指定情報保持部153に次回の蓄積開始タイミング、すなわち、現フレーム番号であるFtを設定し、残り待機時間の計算処理を終了する。
このような処理により、それぞれのスレッドにおける「学習中」状態にかかる時間に応じて、「待機中」状態とする時間を設定することができる。
(3−4.分離処理について(S106))
次に、図17に示すフローチャートのステップS106の処理である分離処理の詳細について、図27に示すフローチャートを参照して説明する。
図27のフローに示すステップS301〜S310はループ処理であり、ループ内の処理を周波数ビンごとに行なう。なお、ループ処理の代わりに、並列処理として実行してもよい。
ステップS302において、後述のリスケーリングで必要な共分散行列をあらかじめ計算しておく。これは、図12に示す共分散行列計算部125に対応する処理である。リスケーリング処理は分離行列に対する処理であるステップS303と全死角空間フィルタに対する処理であるステップS305があるが、いずれも観測信号の共分散行列から計算可能である。そのため、ステップS302では観測信号の共分散行列を以下に示す式[4.3]を用いて計算する。
ただし、平均操作<・>を行なう区間は、図8に示す現在時刻を含むブロック87であり、現在のフレームを含んでいる。そのため、現在のフレーム番号をt、現在時刻を含むブロック区間87の長さ(フレーム数)をLとすると、式[4.4]の操作を毎フレーム行なうことで、観測信号の共分散行列は更新される。
次に、ステップS303において分離行列のリスケーリングを行なう。このリスケーリングは先の[1.本発明の構成と処理の概要について]の欄において説明した「頻繁リスケーリング」のことであり、このリスケーリング処理の目的は突発音が出力される際の歪みを低減することである。リスケーリングの基本的な考え方は、分離結果を特定のマイクロホンへ射影することにあり、「特定のマイクロホンへ射影する」とは、例えば図1において、l番目のマイクロホンで観測される信号を、それぞれの音源に由来する成分にスケールを保ったまま分解することである。
リスケーリング処理は、観測信号からの切り出しデータ単位であるフレーム中、現在の観測信号を含むフレームを適用して行われる。前述したように分離処理部123の共分散行列計算部125は、フーリエ変換部124の生成する観測信号のフーリエ変換データを入力し、観測信号の共分散行列をフレーム毎に計算する。ここで求めた共分散行列が分離行列適用部126および全死角空間フィルタ適用部127の各々においてフレーム毎のリスケーリング処理を行なうために利用される。
リスケーリング処理のために、上記の式[4.1]および式[4.2]によってリスケーリング用の行列R(ω)をいったん求め、その次に、リスケーリング用行列R(ω)のl行目(l(小文字のエル)は射影先のマイクロホン番号)を要素とする対角行列を求める(式[4.6]の右辺の第1項)。その対角行列をリスケーリング前の分離行列W(ω)に乗じることで、リスケーリング済みの分離行列W'(ω)を得る(式[4.6])。
ステップS304では、リスケーリング後の分離行列W'(ω)を観測信号X(ω,t)に乗じることで(式[4.7])、分離行列適用結果Y'(ω,t)を得る。
Y'(ω,t)=W'(ω)×X(ω,t)
として、分離行列適用結果Y'(ω,t)を得る。
この処理は、観測信号X(ω,t)に対するリスケーリング後の分離行列W'(ω)を適用した線形フィルタリング処理に相当する。
ステップS303、S304の処理は、図8に示す処理例において、
現在時刻の観測信号X(t)82の取得と、
分離行列83の適用処理、
これらの処理に対応する。
図8に示す分離行列83は、学習データブロック81から求められた分離行列である。先に説明したように、従来のリスケーリングは、学習データブロック81の学習データを用いて行なわれていた。それに対して、本発明の処理では、ステップS303において、現在時刻を終端とする一定長のブロック、すなわち、図8に示す現在時刻を含むブロック87を設定し、この現在時刻を含むブロック87の区間の観測信号を用いてリスケーリングを行なう。この処理により突発音に対しても早い段階でスケールを合わせる(=歪みを低減する)ことができる。
さらに必要に応じて、式[4.8]および式[4.9]による再調整を行なう。これは、リスケーリング後の分離行列適用結果Y'(ω,t)の要素の総和が、射影先マイクロホンに対応した観測信号X(ω,t)の絶対値を超えていないかチェックし、超えている場合にY'(ω,t)の絶対値を小さくする処理である。式[4.1]で求めたリスケーリング係数は、大きな音が鳴り止んだ直後でも、その音が区間内(図8の87)に残っている限り大きな値となる傾向があり、その結果、現在の観測信号が無音に近い音(背景音)であっても大きなスケールによって背景音が強調されてしまう場合がある。しかし、式[4.8]および式[4.9]による再調整を行なうことで、スケールが大きくなるのを防ぐことができる。
次に、ステップS305において、全死角空間フィルタのリスケーリングを行なう。このリスケーリングの目的は、全死角空間フィルタの適用結果に含まれる突発音と、分離行列適用結果に含まれる突発音との間でスケールを合わせ、後述の周波数フィルタリングで突発音が相殺されるようにするためである。
図12に示す分離処理部123は、前述したフレーム単位の頻繁リスケーリングを行う。すなわち、観測信号からの切り出しデータ単位であるフレーム中、現在の観測信号を含むフレームを適用したスケール調整としてのリスケーリング処理を実行した分離行列と、同様にリスケーリング処理を実行した全死角空間フィルタとを、ステップS303とステップS305において生成する。ステップS304では、リスケーリング処理後の分離行列を適用し、ステップS306では、リスケーリング後の全死角空間フィルタを適用した処理を行う。
例えば図8に示す構成において、全死角空間フィルタ84は、学習データのブロック81の区間において鳴っている全ての音源の方向に死角を形成したフィルタ(ベクトルまたは行列)であり、これは突発音、すなわち、学習データのブロック81では鳴っていなかった方向の音のみを透過する働きをする。なぜなら、学習データのブロック81で鳴っていた音については、位置を変えずに鳴り続けている限り、フィルタが形成する死角によって除去されるのに対し、突発音については、その方向に死角が形成されておらず、素通ししてしまうからである。
ステップS305において、全死角空間フィルタのリスケーリング処理では、以下に示す式[7.1]および式[7.2]によってリスケーリング用の行列Q(ω)を求める。(式[7.1]のY'(ω,t)は、式[4.9]の再調整を適用する前の値である。)
ただし、式[7.2]のB(ω)はリスケーリング前の全死角空間フィルタであり、n個の入力から1個の出力を生成するフィルタである(B(ω)の計算方法は後述する)。また、式[7.1]のZ(ω,t)は、リスケーリング前の全死角空間フィルタ適用結果であり、以下に示す式[5.5]で計算される。
なお、Z(ω,t)はベクトルではなく、スカラーである。また、Q(ω)はn個の要素からなる行ベクトル(横長のベクトル)である。Q(ω)にB(ω)を乗じることで(式[7.3])、リスケーリング済みの全死角空間フィルタB'(ω)を得る。B'(ω)はn行n列の行列である。
ステップS306では、リスケーリング済みの全死角空間フィルタB'(ω)に観測信号を乗じることで(式[7.4])、リスケーリング済みの全死角空間フィルタ適用結果Z'(ω,t)を得る。ただし、式[7.4]のμ(ω)は、式[4.8]で求めた値であり、Y'(ω,t)を再調整した場合にZ'(ω,t)も再調整するためである。
全死角空間フィルタ適用結果Z'(ω,t)はn個の要素からなる列ベクトル(縦長のベクトル)であり、k番目の要素はY'k(ω,t)にスケールを合わせた全死角空間フィルタ適用結果である。
ステップS305、S306は、図8の処理例を参照して説明すると、
現在時刻の観測信号X(t)82の取得、
リスケーリング済みの全死角空間フィルタB'(ω)84の生成、
リスケーリング済みの全死角空間フィルタB'(ω)に観測信号を乗じることで(式[7.4])、リスケーリング済みの全死角空間フィルタ適用結果Z'(ω,t)を得る処理に対応する。
次のステップS307〜S310はループであり、ステップS308の周波数フィルタリングをチャンネルごとに行なうことを意味する。なお、ループの代わりに並列処理として実行してもよい。
ステップS308の周波数フィルタリングは、リスケーリング済み分離行列適用結果Y'k(ω,t)(ベクトルY'(ω,t)のk番目の要素)に対して、周波数ごとに異なる係数を乗じる処理であるが、本発明ではリスケーリング済み分離行列適用結果Y'k(ω,t)からリスケーリング済み全死角空間フィルタ適用結果(突発音にほぼ等しい)を除去するために用いる。
周波数フィルタリングの例として、以下の3点について説明する。
(1)複素数上の引き算
(2)スペクトル減算
(3)ウィナーフィルタ
まず、(1)複素数上の引き算による周波数フィルタリングについて説明する。この処理は、分離行列を適用して生成した分離信号から全死角空間フィルタ適用信号を減算する処理により、分離信号に含まれる全死角空間フィルタ適用信号に対応する信号成分を除去するフィルタリング処理である。
以下に示す式[8.1]は、複素数上の減算を表わす式である。
上記式[8.1]において、係数αは0以上の実数であり、この係数によって、先に、[1.本発明の構成と処理の概要について]の欄において説明した「(3)チャンネル別の判別」を実現する。
すなわち、突発音の性質によって異なる対処をするため、ICAの各出力チャンネルが音源に対応した信号を出力しているかどうか判別し、その結果に応じて以下のどちらかの処理をする。
i)音源に対応していると判別された場合は、「頻繁リスケーリング」と「全死角空間フィルタ&周波数フィルタリング」との両方を適用する。
その結果、突発音はそのチャンネルからは除去される。
ii)音源に対応していないと判別された場合は、「頻繁リスケーリング」のみを適用する。その結果、突発音はそのチャンネルから出力される。
これを「チャンネル別の判別」と呼ぶ。
このように、突発音発生前に各チャンネルが音源に対応した信号を出力しているかに応じて、突発音の削減量を調整する。
各チャンネルの出力が音源に対しているか否かを判別する方法は各種存在するが、以下の説明で用いているのは、分離行列適用結果のパワーを用いる方法である。すなわち、音源に対応しているチャンネルは比較的パワーが大きく、音源に対応していないチャンネルは比較的パワーが小さいという性質を利用する。
上記式[8.1]に示される係数αは、式[8.5]によって計算する。この式において、rはチャンネルkのパワー比、αはαの最大値である。パワー比は、全体の観測された音の全パワー、あるいは最大の音に対する各チャンネル(k)のパワーの比率である。パワー比rはチャンネルkのパワー(音量)をVkとして、式[8.6]または式[8.7]を適用して算出する。これらの式の詳細については後述する。
f()は0以上1以下を返値とする関数であり、式[8.10]および図28に示すグラフで表される関数である。この関数の目的は、パワー比rによって引き算の有無が急激に切り替わるのを防ぐためである。(逆に、rmin=rmaxとすると、パワー比が閾値を跨いだ時点で、引き算の有無が急激に変化する。)
式[8.10]のfminは、0または小さな正の値である。fminを0以外の値に設定する効果については、後で説明する。
ステップS308の周波数フィルタリングは、図12に示す周波数フィルタリング部128として実行される。周波数フィルタリング部128は、分離信号からの全死角空間フィルタ適用信号対応成分の除去レベルを分離信号チャネルに応じて変更する処理を行う。具体的には、分離信号チャネルのパワー比に応じて除去レベルを変更する。
パワー比rは式[8.6]〜[8.9]で計算するが、式[8.8]および[8.9]に含まれる平均操作<・>は分離行列の学習で使用された観測信号と同じ区間で行なう。すなわち、図8に示す処理例における現在時刻を含むブロック87ではなく、学習データのブロック81の区間である。これらの式では最新フレームのデータは用いていないため、αおよびrの計算は毎フレーム行なう必要はなく、分離行列の学習が終了したタイミングで行えばよい。そこで、rの具体的な計算方法については、図31に示す分離行列学習のフローチャートのステップS420の後処理の詳細について説明した図32のフローを参照して後段で説明する。
複素数上の引き算(式[8.1])でも突発音は除去可能となる。しかし、線形フィルタリングの一種であるため、「従来技術の問題点」で述べた「追従遅れと消し残りとのトレードオフ」という課題は解消できない。一方、以下で述べる非線形な周波数フィルタリングを用いると、そのトレードオフも解消することが可能となる。
上記した式[8.2]は、周波数フィルタリングの一般式である。すなわち、リスケーリング済みの分離行列適用結果Y'k(ω,t)を絶対値で正規化した項、
Y'k(ω,t)/|Y'k(ω,t)|
に対して、ゲインGk(ω,t)を乗じる。周波数フィルタリングの手法によってゲインの計算方法は様々であるが、以下で説明するスペクトル減算法(spectral subtraction)では、スペクトル振幅の差分から求める。
(2)スペクトル減算による周波数フィルタリングについて説明する。
スペクトル減算による周波数フィルタリング処理は、全死角空間フィルタ適用信号を雑音成分としたスペクトル減算による周波数フィルタリング処理により、分離行列を適用して生成した分離信号に含まれる全死角空間フィルタ適用信号に対応する信号成分を除去するフィルタリング処理である。
スペクトル減算法の式は、上記の式[8.3]および式[8.4]に示される通りである。式[8.3]は振幅そのものの減算であり、Magnitude Spectral Subtraction と呼ばれる。式[8.4]は振幅の2乗の減算であり、Power Spectral Subtractionと呼ばれる。両式において、max{A,B}は2つの引数の内で大きい方を返り値とする操作を表わす。αは、一般的にはover−subtraction factor と呼ばれる項であるが、本発明では式[8.5]の演算をすることで、「音源に対応した信号が出力されているか」に応じて減算量を調整する働きもしている。βはflooring factorと呼ばれ、0に近い小さな値(例えば0.01)である。max{}の第2項によって、減算後のゲインが0や負の値になるのを防ぐ。
αの計算は、複素数上の引き算の場合と同様に、式[8.5]〜[8.10]に従って行なう。なお、式[8.10]において、fminを0の代わりに正の小さな値とすると、
<r_min
の場合にも周波数フィルタリングが小さく作用するため、「消し残り」をある程度除去することができる。
(3)ウィナーフィルタによる周波数フィルタリングについて説明する。
ウィナーフィルタとは、目的音と妨害音とのパワーの比である事前SNR(priori SNR)に基づいて係数G(ω,t)を計算する方式である。事前SNRが既知であれば、ウィナーフィルタによって求まる係数は、妨害音の除去性能が二乗誤差最小の意味で最適であることが知られている。ウィナーフィルタの詳細については、例えば以下を参照されたい。
特許出願 2007−533331[H18.8.31]
特再WO07/026827 [H21. 3.12]
[発明の名称] マイクロホンアレイ用ポストフイルタ
[出願人] 北陸先端科学技術大学院大学,トヨタ自動車(株)
[発明者] 赤木 正人,李 軍鋒,上地 正昭,佐々木 和也
ウィナーフィルタに基づいて係数を計算するためには事前SNRの値が必要だが、一般にその値は未知である。そこで、事前SNRの代わりに、観測信号と妨害音とのパワー比である事後SNR(posteriori SNR)と、直前のフレームでの処理結果を目的音とみなした1フレーム分の事前SNRとから、事前SNRをフレームごとに推定する方法が提案されており、それをDecision Directed (DD)法と呼ぶ。DD法を用いて突発音を除去する方法について、式[8.12]〜式[8.14]を用いて説明する。(これらの式において、上付きの[post]と[prior]は、それぞれ「事後」「事前」を区別するためのものである。)
式[8.12]は、1フレーム分の事後SNRを求める式である。この式においてα
は式[8.5]などから求める。ただし、ウィナーフィルタにおいては、over−subtractionを行なう必要はないため、α=1でよい。あるいは、α<1とすることで、突発音の除去効果を小さくすることもできる。次に、式[8.13]を用いて、事前SNRの推定値を求める。この式のκは忘却係数であり、1未満かつ1に近い値を用いる。
事前SNRの推定値から、式[8.14]を用いて周波数フィルタリングの係数G(ω,t)を計算する。
周波数フィルタリングの方法として、上記では、
(1)複素数上の引き算
(2)スペクトル減算
(3)ウィナーフィルタ
これらについて説明したが、これらの方法以外にも、以下の方法も適用可能である。
(4) Minimum Mean Square Error (MMSE) Short Time Spectral Amplitude (STSA)、または MMSE Log Spectral Amplitude (LSA)
なお、これらの詳細については以下を参照されたい。
*『独立成分分析を用いた雑音推定に基づくMMSE STSA』
岡本 亮維, 高橋 祐,猿渡 洋,鹿野 清宏,
日本音響学会講演論文集,2−9−6,pp.663−−666,March 2009.
"MMSE STSA with Noise Estimation Based on Independent Component Analysis"
Ryo OKAMOTO, Yu TAKAHASHI, Hiroshi SARUWATARI and Kiyohiro SHIKANO
*登録特許4172530号公報 雑音抑圧の方法及び装置並びにコンピユ−タプログラム
*"Diffuse noise suppression by crystal−array−based post−Filter design"
Nobutaka ITO, Nobutaka ONO, and Shigeki SAGAYAMA
図27に示すフローチャートに従った分離処理により、従来法の分離結果よりも精度の高い分離結果であるU1(ω,t)〜Un(ω,t)が生成されるようになる。
[4.スレッド演算部における学習スレッドの処理について]
図12に示すスレッド制御部131と、各学習スレッド132−1〜Nを適用したスレッド演算部132の処理は並列で動作しており、学習スレッドはスレッド制御部とは別のフローに基づいて動いている。以降では、スレッド演算部における学習スレッドの処理について、図29に示すフローチャートを用いて説明する。
スレッド演算部132は、起動後、ステップS391において、初期設定される。起動のタイミングは、図17の全体フローのステップS101の初期化処理の期間であり、図19に示すフローのステップS152の学習スレッドの確保処理のタイミングとなる。
スレッド演算部132において学習スレッドは、起動後、ステップS391において初期設定され、その後、イベントが発生するまで待機する(処理をブロックする)。(この「待機」は、学習スレッドの状態の1つである「待機中」とは別である。)イベントは、以下のどれかのアクションが行なわれたときに発生する。
・状態遷移コマンドが発行された。
・フレームデータが転送された。
・終了コマンドが発行された。
どのイベントが発生したかによって、以降の処理を分岐する(ステップS392)。
すなわち、スレッド制御部131から入力されたイベントによって、続く処理が分岐される。
ステップS393において、状態遷移コマンドが入力されたと判断された場合、ステップS394において対応するコマンド処理が実行される。
ステップS393において、フレームデータの転送イベントの入力を受けたと判断された場合、ステップS395において、スレッド132は、フレームデータを取得する。次に、ステップS396において、スレッド132は、取得したフレームデータを、観測信号バッファ161(図14参照)に蓄積し、ステップS392に戻り、次イベントを待機する。
観測信号バッファ161(図14参照)は、配列またはスタックの構造をしており、観測信号はカウンタと同じ番号の個所に格納されるものとする。
ステップS393において、終了コマンドが入力されたと判断された場合、ステップS397において、スレッド132は、例えば、メモリの開放などの適切な終了前処理を実行し、処理が終了される。
このような処理により、スレッド制御部131の制御に基づいて、それぞれのスレッドにおいて処理が実行される。
次に、図30のフローチャートを参照して、図29に示すフローチャートのステップS394において実行される、コマンド処理について説明する。
ステップS401において、スレッド132は、供給された状態遷移コマンドに応じて、それ以降の処理を分岐する。なお、以降では「○○の状態へ遷移する」というコマンドを「状態遷移コマンド『○○』」と表現する。
ステップS401において、供給された状態遷移コマンドが、「待機中」状態への遷移を指令する「状態遷移コマンド『待機中』」である場合、ステップS402において、スレッド132は、状態格納部165(図14参照)に、状態が「待機中」であることを示す情報を格納する、すなわち、状態を「待機中」に遷移して、コマンド処理を終了する。
ステップS401において、供給された状態遷移コマンドが「蓄積中」状態への遷移を指令する「状態遷移コマンド『蓄積中』」である場合、ステップS403において、スレッド132は、状態格納部165に、状態が「蓄積中」であることを示す情報を格納する、すなわち、状態を「蓄積中」に遷移して、コマンド処理を終了する。
ステップS401において、供給された状態遷移コマンドが「学習中」状態への遷移を指令する「状態遷移コマンド『学習中』」である場合、ステップS404において、スレッド132は、状態格納部165に、状態が「学習中」であることを示す情報を格納する、すなわち、状態を「学習中」に遷移する。
さらに、ステップS405において分離行列の学習処理を実行する。この処理の詳細については後述する。
ステップS406において、スレッド132は、学習が終了したことをスレッド制御部131へ通知するために、学習終了フラグ168をONにして処理を終了する。フラグを立てることで、学習が終了した直後であることをスレッド制御部131へ通知するのである。
このような処理により、スレッド制御部131から供給された状態遷移コマンドに基づいて、それぞれのスレッドの状態が遷移される。
次に、図31のフローチャートを参照して、図30に示すフローチャートのステップS405において実行される処理の一例である分離行列の学習処理例について説明する。これは、バッチによって分離行列を求める処理であり、バッチ処理であればどのアルゴリズムも適用可能である。ただし、パーミュテーション(permutation)を起こしにくい方式を用いる必要がある。以下では、本出願人の先の出願である特開2006−238409『音声信号分離装置・雑音除去装置および方法』に開示した構成を適用した例について説明する。
ステップS411において、スレッド132の学習演算部163(図14参照)は、観測信号バッファ161に蓄積された観測信号に対して、必要に応じて、前処理を実行する。
具体的には、学習演算部163は、学習のループに入る前に、必要に応じて、観測信号バッファ161に蓄積された観測信号に対して、正規化(normalization)や無相関化(uncorrelation または pre−whitening)などの処理を行なう。例えば、正規化を行なう場合、学習演算部163は、ブロック内のフレームについて観測信号の標準偏差を求め、標準偏差の逆数からなる対角行列をSとして、以下に示す式[9.1]により、X'=SXを計算する。ただしXは、ブロック内の全フレーム分の観測信号からなる行列であり、図8の学習データのブロック81で表わされる区間である。
一方、無相関化は共分散行列が単位行列となるような変換である。無相関化の方法は何通りかあるが、ここでは共分散行列の固有値(Eigenvalue)および固有ベクトル(Eigenvector)を用いる方法を説明する。
蓄積された観測信号(例えば図8の学習データのブロック81)から、式[9.7]を用いて周波数ビンごとに共分散行列ΣXX(ω)を計算する。次にこの行列に対して固有値展開を適用すると、ΣXX(ω)は固有値λ〜λおよび固有ベクトルp〜pを用いて式[9.8]のように分解できる。ただし、固有ベクトルは単位ベクトルかつ互いに直交しているものとする。固有値および固有ベクトルから式[9.9]のような行列P(ω)を生成すると、P(ω)は無相関化の行列となっている。
すなわち、P(ω)を観測信号X(ω,t)に乗じたものをX'(ω,t)とすると(式[9.10])、X'(ω,t)の共分散行列は式[9.11]の関係を満たしている。
このような無相関化を前処理として行なうことにより、学習において収束までのループ回数を少なくすることができる。また、本発明では、固有ベクトルから全死角空間フィルタを生成することも可能になる。(詳細は後述する)
以下の式に現われる観測信号Xは、前処理を行なった観測信号X'も表わし得るものとする。
次に、ステップS412において、学習演算部163は、分離行列の初期値として、スレッド制御部131から、スレッド制御部131の学習初期値保持部152に保持されている学習初期値Wを取得する。
ステップS413〜S419の処理は、学習のループであり、これらの処理をWが収束するか打ち切りフラグがONになるまで繰り返す。打ち切りフラグは、先に説明した図24の学習中処理のフローのステップS236においてONに設定されるフラグである。後から開始した学習がそれより前に開始した学習よりも早く終了した場合にONになるものである。ステップS413において、打ち切りフラグがONであると判断した場合は、処理を終了する。
ステップS413において、打ち切りフラグがOFFであると判断した場合は、ステップS414に進む。ステップS414において、学習演算部163は、分離行列Wの値が収束したか否かを判断する。分離行列Wの値が収束したか否かは、例えば、行列のノルムを用いて判定する。分離行列Wのノルム(全要素の2乗和)である‖W‖と、ΔWのノルムである‖W‖とをそれぞれ計算し、両者の比である‖ΔW‖/‖W‖が一定の値(例えば1/1000)よりも小さければ、Wが収束したと判定する。または単純に、ループが一定数(例えば50回)回ったかどうかで判定しても構わない。
ステップS414において、分離行列Wの値が収束したと判断された場合、処理は、後述するステップS420に進み、後処理を実行して処理を終了する。すなわち、分離行列Wが収束するまで、学習処理ループが実行される。
ステップS414において、分離行列Wの値が収束していないと判断された場合(またはループ回数が所定の値に達していない場合)、ステップS415〜S419の学習のループの中に進む。学習は、全ての周波数ビンにおいて、先に説明した式[3.1]〜式[3.3]を繰り返す処理として行なわれる。すなわち、分離行列Wを求めるために、式[3.1]から式[3.3]までを分離行列Wが収束するまで(または一定回数)繰り返し実行する。この繰り返し実行が「学習」である。なお、分離結果Y(t)は式[3.4]で表わされる。
ステップS416が、式[3.1]に対応する。
ステップS417が、式[3.2]に対応する。
ステップS418が、式[3.3]に対応している。
式[3.1]〜式[3.3]は周波数ビンごとの式であるため、ステップS415とステップS419で周波数ビンについてのループを回すことで、全周波数ビンのΔWを求めている。
なお、ICAのアルゴリズムとしては、式[3.2]以外も適用可能である。たとえば、前処理として無相関化を行なった場合は、正規直交制約(orthonormal constraint)に基づく勾配法である以下に示す式[3.13]〜[3.15]を用いても良い。なお、式[3.13]のX'(ω,t)は、無相関化後の観測信号である。
これらのループ処理の終了後に、ステップS413に戻り打ち切りフラグの判定、ステップS414における分離行列の収束判定を行う。打ち切りフラグがONであれば処理を終了する。ステップS414で分離行列の収束が確認された場合(あるいは規定ループ数に達した場合)は、ステップS420に進む。
ステップS420の後処理の詳細について、図32に示すフローチャートを参照して説明する。
ステップS420の後処理においては、以下の処理を実行する。
(1)分離行列を、正規化前の観測信号に対応させる。
(2)周波数ビンの間のバランスを調整する(リスケーリング)。
まず、(1)分離行列を、正規化前の観測信号に対応させる処理について説明する。
前処理として正規化が行なわれた場合、上述した処理(図31のステップS415〜S419)により求められる分離行列Wは、正規化前の観測信号Xを分離するためのものではなく、正規化後の観測信号X'を分離するためのものである。すなわち、WにXを直接乗じても、それは分離された信号ではない。そこで、上述した処理により求められた分離行列W(ω)を補正して、正規化前の観測信号X(ω,t)を分離するためのものへと変換する。
具体的には、正規化の際に作用させた行列をS(ω)とすると、W(ω)を正規化前の観測信号に対応させるには、
W(ω)←W(ω)S(ω)
という補正を行なえばよい(式[9.1])。
前処理として無相関化を行なった場合も同様に、
W(ω)←W(ω)P(ω)
という補正を行なう。(P(ω)は無相関化の行列)
次に(2)周波数ビンの間のバランスを調整する(リスケーリング)処理について説明する。
ICAのアルゴリズムによっては、分離結果Yの周波数ビン間のバランス(スケール)が、予想される原信号のものと異なっている場合がある(特開2006−238409『音声信号分離装置・雑音除去装置および方法』はそのような例である)。そのような場合、後処理で周波数ビンのスケールを補正する必要がある。スケールの補正のために、式[9.5]と式[9.6]から補正用の行列を計算する。式[9.5]のl(小文字のエル)は、射影先のマイクロホンの番号である。補正用の行列が求まったら、式[9.3]によって分離行列W(ω)を補正する。
なお、
(1)分離行列を、正規化前の観測信号に対応させる。
(2)周波数ビンの間のバランスを調整する(リスケーリング)。
これらをまとめて、式[9.4]を適用して一気に補正しても構わない。こうしてリスケーリングされた分離行列は、図12に示す分離行列保持部133に格納され、必要に応じて分離処理部123の実行する分離処理(表の処理)において参照される。
次に、ステップS453の全死角空間フィルタの生成処理に進む。全死角空間フィルタの生成方法には以下の2通りが可能である。
(1)分離行列から生成
(2)観測信号共分散行列の固有ベクトルから生成
まず、「(1)分離行列から全死角空間フィルタを生成する方法」
について説明する。
ステップS452においてリスケーリングされた分離行列をW(ω)、その行ベクトルをW1(ω)〜Wn(ω)とすると、全死角空間フィルタB(ω)は、先に示した式[5.1]で計算できる。ただし、l(小文字のエル)は射影先のマイクロホン番号を表わす。eはn次元の行ベクトルであり、l番目の要素のみが1、それ以外を0とした行列である。
式[5.1]に従って求まった全死角空間フィルタB(ω)を観測信号X(ω)に乗じると、その結果Z(ω,t)は全死角空間フィルタ適用結果となる(式[5.4])。
こうして計算した全死角空間フィルタB(ω)が全死角空間フィルタとして機能する理由は、式[5.3]で説明できる。
この式[5.3]において、
Wk(ω)X(ω,t)
は、分離行列適用結果のkチャンネル目である。
分離行列は、先に図32を参照して説明した分離処理フローのステップS452の分離行列のリスケーリング処理においてリスケーリングされているため、分離行列適用結果を全チャンネルで総和すると、射影先マイクロホンの観測信号であるXl(ω,t)とほぼ等しくなる。
従って、式[5.3]の左辺は0に近い値になるはずである。また、式[5.3]の左辺は、式[5.1]の全死角空間フィルタB(ω)を用いて式[5.4]の右辺のように変形できる。すなわちB(ω)は、観測信号X(ω,t)から0に近い信号を生成するフィルタ、すなわち全死角空間フィルタと見なすことができるのである。
なお、分離行列の収束が不十分の場合、そのような分離行列から生成される全死角空間フィルタは、学習データの区間に含まれる音源もある程度は透過させる性質をもつ。例えば、先に図7を参照して説明した従来法では、時間t2〜t3の区間75においては分離行列が収束しておらず、そのために突発音もある程度は出力されるが、その区間の分離行列から生成された全死角空間フィルタも、やはり突発音をある程度は透過する。それが図9における時間t2〜t3の区間95である。しかし、図7に示す時間t2〜t3の区間75と、図9に示す時間t2〜t3の区間95において突発音が同様に透過しているため、周波数フィルタリングによって相殺される。すなわち、図9に示す(c1)処理結果1において時間t2〜t3の区間95に対応する区間でも突発音は消える。
次に、「(2)観測信号共分散行列の固有ベクトルから全死角空間フィルタを生成する方法」について説明する。
図31を参照して説明した分離行列の学習処理におけるステップS411の「前処理」として無相関化を用いた場合、観測信号の共分散行列に対する固有値分解はすでに完了している。すなわち、以下に示す式[6.1](式[9.8]と同一)のように、観測信号共分散行列Σxx(ω)は、固有値λ〜λと固有ベクトルp〜pを用いて表される。
ここで、固有値は全て0以上かつ降順に並んでいるとする。すなわち、
λ≧λ≧・・・≧λ≧0
を満たすとする。この場合、最小の固有値λに対応した固有ベクトルpは、全死角空間フィルタの性質を持っている。従って、式[6.2]のように全死角空間フィルタB(ω)を設定すれば、以降は「(1)分離行列から生成」の場合と同様に全死角空間フィルタB(ω)を使用することができる。
この方法は、ICA以外でも、時間周波数領域で観測信号にベクトルや行列を乗じて音源分離を行なう方式と組み合わせることで、前述した「消し残り」を軽減することができる。
こうして生成された全死角空間フィルタは、図12に示す全死角空間フィルタ保持部134に格納され、必要に応じて、分離処理部123の実行する分離処理(表の処理)に際して参照される。
以上で、ステップS453の全死角空間フィルタの生成処理についての説明を終了する。
次に、ステップS454の「パワー比を計算」する処理について説明する。パワー比は、例えば、先に図27を参照して説明した分離処理におけるステップS308の「周波数フィルタリング」処理において参照されるが、パワー比の計算で用いる観測信号は学習データの区間(例えば図8に示す学習データのブロック81)と同一であるため、パワー比の計算自体は学習終了時に一度行えば、次回に分離行列が更新されるまでの間はその値が有効である。
パワー比を求める前に、まず前記した式[8.8]または式[8.9]を用いて、チャンネルごとにパワー(区間内の要素の2乗和)を計算する。ただし、分離行列Wk(ω)は、ステップS452においてリスケーリングされた分離行列であり、また、平均操作<・>は学習データの区間(図8の例では、学習データのブロック81)で行なう。
パワー比の計算は、前記の式[8.6]・式[8.7]・式[8.11]のいずれかを適用して行なう。チャンネルkのパワー(分散)をVkとして、式[8.6]・式[8.7]・式[8.11]のいずれかを適用してパワー比rを算出する。3つの式の違いは分母にある。式[8.6]の分母は同一区間内でチャンネル間でパワーを比較して最大のものである。式[8.7]の分母は非常に大きな音が入力されたときのパワーをVmaxとしてあらかじめ計算しておいたものである。式[8.11]の分母はパワーVkをチャンネル間で平均したものである。どれを使用するかは使用環境に応じて使い分ければよく、例えば比較的静かな環境で使用される場合は式[8.7]を、背景ノイズが比較的大きな環境で使用される場合は式[8.6]を用いる。それに対し、式[8.11]を用い、かつ、rmin≦1≦rmaxとなるようにrminとrmaxを設定した場合は、広範囲の環境において比較的安定して動作する。なぜなら、周波数フィルタリングが適用されないチャンネルと適用されるチャンネルが、それぞれ少なくとも1つは存在するため、全チャンネルに対して突発音が除去されたり残ったりすることが起こらないからである。
こうして計算されたチャンネル対応のパワー比rkは、図12に示すパワー比保持部135に格納され、必要に応じて分離処理部123の実行する分離処理(表の処理)に際して参照される。すなわち、パワー比に基づく関数(式[8.10]および図28)を用いることで、周波数フィルタリング(図27のステップS308)の実行態様をチャンネルごとに決定する際に利用される。
以上で、ステップS454のパワー比の計算処理についての説明を終了する。
[5.本発明の信号処理装置のその他の実施例(変形例)について]
次に、上述した実施例と異なる実施例としての変形例について説明する。
(5−1.変形例1)
上述した実施例では、周波数フィルタリングのチャンネルごとの適用形態を決定する方法として、パワー比に基づく関数(式[8.10]および図28)を用いる方法について説明した。
別の手段として、「チャンネル間で分離行列適用結果のパワーを比較し、パワーが最小のチャンネル以外のチャンネルに対して周波数フィルタリングを適用する」という方法も可能である。すなわち、パワーが最小のチャンネルを突発音の出力用として常に確保しておくのである。パワーが最小のチャンネルはどの音源にも対応していない可能性が高いため、このような簡易的な方法でも十分に実用になる。
ただし、突発音の出力されるチャンネルが頻繁に切り替わる(例えば、突発音が鳴っている間に切り替わってしまう)のを防ぐために、工夫が必要である。ここでは、そのような工夫として以下の2点、すなわち、
(1) パワー比計算の平滑化
(2) 全死角空間フィルタを学習初期値に反映させる。
これらの2点について説明する。
(1)パワー比計算の平滑化
まず、パワー比計算の平滑化について説明する。
チャンネルごとのパワーを、以下に示す式[10.1]に基づいて計算する。
上記式[10.1]に基づいてチャンネルごとのパワーを計算すると、パワーがほぼ同じ出力チャンネルが複数存在する場合に、パワー最小のチャンネルが頻繁に切り替わりやすくなる。例えば、観測信号が無音に近い場合、全ての出力チャンネルも無音に近くなる、すなわち出力パワーがほとんど同じになり、パワー最小チャンネルが僅差で決定されるため、それが頻繁に切り替えるという現象が発生し得る。
そのような現象を防ぐため、減算量(または over−subtraction factor)αは、先に示した式[8.5]の代わりに式[10.3]で計算する。ただし、αminは0か0に近い正の値であり、αは式[8.5]と同様にαの最大値である。すなわち、パワー最小のチャンネルに対しては周波数フィルタリングを非適用に近い状態とし、それ以外のチャンネルに対しては周波数フィルタリングをそのまま適用する。なお、αminを0に近い正の値とすることで、突発音用に確保されたチャンネルであっても、「消し残り」(「従来法の問題点」を参照)をある程度低減することができる。
(2)全死角空間フィルタを学習初期値に反映させる
次に、全死角空間フィルタを学習初期値に反映させる手法について説明する。パワー最小のチャンネルに対してのみ周波数フィルタリングを非適用(または、非適用に近い状態)とすることで、突発音はそのチャンネルのみに出力される。一方、突発音が鳴り続けると、やがて分離行列に反映され、周波数フィルタリングの作用がなくても一つのチャンネルのみに出力されるようになる。例えば図7に示す(b2)分離結果2のチャンネルである。そのため、両者でチャンネルを一致させるような工夫をしないと、突発音が鳴っている途中で出力先チャンネルが交替するという現象が発生し得る。
周波数フィルタリングを非適用にしたチャンネルにその後も突発音が出力され続けるようにする(=チャンネル交替を防ぐ)ためには、「どのチャンネルに周波数フィルタリングが適用されたか(または適用されなかったか)」という情報が、次回の学習の初期値に反映されるようになっていればよい。その方法について以下で説明する。
前述した実施例では、学習初期値の設定を図25を参照して説明した「分離行列更新処理」のステップS253において(すなわち学習終了直後に)行なっていたが、変形例では、図31を参照して説明した「分離行列学習処理」のステップS412の分離行列Wの初期値設定時において(すなわち次の学習の直前で)行なう。理由は、学習開始直前における最新の分離行列および全死角空間フィルタの値を学習初期値に反映させるためである。(図12の、分離行列適用部126および全死角空間フィルタ適用部127からスレッド制御部131への矢印を参照。)
図31を参照して説明した「分離行列学習処理」のステップS412の分離行列Wの初期値の計算として、先に示した式[10−4]を全周波数ビンについて行なう。ただし、この式[10−4]の左辺のW(ω)は学習初期値として、図13に示すスレッド制御部131の学習初期値保持部152および図14に示すスレッド演算部132の分離行列保持部164に格納される値、右辺のW'(ω)およびB'(ω)はそれぞれ頻繁リスケーリング後の分離行列と全死角空間フィルタである。α'kは式[10.3]のαkと同一の値を用いてもよいが、式[10.5]のように異なる値を用いてもよい。例えば、周波数フィルタリングとしてスペクトル減算を用いた場合、式[10.3]ではα=1.5とする一方、式[10.5]ではα'=1.0とする。(スペクトル減算においてはα>1とすることで、over−subtractionという効果が得られるが、通常の引き算ではα=1の方が望ましいため。)
α'=1かつα'min=0(または0に近い正の値)とすると、式[10.4]で計算される分離行列W(ω)は、パワー最小のチャンネルは突発音を出力し、それ以外のチャンネルは突発音を抑圧するという性質をもつ。従って、そのような値を学習初期値とすることで、学習後も同一のチャンネルに突発音が出力され続ける可能性が高くなる。
なお、必要に応じて、式[10.4]の代わりに式[10.6]の操作を行なってもよい。この式において、normalize()は、カッコ内の行列に対して、各行ベクトルのノルムを1に正規化する操作を表わす。
また、学習スレッド同士で学習時間が重複する可能性がある場合(例えば図5では学習時間57と学習時間58とで時間が重複している)は、最新以外の分離行列も学習初期値に反映させた方が、どのチャンネルにどの音源が出力されるかが安定する。(理由は特開2008−147920を参照されたい。) 変形例において、最新以外の分離行列を学習初期値に反映させるためには、式[10.6]の代わりに式[10.7]を用いる。この式において、右辺のW(ω)は前回計算された学習初期値であり、図13に示す学習初期値保持部152に格納されている。μは忘却係数であり、0以上、1以下の値をとる。
この変形例による判別法を先に示した式[8.1]〜[8.10]と比較すると、ちょうどn個(マイクロホン数と同じ)の音源が連続的に鳴っている状態で新たに突発音が鳴った場合のみ不具合が発生する。すなわち、n−1個の出力チャンネルに対しては周波数フィルタリングによって突発音が除去されるが、最もパワーが小さかったチャンネルに対しては周波数フィルタリングが適用されないため、突発音が重畳して出力される。(その場合でも、従来法と比べると n−1個のチャンネルに対してはメリットがある。)
一方、突発音が鳴る前の音源数がnよりも少ない場合は、どのチャンネルから突発音が出力されるかがあらかじめ予想できる。そのため、主に突発音の方を目的音として使用するようなアプリケーション(例えば、音楽が鳴っている環境において、ときどき音声でコマンドを入力する)においては、ICAの複数の出力チャンネルの内のどれが目的音なのかを特定するのが容易になるという利点がある。
(5−2.変形例2)
ICA以外の線形フィルタリングとの組み合わせ
上述した実施例では、リアルタイムICAに対して全死角空間フィルタと周波数フィルタリング(減算)とを組み合わせたが、ICA以外の線形フィルタリング処理と組み合わせることも可能であり、そうすることで「消し残り」を低減することが可能である。ここでは、線形フィルタリングと組み合わせた場合の構成例について説明した後、線形フィルタリングの具体例として分散最小ビームフォーマ(MVBF:Minimal Variance Beamformer)を用いた場合の処理について説明する。
図33は、「全死角空間フィルタ&周波数フィルタリング」と線形フィルタリングとを組み合わせた場合の構成例を示す図である。図33に示す構成によって実行する処理は、図12に示す分離処理部123の実行する観測信号の分離処理(表の処理)とほぼ同様の処理である。
何らかの線形フィルタの生成および適用を行なう系(フーリエ変換部303→線形フィルタ生成&適用部305)と全死角空間フィルタの生成および適用を行なう系(フーリエ変換部303→全死角空間フィルタ生成&適用部304)とを用意し、それぞれの適用結果に対して周波数フィルタリング(減算)を行なう。線形フィルタ生成&適用部305から全死角空間フィルタ生成&適用部304への破線は、全死角空間フィルタの適用結果に対して必要に応じてリスケーリング(全死角空間フィルタ適用結果のスケールを線形フィルタ適用結果のスケールに合わせる)ことを意味する。
なお、ここでいう線形フィルタリングとは、分離行列W(ω)を行列またはベクトルとし、W(ω)と観測信号ベクトルX(ω,t)とを乗算することで(すなわち、分離結果:Y(ω,t)=W(ω)X(ω,t)の形式で)信号の分離・抽出・除去などを行なう処理のことを意味する。
以下では、線形フィルタリングとして分散最小ビームフォーマを用いた場合について説明する。分散最小ビームフォーマは、目的音と妨害音とが混在する環境において、目的音の方向等の情報などを用いて目的音を抽出する技術の一つであり、適応ビームフォーマ(Adaptive beam former: ABF)と呼ばれる技術の一種である。詳細については、例えば以下の資料を参照されたい。
『音場の計測と指向性制御』小野順貴,安藤繁
弟22回センシングフォーラム資料,pp.305−310,9月.2005.http://hil.t.u−tokyo.ac.jp/publications/download.php?bib=Ono2005SensingForum09.pdf
以下では、図34を用いて分散最小ビームフォーマ(MVBF)について簡単に説明した後、全死角空間フィルタおよび周波数フィルタリングとの組み合わせを説明する。図34に示すような、目的音354(音源数1)と妨害音355(音源数1以上)とが混在する環境において、両者の音が混合した信号をn個のマイクロホン351〜353で観測する。観測信号からなるベクトルを、前記した式[2.2]と同様にX(ω,t)とする。
音源から各マイクロホンまでの伝達関数(インパルス応答)であるH1(ω)〜Hn(ω)は既知とし、それらを要素とするベクトルをH(ω)とする。ベクトルH(ω)は以下に示す式[11.1]によって定義される。
ベクトルH(ω)をステアリングベクトルと呼ぶ。なお、線形フィルタリングの具体例である分散最小ビームフォーマ(MVBF)においては、真の伝達関数を使用しなくても、H1(ω)〜Hn(ω)の間の比が正しければ目的音の抽出は可能である。そのため、ステアリングベクトルは、目的音の音源方向や位置などから算出したり、目的音のみが鳴っている(妨害音はすべて止まっている)区間の観測信号から推定したりすることも可能である。
図34に示すように、観測信号X1(ω,t)〜Xn(ω,t)にフィルタ係数(D1(ω)〜Dn(ω))を乗じるフィルタ358を通して総和したものを分離結果Y(ω,t)359とする。分離結果Y(ω,t)359は、フィルタ係数を要素とするベクトルD(ω)(式[11.2])を用いて式[11.3]のように表わせる。ICAの場合と異なり、出力は1チャンネル、すなわちY(ω,t)はスカラーである。
分散最小ビームフォーマ(MVBF)のフィルタであるD(ω)は、式[11.5]で求められる。この式において、ΣXX(ω)は観測信号の共分散行列であり、ICAの場合と同様に前記した式[4.4]での操作で得られる。なお、式[11.5]は、「目的音354由来の音はそのまま残す」という制約(式[11.4]に相当)の下で、Y(ω,t)の分散<|Y(ω,t)|>を最小にするMVBFフィルタD(ω)を求めるという問題を解くことで導出される。式[11.5]によって計算されるMVBFフィルタD(ω)は、目的音の方向のゲインを1に保つ一方で、それぞれの妨害音の方向には死角を形成している。
しかし、MVBFによる音源抽出には、ICAにおける「消し残り」と同様の課題がある。すなわち、妨害音の音源数がマイク数以上の場合や、妨害音が無指向性の場合(=点音源でない場合)などには、妨害音を死角で消しきれなくなるため、抽出の性能が低下する。また、マイクロホンの配置によって、ある周波数帯域での抽出精度が低下する可能性がある。
また、計算量の制限などにより、フィルタの更新を毎フレームではなく複数フレームに1回の頻度でしか行なえない場合もある。その場合は、「追従遅れ」と同様の現象も発生する。例えば、フィルタの更新を10フレームに1回の頻度で行なった場合、突発音が鳴ってから最大で9フレームの間は、その音が除去されずに出力されてしまう。
一方、本発明の全死角空間フィルタと周波数フィルタリングをMVBFと組み合わせることで、「消し残り」にも「追従遅れ」にも対処可能となる。その際、共分散行列に対して固有値分解を行なうことで、計算量の増加なしに全死角空間フィルタを計算することができる。以下、その方法について説明する。
観測信号の共分散行列を、前記した式[4.4]でフレームごとに計算する。そしてMVBFフィルタの更新頻度に合わせ、共分散行列に対して固有値分解を行なう(前記式[6.1])。ICAと組み合わせた場合と同様に、全死角空間フィルタは、最小の固有値に対応した固有ベクトルの転置である(式[6.2])。
固有値分解の結果を用いると、逆行列を含まないシンプルな式でMVBFのフィルタを計算することができる。前記の式[9.9]から計算される無相関化行列P(ω)を用いると、観測信号の共分散行列は式[11.7]のように書け、それを用いてMVBFのフィルタは式[11.8]のように書くことができるからである。言い換えると、式[11.5]において観測信号の共分散行列を求める手段として固有値分解を用いれば、同時に全死角空間フィルタも求まっている。
こうして求まった全死角空間フィルタB(ω)に対して、リスケーリング(全死角空間フィルタ適用結果のスケールをMVBFフィルタ適用結果のスケールに合わせる処理)を行なう。リスケーリングは、式[11.9]で計算される係数Q(ω)を全死角空間フィルタB(ω)に乗じることで行なう(式[11.11])。リスケーリング済み全死角空間フィルタの適用結果Z'(ω,t)は、式[11.12]で行なう。MVBF側の出力が1チャンネルなので、Z'(ω,t)も1チャンネル(すなわちZ'(ω,t)はスカラー)である。
こうして生成されたMVBFの結果(式[11.3])と全死角空間フィルタ適用結果(式[11.12])との間で、周波数フィルタリング(広い意味での減算)を行なう。それによって、MVBFの結果から「消し残り」が除去されるようになる。また、MVBFフィルタの更新を複数フレームごとに行なったために「追従遅れ」が発生している場合でも、突発音を除去することができるようになる。
[6.本発明の信号処理装置の構成に基づく効果についてのまとめ]
以下、本発明の信号処理装置の構成に基づく効果についてまとめて記載する。本発明の信号処理装置の構成に基づく効果としては以下のような効果がある。
(1)独立成分分析を用いたリアルタイム音源分離システムにおいて、分離行列適用結果の他に全死角空間フィルタ適用結果も生成し、両者の間で周波数フィルタリングまたは減算を行なうことにより、突発音を除去することができる。
(2)周波数フィルタリングを適用する強さ(または減算の量)を、音源に対応した信号が突発音発生前に出力されていたかに応じて切り替えることにより、
a)音源に対応した信号が出力されているチャンネルからは突発音が除去され、
b)音源に対応した信号が出力されていないチャンネルからは突発音が出力されることが可能になる。
(3)分離行列に対して最短で1フレーム毎にリスケーリングを行なうことにより、突発音が出力される際の歪みを低減することができる。
以上、特定の実施例を参照しながら、本発明について詳解してきた。しかしながら、本発明の要旨を逸脱しない範囲で当業者が実施例の修正や代用を成し得ることは自明である。すなわち、例示という形態で本発明を開示してきたのであり、限定的に解釈されるべきではない。本発明の要旨を判断するためには、特許請求の範囲の欄を参酌すべきである。
また、明細書中において説明した一連の処理はハードウェア、またはソフトウェア、あるいは両者の複合構成によって実行することが可能である。ソフトウェアによる処理を実行する場合は、処理シーケンスを記録したプログラムを、専用のハードウェアに組み込まれたコンピュータ内のメモリにインストールして実行させるか、あるいは、各種処理が実行可能な汎用コンピュータにプログラムをインストールして実行させることが可能である。例えば、プログラムは記録媒体に予め記録しておくことができる。記録媒体からコンピュータにインストールする他、LAN(Local Area Network)、インターネットといったネットワークを介してプログラムを受信し、内蔵するハードディスク等の記録媒体にインストールすることができる。
なお、明細書に記載された各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。また、本明細書においてシステムとは、複数の装置の論理的集合構成であり、各構成の装置が同一筐体内にあるものには限らない。
以上、説明したように、本発明の一実施例の構成によれば、複数音源からの出力を混合した混合信号からなる観測信号に対して、独立成分分析(ICA:Independent Component Analysis)を適用した学習処理により、混合信号を分離する分離行列を求めて分離信号を生成するとともに、観測信号として検出された音源に対する死角を持つ全死角空間フィルタを適用して検出音を除去した全死角空間フィルタ適用信号を生成する。さらに、分離信号に含まれる全死角空間フィルタ適用信号に対応する信号成分を除去するフィルタリング処理を実行し、周波数フィルタリング処理結果から音源分離結果を生成する。本構成により、例えば突発音等が含まれる混合信号に対する高精度な音源分離が可能となる。
41 学習データブロック
42 現在時刻の観測信号
43 分離行列
44 現在時刻の分離結果
45 分離結果スペクトログラム区間
46 現在時刻を含む観測信号ブロック
51〜53 適用分離行列規定区間
54 観測信号蓄積区間
55 学習開始タイミング
57,58 学習区間
61,62 音源1出力区間
63 音源2出力区間
64 学習データブロック
65 ブロック終端から現在時刻までの区間
67 音源1の無音区間
69 現在時刻の音源出力
71 継続音
72 突発音
78,79 消し残り
81 学習データブロック区間
82 現在時刻の観測信号
83 分離行列
84 全死角空間フィルタ
85 周波数フィルタリング
91 継続音
92 突発音
101 推定ノイズ
102 観測信号
103 ゲイン推定部
104 ゲイン
105 ゲイン適用部
106 処理結果
111 推定ノイズ
112 観測信号
113 ゲイン推定部
114 ゲイン
115 ゲイン適用部
116 処理結果
121 マイクロホン
122 AD変換部
123 分離処理部
124 フーリエ変換部
125 共分散行列計算部
126 分離行列適用部
127 全死角空間フィルタ適用部
128 周波数フィルタリング部
129 フーリエ逆変換部
130 学習処理部
131 スレッド制御部
132 スレッド演算部
133 分離行列保持部
134 全死角空間フィルタ保持部
135 パワー比保持部
136 後段処理部
151 現フレーム番号保持カウンタ
152 学習初期値保持部
153 蓄積開始予定タイミング指定情報保持部
154 観測信号蓄積タイミング情報保持部
155 ポインタ保持部
160 全死角空間フィルタ保持部
161 観測信号バッファ
162 分離結果バッファ
163 学習演算部
164 分離行列保持部
165 状態格納部
166 カウンタ
167 観測信号の開始・終了タイミング保持部
168 学習終了フラグ
169 前処理用データ保持部
170 打ち切りフラグ
171,174 蓄積中状態
172 学習中状態
173 待機中状態
181 初期状態
182 待機中状態
183 蓄積中状態
184 学習中状態
191〜193 フレーム
301 マイクロホン
302 AD変換部
303 フーリエ変換部
304 全死角空間フィルタ生成&適用部
305 線形フィルタ生成&適用部
306 周波数フィルタリング部
307 フーリエ逆変換部
308 後段処理部
351〜353 マイクロホン
354 目的音
355 妨害音
358 フィルタ
359 分離結果

Claims (10)

  1. 複数のセンサが取得した複数音源の出力の混合信号に対する短時間フーリエ変換(STFT)によって時間周波数領域の観測信号を生成し、該観測信号に対する線形フィルタリング処理により各音源対応の音源分離結果を生成する分離処理部を有し、
    前記分離処理部は、
    前記観測信号に対する線形フィルタリング処理を実行して各音源対応の分離信号を生成する線形フィルタリング処理部と、
    前記複数のセンサによって取得された観測信号に含まれる全ての音源方向に死角を形成した全死角空間フィルタを適用して死角方向の音を除去した全死角空間フィルタ適用信号を生成する全死角空間フィルタ適用部と、
    前記分離信号と前記全死角空間フィルタ適用信号を入力し、前記分離信号に含まれる前記全死角空間フィルタ適用信号に対応する信号成分を除去するフィルタリング処理を実行する周波数フィルタリング部を有し、前記周波数フィルタリング部の処理結果を音源分離結果として生成する信号処理装置。
  2. 前記信号処理装置は、
    複数音源からの出力を混合した混合信号からなる観測信号に対して、独立成分分析(ICA:Independent Component Analysis)を適用した学習処理により、前記混合信号を分離する分離行列を求め、さらに前記観測信号から取得された全ての音源方向に死角を形成した全死角空間フィルタを生成する学習処理部を有し、
    前記線形フィルタリング処理部は、
    前記観測信号に対して、前記学習処理部の生成した分離行列を適用して前記混合信号を分離して各音源対応の分離信号を生成し、
    前記全死角空間フィルタ適用部は、
    前記観測信号に対して、前記学習処理部の生成した全死角空間フィルタを適用して死角方向の音を除去した全死角空間フィルタ適用信号を生成する請求項1に記載の信号処理装置。
  3. 前記周波数フィルタリング部は、
    前記分離信号から前記全死角空間フィルタ適用信号を減算する処理により、前記分離信号に含まれる前記全死角空間フィルタ適用信号に対応する信号成分を除去するフィルタリング処理を実行する請求項1または2に記載の信号処理装置。
  4. 前記周波数フィルタリング部は、
    前記全死角空間フィルタ適用信号を雑音成分としたスペクトル減算による周波数フィルタリング処理により、前記分離信号に含まれる前記全死角空間フィルタ適用信号に対応する信号成分を除去するフィルタリング処理を実行する請求項1または2に記載の信号処理装置。
  5. 前記学習処理部は、
    前記観測信号を区分したブロック単位での学習処理を実行してブロック単位の学習結果に基づく分離行列および全死角空間フィルタを生成する処理を実行し、
    前記分離処理部は、
    前記学習処理部の生成した最新の分離行列および全死角空間フィルタを適用した処理を実行する請求項2に記載の信号処理装置。
  6. 前記周波数フィルタリング部は、
    前記分離信号からの前記全死角空間フィルタ適用信号対応成分の除去レベルを分離信号チャネルに応じて変更する処理を行う請求項1または2に記載の信号処理装置。
  7. 前記周波数フィルタリング部は、
    前記分離信号からの前記全死角空間フィルタ適用信号対応成分の除去レベルを分離信号チャネルのパワー比に応じて変更する処理を行う請求項6に記載の信号処理装置。
  8. 前記分離処理部は、
    観測信号からの切り出しデータ単位であるフレーム中、現在の観測信号を含むフレームを適用したスケール調整としてのリスケーリング処理を実行した分離行列と、全死角空間フィルタを生成して、リスケーリング処理後の分離行列と全死角空間フィルタを適用した処理を行う請求項2に記載の信号処理装置。
  9. 信号処理装置において音源分離処理を実行する信号処理方法であり、
    分離処理部において、複数のセンサが取得した複数音源の出力の混合信号に対する短時間フーリエ変換(STFT)によって時間周波数領域の観測信号を生成し、該観測信号に対する線形フィルタリング処理により各音源対応の音源分離結果を生成する分離処理ステップを有し、
    前記分離処理ステップは、
    前記観測信号に対する線形フィルタリング処理を実行して各音源対応の分離信号を生成する線形フィルタリング処理ステップと、
    前記複数のセンサによって取得された観測信号に含まれる全ての音源方向に死角を形成した全死角空間フィルタを適用して死角方向の音を除去した全死角空間フィルタ適用信号を生成する全死角空間フィルタ適用ステップと、
    前記分離信号と前記全死角空間フィルタ適用信号を入力し、前記分離信号に含まれる前記全死角空間フィルタ適用信号に対応する信号成分を除去するフィルタリング処理を実行する周波数フィルタリングステップを有し、前記周波数フィルタリングステップの処理結果を音源分離結果として生成する信号処理方法。
  10. 信号処理装置において音源分離処理を実行させるプログラムであり、
    分離処理部において、複数のセンサが取得した複数音源の出力の混合信号に対する短時間フーリエ変換(STFT)によって時間周波数領域の観測信号を生成し、該観測信号に対する線形フィルタリング処理により各音源対応の音源分離結果を生成する分離処理ステップを実行させ、
    前記分離処理ステップにおいては、さらに、
    前記観測信号に対する線形フィルタリング処理を実行して各音源対応の分離信号を生成する線形フィルタリング処理ステップと、
    前記複数のセンサによって取得された観測信号に含まれる全ての音源方向に死角を形成した全死角空間フィルタを適用して死角方向の音を除去した全死角空間フィルタ適用信号を生成する全死角空間フィルタ適用ステップと、
    前記分離信号と前記全死角空間フィルタ適用信号を入力し、前記分離信号に含まれる前記全死角空間フィルタ適用信号に対応する信号成分を除去するフィルタリング処理を実行する周波数フィルタリングステップを実行させて、前記周波数フィルタリングステップの処理結果を音源分離結果として生成させるプログラム。
JP2009265075A 2009-11-20 2009-11-20 信号処理装置、および信号処理方法、並びにプログラム Expired - Fee Related JP5299233B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2009265075A JP5299233B2 (ja) 2009-11-20 2009-11-20 信号処理装置、および信号処理方法、並びにプログラム
US12/944,304 US8818001B2 (en) 2009-11-20 2010-11-11 Signal processing apparatus, signal processing method, and program therefor
CN201010553983.3A CN102075831B (zh) 2009-11-20 2010-11-19 信号处理设备、信号处理方法及其程序

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009265075A JP5299233B2 (ja) 2009-11-20 2009-11-20 信号処理装置、および信号処理方法、並びにプログラム

Publications (2)

Publication Number Publication Date
JP2011107602A true JP2011107602A (ja) 2011-06-02
JP5299233B2 JP5299233B2 (ja) 2013-09-25

Family

ID=44034147

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009265075A Expired - Fee Related JP5299233B2 (ja) 2009-11-20 2009-11-20 信号処理装置、および信号処理方法、並びにプログラム

Country Status (3)

Country Link
US (1) US8818001B2 (ja)
JP (1) JP5299233B2 (ja)
CN (1) CN102075831B (ja)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104064186A (zh) * 2014-06-26 2014-09-24 山东大学 一种基于独立分量分析的电气设备故障音检测方法
CN104614069A (zh) * 2015-02-25 2015-05-13 山东大学 基于联合近似对角化盲源分离算法的电力设备故障音检测方法
WO2015125567A1 (ja) * 2014-02-20 2015-08-27 ソニー株式会社 音信号処理装置、および音信号処理方法、並びにプログラム
WO2016056410A1 (ja) * 2014-10-10 2016-04-14 ソニー株式会社 音声処理装置および方法、並びにプログラム
JP2016142914A (ja) * 2015-02-02 2016-08-08 日本電信電話株式会社 ウィーナーフィルタ設計装置、音声強調装置、ウィーナーフィルタ設計方法、プログラム
WO2016167141A1 (ja) * 2015-04-16 2016-10-20 ソニー株式会社 信号処理装置、信号処理方法、およびプログラム
US10475440B2 (en) 2013-02-14 2019-11-12 Sony Corporation Voice segment detection for extraction of sound source

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012098427A1 (en) * 2011-01-18 2012-07-26 Nokia Corporation An audio scene selection apparatus
US8903722B2 (en) 2011-08-29 2014-12-02 Intel Mobile Communications GmbH Noise reduction for dual-microphone communication devices
US9966088B2 (en) * 2011-09-23 2018-05-08 Adobe Systems Incorporated Online source separation
CN102457632B (zh) * 2011-12-29 2014-07-30 歌尔声学股份有限公司 一种多受话端回声消除方法
US20130294611A1 (en) * 2012-05-04 2013-11-07 Sony Computer Entertainment Inc. Source separation by independent component analysis in conjuction with optimization of acoustic echo cancellation
CN103105513B (zh) * 2013-01-17 2015-09-16 广东电网公司电力科学研究院 消除被检设备输出随机大信号对标准设备损害的保护装置
CN105230044A (zh) * 2013-03-20 2016-01-06 诺基亚技术有限公司 空间音频装置
CN103854660B (zh) * 2014-02-24 2016-08-17 中国电子科技集团公司第二十八研究所 一种基于独立成分分析的四麦克语音增强方法
US9928213B2 (en) 2014-09-04 2018-03-27 Qualcomm Incorporated Event-driven spatio-temporal short-time fourier transform processing for asynchronous pulse-modulated sampled signals
DK3007467T3 (da) * 2014-10-06 2017-11-27 Oticon As Høreapparat, der omfatter en lydkildeadskillelsesenhed med lav latenstid
CN104540001B (zh) * 2015-01-08 2017-05-31 厦门大学 一种用于在线学习的影音同步联动方法
CN105307095B (zh) * 2015-09-15 2019-09-10 中国电子科技集团公司第四十一研究所 一种基于fft的高分辨率音频频率测量方法
EP3440670B1 (en) 2016-04-08 2022-01-12 Dolby Laboratories Licensing Corporation Audio source separation
TWI622043B (zh) * 2016-06-03 2018-04-21 瑞昱半導體股份有限公司 聲源分離方法與裝置
CN107507624B (zh) * 2016-06-14 2021-03-09 瑞昱半导体股份有限公司 声源分离方法与装置
CN106708041B (zh) * 2016-12-12 2020-12-29 西安Tcl软件开发有限公司 智能音箱、智能音箱定向移动方法及装置
CN112198496B (zh) * 2020-09-29 2022-11-29 上海特金无线技术有限公司 信号处理方法、装置及设备、存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2005024788A1 (ja) * 2003-09-02 2005-03-17 Nippon Telegraph And Telephone Corporation 信号分離方法、信号分離装置、信号分離プログラム及び記録媒体
JP2006197552A (ja) * 2004-12-17 2006-07-27 Univ Waseda 音源分離システムおよび音源分離方法、並びに音響信号取得装置
JP2007047427A (ja) * 2005-08-10 2007-02-22 Hitachi Ltd 音声処理装置
JP2008147920A (ja) * 2006-12-08 2008-06-26 Sony Corp 情報処理装置および情報処理方法、並びに、プログラム

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04172530A (ja) 1990-11-06 1992-06-19 Kobe Nippon Denki Software Kk 画面データ入力方式
JP3881367B2 (ja) * 2003-03-04 2007-02-14 日本電信電話株式会社 位置情報推定装置、その方法、及びプログラム
US7186203B2 (en) * 2003-07-22 2007-03-06 Toyota Jidosha Kabushiki Kaisha Planetary gear type multistage transmission for vehicle
US7428490B2 (en) * 2003-09-30 2008-09-23 Intel Corporation Method for spectral subtraction in speech enhancement
JP4449871B2 (ja) 2005-01-26 2010-04-14 ソニー株式会社 音声信号分離装置及び方法
KR100927897B1 (ko) 2005-09-02 2009-11-23 닛본 덴끼 가부시끼가이샤 잡음억제방법과 장치, 및 컴퓨터프로그램
JP4701931B2 (ja) * 2005-09-02 2011-06-15 日本電気株式会社 信号処理の方法及び装置並びにコンピュータプログラム
WO2007026827A1 (ja) 2005-09-02 2007-03-08 Japan Advanced Institute Of Science And Technology マイクロホンアレイ用ポストフィルタ
US20080228470A1 (en) * 2007-02-21 2008-09-18 Atsuo Hiroe Signal separating device, signal separating method, and computer program

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2005024788A1 (ja) * 2003-09-02 2005-03-17 Nippon Telegraph And Telephone Corporation 信号分離方法、信号分離装置、信号分離プログラム及び記録媒体
JP2006197552A (ja) * 2004-12-17 2006-07-27 Univ Waseda 音源分離システムおよび音源分離方法、並びに音響信号取得装置
JP2007047427A (ja) * 2005-08-10 2007-02-22 Hitachi Ltd 音声処理装置
JP2008147920A (ja) * 2006-12-08 2008-06-26 Sony Corp 情報処理装置および情報処理方法、並びに、プログラム

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
JPN6013023459; 猿渡洋他: '"帯域分割型ICAとビームフォーミングを利用したブラインド音源分離"' 電子情報通信学会技術研究報告 Vol.100,No.161, 200006, pp.1-8 *
JPN6013023462; 川村俊也他: '"ICAとビームフォーミングを利用した高速収束アルゴリズムに基づくブラインド音源分離"' 電子情報通信学会技術研究報告 Vol.101,No.32, 200104, pp.9-16 *

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10475440B2 (en) 2013-02-14 2019-11-12 Sony Corporation Voice segment detection for extraction of sound source
WO2015125567A1 (ja) * 2014-02-20 2015-08-27 ソニー株式会社 音信号処理装置、および音信号処理方法、並びにプログラム
US10013998B2 (en) 2014-02-20 2018-07-03 Sony Corporation Sound signal processing device and sound signal processing method
CN104064186A (zh) * 2014-06-26 2014-09-24 山东大学 一种基于独立分量分析的电气设备故障音检测方法
WO2016056410A1 (ja) * 2014-10-10 2016-04-14 ソニー株式会社 音声処理装置および方法、並びにプログラム
JPWO2016056410A1 (ja) * 2014-10-10 2017-07-20 ソニー株式会社 音声処理装置および方法、並びにプログラム
US10602266B2 (en) 2014-10-10 2020-03-24 Sony Corporation Audio processing apparatus and method, and program
JP2016142914A (ja) * 2015-02-02 2016-08-08 日本電信電話株式会社 ウィーナーフィルタ設計装置、音声強調装置、ウィーナーフィルタ設計方法、プログラム
CN104614069A (zh) * 2015-02-25 2015-05-13 山东大学 基于联合近似对角化盲源分离算法的电力设备故障音检测方法
WO2016167141A1 (ja) * 2015-04-16 2016-10-20 ソニー株式会社 信号処理装置、信号処理方法、およびプログラム
JPWO2016167141A1 (ja) * 2015-04-16 2018-02-08 ソニー株式会社 信号処理装置、信号処理方法、およびプログラム

Also Published As

Publication number Publication date
JP5299233B2 (ja) 2013-09-25
US20110123046A1 (en) 2011-05-26
CN102075831A (zh) 2011-05-25
US8818001B2 (en) 2014-08-26
CN102075831B (zh) 2013-10-23

Similar Documents

Publication Publication Date Title
JP5299233B2 (ja) 信号処理装置、および信号処理方法、並びにプログラム
JP7191793B2 (ja) 信号処理装置、信号処理方法、及びプログラム
JP7175441B2 (ja) 雑音のある時変環境のための重み付け予測誤差に基づくオンライン残響除去アルゴリズム
US10123113B2 (en) Selective audio source enhancement
Gannot et al. A consolidated perspective on multimicrophone speech enhancement and source separation
JP5229053B2 (ja) 信号処理装置、および信号処理方法、並びにプログラム
US10930298B2 (en) Multiple input multiple output (MIMO) audio signal processing for speech de-reverberation
CN104854878B (zh) 使用双麦克风阵列抑制空间干扰的设备、方法和计算机介质
EP2133707A2 (en) Signal processing apparatus, signal processing method, and program
KR101340215B1 (ko) 멀티채널 신호의 반향 제거를 위한 시스템, 방법, 장치 및 컴퓨터 판독가능 매체
JP5284360B2 (ja) 周囲信号を抽出するための重み付け係数を取得する装置および方法における周囲信号を抽出する装置および方法、並びに、コンピュータプログラム
CN105981404B (zh) 使用麦克风阵列的混响声的提取
RU2559520C2 (ru) Устройство и способ для пространственно избирательного получения звука с помощью акустической триангуляции
JP5233827B2 (ja) 信号分離装置、および信号分離方法、並びにコンピュータ・プログラム
JP4973657B2 (ja) 適応アレイ制御装置、方法、プログラム、及び適応アレイ処理装置、方法、プログラム
JP2011215317A (ja) 信号処理装置、および信号処理方法、並びにプログラム
JP2005249816A (ja) 信号強調装置、方法及びプログラム、並びに音声認識装置、方法及びプログラム
Wang et al. Noise power spectral density estimation using MaxNSR blocking matrix
US20190080709A1 (en) Spectral Estimation Of Room Acoustic Parameters
US20140270219A1 (en) Method, apparatus, and manufacture for beamforming with fixed weights and adaptive selection or resynthesis
WO2007123047A1 (ja) 適応アレイ制御装置、方法、プログラム、及びこれを利用した適応アレイ処理装置、方法、プログラム
US10636434B1 (en) Joint spatial echo and noise suppression with adaptive suppression criteria
JP6724905B2 (ja) 信号処理装置、信号処理方法、およびプログラム
CN103999155B (zh) 音频信号噪声衰减
JP5787126B2 (ja) 信号処理方法、情報処理装置、及び信号処理プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120926

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130510

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: 20130521

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130603

LAPS Cancellation because of no payment of annual fees