(57)【要約】【課題】畳み込み信号の波形によることなく、処理演算量を減らして効率良く畳み込み演算を行うことができる畳み込み演算方法を提供する。【解決手段】元音声信号が入力されると振幅をディジタルサンプリングする（Ｓ１→Ｓ２）。そして、ディジタルサンプリングされた元音声データに対して、インパルス応答の振幅を上位側から所定ビットずつ４分割することで形成される４つの畳み込みデータであるレベルデータ列（ＨＨレベルデータ、ＨＬレベルデータ、ＬＨレベルデータ、ＬＬレベルデータ）をこの順で畳み込み演算する（Ｓ３→Ｓ４→Ｓ５→Ｓ６）。この畳み込み演算の際、畳み込み演算に用いる係数データは各レベルデータ列に応じて最適に設定されている。そして、このように畳み込み演算された各データを加算して出力する（Ｓ７）。【選択図】  図１
2006245865.tif 000002
【特許請求の範囲】
【請求項１】
入力信号列に対してインパルス応答等の畳み込みデータ列を積和演算する畳み込み演算方法であって、
前記畳み込みデータ列の各データを、それぞれが連続した所定ビット数毎のビット群からなる複数の成分データに分割し、
前記積和演算を、上位ビットの成分データ列から順に、成分データ列毎に行うことを特徴とする畳み込み演算方法。
【請求項２】
前記入力信号列と畳み込みデータ列の成分データ列との積和演算を、有意な値を有する成分データでのみ行う請求項１に記載の畳み込み演算方法。
【請求項３】
前記畳み込みデータ列における有意な値を有する成分データの連続を検知して、連続する成分データ群を１つの積和演算のブロックとして処理する請求項１または請求項２に記載の畳み込み演算方法。
【請求項４】
前記積和演算の演算時間を設定し、該演算時間内に入らない下位ビット側の成分データ列の積和演算を省略する請求項１〜請求項３のいずれかに記載の畳み込み演算方法。
【請求項５】
入力信号列に対してインパルス応答等の畳み込みデータ列を積和演算する畳み込み演算処理プログラムであって、
前記畳み込みデータ列の各データを、それぞれが連続した所定ビット数毎のビット群からなる複数の成分データに分割する処理と、
前記積和演算を、上位ビットの成分データ列から順に、成分データ列毎に行う処理と、を含むことを特徴とする畳み込み演算処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、入力信号にインパルス応答等の畳み込み演算処理を効率化した畳み込み演算方法に関するものである。
【背景技術】
【０００２】
従来、ホール等の特定音響環境における音を模擬的に再現するために、無響環境で元信号となる音声信号を取得して、この音声信号を予め設定したインパルス応答で畳み込む方法が用いられることがある。
【０００３】
この方法では、取得した音声信号（入力信号）を所定サンプリング周期でサンプリングし、所定のビット数で量子化してディジタル形式の元音声データを形成する。そして、この元音声データを、インパルス応答が各タップのフィルタ係数として設定されているＦＩＲフィルタに順次入力していき、この元音声データにインパルス応答を乗加算（畳み込み）して出力する。このような畳み込み演算では、元音声データの各時間単位での振幅データに対して、インパルス応答の各振幅データを乗加算し、この演算を元音声データの全ての振幅データに対して行う。すなわち、畳み込み演算は次式により表現される演算を行うものである。
【０００４】
【数１】
2006245865.tif 000003
【０００５】
従って、この演算処理では、畳み込む信号であるインパルス応答データの振幅データ数が増加する、すなわち、インパルス応答信号の時間軸上の長さが長くなるか、サンプリング周期が短くなる、と、演算量が増加することになる。
【０００６】
このように畳み込み演算では、精度を向上させようとすればデータ演算量が飛躍的に増大してしまうために、より効率的な演算処理方法が各種考案されている。
【０００７】
そして、効率的な演算処理方法として、フーリエ変換と逆フーリエ変換とを用いて、時間領域の処理を周波数領域の処理に変換する方法が考案されている。しかしながら、この方法では、元音声データを入力してから演算処理して出力するまでに遅延が生じるので、汎用なシステムではリアルタイムな処理を行うことができない場合が生じた。
【０００８】
このため、遅延の生じない時間領域での畳み込み演算処理方法として、特許文献１には、畳み込みデータ列を振幅レベルに応じて上位ビットと下位ビットとの２段階の成分データに分割して、それぞれ個別で元音声データに畳み込み演算を行った後に加算する方法が開示されている。
【０００９】
また、特許文献２には、畳み込みデータ列を時間軸上で複数のブロック（セグメント）に分割して、ブロックごとの最大振幅を示す畳み込みデータの振幅に基づきブロック単位で畳み込み演算を行って加算する方法が開示されている。
【特許文献１】特開２００３−１３３９１１公報
【特許文献２】特表２００２−５３４８３１公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかしながら、特許文献１に記載の畳み込み演算方法では、上位ビットと下位ビットとの２段階に分割することで処理回路の大型化を抑制することはできるが、全体的な処理量は変わらず、処理演算量を低減することはできなかった。
【００１１】
また、特許文献２に記載の畳み込み演算方法では、畳み込みデータ列の波形によっては、処理演算量を削減することは可能である。しかしながら、ブロック内に大きな振幅の畳み込みデータが１つでも存在すると、この畳み込みデータの振幅（ビット数）に応じて、当該ブロック内の他の畳み込みデータの演算処理も行われるため、効率的に畳み込み演算を行うことができなかった。
【００１２】
従って、本発明の目的は、畳み込みデータ列の波形によることなく、処理演算量を減らして効率良く畳み込み演算を行うことができる畳み込み演算方法を提供することにある。
【課題を解決するための手段】
【００１３】
この発明は、入力信号列に対してインパルス応答等の畳み込みデータ列を積和演算する畳み込み演算方法であって、畳み込みデータ列の各データをそれぞれが連続した所定ビット数毎のビット群からなる複数の成分データに分割し、上位ビットの成分データ列から順で成分データ列毎に積和演算を行うことを特徴としている。
【００１４】
この畳み込み演算方法では、畳み込みデータ列が振幅レベルに応じて複数の成分データ列に分割され、各成分データ列がそれぞれ個別に入力信号列へ畳み込み演算される。この際、上位ビット側の成分データ列から順に畳み込み演算が行われる。
図８は畳み込みデータ列として用いられるインパルス応答の一例を示す図である。
通常、インパルス応答は、図８に示すように、初期に大きな振幅のデータが生じ、徐々に小さな振幅のデータに移行していく形状である。このため、データの振幅レベルに基づく成分データ列毎に存在するデータ量が異なる。具体的には、高い振幅レベルの成分データが含まれる成分データ列ではデータ量が少なく、低い振幅レベルの成分データが含まれる成分データ列ではデータ量が多くなる。このように成分データ列毎で含まれるデータ量が異なることを利用して成分データ列毎に適した畳み込み演算を行い、この後に各演算データを加算することで、全体として適切な畳み込み演算処理が行われる。
【００１５】
ここで、図８に示すようなインパルス応答では、高い振幅レベルの成分データ、すなわち上位ビットの成分データはデータの初期部分にのみ局所的に存在するのでデータ量が少ないが、高い振幅レベルの成分データによる演算結果が出力データに与える影響は大きい。一方、低いレベルの成分データ、すなわち下位ビットの成分データは波形の全体を通して略連続してデータが存在するのでデータ量が多いが、低い振幅レベルの成分データによる演算結果が出力データに与える影響は、高い振幅レベルの成分データよりも大きくない。このため、この演算方法では、高い振幅レベルの成分データ列から順に畳み込み演算を行うことで、畳み込み後のデータすなわち出力データに対して影響の大きい部分から優先的に畳み込み演算が行われる。
【００１６】
また、この演算方法は、入力信号列と畳み込みデータ列の成分データ列との積和演算を、有意な値を有する成分データでのみ行うことを特徴としている。
【００１７】
この演算方法では、前述の成分データ列毎の畳み込み演算として、成分データが存在しない、すなわち「０」データとなる時間軸上のアドレスに対しては畳み込み演算を行わないことで、処理演算量が低減される。ここで、「時間軸上のアドレス」とは、時系列の音声データや畳み込みデータを遅延時間に応じて（時系列で）メモリに記憶させたときの該メモリ上のアドレスを示すものである。例えば、前述のように、高い振幅レベルの成分データ列に含まれる有意な値を有する成分データは少なく、時間軸上のアドレスに対して成分データが存在しないアドレスが存在する。これを利用し、成分データが存在するアドレスでのみ畳み込み演算を行い、成分データが存在しないアドレスでの畳み込み演算を省略することで、処理演算量が低減される。
【００１８】
また、この演算方法は、畳み込みデータ列における有意な値を有する成分データの連続を検知して、連続する成分データ群を１つの積和演算のブロックとして処理することを特徴としている。
【００１９】
この演算方法では、「０」でない有意な値の成分データが時系列のアドレス上で連続して存在する場合に、各アドレスとこれに対応する成分データとは、それぞれにアドレスを読み出しながら畳み込み演算されるのではなく、有意な値の成分データが連続するブロックの先頭アドレスを読み出してブロック単位で畳み込み演算が行われる。すなわち、有意な値の成分データが連続するブロックの先頭アドレスを読み出してこのブロックの最初の成分データにより畳み込み演算が行われると、次のアドレスからは該当ブロックのアドレスが終了するまで単にアドレスをインクリメントさせながら畳み込み演算が行われる。
【００２０】
また、この演算方法は、積和演算の演算時間を設定し、該演算時間内に入らない下位ビット側の成分データ列の積和演算を省略することを特徴としている。
【００２１】
この演算方法では、リアルタイムに畳み込み演算が行われる場合で、入力信号列に対して全ての畳み込み演算が行われない場合でも、畳み込み後の出力データに対して影響の大きい、高い振幅レベルの成分データ列で畳み込み演算される。そして、影響の少ない、低い振幅レベルの成分データ列に対しては畳み込み演算が省略される。
【００２２】
また、この発明は、入力信号列に対してインパルス応答等の畳み込みデータ列を積和演算する畳み込み演算処理プログラムであって、畳み込みデータ列の各データを、それぞれが連続した所定ビット数毎のビット群からなる複数の成分データに分割する処理と、積和演算を、上位ビットの成分データ列から順に、成分データ列毎に行う処理と、を含むことを特徴としている。
【００２３】
この構成では、このような畳み込み演算処理プログラムをインストールすることで、汎用の演算処理装置であっても、前述のような畳み込み演算が行われる。
【発明の効果】
【００２４】
この発明によれば、振幅レベルにより分割された成分データ列毎に適した畳み込み演算処理を実行することで、全体に同じ畳み込み演算処理を実行する場合に生じる不必要な演算を行わないので、より効率的に畳み込み演算処理を行うことができる。さらに、畳み込み後の出力データに対して影響の大きい、高振幅レベルの成分データ列から優先的に畳み込み演算処理を行うことで、途中で畳み込み演算処理を終了しなければならなくなっても、与える影響の大きい部分が優先的に実行されるので、畳み込み演算後の出力データに対する影響を抑制することができる。
【００２５】
また、この発明によれば、各成分データ列において有意な値の成分データが存在しないアドレスでは畳み込み演算処理を行わないことで、畳み込み演算量が減少して、より効率的に畳み込み演算処理を行うことができる。
【００２６】
また、この発明によれば、成分データ列の畳み込み演算を有意な値の成分データが存在する連続するアドレスからなるブロック単位で行うことで、連続するブロックの先頭アドレスを読み出した後には順次アドレスをインクリメントしながら畳み込み演算を行う。この順次アドレスをインクリメントしながら行う畳み込み演算は通常の畳み込み演算処理であり、各アドレスを順次読み出す必要がないので、より効果的に畳み込み演算処理を行うことができる。
【００２７】
また、この発明によれば、畳み込み後の出力データに影響の少ない畳み込みデータ列の振幅レベルの低い部分による畳み込み演算が省略されても、畳み込み後の出力データに影響の大きい畳み込みデータ列の振幅レベルの高い部分が優先的に畳み込み演算処理されるので、リアルタイム処理等のように限られた時間内で、畳み込みデータ列の畳み込み効果をより大きく反映させることができる。
【００２８】
また、この発明によれば、前述の畳み込み演算をプログラム化することで、このプログラムをインストールした汎用の演算処理装置で効果的に畳み込み演算を行うことができる。
【発明を実施するための最良の形態】
【００２９】
本発明の実施形態に係る畳み込み演算方法について図１〜図６を参照して説明する。
なお、以下の説明では、元音声信号の振幅の量子化を３２ビットで行い、畳み込みデータ列であるインパルス応答の振幅の量子化も３２ビットで行った場合について説明する。
【００３０】
図１は本実施形態の畳み込み演算の処理フローを示すフローチャートである。
図２はインパルス応答の振幅レベルによる演算方法設定フローを示すフローチャートである。
図３はディジタルサンプリングされたインパルス応答を４つのレベルデータ列に分割する概念を示す説明図である。
図４は４つのレベルデータ列毎の演算概念および演算順序を示す説明図である。
図５は４つのレベルデータ列に対応する係数データの概念を示す説明図である。
図６は図１に示す畳み込み演算の処理フローを示すブロック図である。
【００３１】
本実施形態の畳み込み演算では、まず、アナログの元音声信号を受音すると、この元音声信号をディジタルサンプリングして振幅を量子化し、３２ビットのディジタル音声データ（本発明の「入力信号列」に相当し、以下、「元音声データ」と称す。）を生成する（Ｓ１→Ｓ２）。
【００３２】
インパルス応答はディジタルサンプリングされて振幅が３２ビットで量子化されており、上位ビット側から８ビットずつ４分割されることで、４つの振幅レベル範囲のレベルデータ列であるＨＨレベルデータ、ＨＬレベルデータ、ＬＨレベルデータ、ＬＬレベルデータに分割されている。これら、ＨＨレベルデータ、ＨＬレベルデータ、ＬＨレベルデータ、ＬＬレベルデータが本発明の「成分データ列」に相当し、これらが加算された総データが本発明の「畳み込みデータ列」に相当する。
【００３３】
そして、本実施形態の畳み込み演算では、これら、ＨＨレベルデータ、ＨＬレベルデータ、ＬＨレベルデータ、ＬＬレベルデータを元音声データに順次畳み込み演算する。この際、畳み込み順序は、上位ビット側のレベルデータ列から順に行う。すなわち、まずＨＨレベルデータと元音声データとを畳み込み演算し、２番目にＨＬレベルデータと元音声データとを畳み込み演算し、３番目にＬＨレベルデータと元音声データとを畳み込み演算し、最後（４番目）にＬＬレベルデータと元音声データとを畳み込み演算する（Ｓ３→Ｓ４→Ｓ５→Ｓ６）。
【００３４】
また、後述するように、レベルデータ列毎に予め係数データ（図５参照。）が設定されており、この係数データに基づいて畳み込み演算が行われる。
【００３５】
元音声データと各レベルデータ列との畳み込み演算が行われると、次に、これら４つの畳み込み演算後のデータを加算して出力する（Ｓ７）。この際、元音声データとＨＨレベルデータとの畳み込み演算データは上位側に２４ビットシフト処理され、元音声データとＨＬレベルデータとの畳み込み演算データは上位側に１６ビットシフト処理され、元音声データとＬＨレベルデータとの畳み込み演算データは上位側に８ビットシフト処理された後に加算される。
【００３６】
このような処理を行うことにより、元音声データとインパルス応答に基づくインパルス応答データ（畳み込みデータ列）との畳み込み演算が実現される。
【００３７】
ここで、予め設定した処理時間内に全ての演算処理ができないと判断した場合や次の元音声信号が入力された場合、新たな元音声信号に対して畳み込み演算を行う処理を開始するため現在の畳み込み演算を中断する。例えば、現在のレベルデータ列での乗算処理の後で、以降のレベルデータ列での乗算処理が予め設定した処理時間内に終了しないと判断すると、以降のレベルデータ列の乗算処理を中断し、必要なシフト処理および加算処理を行って畳み込み後のデータを出力する。
【００３８】
次に、レベルデータ列毎の係数データの設定方法について図２〜図５を参照して具体的に説明する。
レベルデータ列毎の係数データを設定する場合、必要とするインパルス応答を取得してディジタルサンプリングを行う。この際、サンプリング周期は所定値に設定し、振幅は３２ビットで量子化する（Ｓ１１）。この処理を行うことで、図３の左図のようなディジタルデータ波形ｈ（ｉ）が得られる。
【００３９】
次に、このインパルス応答のディジタルデータを振幅レベルに応じて、それぞれが８ビット単位で構成される４つのレベルデータ列に分割する（Ｓ１２）。この処理を行うことで、図３の右図のような４つのレベルデータＨＨ（ｉ），ＨＬ（ｉ），ＬＨ（ｉ），ＬＬ（ｉ）が得られる。
【００４０】
次に、４つのレベルデータＨＨ（ｉ），ＨＬ（ｉ），ＬＨ（ｉ），ＬＬ（ｉ）に対してそれぞれ畳み込み演算の際に用いる係数データを設定する。
レベルデータＨＨ（ｉ）は、インパルス応答の各サンプリングデータ（振幅データ）のうちで最上位８ビットの成分データにより構成されるので、このレベルデータ列にデータが存在することが少なく、且つ時間軸上に離散的に存在する。このため、レベルデータＨＨ（ｉ）に対応する係数データ（ＨＨ係数データ）は、時間軸上のアドレスと、このアドレスに対応する８ビットの成分データとから構成される。ここで、ＨＨ係数データは、成分データが「０」の場合にはアドレスデータを持たない。すなわち、「０」でない有意な値の成分データとこの成分データが存在するアドレスとから構成される。例えば、ＨＨ係数データは、図５（Ａ）に示すように、アドレス「ａａａａ」とこれに対応する成分データ「ＡＡＡＡＡＡＡ１」とで構成される。
【００４１】
レベルデータＨＬ（ｉ）は、インパルス応答の各サンプリングデータ（振幅データ）のうちで前記レベルデータＨＨ（ｉ）に次ぐ上位８ビットの成分データにより構成される。このレベルデータ列では、レベルデータＨＨ（ｉ）に比べるとデータ数は多いが、下位側の１６ビットのレベルデータ列に相当するレベルデータＬＨ（ｉ）、ＬＬ（ｉ）よりはデータ数が少ない。そして、時間軸上で連続して成分データが存在することがレベルデータＨＨ（ｉ）よりも多くなる。このため、レベルデータＨＬ（ｉ）に対応する係数データ（ＨＬ係数データ）は、時間軸上で連続する成分データの集合を成分データ群として、時間軸上の成分データ群の先頭アドレスと、このアドレスから時系列に連続するデータ数と、このアドレスに対応して時系列に並ぶ各８ビットの成分データ群とから構成される。このように、ＨＬ係数データについても、成分データが「０」の場合にはアドレスデータを持たない。例えば、ＨＬ係数データは、図５（Ｂ）に示すように、アドレス「ｂｂｂｂ」と、データ数「ｍ」と、これらに対応する成分データ群「ＢＢＢＢＢＢＢ１〜ＢＢＢＢＢＢＢｍ」とで構成される。
【００４２】
レベルデータＬＨ（ｉ）は、インパルス応答の各サンプリングデータ（振幅データ）のうちで前記レベルデータＨＬ（ｉ）に次ぐ上位８ビットの成分データにより構成される。このレベルデータ列では、レベルデータＨＨ（ｉ），ＨＬ（ｉ）のレベルデータ列に比べるとデータ数は多いが、最下位の８ビットのレベルデータ列に相当するレベルデータＬＬ（ｉ）よりはデータ数が少ない。そして、レベルデータＨＬ（ｉ）と同様に、時間軸上で連続して成分データが存在することがレベルデータＨＨ（ｉ）よりも多くなる。このため、レベルデータＬＨ（ｉ）に対応する係数データ（ＬＨ係数データ）も、レベルデータＨＬ（ｉ）と同様に、時間軸上で連続する成分データの集合を成分データ群として、時間軸上の成分データ群の先頭アドレスと、このアドレスから時系列に連続するデータ数と、このアドレスに対応して時系列に並ぶ各８ビットの成分データ群とから構成される。このように、ＬＨ係数データについても、成分データが「０」の場合にはアドレスデータを持たない。例えば、ＬＨ係数データは、図５（Ｃ）に示すように、アドレス「ｃｃｃｃ」と、データ数「ｎ」と、これらに対応する成分データ群「ＣＣＣＣＣＣＣ１〜ＣＣＣＣＣＣＣｎ」とで構成される。
【００４３】
レベルデータＬＬ（ｉ）は、インパルス応答の各サンプリングデータ（振幅データ）のうちで最下位８ビットの成分データにより構成される。通常、このレベルデータ列では、時間軸上の殆ど全てのアドレスで成分データが存在する。このため、レベルデータＬＬ（ｉ）に対応する係数データ（ＬＬ係数データ）は時系列に並ぶ各８ビットの成分データ群で構成される。例えば、ＬＬ係数データは、図５（Ｄ）に示すように、成分データ群「ＤＤＤＤＤＤＤ１〜ＤＤＤＤＤＤＤｎ」から構成される。
このように設定された各係数データの畳み込み演算への適用方法について次に説明する。
【００４４】
元音声データとレベルデータＨＨ（ｉ）に対応するＨＨ係数データとを畳み込み演算する場合、元音声データに対して、アドレス情報が付加された成分データを乗算する。すなわち、特定の時間軸上のアドレスに対してのみ元音声データと成分データとの乗算処理を行う（図４（Ａ）参照）。このようなアドレス情報を付加した乗算処理を行うと、通常の単にアドレスをインクリメントしながら乗算を行う処理（後述するレベルデータＬＬ（ｉ）の処理）よりも処理時間を要する。しかしながら、レベルデータＨＨ（ｉ）はデータ数が少ないので、離散的なアドレス利用演算を行わず、成分データがないところに成分データ「０」を用いてアドレスインクリメントしながら乗算処理を行うよりも高速に演算処理することができる。また、成分データ「０」を乗算して出力振幅「０」を得るような不必要な演算を行うことを防止することができる。
【００４５】
元音声データとレベルデータＨＬ（ｉ）に対応するＨＬ係数データおよびレベルデータＬＨ（ｉ）に対応するＬＨ係数データとを畳み込み演算する場合、元音声データに対して、アドレス情報が付加された成分データ群を乗算する。すなわち、特定の時間軸上のアドレスに対して元音声データと成分データとの乗算処理を行い、このアドレスに続きデータ数により指定された連続するアドレスでは、単にアドレスをインクリメントしながら元音声データと成分データとの乗算処理を行う（図４（Ｂ）、（Ｃ）参照）。このような処理を行うことで、前述のレベルデータＨＨ（ｉ）でのＨＨ係数データによるアドレス管理しながらの乗算処理と、後述するレベルデータＬＬ（ｉ）でのＬＬ係数データによる単にアドレスをインクリメントしながらの乗算処理とを適宜混合させた演算処理となる。レベルデータＨＬ（ｉ），ＬＨ（ｉ）は、前述のように、レベルデータＨＨ（ｉ）ほどデータ数は少なくなく、レベルデータＬＬ（ｉ）ほどデータ数が多くないので、このような処理を行うことにより、最適な演算処理速度を得ることができる。
【００４６】
元音声データとレベルデータＬＬ（ｉ）に対応するＬＬ係数データとを畳み込み演算する場合、元音声データに対して、アドレス情報が付加されていない時間軸上に連続する成分データ群を順次乗算する。すなわち、時間軸上の全てのアドレスに対して元音声データと成分データとの乗算処理を行う（図４（Ｄ）参照）。このような単にアドレスをインクリメントしながら乗算を行う処理は、本演算方法を実現するＤＳＰ等では通常に行われる処理方法であるので、ＤＳＰの処理能力に応じた効率的な処理速度で乗算処理を行うことができる。
【００４７】
次に、元音声データのＨＨ係数データによる畳み込み演算データと、元音声データのＨＬ係数データによる畳み込み演算データと、元音声データのＬＨ係数データによる畳み込み演算データとのビットシフト方法について図６を参照して説明する。
【００４８】
３２ビットの元音声データが入力されると、この元音声データは、それぞれ８ビットからなるＨＨ係数データ、ＨＬ係数データ、ＬＨ係数データ、ＬＬ係数データと乗算される。これを実現する装置としては、例えば３２ビット×８ビットの乗算器がある。元音声データのＨＨ係数データによる畳み込み演算データは上位側に８ビットのシフト処理が行われて、元音声データのＨＬ係数データによる畳み込み演算データに加算される。この加算データはさらに上位側に８ビットのシフト処理が行われて、元音声データのＬＨ係数データによる畳み込み演算データに再加算される。この再加算データはさらに上位側に８ビットのシフト処理が行われて、元音声データのＬＬ係数データによる畳み込み演算データに再々加算される。このような処理を行うことで、インパルス応答の最上位８ビットに対応する演算が２４ビット上位側にシフトされ、インパルス応答の次の上位８ビットに対応する演算が１６ビット上位側にシフトされ、インパルス応答のさらに次の上位８ビットに対応する演算が８ビット上位側にシフトされ、インパルス応答の最下位８ビットに対応する演算がそのままシフトされない。これにより、インパルス応答の振幅を３２ビットで量子化して、このビット数のまま元音声データに畳み込み演算（乗算）を行った場合と同じ出力データを得ることができる。この際、使用されるデータ領域は３２ビット×８ビットであり、従来のような３２ビット×３２ビットよりも小さいデータ領域で演算を行うことができる。
【００４９】
以上のように、本実施形態の畳み込み演算方法を用いることで、インパルス応答の振幅（波形）に応じて最適な方法で畳み込み演算を行うことができる。この際、演算を行うデータ規模が大きくなることはなく、従来よりも小さくすることができる。
【００５０】
また、上位側ビットから順に乗算を行うことで、畳み込み演算後の出力データに影響の大きい、インパルス応答の振幅が大きい部分から順に畳み込み演算が行われる。これにより、例えば、サンプリング周期内に演算が完了しなかった場合、すなわち畳み込み演算の途中で次の元音声信号が入力される場合のように、畳み込み演算を中断しなければならない場合であっても、演算途中の信号に畳み込みデータ列であるインパルス応答の振幅の特徴を反映しやすくなる。この結果、中断処理を行っても、畳み込み後の出力データは、中断処理を行わない場合と、あまり変わらない出力データを得ることができる。具体的に、前述の例で、３２ビットの内レベルデータＬＬ（ｉ）を処理できなかった場合でも、インパルス応答の振幅の局所ピークに依存する特徴が表れる上位２４ビットのレベルデータＨＨ（ｉ），ＨＬ（ｉ），ＬＨ（ｉ）で畳み込み演算されるので、前記特徴を有する２４ビット精度の出力データを得ることができる。
【００５１】
このような畳み込み演算方法は、プログラム化することが可能である。そして、この畳み込み演算処理プログラムを汎用の演算処理装置にインストールすることで、インストールされた演算処理装置は、畳み込み演算を効果的に行うことができる。
【００５２】
なお、前述の説明では元音声信号、インパルス応答ともに振幅を３２ビットで量子化した例を示したが、ビット数はこれに限らず、仕様に応じて適宜設定すればよい。また、インパルス応答データを振幅に基づいて４分割する例について示したが、分割数もこれに限らず、仕様に応じて適宜設定すればよい。
【００５３】
また、前述の説明では、有意な係数データが連続しているかどうかを判断して、畳み込み演算方法を適宜選択しながら処理する方法を示したが、次に示すような方法でも略同様の処理を実現することができ、前述の効果を奏することができる。
【００５４】
図７は他の演算処理方法を説明するための説明図であり、（Ａ）はメモリ等に記憶されている情報を示す表であり、（Ｂ）は（Ａ）に示す場合のインパルス応答の時系列振幅データを示す図である。なお、図７では振幅データをレベル別に区別していないが、実際には前述の図３や図４に示すように、振幅データをレベル別に区分した後にこの方法を用いる。
【００５５】
図７に示すように、この畳み込み演算方法では、有意な係数データとともに、隣り合う有意な係数データに対して、時間軸上で後側の係数データとともに、前側の係数データからこの後側の係数データまでのアドレスオフセット量を記憶しておく。例えば、図７では、最初の有意な係数データ「ｄａｔａ１」から次の有意な係数データ「ｄａｔａ２」までのオフセットが時間軸上のアドレスで１０個分であれば、前記次の有意な係数データ「ｄａｔａ２」とともにこのアドレスオフセット量「１０」を記憶する。
【００５６】
そして、畳み込み演算時には、前側の有意な係数データによる畳み込み演算を行った後、アドレスオフセット量により設定される次の有意な係数データのアドレスに移り、この有意な係数データによる畳み込み演算を行う。この際、アドレスオフセット量は、有意な係数データが連続する場合には「１」とする。そして、最初の有意な係数データのみこの係数データに対応する時間軸上のアドレスをアドレスオフセット量に書き込む。最後の有意な係数データの後にはアドレスオフセット量を「０」として、これに対応する係数データを「０」にする。
【００５７】
このような処理方法を用いることで、有意な係数データに挟まれる無意（「０」）の係数データを時間軸上のアドレスにおいて飛ばし、有意な係数データでのみ畳み込み演算を行うことができる。そして、この方法を用いることにより、有意な係数データのブロックであるか、単独の有意な係数データであるかの選択を行うことなく、記憶されているアドレスオフセット量と係数データのみで畳み込み演算を行うことができる。これにより、前述のような振幅データをレベル別に区分する場合に、それぞれに振幅データの存在の仕方が異なる各レベルの振幅データ列に対して同じアルゴリズムで畳み込み演算を行うことができる。
【図面の簡単な説明】
【００５８】
【図１】本実施形態の畳み込み演算の処理フローを示すフローチャート
【図２】インパルス応答の振幅レベルによる演算方法設定フローを示すフローチャート
【図３】ディジタルサンプリングされたインパルス応答を４つのレベルデータに分割する概念を示す説明図
【図４】４つのレベルデータ列毎の演算概念および演算順序を示す説明図
【図５】４つのレベルデータ列に対応する係数データの概念を示す説明図
【図６】図１に示す畳み込み演算の処理フローを示すブロック図
【図７】他の演算処理方法を説明するための説明図
【図８】インパルス応答の一例示す図
【図１】
2006245865.tif 000004
【図２】
2006245865.tif 000005
【図３】
2006245865.tif 000006
【図４】
2006245865.tif 000007
【図５】
2006245865.tif 000008
【図６】
2006245865.tif 000009
【図７】
2006245865.tif 000010
【図８】
2006245865.tif 000011