(57)【要約】  【課題】小規模な演算装置（通常規模のパソコン等）を用いて、｛ｘn｝に加えてインパルス応答｛ｈn｝が長い場合でも、そのインパルス応答特性を解析可能な技術を提供すること。  【解決手段】本発明にかかるＦＦＴによるインパルス応答計算方法では、有限長のインパルス応答の特性が標本値列｛ｈn｝で表現される特性を持つシステムに、標本値列｛ｘn｝で表現される信号が入力された場合の出力｛ｙn｝を、ＦＦＴハードウェアを用いた畳み込み演算を用いて計算する方法において、前記標本値列｛ｘn｝を所定の条件のもとで小区間に分割するとともに、前記標本値列｛ｈn｝も所定の条件のもとで小区間に分割し、それぞれの小区間づつ、重畳加算法もしくは重畳保留法によって、分割処理するように構成した。【選択図】      図１
2005215058.tif 000002
【特許請求の範囲】
【請求項１】
有限長のインパルス応答の特性が標本値列｛ｈn｝で表現される特性を持つシステムに、標本値列｛ｘn｝で表現される信号が入力された場合の出力｛ｙn｝を、ＦＦＴハードウェアを用いて畳み込み演算によって計算する方法において、
前記標本値列｛ｘn｝を所定の条件のもとで小区間に分割するとともに、
前記標本値列｛ｈn｝も所定の条件のもとで小区間に分割し、
それぞれの小区間づつ、前記ＦＦＴ処理ハードウェアを用いて、重畳加算法もしくは重畳保留法によって、分割処理することを特徴とするＦＦＴによるインパルス応答計算方法。
【請求項２】
有限長のインパルス応答の特性が標本値列｛ｈn｝で表現される特性を持つシステムに、標本値列｛ｘn｝で表現される信号が入力された場合の出力｛ｙn｝を、サイズＮのＦＦＴ処理が可能なＦＦＴハードウェアを用いて畳み込み演算によって計算する方法において、
前記標本値列｛ｘn｝を所定の条件のもとで小区間に分割する手順と、
標本値列｛ｈn｝も前から順にlhの長さの小区間に分割（前から順｛h(1)n｝, ｛h(2)n｝, ｛h(3)n｝・・・・とし，最後の標本点数はちょうどlhでなくても，lh以下ならばよい。）し，Ｎ= lx+lh−1となるようにする手順と、
前記所定の条件のもとで，Ｎ点ＦＦＴを使って，通常のオーバーラップ処理によって｛ｘn｝＊｛ｈ(i)n｝を各 i について求める手順と、
最終的にそれらをすべてのiについて、｛ｘn｝＊｛ｈ(i)n｝の始点をlh×（i−1）ずつずらせて加算する手順と、
を含むことを特徴とするＦＦＴによるインパルス応答計算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、有限長のインパルス応答の標本値列｛ｈn｝で表現される特性を持つシステムに、標本値列｛ｘn｝で表現される信号が入力された場合の出力｛ｙn｝を、ＦＦＴを用いた畳み込み演算を用いて計算する方法に関する発明である。
【背景技術】
【０００２】
従来より、ＦＦＴを用いて劇場、設計段階のコンサートホール等の音場における受聴点での音の予測には、スピーカに音源信号を入力し、出力された拡声音をマイクロホンで捕らえて信号処理し、想定した位置に発音源（スピーカ等）があったと仮定して、指定した受聴点での音の計算が連続畳み込み演算によって行われている。（例えば、特許文献１参照）
【０００３】
【特許文献１】特開２００１−１００７６５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
そして、受聴点での音ｙmを計算する場合には、音源信号を標本値列｛ｘn｝音源から受聴点までの音の伝搬経路のインパルス応答特性を標本値列｛ｈn｝として、畳み込み演算ｙm＝ｘm＊ｈmを用いて計算することができる。
連続畳み込みの計算には、通常ＦＦＴを用いた重畳加算法もしくは重畳保留法が採用される。これは、長い入力信号とインパルス応答との畳み込みに際して、入力信号を小区間に分割し、各小区間とインパルス応答との畳み込みを計算しておいて、それらの出力結果を統合するものである。
ところが、これらの方法では、ＦＦＴのサイズとしてはインパルス応答の標本点数と入力信号の小区間の標本点数の和（厳密にはそれより１点少なくてもよい。）に相当する配列（メモリ）が必要である。
【０００５】
例えば、可聴域全体の扱うためにサンプリングレートを48ksamples/sec（但しｋ＝103、以下同様）とし、残響の長い部屋での受聴信号の計算をする場合、インパルス応答の長さを5秒とすると、その標本値列の長さLkは48k×5＝240k点となり、これに入力の適当な小区間の標本点数ｌxを加えて2の整数べき乗の値を探すと、ｌx＝16kと抑えてもＦＦＴのサイズN＝216＝256kとなる。
小規模な演算装置（市販のパソコン等）を用いた場合には、このサイズの複素配列を実メモリ上で確保して計算することは難しくなる。
【０００６】
従来の重畳加算法の問題点
有限長のインパルス応答の標本値列｛ｈn｝で表現される特性を持つシステムに、標本値列｛ｘn｝で表現される信号が入力された場合の出力｛ｙn｝を、ＦＦＴを用いた畳み込み演算によって計算する場合を考える。
標本値列｛ｈn｝と標本値列｛ｘn｝の畳み込み演算は，通常時間領域での直接計算では手数がかかるので，それぞれのＤＦＴ（離散的フーリエ変換）｛Ｈk｝と｛Ｘk｝を求めて、それらの積Ｙk＝Ｘk×Ｈkを周波数領域で計算し、その逆ＤＦＴとして｛ｙn｝を求めるのが普通である。
ただし、通常入力信号｛ｘn｝は非常に長く，｛Ｘk｝を一括計算することは不可能であるので，連続処理するためには，従来｛ｘn｝を適当な長さの小区間に区切って順次取り込んで逐次処理（オーバーラップ加算あるいはオーバーラップ節約）によって長い｛ｘn｝に対処していた。
この場合，ＦＦＴの処理には｛ｈn｝の長さＬhと｛ｘn｝の小区間の長さｌxの長さを足したサイズ（あるいはアルゴリズムを工夫したとしても，少なくともその半分）の複素配列を主メモリ上に用意する必要があった。しかし，｛ｘn｝に加えてインパルス応答｛ｈn｝も長い場合，主メモリの大きいスーパーコンピュータを使えば計算は可能であるが，小規模な演算装置（出来合いのＦＦＴハードウェアや通常規模のパソコン等）しかない場合には，従来の手法では処理できないという問題があった。
【０００７】
そこで、本発明は、小規模な演算装置（通常規模のパソコン等）を用いて、｛ｘn｝に加えてインパルス応答｛ｈn｝が長い場合でも、そのインパルス応答特性を解析可能な技術を提供することを目的としてなされたものである。
【課題を解決するための手段】
【０００８】
本発明にかかるＦＦＴによるインパルス応答計算方法の請求項１では、
有限長のインパルス応答の特性が標本値列｛ｈn｝で表現される特性を持つシステムに、標本値列｛ｘn｝で表現される信号が入力された場合の出力｛ｙn｝を、ＦＦＴハードウェアを用いた畳み込み演算を用いて計算する方法において、
前記標本値列｛ｘn｝を所定の条件のもとで小区間に分割するとともに、
前記標本値列｛ｈn｝も所定の条件のもとで小区間に分割し、
それぞれの小区間づつ、重畳加算法もしくは重畳保留法によって、
分割処理するように構成した。
【０００９】
請求項２の発明では、
有限長のインパルス応答の特性が標本値列｛ｈn｝で表現される特性を持つシステムに、標本値列｛ｘn｝で表現される信号が入力された場合の出力｛ｙn｝を、サイズＮのＦＦＴハードウェアを用いた畳み込み演算を用いて計算する方法において、
前記標本値列｛ｘn｝を所定の条件のもとで小区間に分割する手順と、
標本値列｛ｈn｝も前から順にlhの長さの小区間に分割（前から順｛h(1)n｝, ｛h(2)n｝, ｛h(3)n｝・・・・とし，最後の標本点数はちょうどlhでなくても，lh以下ならばよい）し，Ｎ= lx+lh−1となるようにする手順と、
前記所定の条件のもとで，Ｎ点ＦＦＴを使って，通常のオーバーラップ処理によって｛ｘn｝＊｛ｈ(i)n｝を各 i について求める手順と、
最終的にそれらをすべてのiについて、｛ｘn｝＊｛ｈ(i)n｝の始点をlh×（i−1）ずつずらせて加算する手順と、
を含むように構成した。
【発明の効果】
【００１０】
本発明においては、入力信号標本値列｛ｘn｝およびインパルス応答標本値列｛ｈn｝が長い場合でも、前記標本値列｛ｘn｝だけでなく前記標本値列｛ｈn｝も所定の条件のもとで小区間に分割して畳み込み処理（２重オーバーラップ法）することによって、主メモリの大きいスーパーコンピュータを使わずに、小規模な演算装置（出来合いのＦＦＴハードウェアや通常規模のパソコン等）を使って処理解析できるようになった。
【発明を実施するための最良の形態】
【００１１】
以下に、本発明にかかるＦＦＴによるインパルス応答計算方法を、その実施の形態を示した図面に基づいて詳細に説明する。
本発明の最良の形態としては、通常規模の市販のパソコンを用いて、本発明の方法に基づいた処理プログラムによって以下の通りに実行することによって行う。
このとき、図６に示したように、前記標本値列｛ｘn｝を記憶した外部の第１記憶手段Ａ１と、第１記憶手段に記憶された前記標本値列｛ｘn｝を所定の条件のもとで小区間に分割して順次出力する第１出力手段Ｂ１と、標本値列｛ｈn｝を記憶した外部の第２記憶手段Ａ２と、第２記憶手段に記憶された前記標本値列｛ｈn｝を前から順にlhの長さの小区間に分割（前から順｛h(1)n｝, ｛h(2)n｝, ｛h(3)n｝・・・・とし，最後の標本点数はちょうどlhでなくても，lh以下ならばよい）して順次出力する第２出力手段Ｂ２と、前記所定の条件のもとで，前記第１出力手段からの出力と第２出力手段からの出力を、Ｎ点ＦＦＴを使って，通常のオーバーラップ処理によって｛ｘn｝＊｛ｈ(i)n｝を各 i について求める演算手段Ｃと、最終的にそれらをすべてのiについて、｛ｘn｝＊｛ｈ(i)n｝の始点をlh×（i−1）ずつずらせて加算する加算手段Ｄとを、前記パソコンのハードウェアと処理プログラムによって実現する。
【００１２】
本発明に用いるＦＦＴについて、
定義に基づいてＮ点ＤＦＴを行うのにに要していた計算量がＮ2のオーダであったのに対しＦＦＴのアルゴリズムはこれをＮlog2Ｎのオーダに抑えるものである。
ＦＦＴは標本点数が２の整数べき乗である場合が最も効率が高く，与えられた標本点数が２の整数べき乗でない場合にも，適当な個数の０を標本値列に付加して、処理対象の標本点数を強制的に２の整数べき乗にすることが可能である。 アルゴリズムとしてはＮが素数の整数べき乗の積で表される場合に対するアルゴリズムがあるが，ここではＮが２の整数べき乗である場合のものを用いる。
【００１３】
本発明に用いる２重オーバーラップ処理について
（１）重畳加算法
畳み込みをする場合、インパルス応答の標本値列｛ｈn｝は比較的短いが入力の標本値列｛ｘn｝が長い場合には、標本値列｛ｘn｝を少しずつ取り込んで逐次処理を行わなければならない。
第ｉ番目の区間の標本値列を｛ｘn｝、ｉ＝１、１、・・・・、Ｉとすると、畳み込みの式は以下のようになる。
【数１】
2005215058.tif 000003
ただし、ｘk＝0  ｆｏｒ  ｋ≦０、ｈk＝０  ｆｏｒ  ｋ≦０，ｋ＞Ｌh（ｋhの長さは有限とする。）
｛ｘn｝をｌx点ごとの小区間に区切る。小区間の番号をｉとする、
【数２】
2005215058.tif 000004
とすると
【数３】
2005215058.tif 000005
ただし｛ｘn｝の長さは事実上無限でもかまわないが、ここではｌx×Ｉとしておく。Ｉは区間の個数。ｉ=1,2,・・・I、ｎ＝1,2,・・・ｌｘ。
【００１４】
（２）２重オーバーラップ処理
上と同様に｛ｈn｝をｌh点ごとの小区間に区切り，
【数４】
2005215058.tif 000006
とすると
【数５】
2005215058.tif 000007
ただし，Ｊは区間の個数、ｊ＝1,2,・・・Ｊ、ｎ＝1,2,・・・ｌh
このようにすると，
【数６】
2005215058.tif 000008
として求めることができる。
即ちサイズＮ≧ｌx＋ｌh−１のＦＦＴを使うとして、｛ｘk｝ｋ＝1,2,・・・Ｌxをｌx点ずつのＩ個の区間に区切って｛ｘ(i)n｝とすると、｛ｈk｝ｋ＝1,2,・・・Ｌhをｌh点ずつのＪ個の区間に区切り｛ｈ(j)n｝とする。
｛ｈ(j)n｝と｛ｘk｝のコンボリューション｛ｙ(j)n｝を求めておき
【数７】
2005215058.tif 000009
として
【数８】
2005215058.tif 000010
として｛ｙk｝ｋ＝１、２、・・・・Ｌx＋Ｌh−１を求めることになる。
２重オバーラップの処理の流れを図１に示す。但し，ｙのsuperfixは｛ｈk｝の第ｊ区間と｛ｘk｝の第ｊ区間のコンボリューションを示し、これをｙ(ji)kと書くことにする。
【実施例】
【００１５】
具体的な２重オーバーラップ処理の例
100標本点の入力信号｛ｘn｝と60標本点のインパルス応答｛ｈn｝の畳み込み例を示す。
（１）一括処理について通常の計算は、Ｎ＝256点ＦＦＴを使って一括処理をする。
ただし，ここでは＜Ｆ＞はＦＦＴ、＜Ｆ-1＞は逆ＦＦＴを表わすオペレータである。
【数９】
2005215058.tif 000011
【００１６】
（２）  ２重オーバーラップ処理（オーバーラップ加算を用いる）Ｎ＝32点のＦＦＴを用いてＬx＝100点とＬh＝60点の畳み込みを行うこととする。60点から成る｛ｈn｝を20点ずつの３部分に分割し、100点から成る｛ｘn｝を13点ずつの８部分に分割する。これで、Ｎ＝ｌx（１３）＋ｌh（２０）−１＝32が成立していることになる。最後の処理フレームでは余った部分には０を付加する。
【数１０】
2005215058.tif 000012
｛ｘn｝の第i区間と｛ｈn｝の第ｊ区間の畳み込みを｛ｙ(ji)k｝とする。
つまり
【数１１】
2005215058.tif 000013
とおくことにすると，｛ｈn｝の第ｊ区間と｛ｘn｝全体に対する出力は
【数１２】
2005215058.tif 000014
となる。｛ｈn｝全体による｛ｘn｝全体に対する出力は、これらすべてを加えて
【数１３】
2005215058.tif 000015
として求められる。
式（１１）による計算結果が一括処理で求めた｛ｙn｝と一致していることを図２、３に示す。
【００１７】
計算負荷について
長さ｛Ｌx｝の入力標本列と長さ｛Ｌh｝のインパルス応答標本列の畳み込みをＦＦＴを用いて計算する場合の計算手数の比を種々の処理仕様について比較したものを示す。
ここでＬx＝10,000,000、Ｌh＝240,000とする。
これは標本化速度を48ksamples/secとした時に,３分余りの入力信号に５秒のインパルス応答を畳み込むことに相当する。
処理仕様は、ＦＦＴの標本点数の分割数をの分割数はＪとし，Ｉ＝１、Ｊ＝１、Ｎ＞Ｌx＋Ｌh−１とした場合の手数を基準とする。
【００１８】
（１）基準手数
Ｉ＝１、Ｊ＝１の条件下ではＬx＋Ｌh≒10ＭなのでＮはＬx＋Ｌhより大きい２のべき乗をとる必要があるのでＮ＝16Ｍ（＝２24）となる。
手数の大部分は、ＦＦＴの手数であるので、基準となる積和計算の手数Ｃ0は、Ｃ0＝Ｎ0log2Ｎ0＝16×106×24≒400Ｍとなる。
【００１９】
（２）通常のオーバーラップ加算の場合の積和計算の手数
｛ｘｎ｝の分割数をＩとするとＮがＬｈよりも十分大きい場合は、Ｎ≒Ｎ0／Ｉとできる。具体的にはＮ＝Ｎ0／Ｉ＋Ｌhとなり，この場合の手数ＣsはほぼＣs＝（Ｎ0／Ｉ×log2（Ｎ0／Ｉ））×Ｉとなる。
ただし，ＮがＬhと同程度になると、Ｎ＝Ｌx／Ｉ（＝ｌx）＋Ｌhであることを考慮しなければならない。
そうすると入力信号の分割はＬxを長さＮ−Ｌhの小区間に分割することにより、分割数はＩ＝ｌx／（Ｎ−Ｌh）。
従って、Ｃs＝（Ｎ0／Ｉ×log2（Ｎ0／Ｉ））×ｌx／（Ｎ−Ｌh）となり、Ｃs＝（Ｎ0／Ｉ×log2（Ｎ0／Ｉ））×Ｉよりは増えてくる。
【００２０】
図４に、ＮがＬhより十分大きいときのＣs（点線）と，Ｌhを考慮したＣs（実線）の例を示す。点線と実線の差はＮとＬhの関係によって決まる。
【００２１】
２重オーバーラップ加算の場合の積和計算の手数
Ｉ＝Ｌx／ｌx，Ｊ＝Ｌh／ｌhでＮ＝ｌx＋ｌh−１点ＦＦＴをＩＪ回行うとき、
Ｎ＝Ｌx／Ｉ＋Ｌh／Ｊとすると、そのときの手数ＣDは、
【数１４】
2005215058.tif 000016
となる。
【００２２】
図５で、Ｉ＝１、Ｊ＝１が一括処理の場合をＪ＝１の線上が通常の重畳処理の場合をそれぞれ表す。これから分割数を増やすほど計算負荷は軽くなる傾向にあることが分かる。
【００２３】
以上のように、入力信号およびインパルス応答が長い場合に畳み込みを行う際、主メモリの大きいスーパーコンピュータを使えば計算は可能であるが、小規模な演算装置（出来合いのＦＦＴハードウェアや市販のパソコン等）しかない場合には，従来の手法では処理できなかったという問題を。２重オーバーラップ法によって解決できることを示した。よって，小規模な演算装置（ＦＦＴ専用のハードウェアや市販のパソコン等）でも十分に、入力信号およびインパルス応答が長い場合にも対応できるのである。
【図面の簡単な説明】
【００２４】
【図１】本発明にかかるＦＦＴによるインパルス応答計算方法の実施の形態の処理フローを示した図である。
【図２】本発明の実施例における処理例の一部である。（図３と合わせて全体）
【図３】本発明の実施例における処理例の一部である。
【図４】通常の重畳加算法の場合の手数を見積もった図である。
【図５】本発明による２重重畳加算法の場合の手数を見積もった図である。
【図６】本発明に用いるＦＦＴハードウェアの構成図である。
【符号の説明】
【００２５】
Ａ１  第１記憶手段
Ｂ１  第１出力手段
Ａ２  第２記憶手段
Ｂ２  第２出力手段
Ｃ    演算手段
Ｄ    加算手段
【図１】
2005215058.tif 000017
【図２】
2005215058.tif 000018
【図３】
2005215058.tif 000019
【図４】
2005215058.tif 000020
【図５】
2005215058.tif 000021
【図６】
2005215058.tif 000022