JP2009010925A - 信号処理 - Google Patents

信号処理 Download PDF

Info

Publication number
JP2009010925A
JP2009010925A JP2008097204A JP2008097204A JP2009010925A JP 2009010925 A JP2009010925 A JP 2009010925A JP 2008097204 A JP2008097204 A JP 2008097204A JP 2008097204 A JP2008097204 A JP 2008097204A JP 2009010925 A JP2009010925 A JP 2009010925A
Authority
JP
Japan
Prior art keywords
value
processor
data
processors
convolution
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.)
Pending
Application number
JP2008097204A
Other languages
English (en)
Inventor
Michael B Montvelishsky
ビー.モントベリシュスキー マイケル
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.)
Technology Properties Ltd
Original Assignee
Technology Properties Ltd
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 Technology Properties Ltd filed Critical Technology Properties Ltd
Publication of JP2009010925A publication Critical patent/JP2009010925A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Computational Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Complex Calculations (AREA)
  • Image Processing (AREA)

Abstract

【課題】最初および最後のプロセッサを含む、プロセッサ(14)のアレイ(12)を利用して、フィルタ関数によるデータ関数の畳み込みを計算するシステム(10)を提供すること。
【解決手段】フィルタ関数の微分(derivation)に基づく係数値と、データ関数を表すデータ値とが掛け合わされて、現在の中間値が生成される。最初のプロセッサ以外のプロセッサにおいて、前の中間値が現在の中間値に加算される。最後のプロセッサ以外のプロセッサにおいて、データ値および現在の中間値が次のプロセッサに送られる。その後、最後のプロセッサの、前の中間値(あれば)が、最後のプロセッサの現在の中間値に加算されて、フィルタ関数によるデータ関数の畳み込みを集合的に表す結果値が、生成される。
【選択図】図1

Description

本発明は、一般に、信号プロセッサ、信号処理の方法に関する。
既存のシステムや新たに出現しつつあるシステムの多くは、基礎をなすシステムを記述する数学に基づいて適切にプログラムされた現代的なデジタル・プロセッサを用いて解析されることが可能である。たとえば、そのような解析は、今日では、電気回路、光学素子、機械的機構、および他の多くのシステムなどの、線形時不変システム(linear time-invariant systems)を解析することに関して、ますます有用になりつつある。
数学において、ならびに数学を広範に使用する、今日の科学および工学のほとんどの分野などの、多くの分野)において、「変換(する)(transform)」という用語は、方程式解析手法のクラスについて述べる場合に使用される。この変換の概念は、数学の関数解析学(functional analysis branch of mathematics)の分野までさかのぼる。関数解析学は、本来、特定の関数が別の関数を引数として有する関数空間の研究を扱う。したがって、変換は、個々の方程式で、または複数の方程式の全セットで使用されることができ、その変換方法(process of transformation)は、あるドメインで表される元の方程式または方程式群から、異なるドメインで表される別の方程式または方程式群への1対1のマッピングである。
変換を実行するための動機付けは、多くの場合、単純明快である。元の表現では解くのが困難だが、他の1つまたは複数の表現ではより容易に解くことが可能な、多くの方程式が存在する。このため、変換が実行されて、解を求め、つぎに逆変換を実行して、その解を元のドメインにマッピングすることが可能である。積分変換の一般形式は、次式で定義される。
Figure 2009010925
ここで、K(α,t)は、変換の「積分核(integral kernel)」と呼ばれることが多い。
ラプラス変換は、式(1)で定義される変換のクラスのサブセットであり、特に、多くの場合に有用である。システムへの入力またはシステムからの出力についてシンプルな数学的記述または関数的記述が与えられた場合、ラプラス変換は、そのシステムの動作をシンプルに解析することが可能な代替の関数的記述を与えることが可能である。ラプラス変換の一般形式は、次式で定義される。
Figure 2009010925
ここで、積分範囲および積分核は、式(1)から、a=0、bは∞に置換され、およびK(α,t)=e-stとして再定義されている。f(t)に対してラプラス変換を行うことができるのは、sが十分大きく、特定の条件が満たされる場合のみであるが、それらの条件は、通常、f(t)が、実在する、任意の有用な関数に近い関数形態をとることを可能とするのに、十分に柔軟である。
特定の関数、たとえば、F(s)が、単独の既知の関数の変換ではなく、それぞれが既知の関数f(t)またはg(t)の変換の結果である2つの関数の積、で表されることが可能であることは、よくあることである。すなわち、
Figure 2009010925
である。ここで、g(t)は、f(t)と同じ条件を満たさなければならない。この、F(s)、f(t)、およびg(t)のつながりから、以下の関係が成り立つ。
Figure 2009010925
これは、しばしば「畳み込み(重積分)定理(convolution theorem)」と呼ばれる。
畳み込み定理は、変数が1つだけの積分の変換をもたらすことがわかる。したがって、この手法は、変数が1つだけの積分の数値近似に対して適用可能である。
積分表現(integral representation)とリーマン和表現(Riemann sum representation)との間には、以下の等式が成り立つ。
Figure 2009010925
ここで、各ct-kおよびckは、k番目の部分区間において任意に選択される。実際には、式(5)の等式の右辺は、微小なΔτを利用することによって、および、選択された数値的手法およびΔτの値に依存する、ある次数の誤差項が存在することを了解することによって、次式のように近似される。
Figure 2009010925
ここで、mは、結果である和で表現されることが可能な精度の次数(かつ、さらに、期待されることが可能な有効桁数)であり、Oは、従来の数学のコンテキストにおけるビッグオー記法(big-O notation)である。
前述の内容から示されるように、畳み込み(convolution)を使用することによって恩恵が得られる変換には、重要な応用における既存の使い方および潜在的な用途がある。たとえば、1つのそのような応用は、デジタル信号処理(DSP)において実行されるデジタル・フィルタリングに関連する畳み込みの用途である。
、数学的関数として表すことが可能なすべてのフィルタリングは、デジタル・フィルタを用いて達成されることが可能であり、これは、現代のDSPの仕事のまさしくその出発点基礎の1つである。たとえば、信号からサンプリングされたデータ値に関するデジタル・フィルタリングは、信号の不要な部分を除去したり、信号の有用な部分を抽出したりすることを可能にする。有限インパルス応答(FIR)および無限インパルス応答(IIR)は、より一般的なものは、FIRフィルタであるけれども、今日のDSP応用で用いられるデジタル・フィルタの、2つの主なタイプである。
通常、FIRフィルタのほうが、内部フィードバックを必要としないために、使いやすいとされている。たとえば、内部フィードバックは、IIRフィルタに、インパルスへの応答を無限に行わせる可能性がある。名前に使われている「有限」という言葉は、FIRフィルタの別の利点も意味している。そのようなフィルタからのインパルスは、最終的にはゼロに落ち着き、行われた反復加算計算の誤差が伝搬されない。すなわち、誤差項は、計算過程全体を通して一定のままである。このことは、たとえば、それぞれの追加の反復出力加算時に誤差が潜在的に成長する可能性がある、IIRフィルタに対する明確な優位点である。
残念なことに、様々なアプリケーションに対して、デジタル・フィルタの重要な制限は、デジタル・フィルタの速度が、数値計算に使用されるプロセッサまたはプロセッサ群の速度によって制限されることである。たとえば、高いフィルタリング速度が必要な場合には、これは、デジタル・フィルタの実装に必要なハードウェアを高価にしたり、単純に実現不可能にしたりする可能性がある。実際上、すべてのアプリケーションにおいて、そして、一般に多くの電子式システムに当てはまることは、用いられる速度が高いほど、電磁ノイズを抑えたり、放熱させたりすることなどの、同時発生する現象に対処すること)もより困難になる。
したがって、数値的畳み込み計算を実行するのに使用するシステムを改良することは、現在の、および新たに出現しつつある、信号処理関連タスクを、より高い速度で、より経済的に、さらに、基礎をなすシステムおよび周辺システムにおける悪影響を減らして、実行することが可能になる、ということになる。
本発明の一実施形態は、複数のコンピュータ・プロセッサを備える畳み込み計算用システムを使用する。
本発明の第1の態様は、フィルタ関数によるデータ関数の畳み込みを計算するシステムを提供する。最初のプロセッサと最後のプロセッサとを含む、複数のプロセッサからなるアレイが提供され、各プロセッサは、フィルタ関数の微分(derivation)に基づく係数値と、データ関数を表すデータ値とを掛け合わせて、現在の中間値を生成するロジックを含む。最初のプロセッサ以外のプロセッサでは、それらのプロセッサのうちの別のプロセッサで以前に実行された計算を表す、前の中間値を受け取り、その、前の中間値を、現在の中間値に加算するロジックが提供される。最後のプロセッサ以外のプロセッサでは、データ値と現在の中間値とを別のプロセッサに送るロジックが提供される。さらに、最後のプロセッサからの、前の中間値(あれば)を、以前の部分値として保持し、この、以前の部分値を、最後のプロセッサからの現在の中間値に加算して、結果値を生成するロジックが提供される。したがって、複数のプロセッサからなるアレイは、一連のデータ値を受け取って、フィルタ関数によるデータ関数の畳み込みを集合的に表す、一連の結果値を生成する。
第1の態様の一実施形態は、処理されるべき信号から、その信号を表すデータ値を提供する手段を有する信号プロセッサと、フィルタ関数による、その信号を表すデータの畳み込みを計算する前記システムと、を提供する。この実施形態は、たとえば、デジタル・フィルタである。
本発明の第1の態様はまた、フィルタ関数によるデータ関数の畳み込みにおいて結果値を計算する方法を提供する。フィルタ関数の微分(derivation)に基づく、係数値のシーケンスが取得される。データ関数を表すデータ値に対しては、その係数値が、最初および最後のプロセッサを含むコンピュータ制御のプロセッサからなるパイプ・ラインにおいて、用いられ、その係数値の1つとデータ値とが掛け合わされて現在の中間値が生成される。最初のプロセッサ以外においては、それらのプロセッサのうちの別のプロセッサで前に実行された計算を表す、以前の中間値が、現在の中間値に加算される。最後のプロセッサ以外においては、データ値と現在の中間値とが後続のプロセッサに送られる。最後のプロセッサからの現在の中間値に、前の部分値(最後のプロセッサからの、前の中間値)(あれば)が加算されて、結果値が生成される。この結果値は、本方法を採用するデジタル信号プロセッサに出力される。
第1の態様の一実施形態はまた、処理されるべき信号から、その信号を表すデータ値を提供することを含む、信号を処理する方法と、フィルタ関数によるそのデータ値の畳み込みを計算する前記方法とを提供する。この方法は、たとえば、信号フィルタリング方法である。
本発明の第2の態様は、フィルタ関数によるデータ関数の畳み込みを計算する方法および対応するシステムを提供する。フィルタ関数の微分に基づく、係数値のシーケンスが取得され、データ関数を表す、データ値のシーケンスが取得される。そのような係数値のそれぞれに関する、そのようなデータ値のそれぞれについて、最初および最後のプロセッサを含むコンピュータ制御のプロセッサからなるパイプ・ラインにおいて、係数値とデータ値とが掛け合わされて現在の中間値が生成される。最初のプロセッサ以外においては、それらのプロセッサのうちの別のプロセッサで以前に実行された計算を表す、前の中間値が、現在の中間値に加算される。最後のプロセッサ以外においては、データ値と現在の中間値とが後続のプロセッサに送られる。最後のプロセッサからの現在の中間値に、前の部分値(最後のプロセッサからの、前の中間値)(あれば)が加算されて、結果値が生成される。これらの結果値は、畳み込みとして累積され、その畳み込みが、本方法を採用するデジタル信号プロセッサに出力される。
第2の態様の一実施形態は、処理されるべき信号から、その信号を表すデータ値を提供することを含む、信号処理方法および対応するシステムと、そのデータ値とフィルタ関数との畳み込みを計算する前記方法とを提供する。この方法は、たとえば、信号フィルタリング方法である。
本発明の第3の態様は、少なくとも1つのプロセッサが、フィルタ関数を表す係数値と、データ関数を表すデータ値とを掛け合わせるタイプの畳み込みを計算する、改良されたシステムを提供する。この改良は、係数値がフィルタ関数の微分(derivation)に基づくことを含む。
第3の態様の一実施形態は、処理されるべき信号から、その信号を表すデータ値を提供する手段を有する信号プロセッサと、その信号を表すデータとフィルタ関数との畳み込みを計算する前記システムとを提供する。この実施形態は、たとえば、デジタル・フィルタである。
本発明の第3の態様はまた、係数値がフィルタ関数を表し、データ値がデータ関数を表し、係数値とデータ値とが掛け合わされて、畳み込みを集合的に表す結果値が生成されるタイプの、コンピュータ・プロセッサにおいて畳み込みを計算する、改良された方法を提供する。この改良は、フィルタ関数の微分(derivation)に基づく係数値を用いることを含む。
第3の態様の一実施形態は、処理されるべき信号から、その信号を表すデータ値を提供し、そのデータ値とフィルタ関数との畳み込みを計算する前記方法を提供する。この方法は、たとえば、信号フィルタリング方法である。
本発明はまた、複数のコンピュータからなるアレイで実行された場合に、本発明の第1、第2、または第3の方法をそのアレイに実施させるコンピュータ・プログラムを提供する。この複数のコンピュータからなるアレイは、単一の半導体ダイにあってよい。このコンピュータ・プログラムは、記録媒体、または電気信号、またはコンピュータ内のメモリ装置とすることができるキャリヤに格納することができる。
本発明の以上およびその他の目的および利点については、当業者であれば、本明細書に記載され、図面の各図に示されている、本発明を実施するための、現在知られている最良の形態の、ならびに好ましい実施形態の産業上の利用可能性の説明を参照することにより、明らかになるであろう。
本発明の目的および利点は、以下の詳細説明、ならびに添付図面の各図から明らかになるであろう。添付図面の各図においては、類似の参照符号が、類似または同様の要素またはステップを表すために用いられている。
本発明の好ましい一実施形態は、複数のコンピュータ・プロセッサにより畳み込み計算が実行されるシステムである。本明細書の各種図面(特に図1)において示されるように、本発明の好ましい実施形態は、全体が参照符号10で示される。
簡単に言えば、本発明は、改良された畳み込みシステム10であり、これは、その解をフィルタ関数によるデータ関数の畳み込みに数値的に近似する。数値的手法を用いて畳み込み計算を実行することには、本質的に、多数の乗算および加算の演算を伴う傾向がある。本発明は、2つの特定の様式で、そのような計算の実行に必要な全体時間を大幅に減らすことを可能にする。第1に、本発明は、必要な計算の大半を、直列ではなく並列に達成することを可能にする。第2に、本発明は、より少ないデータ・ビット数で表されることが可能なフィルタ値およびデータ値を用い、新しい種類のアルゴリズムを採用することを可能にし、この結果、プロセッサの本質的な制限の点から見て、より高速に実行されることができる。
図1は、コンピュータ・プロセッサ14のアレイ12の形で用いられる、本発明の畳み込みシステム10を示す線図である。畳み込みシステム10自体に焦点を当てるために、アレイ12をサポートする外部要素は省略されたり、一般的な形で示されたりしている。しかしながら、当業者であれば理解されるように、そのような要素は、実際の稼動する実施形態には存在するものであり、それらは、事実上、従来のものである。たとえば、図1は、アレイ12の電源供給に関連する細部をすべて省略し、外部入力装置16、入力バス18、出力バス20、および外部出力装置22についての総称的形態を含んでいる。説明を簡潔にするために、一般的なコンピュータの初期化(initialization)および終了(termination)に関する事柄について最初に説明することを省略し、プログラム命令および畳み込み係数値は、プロセッサ14に既にロードされているものとする。入力装置16は、ここでは、畳み込みが実行される入力データ値を提供することにのみ関するものとし、出力装置22は、ここでは、畳み込みが実行された出力データ値を受け取ることにのみ関するものとする。入力データ値は、処理(たとえば、フィルタリング)される信号のサンプルである。出力データ値は、処理(たとえば、フィルタリング)された信号サンプルである。
図1はまた、入力装置16から始まり、出力装置22で終わるフロー経路24を、様式的に示している。しかしながら、これ以外の配置も容易に可能であることを理解されたい。たとえば、他の開始位置および終了位置が可能であり、図示されたフロー経路24と異なる経路も可能であり(さらに代替実施形態においても同様に可能であり)、(たとえば、アレイ12と通信する入力チャネルおよび出力チャネルを有する)単一の複合型I/O装置(図示せず)が代わりに用いられることが可能である。
畳み込みシステム10用の、本願発明者が現時点で好ましいとするハードウェア・プラットフォームは、複数のプロセッサ14ならなるアレイ12を単一の半導体ダイ26内に有するものであって、IntellaSys Corporation(Cupertino,California)のSEAforth−24AやSEAforth−40Aなどのデバイスである。本明細書では、ほとんどの実施例において、SEAforth−24Aを用いる(厳密には、これらの実施例におけるプロセッサ14(複数)を「コア(複数)」または「ノード(複数)」と呼ぶことが可能である)。さらに説明を容易にするために、図示されるように、複数のプロセッサ14からなる集合の複数のメンバは、個々にプロセッサ14a〜xとして参照され、各プロセッサ14は、存在している他の複数のプロセッサ14との相互通信を可能にするバス28を有する。
図1に示されている各プロセッサ14は、自身に隣接するプロセッサ14のすべてと自身とを相互接続するバス28を有するが、フロー経路24の道筋からわかるように、すべてのバス28が必ずしも使用されるわけではない。実際、図示されている畳み込みシステム10の実施形態は、代替として、直列に通信するプロセッサの一次元アレイ(プロセッサの「パイプ・ライン」と呼ばれる)の形で実施されることも可能である。
図2(背景技術)は、図1のプロセッサ14(すなわち、SEAforth−24Aプロセッサ・コア)の1つのプロセッサの主な内部機能の線図である。プロセッサ14a〜xのそれぞれは、一般に、単独で機能するコンピュータであって、これには、演算論理装置(ALU 30)、いくつかの読み出し専用メモリ(ROM 32)、いくつかのランダム・アクセス・メモリ(RAM 34)、命令復号ロジック部36、命令エリア38、データ・スタック40、およびリターン・スタック42が含まれる。さらに、18ビットの「A」レジスタ(Aレジスタ44)、9ビットの「B」レジスタ(Bレジスタ46)、9ビットのプログラム・カウンタ・レジスタ(Pレジスタ48)、および18ビットのI/O制御およびステータス・レジスタ(IOCSレジスタ50)が含まれる。さらに、4個の通信ポート(まとめてポート52、個々のポートはポート52a〜d)が含まれる。ポート52のそれぞれは、エッジおよびコーナーのノードの場合を除き、それぞれのバス28に接続される(さらに、18本のデータ線と、読み出し線と、書き込み線とを有するが、これらは、個々には示されていない)。
SEAforth−24Aデバイス内のノードは、通信および処理を、いずれも非同期で、特に簡潔な(elegant)かつ効率的な様式で行うことにより、このデバイスを、本発明の畳み込みシステム10の実施形態での使用に非常に好適なものにしている。しかしながら、この特定のデバイスを使用することや、あるいはその機能を実現しようとするハードウェアを使用することは、必須ではないことに注意されたい。また、アレイ12のプロセッサ14間でデータが実際にどのように伝達されるかについて、誤解がないように注意されたい。たとえば、デバイス間通信について考える場合には「プッシュ」か「プル」か、のたとえを用いることが可能であるが、通信が実際にはデバイス間の共同作業であることを留意していなければならない。
図3a〜cは、プロセッサ14を使用するインバウンド通信、アウトバウンド通信、および内部通信を示す、図1の部分図である。図3aは、入力装置16とプロセッサ14aとの間、およびプロセッサ14aとプロセッサ14bとの間でデータが渡される様子を示している。図3bは、プロセッサ14wとプロセッサ14xとの間、およびプロセッサ14xと出力装置22との間でデータが渡される様子を示している。そして、図3cは、プロセッサ14iとプロセッサ14jとの間でデータが渡される様子を示している。
図3a〜cの各プロセッサ14は、総称キー(generic key)情報を保持する要素を有するように表されている。SEAforth−24Aデバイスは、RAM、ROM、レジスタ、およびポートを備えており、それらはすべて、プログラムで計算を実行する際に使用されることが可能である。それは、ここでは特に、これから説明される、汎用情報(generic information)を保持する要素が、RAM、ROM、レジスタ、およびポートのいずれであってもよいことを意味している。プロセッサ14aの場合は、信号データ要素60が、重要情報を保持する要素である。プロセッサ14b〜wの場合は、信号データ要素60、積分核フィルタ要素62、および計算された要素(calculated elements)64の1つずつが、それぞれの重要情報を保持する要素である。そして、プロセッサ14xの場合は、結果要素66が、重要情報を保持する要素である。
図3aは、データがどのようにしてアレイ12に入力されることができるかを示している。この、畳み込みシステム10の例示的実施形態では、プロセッサ14aは、入力装置16からデータを受け取り、そのデータをプロセッサ14bに提供することに専念する。したがって、プロセッサ14aは、入力装置16からデータ・ワードを受け取って保存し、その信号データ要素60を使用して、これらのデータ・ワードのインスタンスをプロセッサ14bに提供することが可能であり、そのRAM 34の容量と、プロセッサ14aが適切にプログラムされているかどうか、とによる制限のみを受ける。
SEAforth−24Aデバイスにおける通信および処理が、両方とも非同期であるため、いったんプロセッサ14aがプロセッサ14bに対してデータを利用可能にすると、当面のタスクの処理が、概念上は、アレイ12の残りの部分に「流れる」可能性がある。
図3bは、データがどのようにしてアレイ12から抽出されることができるかを示している。プロセッサ14xは、ここでは、プロセッサ14wからデータを受け取り、そのデータを出力装置22に提供することに専念する。したがって、プロセッサ14xは、プロセッサ14wからデータ・ワードを受け取って保存し、その結果要素66を使用して、データ・ワードを出力装置22に提供することが可能であり、この場合も、すべてが、そのRAM 34の容量と、プロセッサ14xが適切にプログラムされているかどうか、とによる制限のみを受ける。
図3cは、信号データ要素60および計算された要素64の内容が全体としてプロセッサ14b〜w間をどのように流れるかを示し、さらに、それらの合計が、畳み込み計算の過程において、どのようにして、各プロセッサ14に累積として保存され、一度にすべてが渡されることが可能か、を示している。後で詳述されるように、ここでは、プロセッサ14b〜wのそれぞれが、全体計算に寄与する演算を実行しているとすることができる。プロセッサ14bの場合、この演算は、(その信号データ要素60にある)新しい入力データ値と、(その積分核フィルタ要素62にある)あらかじめ保存された畳み込み係数値とを使用する。この特定の実施例において、プロセッサ14bは、それ以前の計算段階からの「部分的な」ものがまだないために、「計算された要素」64を必要としない。しかしながら、プログラムの簡潔さのために、プロセッサ14bは、ゼロがロードされた「計算された要素」64を有することが可能である。さらに、ノードあたり複数の畳み込み係数が処理されるアプリケーションの場合(後述)、プロセッサ14bは、計算された要素64を有し、使用することが可能である。
引き続いて、プロセッサ14c〜wの場合、各プロセッサ14は、あらかじめ保存された畳み込み係数値、フロー経路24に沿ってそのそれぞれの先行のプロセッサ14から得られた入力データ値、および、やはり先行のプロセッサ14から得られた中間値を用いることによって、全体の畳み込み計算に寄与する演算を実行する。畳み込み係数値は、それぞれの積分核フィルタ要素62に保持され、入力データ値は、それぞれの信号データ要素60に一時的に保持され、中間値は、それぞれの「計算された要素」64に一時的に保持される。
図2と図3a〜cとを組み合わせると、SEAforth−24Aデバイス内のプロセッサ14a〜xのポートおよびレジスタが、どのようにして、上述のように用いられることが可能かを、より全体的に知ることができる。たとえば、プロセッサ14aは、そのポート52dを用いて入力データ値を右方向のプロセッサ14bに渡し、プロセッサ14bは、それを自身のデータ・スタック40に入力することが可能である。これを実際に行う場合、プロセッサ14bは、そのポート52cに到着した入力データ値を読み取り、それを自身のデータ・スタック40に入力する。つぎにプロセッサ14bは、そのデータ・スタック40に現在ある入力データ値と、そのデータ・スタック40に既にあった畳み込み係数値とを用いて、畳み込みに寄与する演算を実行し、この結果である中間データ値を、そのポート52dに入力する。
その後、同様の演算を、フロー経路24に沿って、プロセッサ14b〜wにおいて行うことが可能である。SEAforth−24Aデバイス内の各ノードの動作は非同期であるが、ここでのプロセッサ14b〜wにおける動作はすべて、概念上は、並列に行われるものと見なされることが可能である。したがって、プロセッサ14bに関する上述の動作と基本的に同時に、同様の演算がプロセッサ14iおよび14jにおいて行われることが可能であり、たとえば、プロセッサ14iおよび14jは、単に、それぞれの畳み込み係数値を使用し、中間データ値を処理し、フロー経路24に沿うそれぞれのポート52を使用する。さらに基本的に同時に、プロセッサ14wが、そのポート52cにおいて、プロセッサ14xが上述のように取り扱うべき出力データ値を利用可能にする。しかしながら、この場合も、RAM、ROM、レジスタ、およびポートはすべて、SEAforth−24Aデバイス内でプログラムによって使用されることが可能であり、この前述の実施例は、同じ結果を達成するためにプロセッサ14をプログラムすることが可能な、いくつもの方法のうちの1つに過ぎないことに注意されたい。
図4a〜fは、図1などに示されたようなプロセッサ14のアレイ12の畳み込み計算の諸段階を概略的に表したブロック図である。概して、これらの各段階は、以下の動作を必要とする。
(1)データ・サンプル値と畳み込み係数値とを並列に掛け合わせる。
(2)段階(1)で得られた乗算した積の合計を計算する。
(3)アレイ12内で(すなわち、パイプ・ラインに沿って)データ・サンプル値をシフトし、次のデータ・サンプル値を最初のノードに受け取らせ、最後のノードからデータ・サンプル値をドロップさせる。
(4)必要に応じて繰り返す(たとえば、以下に詳細に示すように)。
SEAforth−24Aデバイスが備えるRAM、ROM、レジスタ、およびポートのすべては、プログラムで実行される計算に使用可能であること、ならびに、本発明の畳み込みシステム10は、機能および構造が、より少ない、より多い、または、異なる他のデバイスでも使用されることが可能であることから、図4a〜fにおけるデータ格納要素を、ここでは総称して「ビン」と呼ぶ。この後の説明を簡潔にするために、ここでの実施例では、実際の畳み込み計算で用いられる、畳み込み係数値、サンプル・データ値、およびプロセッサ14を、同数(具体的には、それぞれ22個)とする。このような数量は、多くの「現実世界」の応用では一般的でない可能性があるので、代替事例についての考察も後述するが、いずれの事例でも、以下のことが完全に理解されていれば、他の数量を用いることは、当業者にとって一般的に単純明快であるはずである。
図4aは、正式の計算を開始することが可能な段階を示す。畳み込み係数値(c0...cn(全部でn+1個の値)(図1および図3a〜cのSEAforth−24Aデバイスではn=21))が、ビン(総称ではcビン72、個別にはcビン72(0..n))にロードされており、別のビン(総称ではdビン74、個別にはdビン74(0..n))にはゼロがロードされており、別のビン(総称ではrビン76、個別にはrビン76(0..2n-1))が、最初は重要でない内容を有する。図4a〜fおよび以下の説明では、インデックスはゼロから始まり、「c」は「係数」を意味し、「d」は「データ」を意味し、「a」は「累積された」中間値であり、「r」は「結果」を意味する。
図4bは、次の段階を示し、この段階では、最初のデータ・サンプル値(d0)がdビン74(0)に受け取られている。計算は、図示されるように、基本的には、パイプ・ラインの長さにわたって同時かつ並列に進められ、最初の結果値(r0)がrビン76(0)に格納される。
図4cは、次の段階を示し、この段階では、前のデータ・サンプル値(d0)がdビン74(1)に移動しており、第2のデータ・サンプル値(d1)がdビン74(0)に受け取られている。この場合も、計算は、図示されるように、基本的には、パイプ・ラインの長さにわたって同時かつ並列に進められ、第2の結果値(r1)がrビン76(1)に格納される。
図4cと図4dとの間にn−2個の段階があり、それらは、概念上は、上述の段階と非常によく似ている。
図4dは、最後のデータ・サンプル値(dn)がdビン74(0)に受け取られている段階を示す。この場合も、計算は、図示されるように進められ、結果値(rn)がrビン76(n)に格納される。
図4eは、次の段階を示す。この時点では、n+1個のデータ・サンプル値(d0...dn)のすべてが部分的に処理されており、最後のデータ・サンプル値(dn)がdビン74(1)に移動しており、dビン74(0)にゼロ値が入力されている。計算が進められ、結果値(rn+1)がrビン76(n+1)に格納される。
図4eと図4fとの間に、さらにn−2個の段階があり、それらは、概念上は、上述の段階と非常によく似ている。
図4fは、最後のデータ・サンプル値(dn)の処理が最終的に完了する段階を示す。ここでの計算後、(n+n−1)番目の結果値がrビン76(2n-1)に格納され、処理が完了する。この時点で、rビン76(0..2n-1)は、ここで、n+1個のデータ・サンプル値(d0...dn)と、n+1個の畳み込み係数値(c0...cn)とに基づいて実行された畳み込み計算の完全な結果を保持している。
図5a〜fは、やはり図1に示されたようなプロセッサ14のアレイ12の形で示される、新しいアルゴリズムに基づく畳み込み計算の諸段階を概略的に表したブロック図である。簡単に言えば、この新しいアルゴリズムは、フィルタ関数の微分(derivation)を用いる。この点を強調するために、ここで使用される畳み込み係数値を、c’0...c’mのように、異なる表記とする(図1および図3a〜cのSEAforth−24Aデバイスではm=21であるが、ここで別のインデックス参照を用いた理由については後述する)。
図5aは、正式の計算を開始することが可能な段階を示す。微分(derivation)畳み込み係数値(c’0...c’m)は、ビン(総称ではc’ビン82、個別にはc’ビン82(0..m))にロードされており、別のビン(総称ではdビン84、個別にはdビン84(0..m))にはゼロがロードされており、単一のpビン86および一連の結果ビン(総称ではrビン88、個別にはrビン88(0..2m-1))が、最初は重要でない内容を有する。前の実施例といくらか似ているが、インデックスはゼロから始まり、「c’」は「係数」の微分(derivation)を意味し、「d」はここでも「データ」を意味し、「a」はここでも、累積された中間値であり、「p」は「部分」を意味し(結果に寄与する「部分」の場合と同様)、「r」は「結果」を意味する。
図5bは、次の段階を示し、この段階では、最初のデータ・サンプル値(d0)がdビン84(0)に受け取られている。計算は、図示されるように、基本的には、パイプ・ラインの長さにわたって同時かつ並列に進められ、最初の部分値(p0)がpビン86に提供される。しかしながら、図4a〜fに示された従来型の畳み込みアルゴリズムを使用する変形形態と異なり、ここでは、「前の」部分値が現在の部分値に加算され、その結果がrビン88(0)に格納される。しかしながら、この早い段階では「前の」値が存在しないため、ゼロが最初の部分値(p0)に加算されて最初の結果値(r0)が計算され、これがrビン88(0)に格納される。
図5cは、次の段階を示し、この段階では、前のデータ・サンプル値(d0)がdビン84(1)に移動しており、第2のデータ・サンプル値(d1)がdビン84(0)に受け取られている。この場合も、計算は、図示されるように、基本的には、パイプ・ラインの長さにわたって同時かつ並列に進められ、第2の部分値(p1)がpビン86に提供される。前の部分値(p0)が現在の部分値(p1)に加算され、この結果が、第2の結果値(r1)としてrビン88(1)に格納される。
図5cと図5dとの間にm−2個の段階があり、それらは、概念上は、上述の段階と非常によく似ている。
図5dは、最後のデータ・サンプル値(dm)がdビン84(0)に受け取られている段階を示す。さらにこの場合も、計算は、図示されるように進められ、m番目の結果値(rm)がrビン88(m)に格納される。
図5eは、次の段階を示す。この時点では、m+1個のデータ・サンプル値(d0...dm)のすべてが部分的に処理されており、最後のデータ・サンプル値(dm)がdビン84(1)に移動しており、dビン84(0)にゼロ値が入力されている。計算が進められ、結果値(rm+1)がrビン88(m+1)に格納される。
図5eと図5fとの間に、さらにm−2個の段階があり、それらは、概念上は、上述の段階と非常によく似ている。
図5fは、最後のデータ・サンプル値(dm)の処理が最終的に完了する段階を示す。ここでの計算後、(m+m−1)番目の結果値(r2m-1)がrビン88(2m-1)に格納され、処理が完了する。この時点で、rビン88(0..2m-1)は、ここで、m+1個のデータ・サンプル値(d0...dm)と、m+1個の微分(derivation)畳み込み係数値(c’0...c’m)とに基づいて実行された畳み込み計算の完全な結果を保持している。
ここまでをまとめると、本発明の畳み込みシステム10が、必要な計算の大半を、直列ではなく並列に完結することを可能にすることは明らかである。たとえば、上述の簡略化された実施例では、22個のプロセッサ14が計算を並列に実行する。なお、SEAforth−24Aデバイスの24個のプロセッサ14をすべて用いることも可能であるが、プロセッサ14aおよびプロセッサ14xが計算とI/Oの両方をカバーしなければならないため、それほど高速にはならない。
このセクションの冒頭で述べたように、本発明の畳み込みシステム10はさらに、新しい種類のアルゴリズムを用いることを可能にする。以下では、その態様について説明する。図6a〜cは、前述のアプローチの両方を用いて実行された畳み込みを表すグラフである。つまり、これらの図は、図4a〜fおよび図5a〜fで示されたものの概念的概要を与える。
図6aは、従来型の畳み込み係数の使用を表す第1のトレース92と、微分(derivation)畳み込み係数(すなわち、新しい種類のアルゴリズムで使用可能であって、本発明で使用されることが可能な畳み込み係数)の使用を表す第2のトレース92’とを示す。図6bは、前述の両方のアプローチを用いて畳み込みが実行される入力データを表す単一トレース94を示す(ここに示された他方のトレース94’については後述)。図6cは、前述の両方のアプローチの結果を表す単一トレース96を示す。図6a〜cに示された特定の実施例の場合、トレース92は、次式で表される。
Figure 2009010925
トレース92’は、u’(t)で表される。トレース94は、次式で表される。
Figure 2009010925
そして、トレース94’は、ν’(t)で表される。ここで、tは、ステップ・サイズ0.01で、−1から1までの区間に対して定義され、iは、ステップ・サイズ1の、1からqまでの範囲であり、qは、フィルタ関数を通過するデータ点の数(この例では2000)である。まとめて言えば、図6a〜cは、前述のアプローチのいずれかを用いて、まったく同じ結果がどのようにして達成されることができるかを示しており、その結果は、ここではトレース96で示されている。
新しい種類のアルゴリズムを用いると、さらに別のアプローチも可能である。たとえば、図6a〜cを再度参照すると、(たとえば、トレース94’で表される)微分(derivation)データ関数と(たとえば、トレース92で表される)従来型のフィルタ関数とを用いることも可能であり、トレース96で表される結果も同じになる。他の文献には、他者がこのアプローチを検討しているという何らかの暗示があるが、本明細書で開示された新規な様式で実装されるものではない。関数の微分(derivation)を使用することは、さらに論理的に考えられることも可能である。たとえば、データ関数およびフィルタ関数の両方の微分(derivation)を使用することは、理論的に可能である。さらにまた、データ関数およびフィルタ関数のいずれかまたは両方の、より高次の微分(derivation)を使用することも、理論的に可能である。実際問題として、これらのアプローチは、現実世界では有用性が限られる可能性があるが、それでもなお、本発明の趣旨によって包含される。図6a〜cでは、データ関数およびフィルタ関数の両方を微分するアプローチは、トレース92’およびトレース94’で表されており、結果はやはりトレース96になる。
これらのどのアプローチにおいても、微分(derivation)を用いる際の幾つかの重要な考慮すべき事柄は、関数の微分(function derivation)を求めるために必要な作業から得られる。畳み込み計算では、使用されるデータ・サンプル値の数は、使用される係数値の数より多くなるのが普通である。したがって、通常、データ関数の微分(derivation)を求めるために必要な作業量より、フィルタ関数の微分(derivation)を求めるために必要な作業量のほうが少ないことになる。もちろん、状況によっては、データ関数の微分(derivation)を求めるための追加作業がほとんどまたはまったく不要な場合もあるが、そのようなことはほとんどまれである。さらに、通常異なっているデータ・サンプル値に対して複数の畳み込み計算を実行する場合には、同じフィルタ係数値が使用されることが多いため、フィルタ係数値を求めるための作業は、再利用が可能な作業であり、また、「償却される」作業である。実際、多くの応用では、この作業量は設計時に費やされ、フィルタ値は、プログラム定数として入力されることが可能である(たとえば、SEAforth−24AのようなデバイスのROM 32に格納されることも可能である)。
引き続き図6a〜cについてであるが、トレース92およびトレース94は、振幅範囲が広く、トレース92’およびトレース94’は振幅範囲が著しく狭いことが見てとれる。実際問題として、これは、トレース92’およびトレース94’の各値を、より少ないビット数で表現することが可能であることを意味する。このことの重要性が認識されるのは、利用可能なツールの性質、すなわち、デジタル・プロセッサの本来的な制限について考えるときである。SEAforth−24Aデバイスは、実際に、他の多くの好適な候補より相当優秀であるが、発明者らは、本発明の畳み込みシステム10が、現代のデジタル・プロセッサの本来的な制限のいくつかを克服することに役立つかについて、幾つかのポイントを大まかに示すことが可能であり、ここでは、引き続き、SEAforth−24Aデバイスの使用を再開する。
たとえば、トレース92の畳み込みフィルタ値は、18ビット値で表現されなければならないかもしれないのに対し、トレース92’において本発明のアプローチに用いられる値は、9ビットあるいはさらに少ないビット数の値で表現されることができる。同様に、トレース94で使用されるデータ・サンプル値は、18ビット値で表現されなければならないかも知れないのに対し、トレース94’において本発明のアプローチに用いられる値は、9ビットあるいはさらに少ないビット数の値で表現されることができると、考えることが可能である。すべて9ビットの値を用いることは、本発明の畳み込みシステム10において、約4倍(4X)の速度増加をもたらすことができるというのが本願発明者の観察であった。
演算を直接実行できる値のサイズに関して、デジタル・プロセッサは本来的に制限される。たとえば、1971年にIntel Corporationが世に出した4004プロセッサが処理できたのは4ビット値であり、現行世代のほとんどのパーソナル・コンピュータに搭載されているプロセッサが直接処理できるのは、32ビット値か64ビット値である。さらに、一般的に、今日のほとんどのプロセッサで可能な演算のうちで、速度が最も遅くなるものの1つが、大きな値の乗算である。本願発明者の行った観察によれば、乗算演算は、畳み込みアルゴリズムの実行時間の60〜90%を占める可能性がある。
SEAforth−24Aデバイスも、デジタル・プロセッサのこうした一般原則の例外ではない。SEAforth−24Aデバイスは、Forth言語を用い、符号なしの値の場合は18ビット(符号付きの値の場合は17ビット)で表される数値、または、符号なしの値の場合は9ビット(符号付きの値の場合は8ビット)で表される数値を扱うことを前提とする。したがって、たとえば、10ビットを要する値の場合は、実質的に、値が18ビットを要する場合と同じに処理されなければならない。図2を再度参照すると、SEAforth−24Aデバイス内の各プロセッサ14において、1個のAレジスタ44が18ビットであり、1個のBレジスタ46が9ビットであり、ROM 32およびRAM 34のワード幅が18ビットであり、ポート52の幅が18ビットであることを再確認されるであろう。
ここで、プロセッサ14における、Forth言語での2個の18ビット値の乗算と等価な処理は、36個のオペコードからなる次のシーケンスを必要とする(ここで「.」はnop(無演算)命令を表し、「+*」はplus−star(ビットごとの乗算)命令を表す)。
(9) .+*.+*.+*.+*.+*.+*.+*.+*.+*.+*.+*.+*.+*.+*.+*.+*.+*.+*
これに対し、プロセッサ14における、Forth言語での1個の18ビット値と1個の9ビット値との乗算と等価な処理は、18個のオペコードからなる次のシーケンスを必要とする。
(10) .+*.+*.+*.+*.+*.+*.+*.+*.+*
そして、プロセッサ14における、Forth言語での2個の9ビット値の乗算と等価な処理は、9個のオペコードからなる次のシーケンスを必要とする。
(11) +*+*+*+*+*+*+*+*+*
明らかに、計算の負荷および達成可能速度に関しては、式(9)の計算が最も好ましくないタスクであり、式(11)の計算が最も好ましいタスクである。これらはそれぞれ、1倍、2倍、および4倍の速度の動作であると言うことができる。
ここで、上述の概念的な内容に関して、より厳密な「証明」を行う。本発明の畳み込みシステム10に用いることが可能な、新しい種類のアルゴリズムでは、積分核の直接表現(たとえば、式(1)、および大まかには「背景技術」のセクションを参照)の代わりに微分表現を用いる。次式は、基本的には、式(5)を書き換えたものである。
Figure 2009010925
ここで、f(t−τ)は積分核(integral kernel)を表す。しかしながら、その代わりに、積分核をf’(t−τ)で表すものとする。その結果が次式である。
Figure 2009010925
ここで、この積分核は特定のローパス・フィルタであるか、ローパス・フィルタで表されることが可能であるとすると、次式の近似のようになり、
(14) f’(ct-k)=f(ct-k)−f(ct-k-Δτk
これにより、次式が得られる。
Figure 2009010925
ここで、式(15)の等号の右辺の第1項が、単純にr(t)であることは自明である。また、それほど自明ではないが、等号の右辺の第2項は、単純に、ちょうど時間ステップ1つ分(Δτ)前からの、以前の畳み込み値に等しく、これは、次式で表される。
Figure 2009010925
したがって、直接積分核関係を利用する畳み込みと、直接積分核関係の微分(derivation)を利用する畳み込みとの間には、次の関係が成り立つ。
(17) r’(t)=r(t)−r(t−Δτ) → r(t)=r’(t)+r(t−Δτ)
ここで重要な点として、直接表現を利用する畳み込みは、核の微分(derivation)を利用する畳み込みと前に計算された畳み込みとの和と、まったく同じであることを理解されたい。このことは、新しい和が、古い和に、丁度計算されたばかりのものを加えたものに等しい、と言うことと同じである。
これを、本発明の畳み込みシステム10で使用可能な、新しい種類のアルゴリズムのコンテキストに適用すると、直接フィルタ係数値(c0...cn)を用いて、微分(derivation)係数値(c’0...c’n+1)を、c’0=c0−0、c’1=c1−c0、c’2=c2−c1、...、c’n=cn−cn-1、およびc’n+1=0−cnのように計算することが可能である。ただし、c0の値が非ゼロの場合は、単純に、c’0=c0−0=c0にする。同様に、c0の値がゼロの場合は、単純に、c’0=0−0=0とする。微分(derivation)フィルタ値を値ゼロに関連付けることまでする理由がない。それは、微分(derivation)フィルタ値が、累積された中間値(a0)に寄与しないからである。この理由付けを、ゼロである、任意の直接フィルタ値または任意の直接フィルタ値の微分(derivation)に拡張することが可能である。これは、フィルタ係数値が、特定のノードで計算されている累積された中間値に寄与しない場合には、そのフィルタ係数値をそのノードに関連付ける必要がないためである。それにもかかわらず、第1のノード以外では、各ノードにおける部分和を、依然として、計上しなければならない。
ここで、なぜ、図4a〜fでインデックスnを使用し、図5a〜fでインデックスmを使用したかに戻ると、これは、直接ベースのアルゴリズムを使用することと、微分(derivation)ベースのアルゴリズムを使用することとの、ある重要な違いを強調するためである。前の段落からわかるように、n個の直接フィルタ係数値(c0...cn)が使用可能である場合は、n+1個の微分(derivation)係数値(c’0...c’n+1)が必要である。したがって、たとえば、直接ベースのアルゴリズムを使用する応用に21個のプロセッサを適用するのであれば、同じアプリケーションに微分(derivation)ベースのアルゴリズムを使用する場合には、22個のプロセッサが必要である。また、直接ベースのアルゴリズムを使用する応用に22個のプロセッサを適用するのであれば、同じ応用に微分(derivation)ベースのアルゴリズムを使用する場合には、23個のプロセッサが必要である。このため、図1および図3a〜cのSEAforth−24Aデバイスの場合には、1個のプロセッサを未使用のままにするか、1個のプロセッサにI/O機能を結合して、微分(derivation)ベースのアルゴリズムには23個のプロセッサを用いるようにする必要がある。このことは、24プロセッサ・デバイス(たとえば、SEAforth−24A)を使用する場合には多少の問題を呈するが、40プロセッサ・デバイス(たとえば、SEAforth−40A)を使用する場合には、かなり軽微な問題となり、80個のプロセッサ、96個のプロセッサ、128個のプロセッサなどのデバイスを使用する場合には、ますます問題にならなくなる。
なお、本明細書では、使用する畳み込み係数値およびサンプル・データ値の数を同じにすることにより、説明を簡単にしている。直接ベースのアルゴリズムを使用する場合に22個のサンプル・データ値を処理しなければならないとすると、微分(derivation)ベースのアルゴリズムを使用する場合には23個のサンプル・データ値を処理しなければならない。もちろん、22個の実データ値を使用し、23番目の値にゼロを「パディング」することは可能である。しかしながら、より一般的には、このことは問題にならない。現実世界の応用のほとんどでは、大量の(場合によっては無限量に近づく)サンプル・データ値が使用されるからである。
まとめると、直接表現ではなく微分(derivation)表現を利用する利点は、たいていの場合に、微分(derivation)の振幅を表現するために必要な値の絶対値が、直接フィルタの振幅を表現するために必要な値の絶対値より、ずっと小さいことである。今一度SEAforth−24Aデバイスを例にとると、SEAforth−24Aデバイスの場合には、振幅値を表すためにフル18ビットのデータ・ワードを用いなくとも、9ビットのデータ・ワードで十分であることが多い。9ビット表現で十分であると見なすことを可能にする要件は2つある。第1の要件は、係数値が9ビットの符号なし(または8ビットの符号付き)で表されることである。第2の要件は、連続する直接フィルタ係数値間の差が9ビットの符号なし(または8ビットの符号付き)で表されることである。図6a〜cで示された例で使用されるような、典型的なローパス・フィルタの場合は、最上位ビットが符号ビットのままなので、微分(derivation)値は8ビットだけで表されなければならない。原則として、問題の値が符号なしであるか、符号なしとして扱われることが可能であって、かつ、連続する直接係数値間の差が512単位未満である場合は、微分(derivation)近似が適切な方法である。そうでない場合、連続する直接係数値間の差は、256単位未満でなければならない。
図7は、例示的な直接フィルタのコード・リスト700である。ここで使用されているプログラミング言語は、Forthであり、ターゲット・ハードウェア・プロセッサ14は、SEAforth−24Aデバイスである。
アイテム702は、「IO」を、IOCSレジスタ50と等しくするコンパイラ命令である。これは、データがどこから読み出され、どこに書き込まれるかを指定する。ただし、SEAforth−24AデバイスのIOCSレジスタ50は、同時に別々のポート52に対して読み出しと書き込みとを指定することが可能である。あまり高機能ではないデバイスに慣れている人は、混乱を回避するため、以降を読み進める際にこの点に留意されたい。
アイテム704は、「H」を、係数値と等しくするコンパイラ命令である。ここで「123」は、単純に、例として使用される値である。これは、このプロセッサ14の場合のcビン72の内容になる。
アイテム706は、Forth言語におけるコメントである。
アイテム708は、Forth言語におけるロケーション・ラベルである。
アイテム710は、畳み込み計算を行うためにプロセッサ14を初期化するForth命令のシーケンスである。具体的には、まず、データ・スタックの一番上にIOがロードされる。つぎに、そこからBレジスタ46にポップされて、その結果、IOCSレジスタ50をポイントする。つぎに、データ・スタックの一番上にHがロードされる。つぎに、ここでこの命令シーケンスを収容するのに用いられる18ビット命令ワードにnopがパディングされる。
アイテム712は、条件付きコンパイルによって3つのケースが扱われるループの先頭を指定する。これは、プロセッサ14が、パイプ・ラインにおける最初のプロセッサ(プロセッサ14b)なのか、中間のプロセッサ(プロセッサ14c〜vのいずれか)なのか、最後のプロセッサ(プロセッサ14w)なのかに応じて、プログラムされる。図3a〜cも参照されたい。
アイテム714は、最も典型的な場合(対象プロセッサ14がプロセッサ14c〜vのうちの1つである場合)について、命令のコンパイルの開始を指定する。
[注 図7〜8の命令ワードの右側のコメントは、関連する場合に、データ・スタックおよびリターン・スタックを表す2カラム形式を使用しており、この形式では、右寄りの要素が、各スタックの一番上である。以下の説明中の丸括弧(parentheticals)は、この形式を、多くのForth教科書で見られる「前−−後、および左寄りの要素が一番上」の形式に「変換」したものを示す。このように、本実施例が理解しやすくなるように、両方の形式を提示している。]
アイテム716は、別のシーケンスのForth命令である。具体的には、まず、データ・サンプル値が、Bレジスタ46がポイントしている場所から読み出され、データ・スタックにプッシュされる(h -- s h)。つぎに、累積値(a)も読み出され、データ・スタックにプッシュされる(s h -- a s h)。つぎに、データ・スタックの一番上の要素がポップされ、リターン・スタックの一番上にプッシュされる(D: a s h -- s h R: -- a)。つぎに、データ・スタックの一番上の要素が複製され、データ・スタックにプッシュされる(D: s h -- ssh R: a -- a)。
アイテム718では、データ・スタックの一番上の要素がポップされ、リターン・スタックの一番上にプッシュされる(D: s s h -- s h R: a -- s a)。つぎに、大規模乗算(「MULT」(SEAforth−24AデバイスのBIOSにおいて与えられている定義))が実行される。データ・スタックの上2つの要素は、ここでは乗数および被乗数として使用され、一番上の要素が乗算の結果(a’)に置き換えられ、被乗数は、そのままデータ・スタックの2番目の要素として残される(D: s h -- a’ h R: s a -- s a)。
アイテム720が続き、ここでは、リターン・スタックの一番上の要素がポップ・オフされて、データ・スタックにプッシュされる(D: a’ h -- s a’ h R: s a -- a)。つぎに、データ・スタックの一番上の要素がポップ・オフされて、Bレジスタ46がポイントしている場所に書き込まれる(D: s a’ h -- a’ h R: a -- a)。つぎに、リターン・スタックの一番上の要素がポップ・オフされて、データ・スタックにプッシュされる(D: a’ h -- a a’ h R: a --)。つぎに、nopが、使用されている18ビット命令ワードにパディングされる。
アイテム722では、データ・スタックの上2つの要素が互いに加算され、一番上の要素が新しい累積和(a”)に置き換えられ、2番目の要素が1つ下の要素に置き換えられる(D: a a’ h -- a” h R: -- )。
アイテム724では、対象プロセッサ14がプロセッサ14c〜vのうちの1つである場合についてのコードの条件付きコンパイルを終了する。
図7に示された、他の2つの条件付きコンパイルの選択肢については、明快に理解されるであろう。プロセッサ14bの場合は、読み出して加算すべき「事前」累積値がないため、より単純である。また、プロセッサ14vの場合も、現在のデータ・サンプル値を「後続の」プロセッサに書き込む必要がないため、いくらか単純である。
最後にアイテム726は、プロセッサ14b〜wのすべてについてコンパイルされる命令シーケンスであって、ここでは、データ・スタックの一番上の要素がポップ・オフされ、Bレジスタ46がポイントしている場所に書き込まれる(D: a” h -- h R: --)。つぎに、ループがアイテム712に戻る。
図8a〜bは、例示的な微分(derivation)フィルタのコード・リスト800である。図8aは、(計算が9ビットか18ビットかということ以外は)図7と概念的に同様の機能を実行するコードを示しており、図8bは、微分(derivation)ベースのアルゴリズムで使用される追加コードを示している。
図8aからわかるように、コードの大部分は、前述の直接フィルタ700の場合と基本的に同じである。1つの例外はアイテム802であり、ここでは、(MULT定義を用いて実行される大規模乗算の代わりに)小規模乗算を実行するために、9個のplus−star(+*」)演算が用いられる。
アイテム804は、リターン・スタック内の部分値(p)をゼロに初期設定するForth命令のシーケンスである。具体的には、まず、リテラルがデータ・スタックに配置され(D: h -- p h R: -- )、つぎに、そこからリターン・スタックの一番上にプッシュされ(D: p h -- h R: -- p)、命令ワードに書き込む(fill out)ために2つのnopが使用される。[ただし、この特定のアプローチは、直接フィルタ700との概念的比較を容易にするために選択されたものであり、プログラミング分野の当業者であれば、この処理を行うための、より効率的かつエレガントな方法があることは自明であろう。]
次のアイテム806は、現在の部分値(p)を用いて追加の加算を行う。現在の部分値(p)は、リターン・スタックからポップされ、データ・スタックにプッシュされる(D: a” h -- p a” h R: p -- )。つぎに、第1のnopが、次の命令まで時間を稼ぐ。つぎに、データ・スタックの上2つの要素が互いに加算される。ここで、一番上の要素が加算結果(累積和(a”)であると同時に次の部分値(p’)である)に置き換えられ、2番目の要素が1つ下の要素に置き換えられる(D: p a” h -- p’ h R: --)。つぎに、第2のnopが、18ビット命令ワードにパディングされる。
次のアイテム808は、累積和(a”)を次の部分値(p’)としてリターン・スタック内に保持する。累積和(a”)は複製される(D: a” h - - p’ a” h R: -- )。次の部分値(p’)は、データ・スタックからポップされ、リターン・スタックにプッシュされる(D: a” h -- a” h R: -- p’)。つぎに、2つのnopが、18ビット命令ワード以外にパディングされる。
図8bは、微分(derivation)ベースのアルゴリズムが用いられる場合の「積分器」ステップに用いられる追加コードを示している。ただし、この特定の例では、このコードは、追加のプロセッサ14で実行される。
アイテム810は、Forth言語におけるコメントであり、アイテム812は、Forth言語におけるロケーション・ラベルである。このコードは、図8aのコードに適切なコンパイラ命令を追加することによって条件付きでコンパイルされるか、独立してコンパイルされることが可能である。
アイテム814は、第1に値IOをBレジスタ46にフェッチし、第2に値$3F(ポート・アドレス)をAレジスタ44にフェッチする、Forth命令のシーケンスである。
アイテム816は、別のシーケンスのForth命令である。具体的には、データ・スタックをゼロにする命令である。データ・スタックの一番上の要素は置き換えられて、そのデータ・スタック上にプッシュされ、つぎに、これがもう一度行われる(その一番上の要素が何であるかは無関係である)。つぎに、その上2つの要素がデータ・スタックからポップ・オフされ、それらの排他的論理和が計算され、その結果(ゼロ)が、またデータ・スタックにプッシュされる。
アイテム818は、ループの開始を指定する。
アイテム820は、別のシーケンスのForth命令である。具体的には、まず、Bレジスタ46がポイントしている場所から値が読み出され、その値がデータ・スタックにプッシュされる。つぎに、データ・スタックの上2つの要素が互いに加算され、一番上の要素が加算結果に置き換えられる(そして、2番目の要素が1つ下の要素に置き換えられる)。つぎに、データ・スタックの一番上の要素が複製され、データ・スタックにプッシュされる。つぎに、一番上の要素がデータ・スタックからポップされ、Aレジスタ44がポイントしている場所に書き込まれる。この操作の最終的な結果として、和が出力され、さらにコピーが、ループの次の実行の間、保持(累積)される。
そして、アイテム822では、ループがアイテム818に戻る。
以上のように、本発明の畳み込みシステム10で使用される微分(derivation)ベースのアルゴリズムは、必要とする追加コードが非常に少ない。
ここまで様々な実施形態を説明してきたが、それらは例としてのみ提示されていること、ならびに本発明の範囲は、前述の例示的実施形態のいずれによっても限定されてはならず、添付の特許請求の範囲およびそれらの等価物によってのみ定義されなければならないことを理解されたい。
複数のコンピュータからなるプロセッサのアレイの形で用いられる、本発明の畳み込みシステムを示す線図である。 (背景技術)図1のプロセッサの1つ(具体的には、本明細書の多数の実施例で使用されている、IntellaSys Corporation(Cupertino,California)のSEAforth−24Aプロセッサ内のコア)の主な内部機能の線図である。 図1のプロセッサを使用するインバウンド通信を示す、図1の一部分図であって、入力装置と第1のプロセッサとの間、および第1のプロセッサと第2のプロセッサとの間で、どのようにデータが渡されるかを示す図である。 図1のプロセッサを使用するアウトバウンド通信を示す、図1の一部分図であって、最後から2番目のプロセッサと最後のプロセッサとの間、および最後のプロセッサと出力装置との間で、どのようにデータが渡されるかを示す図である。 図1のプロセッサを使用する内部通信を示す、図1の一部分図であって、アレイの中心部で使用される2個の例示的プロセッサの間で、どのようにデータが渡されるかを示す図である。 図1に示されたようなプロセッサのアレイにおける畳み込み計算を開始可能な段階を概略的に表したブロック図である。 図1に示されたようなプロセッサのアレイにおける畳み込み計算の最初の0の段階を概略的に表したブロック図である。 図1に示されたようなプロセッサのアレイにおける畳み込み計算の次の1の段階を概略的に表したブロック図である。 図1に示されたようなプロセッサのアレイにおける畳み込み計算のnの段階を概略的に表したブロック図である。 図1に示されたようなプロセッサのアレイにおける畳み込み計算のn+1の段階を概略的に表したブロック図である。 図1に示されたようなプロセッサのアレイにおける畳み込み計算のn+nの段階を概略的に表したブロック図である。 図1に示されたようなプロセッサのアレイにおける、新しいアルゴリズムに基づく畳み込み計算を開始可能な段階を概略的に表したブロック図である。 やはり図1に示されたようなプロセッサのアレイにおける、新しいアルゴリズムに基づく畳み込み計算の最初の0の段階を概略的に表したブロック図である。 やはり図1に示されたようなプロセッサのアレイにおける、新しいアルゴリズムに基づく畳み込み計算の、次の1の段階を概略的に表したブロック図である。 やはり図1に示されたようなプロセッサのアレイにおける、新しいアルゴリズムに基づく畳み込み計算の、mの段階を概略的に表したブロック図である。 やはり図1に示されたようなプロセッサのアレイにおける、新しいアルゴリズムに基づく畳み込み計算の、m+1の段階を概略的に表したブロック図である。 やはり図1に示されたようなプロセッサのアレイにおける、新しいアルゴリズムに基づく畳み込み計算の、m+mの段階を概略的に表したブロック図である。 図4a〜fおよび図5a〜fで提示されたアプローチの両方を用いて実行された畳み込みを表すグラフであって、従来型の畳み込み係数の使用を表す第1のトレースと、微分(derivation)畳み込み係数の使用を表す第2のトレースとを示す図である。 図4a〜fおよび図5a〜fで提示されたアプローチの両方を用いて実行された畳み込みを表すグラフであって、畳み込みが実行される入力データを表す第1のトレースと、微分(derivation)信号データの使用を表す第2のトレースとを示す図である。 図4a〜fおよび図5a〜fで提示されたアプローチの両方を用いて実行された畳み込みを表すグラフであって、前述のアプローチの結果を表す単一トレースを示す図である。 直接フィルタでの使用に好適なコードのリストである。 微分(derivation)フィルタでの使用に好適なコードのリストであって、図7と概念的に類似する機能を実行するコードのリストである。 微分フィルタでの使用に好適なコードのリストであって、微分(derivation)ベースのアルゴリズムで使用される追加コードのリストである。
符号の説明
10 畳み込みシステム
12 アレイ
14 プロセッサ
16 入力装置
18 入力バス
20 出力バス
22 出力装置
24 フロー経路
26 半導体ダイ
28 バス
30 ALU
32 ROM
34 RAM
36 命令復号ロジック部
38 命令エリア
40 データ・スタック
42 リターン・スタック
44 Aレジスタ
46 Bレジスタ
48 プログラム・カウンタ・レジスタ
50 IOCSレジスタ
52 ポート
60 信号データ要素
62 積分核フィルタ要素
64 計算された要素
66 結果要素
72、74,76 ビン
82、84、86、88 ビン
92 従来型の畳み込み係数の使用を表すトレース
92’ 微分畳み込み係数の使用を表すトレース
94 入力データを表すトレース
94’ 入力データの微分を表すトレース
96 結果を表すトレース
700 例示的な直接フィルタのコード・リスト
800 例示的な微分(derivation)フィルタのコード・リスト

Claims (25)

  1. フィルタ関数によるデータ関数の畳み込みを計算するシステムであって、
    最初および最後のプロセッサを含む、複数のプロセッサならなるアレイを備え、前記プロセッサは、
    前記フィルタ関数の微分に基づく係数値と、前記データ関数を表すデータ値とを掛け合わせて、現在の中間値を生成するロジックと、
    前記最初のプロセッサ以外の前記プロセッサにおいて、前記プロセッサのうちの別のプロセッサで以前に実行された計算を表す、前の中間値を受け取り、前記前の中間値を、前記現在の中間値に加算するロジックと、
    前記最後のプロセッサ以外の前記プロセッサにおいて、前記データ値および前記現在の中間値を別の前記プロセッサに送るロジックと、
    前記最後のプロセッサからの、前の中間値(あれば)を、前の部分値として保持し、前記前の部分値を、前記最後のプロセッサからの前記現在の中間値に加算して、結果値を生成するロジックと、
    を含み、
    複数のプロセッサからなる前記アレイは、一連の前記データ値を受け取って、前記フィルタ関数による前記データ関数の畳み込みを集合的に表す、一連の前記結果値を生成することを特徴とするシステム。
  2. 複数の前記プロセッサは、処理を並列に実行することを特徴とする請求項1に記載のシステム。
  3. 複数の前記プロセッサは、処理を非同期で実行することを特徴とする請求項1に記載のシステム。
  4. 複数の前記プロセッサは、非同期で通信し合うことを特徴とする請求項1に記載のシステム。
  5. 複数の前記プロセッサは、単一の半導体ダイを占有することを特徴とする請求項1乃至4のいずれか一項に記載のシステム。
  6. 複数のプロセッサからなる前記アレイのすべてが、前記半導体ダイを占有することを特徴とする請求項5に記載のシステム。
  7. 複数の前記プロセッサは、それぞれがさらに、前記係数値を保持するためにフィルタ記憶素子を含むことを特徴とする請求項1乃至6のいずれか一項に記載のシステム。
  8. 前記データ値を、前記システムの外部から前記最初のプロセッサに受け取るロジックをさらに備えることを特徴とする請求項1乃至7のいずれか一項に記載のシステム。
  9. 前記結果値を、前記最後のプロセッサから前記システムの外部へ送るロジックをさらに備えることを特徴とする請求項1乃至8のいずれか一項に記載のシステム。
  10. 前記前の中間値を保持する前記ロジックは、前記最後のプロセッサにあることを特徴とする請求項1乃至9のいずれか一項に記載のシステム。
  11. フィルタ関数によるデータ関数の畳み込みの結果値を計算する方法であって、
    (a)前記フィルタ関数の微分に基づく、係数値のシーケンスを取得すること、
    (b)前記データ関数を表すデータ値に対して、
    (i)前記各係数値について、最初および最後のプロセッサを含むコンピュータ制御のプロセッサからなるパイプ・ラインにおいて、
    (A)前記係数値と前記データ値とを掛け合わせて現在の中間値を生成すること、
    (B)前記最初のプロセッサ以外の前記プロセッサにおいて、前記プロセッサのうちの別のプロセッサで以前に実行された計算を表す、前の中間値を、前記現在の中間値に加算すること、および
    (C)前記最後のプロセッサ以外の前記プロセッサにおいて、前記データ値および前記現在の中間値を後続の前記プロセッサに送ること、
    (ii)前記最後のプロセッサからの、前の中間値である前の部分値(あれば)を、前記最後のプロセッサからの前記現在の中間値に加算して、結果値を生成すること、ならびに
    (iii)前記結果値を、前記方法を採用するデジタル信号プロセッサに出力すること、
    を含むことを特徴とする方法。
  12. フィルタ関数によるデータ関数の畳み込みを計算する方法であって、
    (a)前記フィルタ関数の微分に基づく、係数値のシーケンスを取得すること、
    (b)前記データ関数を表すデータ値のシーケンスを取得すること、
    (c)前記各データ値に対して、
    (i)前記各係数値について、最初および最後のプロセッサを含む複数のコンピュータ制御のプロセッサからなるパイプ・ラインにおいて、
    (A)前記係数値と前記データ値とを掛け合わせて現在の中間値を生成すること、
    (B)前記最初のプロセッサ以外の前記プロセッサにおいて、前記プロセッサのうちの別のプロセッサで前に実行された計算を表す、前の中間値を、前記現在の中間値に加算すること、および
    (C)前記最後のプロセッサ以外の前記プロセッサにおいて、前記データ値および前記現在の中間値を後続の前記プロセッサに送ること、
    (ii)前記最後のプロセッサからの、前の中間値である前の部分値(あれば)を、前記最後のプロセッサからの前記現在の中間値に加算して、結果値を生成すること、
    (d)前記(c)の前記結果値を、前記畳み込みとして累積すること、ならびに
    (e)前記畳み込みを、前記方法を採用するデジタル信号プロセッサに出力すること
    を含むことを特徴とする方法。
  13. 前記(c)(i)(A)は、複数の前記プロセッサにおいて、複数の前記データ値に対して同時に実行されることを特徴とする請求項12に記載の方法。
  14. 前記(c)(i)(A)は、複数の前記プロセッサにおいて、係数値の前記シーケンスに対して同時に実行されることを特徴とする請求項12に記載の方法。
  15. 畳み込みを計算するシステムであって、
    少なくとも1つのプロセッサが、フィルタ関数を表す係数値と、データ関数を表すデータ値とを掛け合わせ、
    前記係数値は、前記フィルタ関数の微分に基づくことを特徴とするシステム。
  16. 複数の前記係数値と複数の前記データ値とを並列に掛け合わせる、複数の前記プロセッサをさらに備えることを特徴とする請求項15に記載のシステム。
  17. コンピュータ制御のプロセッサにおいて畳み込みを計算する方法であって、
    フィルタ関数を表す係数値とデータ関数を表すデータ値とが掛け合わせて、前記畳み込みを集合的に表す結果値を生成すること
    を備え前記係数値は、前記フィルタ関数の微分に基づくことを特徴とする方法。
  18. 前記掛け合わせて結果値を生成することを、複数の前記プロセッサにおいて、複数の前記データ値に対して同時に実行することをさらに備えることを特徴とする請求項17に記載の方法。
  19. 請求項1乃至10、15および16のいずれか一項に記載のシステムと、
    信号から、前記信号を表す前記データ値を提供する手段と
    を備えることを特徴とする信号プロセッサ。
  20. 信号を処理する方法であって、
    信号から前記信号を表すデータ値を導出すること、および
    前記データ値を、請求項11乃至14、17および18のいずれか一項に記載の方法に従って処理すること
    を備えることを特徴とする方法。
  21. デジタル・フィルタであることを特徴とする請求項19に記載の信号プロセッサ。
  22. 信号をフィルタリングすることを特徴とする請求項20に記載の方法。
  23. コンピュータ制御のプロセッサのアレイにおいて実行されると、請求項11乃至14、20および22のいずれか一項に記載の方法を前記アレイに実施させることを特徴とするコンピュータ・プログラム。
  24. 請求項23に記載のプログラムを搬送することを特徴とするキャリヤ。
  25. 前記プログラムが記録される記録媒体であることを特徴とする請求項24に記載のキャリヤ。
JP2008097204A 2007-04-06 2008-04-03 信号処理 Pending JP2009010925A (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US91062607P 2007-04-06 2007-04-06

Publications (1)

Publication Number Publication Date
JP2009010925A true JP2009010925A (ja) 2009-01-15

Family

ID=39827918

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008097204A Pending JP2009010925A (ja) 2007-04-06 2008-04-03 信号処理

Country Status (4)

Country Link
JP (1) JP2009010925A (ja)
CN (1) CN101652770A (ja)
TW (1) TW200842699A (ja)
WO (1) WO2008124061A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018148557A (ja) * 2017-03-03 2018-09-20 シナプティクス インコーポレイテッド デジタルフィルタのための係数発生

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10546211B2 (en) 2016-07-01 2020-01-28 Google Llc Convolutional neural network on programmable two dimensional image processor

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6567564B1 (en) * 1996-04-17 2003-05-20 Sarnoff Corporation Pipelined pyramid processor for image processing systems
US7158141B2 (en) * 2002-01-17 2007-01-02 University Of Washington Programmable 3D graphics pipeline for multimedia applications
JP2005217837A (ja) * 2004-01-30 2005-08-11 Sony Corp サンプリングレート変換装置およびその方法、並びに、オーディオ装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018148557A (ja) * 2017-03-03 2018-09-20 シナプティクス インコーポレイテッド デジタルフィルタのための係数発生
JP7146414B2 (ja) 2017-03-03 2022-10-04 オムニヴィジョン ティーディーディーアイ オンタリオ リミテッド パートナーシップ デジタルフィルタのための係数発生

Also Published As

Publication number Publication date
CN101652770A (zh) 2010-02-17
WO2008124061A1 (en) 2008-10-16
TW200842699A (en) 2008-11-01

Similar Documents

Publication Publication Date Title
US7814297B2 (en) Algebraic single instruction multiple data processing
JP4672744B2 (ja) マトリックスのコサイン変換を計算するためのデータ処理装置およびその方法
CN111465924A (zh) 用于将矩阵输入转换为矩阵处理器的向量化输入的系统和方法
US20040122887A1 (en) Efficient multiplication of small matrices using SIMD registers
JP3750820B2 (ja) パック・データの乗加算演算を実行する装置
JPS6125188B2 (ja)
EP3586228B1 (en) Element by vector operations in a data processing apparatus
Palagin et al. The implementation of extended arithmetics on FPGA-based structures
CN102053819A (zh) 信息处理设备和信息处理设备的指令解码器
JP5059508B2 (ja) マイクロプロセッサ
JP2010524080A (ja) 複数のコンピュータ・プロセッサを用いる畳み込み計算システム
CN110058886A (zh) 用于计算两个区块操作数中的半字节的数量积的系统和方法
US8909687B2 (en) Efficient FIR filters
JP2009010925A (ja) 信号処理
US20120215825A1 (en) Efficient multiplication techniques
US7774399B2 (en) Shift-add based parallel multiplication
KR102586259B1 (ko) 레지스터 기반의 복소수 처리
US8078658B2 (en) ASCII to binary decimal integer conversion in a vector processor
JP2009037590A (ja) 信号処理
EP1197874B1 (en) Signal processor and product-sum operating device for use therein with rounding function
GR20170200090U (el) Λειτουργιες στοιχειου κατα διανυσμα σε μια διαταξη επεξεργασιας δεδομενων
JP3735524B2 (ja) Simd型マイクロプロセッサにおける差分データによるテーブル変換
JP2010072981A (ja) 複素数の積和演算装置および積和演算方法
GR20170200089U (el) Πολλαπλασιασμος-συσσωρευση σε μια διαταξη επεξεργασιας δεδομενων
JPS59161730A (ja) パイプライン演算器

Legal Events

Date Code Title Description
A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20081104