音声や画像のデジタル信号処理では、様々なFIR(Finite Impulse Response)フィルタ演算処理が実行される。
例えば、デジタルオーディオ機器の場合、アップサンプリング後のインターポレーション・フィルタ演算処理や、ダウンサンプリング前のデシメーション・フィルタ演算処理等がある。なお、これらのフィルタ演算処理を実現するFIRフィルタ演算器として、一般的に、直線位相FIRフィルタ(例えば、以下に示す特許文献1を参照)が用いられる。
さらに、デジタル受信器の場合、いわゆる90°移相処理があり、この処理を実現するFIRフィルタ演算器として、ヒルベルトフィルタ演算器(例えば、以下に示す特許文献2を参照)が用いられる。なお、ヒルベルトフィルタ演算器は、つぎの式(1)で表現される周波数特性H(ω)を有する。すなわち、ヒルベルトフィルタ演算器は、振幅特性を周波数特性に依らず一定とさせるとともに、正の周波数領域では位相を“π/2”遅らせ、負の周波数領域では位相を“π/2”進ませる特性を有する。但し、ωsは標本化角周波数である。
H(ω)=−j(0<ω<ωs/2)=j(−ωs/2<ω<0) …式(1)
ところで、前述したようなFIRフィルタ演算器は、線形時不変システムに基づき、有限インパルス応答を示すフィルタ係数系列Cnと入力データ系列x(t−n)とのたたみ込み演算を行うことで、直線位相特性の出力データy(t)を得るものである。なお、たたみ込み演算とは、つぎの式(2)で表現される。
y(t)=Σx(t−n)*Cn(但し、n=0〜N)
=x(t)*C0+x(t−1)*C1+・・・+x(t−N)*CN …式(2)
また、FIRフィルタ演算器は、フィルタ係数系列Cnの総数によって、偶数タップの場合と奇数タップの場合とに大別される。図8は、偶数タップの一例として“8”タップのFIRフィルタ演算器の概念的な構成を示す。図9は、奇数タップの一例として“7”タップのFIRフィルタ演算器の概念的な構成を示す。なお、タップとは、図8及び図9において、後述の遅延器群1からの所定数分の入力データの取り出し点のことである。
なお、直線位相FIRフィルタ演算器の場合、有限インパルス応答を示すフィルタ係数系列Cn(n=0〜N)の値が、偶対称形(f(x)=f(−x))を成す特徴がある。例えば、図8に示した例では、フィルタ係数{C0、C7}、フィルタ係数{C1、C6}、フィルタ係数{C2、C5}、フィルタ係数{C3、C4}の各データ対の中の各値は同一の値を示す。
また、ヒルベルトフィルタ演算器の場合も同様に、有限インパルス応答を示すフィルタ係数系列Cn(n=0〜N)の値が、奇対称形(f(x)=−f(−x))を成す特徴がある。例えば、図8に示した例では、フィルタ係数{−C0、C7}、フィルタ係数{−C1、C6}、フィルタ係数{−C2、C5}、フィルタ係数{−C3、C4}の各データ対の中の各絶対値は同一の値を示す。
以下、FIRフィルタ演算器として、図8に示す“8”タップの場合であり且つ直線位相FIRフィルタ演算器である場合を例に挙げて説明する。
図10は、従来例1に係るFIRフィルタ演算器のハードウェア構成を示す。
データRAM4は、入力データ系列Dnを格納するシングルポートのRAMであり、レジスタ5は、データRAM4から1マシン・サイクル毎に読み出された入力データ系列Dn(n=0〜N)の各入力データDnを一時的に格納する。係数格納ROM6は、フィルタ係数系列Cn(n=0〜N)を格納するROMであり、レジスタ7は、係数格納ROM6から1マシン・サイクル毎に読み出されたフィルタ係数系列Cn(n=0〜N)の各フィルタ係数Cnを一時的に格納する。
乗算器8は、レジスタ5から1マシン・サイクル毎に遅延出力される入力データDnとレジスタ7から1マシン・サイクル毎に遅延出力されるフィルタ係数Cnとの乗算を行うものであり、レジスタ9は、乗算器8の乗算結果を一時的に格納する。加算器10は、レジスタ9から1マシン・サイクル毎に遅延出力される乗算結果とレジスタ11から1マシン・サイクル毎に遅延出力される前回の累積加算結果との累積加算を行うものであり、レジスタ11は、加算器10の累積加算結果を一時的に格納するとともに出力データy(t)として1マシン・サイクル毎に出力する。
図11は、図10に示した従来例1に係るFIRフィルタ演算器の動作タイミングを示す。同図に示す時間t=“0”から時間t=“9”までの各期間が、1マシン・サイクルに相当する。図11に示すように、従来例1では、時間t=“0”から時間t=“9”まで、すなわち10マシン・サイクル分、フィルタ演算処理を実行する。この結果、時間t=“9”のとき、最終的な出力データy(9){=A0+A1+・・・+A7}が、レジスタ11より得られる。
ところで、直線位相FIRフィルタの場合、前述したように、有限インパルス応答を示すフィルタ係数系列Cn(n=0〜N)が左右対称形を成す特徴がある。そこで、同一の値を示すフィルタ係数Cnの乗算対象となる入力データDnのデータ対(以下、データ対と称する。)を、当該フィルタ係数Cnとの乗算前に予め加算することで、トータル乗算回数を半分に削減できるため効率的である。
例えば、フィルタ係数{C0、C1、C2、C3}との乗算前に、つぎの式(3)で示すように、データ対{D0、D7}、データ対{D1、D6}、データ対{D2、D5}、データ対{D3、D4}の各中身を予め加算しておく。
y(t)=(D0+D7)*C0+(D1+D6)*C1+(D2+D5)*C2
+(D3+D4)*C3 … 式(3)
図12は、式(3)に基づく従来例2に係る直線位相FIRフィルタ演算器のハードウェア構成を示す。
図10に示した従来例1との相違点は、レジスタ5と乗算器8の間に、レジスタ12、加算器13、レジスタ14を設けた点にある。
まず、データRAM4から2マシン・サイクル毎に各データ対が読み出される。すなわち、データRAM4から1マシン・サイクル毎に各データ対の一方及び他方の入力データDnが交互に読み出される。
レジスタ5は、データRAM4から交互に読み出された各データ対の一方及び他方の入力データDnを、レジスタ12及び加算器13の一方の入力に対して、1マシン・サイクル分遅延出力させる。
レジスタ12は、レジスタ5から1マシン・サイクル毎に交互に遅延出力された各データ対の一方及び他方の入力データDnを、更に、1マシン・サイクル分、加算器13の他方の入力に対して遅延出力させる。このレジスタ12を設けることで、加算器13の一方及び他方の入力では、各データ対の一方及び他方の入力データDnの同期が図られる。
加算器13は、2マシン・サイクル毎に、レジスタ12から遅延出力された各データ対の一方の入力データDnと、レジスタ5から遅延出力された各データ対の他方の入力データDnとの加算を行い、当該加算の結果をレジスタ14に一時的に格納する。そして、レジスタ14は、加算器13の加算結果を、1マシン・サイクル分、乗算器8の一方の入力へと遅延出力させる。
図13は、図12に示した従来例2のFIRフィルタ演算器の動作タイミングを示す。同図に示す時間t=“0”から時間t=“10”までの各期間が、1マシン・サイクルに相当する。図13に示すように、従来例2では、時間t=“0”から時間t=“10”まで、すなわち11マシン・サイクル分、フィルタ演算処理を実行する。この結果、時間t=“10”のとき、最終的な出力データy(10){=A0+A1+・・・+A7}が、レジスタ11より得られる。
図14は、従来例2とは異なる、式(3)に基づく従来例3のFIRフィルタ演算器のハードウェア構成を示す。なお、以下の説明で、従来例2と従来例3の1マシン・サイクルの周期は同一長とする。
図12に示した従来例2との相違点は、シングルポートのデータRAM4をデュアルポートのデータRAM15に置き換えた点と、データRAM15と加算器13の間の構成として、各ポートのデータバスにレジスタ16とレジスタ17を夫々設けた点である。
すなわち、従来例2のように2マシン・サイクル毎ではなく、データRAM15から各データ対の一方及び他方の入力データDnが、1マシン・サイクル毎に同時に読み出される。そして、レジスタ16は、データRAM15から読み出された各データ対の一方の入力データDnを、加算器13の一方の入力に対して、1マシン・サイクル分遅延出力させる。同様に、レジスタ17は、データRAM15から読み出された各データ対の他方の入力データDnを、加算器13の他方の入力に対して、1マシン・サイクル分遅延出力させる。この結果、加算器13は、従来例2のように2マシン・サイクル毎ではなく、各データ対の一方及び他方の入力データDnの加算を、1マシン・サイクル毎に実行する。
図15は、図14に示した従来例3に係るFIRフィルタ演算器の動作タイミングを示す。同図に示す時間t=“0”から時間t=“6”までの各期間が、1マシン・サイクルに相当する。図15に示すように、従来例3では、時間t=“0”から時間t=“6”まで、すなわち7マシン・サイクル分、フィルタ演算処理を実行する。この結果、時間t=“6”のとき、最終的な出力データy(6){=A0+A1+・・・+A7}が、レジスタ11より得られる。
特開2001−77669号公報
特開2003−283255号公報
<第1実施形態>
===直線位相FIRフィルタ演算器(2チャンネル処理)の構成===
本発明の第1実施形態に係る直線位相FIRフィルタ演算器のハードウェア構成例を図1に示す。
直線位相FIRフィルタ演算器は、例えば、A/D変換装置やD/A変換装置に内蔵若しくは外付けのインターポレーション・フィルタ回路やデシメーション・フィルタ回路、若しくは、標本化周波数変換装置に内蔵若しくは外付けのアンチエイリアス・フィルタ回路として提供される。また、夫々のフィルタ回路は、一般的に、CPU等と対比して高速な積和演算処理が可能なDSP(Digital Signal Processor)として提供される。
本実施形態に係るフィルタ演算処理(たたみ込み演算処理)の対象となる入力データ系列Dn(n=0〜N)は、例えば、ステレオ2チャンネル方式において、標本化周波数44.1kHzで標本化された、Lチャンネル(『第1のチャンネル』)のデータ系列DmL(m=0〜N)とRチャンネル(『第2のチャンネル』)のデータ系列DmR(m=0〜N)を含む。
まず、入力データ系列Dn(n=0〜N)を、同一の値を示すフィルタ係数Cnの乗算対象とする2個の入力データDnで構成される『データ対』毎に分類するとともに、当該データ対を、更に、フィルタ係数Cnとの乗算を奇数番目(1番目、3番目、・・・)に実行する第1のデータ対と、偶数番目(0番目を除く、2番目、4番目、・・・)に実行する第2のデータ対とに分類する。
ここで、本実施形態では、第1のデータ対は、Lチャンネルのデータ系列DmL(m=0〜N)のうち、同一の値を示すフィルタ係数Cnの乗算対象となる2個の入力データDnで構成されるとともに、第2のデータ対は、Rチャンネルのデータ系列DmR(m=0〜N)のうち、同一の値を示すフィルタ係数の乗算対象となる2個の入力データで構成される。勿論、第1のデータ対をRチャンネルに、第2のデータ対をLチャンネルに対応づけてもよい。
データRAM20は、本発明に係る『第1のシングルポートRAM』の一実施形態であり、Lチャンネルのデータ系列DmL(m=0〜N)を構成する第1のデータ対を格納するものである。
データRAM30は、本発明に係る『第2のシングルポートRAM』の一実施形態であり、Rチャンネルのデータ系列DmR(m=0〜N)を構成する第2のデータ対を格納するものである。
ここで、本実施形態に係る直線位相FIRフィルタ演算器は、図10、図12に示した従来例1、2のように、Lチャンネルのデータ系列DmL(m=0〜N)とRチャンネルのデータ系列DmR(m=0〜N)に対するフィルタ演算処理を、独立に実施するのではなく、同時並列的に実施するものである。すなわち、Lチャンネルのデータ系列DmL(m=0〜N)及びRチャンネルのデータ系列DmR(m=0〜N)と、フィルタ係数系列Cn(n=0〜N)と、のたたみ込み演算が、1マシン・サイクル毎に交互に行われる。
レジスタ21、22、31、32、61、セレクタ40、セレクタ50、加算器60で構成される回路は、本発明に係る『入力データ演算部』の一実施形態であり、データRAM20及びデータRAM30から第1及び第2のデータ対を交互に読み出すとともに当該第1及び第2のデータ対を構成する2個の入力データを順次加算する。
レジスタ21及びレジスタ22は、本発明に係る入力データ演算部の『第1の遅延器』及び『第2の遅延器』の一実施形態である。レジスタ21は、データRAM20から読み出された第1のデータ対の一方の入力データDmLを1マシン・サイクル分遅延出力させる。レジスタ22は、データRAM20から読み出された第1のデータ対の他方の入力データDmLをレジスタ21にて1マシン・サイクル分遅延出力させる際に、レジスタ21において遅延出力させた第1のデータ対の一方の入力データDmLを更に1マシン・サイクル分遅延出力させる。
レジスタ31及びレジスタ32は、本発明に係る入力データ演算部の『第3の遅延器』及び『第4の遅延器』の一実施形態である。レジスタ31は、レジスタ22と同様に、データRAM20から読み出された第1のデータ対の他方の入力データDmLをレジスタ21にて1マシン・サイクル分遅延出力させる際に、データRAM30から読み出された第2のデータ対の一方の入力データDmRを1マシン・サイクル分遅延出力させる。レジスタ32は、データRAM30から読み出された第2のデータ対の他方の入力データDmRをレジスタ31にて1マシン・サイクル分遅延出力させる際に、レジスタ31において遅延出力させた第2のデータ対の一方の入力データDmRを更に1マシン・サイクル分遅延させる。
セレクタ40及びセレクタ50は、本発明に係る入力データ演算部の『第1のセレクタ』及び『第2のセレクタ』に該当する。セレクタ40は、レジスタ22及びレジスタ32において遅延出力させた入力データDmL及びDmRを1マシン・サイクル毎に交互に選択出力する。セレクタ50は、レジスタ21及びレジスタ31において遅延出力させた入力データDmL及びDmRを1マシン・サイクル毎に交互に選択出力する。
加算器60は、本発明に係る入力データ演算部の『第1の加算器』に該当し、セレクタ40及びセレクタ50の選択出力を加算する。なお、加算器60の加算結果は、レジスタ61に格納される。
レジスタ71、81、91、92、係数格納ROM70、乗算器80、加算器90で構成される回路は、本発明に係る『係数乗加算部』の一実施形態であり、加算器60の加算結果とそれに対応するフィルタ係数Cnとの乗算を行い、さらに、その乗算結果を累積加算することで出力データy(t)を得る。
係数格納ROM70は、フィルタ係数系列Cn(n=0〜N)を格納するROMであり、レジスタ71は、係数格納ROM70から1マシン・サイクル毎に読み出されたフィルタ係数系列Cn(n=0〜N)の各フィルタ係数Cnを一時的に格納する。
乗算器80は、レジスタ61から1マシン・サイクル毎に遅延出力される加算器60の加算結果と、レジスタ71から1マシン・サイクル毎に遅延出力されるフィルタ係数Cnとの乗算を行うものであり、レジスタ81は、乗算器80の乗算結果を一時的に格納する。
加算器90は、本発明に係る係数乗加算部の『第2の加算器』の一実施形態である。加算器90は、レジスタ81から1マシン・サイクル毎に遅延出力される乗算器80の乗算結果と、レジスタ92から1マシン・サイクル毎に遅延出力される前回の累積加算結果との累積加算を行うものである。
レジスタ91及びレジスタ92は、本発明に係る係数乗加算部の『第5の遅延器』及び『第6の遅延器』の一実施形態である。レジスタ91は、加算器90の累積加算結果を一時的に格納するとともに、1マシン・サイクル毎に出力データy(t)として出力する。レジスタ92は、レジスタ91において遅延出力された加算器90の累積加算結果を、更に1マシン・サイクル分遅延出力させて累積加算の結果を得る。
なお、図1に示す加算器90ならびにレジスタ91及びレジスタ92の構成によって、Lチャンネルのデータ系列DmL(m=0〜N)とRチャンネルのデータ系列DmR(m=0〜N)夫々のフィルタ演算処理の結果が、交互にレジスタ91から出力される。
===ヒルベルトフィルタ演算器(2チャンネル処理)の構成===
本発明の第1実施形態に係るヒルベルトフィルタ演算器のハードウェア構成例を図3に示す。
図1に示した直線位相FIRフィルタ演算器との相違点は、加算器60が減算器100に置き換わった点にある。すなわち、ヒルベルトフィルタ演算器の場合、フィルタ係数系列Cn(n=0〜N)が奇対称形を成して加算ではなく減算を行う必要があるので、減算器100が設けられる。
減算器100は、本発明に係る入力データ演算部の『減算器』に該当し、セレクタ40及びセレクタ50の選択出力を減算する。なお、本実施形態では、減算器100は、セレクタ40の選択出力よりセレクタ50の選択出力を減算する。また、減算器100の減算結果は、レジスタ61に格納される。
===FIRフィルタ演算器の動作(2チャンネル処理、偶数タップの場合)===
図2は、偶数タップの一例として“8”タップの場合における、図1に示した直線位相FIRフィルタ演算器の動作タイミングを示したものである。同様に、図4は、偶数タップの一例として“8”タップの場合における、図3に示したヒルベルトフィルタ演算器の動作タイミングを示したものである。なお、以下では、直線位相FIRフィルタ演算器の場合を中心に説明する。また、図2に示す時間t=“0”から時間t=“11”までの各期間が、1マシン・サイクルに相当する。
まず、時間t=“0”のとき、データRAM20から読み出された第1のデータ対{D0L、D7L}の一方の入力データD0Lがレジスタ21に一時的に格納される。
つぎに、時間t=“1”のとき、レジスタ21より遅延出力された第1のデータ対{D0L、D7L}の一方の入力データD0Lがレジスタ22に一時的に格納される。また、データRAM20から読み出された第1のデータ対{D0L、D7L}の他方の入力データD7Lがレジスタ21に一時的に格納される。さらに、データRAM30から読み出された第2のデータ対{D0R、D7R}の一方の入力データD0Rがレジスタ31に一時的に格納される。
つぎに、時間t=“2”のとき、セレクタ40は、レジスタ22から出力された、第1のデータ対{D0L、D7L}の一方の入力データD0Lを、選択出力する。また、レジスタ21より遅延出力された第1のデータ対{D0L、D7L}の他方の入力データD7Lが、レジスタ22に一時的に格納されるとともに、セレクタ50は、これを選択出力する。この結果、加算器60は、セレクタ40から選択出力された入力データD0Lと、セレクタ50から選択出力された入力データD7Lと、の加算を行い、その加算結果{D0L+D7L}をレジスタ61へと一時的に格納する。さらに、データRAM20から読み出されたつぎの第1のデータ対{D1L、D6L}の一方の入力データD1Lが、レジスタ21に一時的に格納される。
また、時間t=“2”のとき、レジスタ31より遅延出力された第2のデータ対{D0R、D7R}の一方の入力データD0Rが、レジスタ32に一時的に格納される。また、データRAM30から読み出された第2のデータ対{D0R、D7R}の他方の入力データD7Rがレジスタ31に一時的に格納される。さらに、係数格納ROM70から、第1のデータ対{D0L、D7L}及び第2のデータ対{D0R、D7R}の共通因子であるフィルタ係数C0が読み出されレジスタ71に一時的に格納される。
つぎに、時間t=“3”のとき、乗算器80は、レジスタ71より遅延出力されたフィルタ係数C0と、レジスタ61より遅延出力された加算器60の加算結果{D0L+D7L}との乗算を行い、その乗算結果{A0L(=C0*D0L)+A7L(=C0*D7L)}をレジスタ81に一時的に格納する。
また、時間t=“3”のとき、セレクタ40は、レジスタ32から出力された、第2のデータ対{D0R、D7R}の一方の入力データD0Rを、選択出力する。さらに、レジスタ31より遅延出力された第2のデータ対{D0R、D7R}の他方の入力データD7Rが、レジスタ32に一時的に格納されるとともに、セレクタ50は、これを選択出力する。この結果、加算器60は、セレクタ40から選択出力された入力データD0Rと、セレクタ50から選択出力された入力データD7Rと、の加算を行い、その加算結果{D0R+D7R}をレジスタ61へと一時的に格納する。さらに、データRAM30から読み出されたつぎの第2のデータ対{D1R、D6R}の一方の入力データD1Rが、レジスタ31に一時的に格納される。
さらに、時間t=“3”のとき、レジスタ21より遅延出力されたつぎの第1のデータ対{D1L、D6L}の一方の入力データD1Lが、レジスタ22に一時的に格納される。また、データRAM20から読み出されたつぎの第1のデータ対{D1L、D6L}の他方の入力データD6Lがレジスタ21に一時的に格納される。
つぎに、時間t=“4”のとき、レジスタ81より遅延出力された乗算器80の乗算結果{A0L+A7L)}が、加算器90の一方の入力へと供給される。なお、加算器90の他方の入力は、累積加算が未実施のため“0”とするが、例えば、加算器90の他方の入力に対して、レジスタ92又はデータ“0”を格納したレジスタ(不図示)の一方を選択して出力するセレクタ(不図示)によって実現する。
よって、加算器90は、レジスタ81より遅延出力された乗算結果{A0L+A7L}を、レジスタ91に一時的に格納する。さらに、乗算器80は、レジスタ71より遅延出力されたフィルタ係数C0と、レジスタ61より遅延出力された加算器60の加算結果{D0R+D7R}との乗算を行い、その乗算結果{A0R(=C0*D0R)+A7R(=C0*D7R)}をレジスタ81に一時的に格納する。
また、時間t=“4”のとき、セレクタ40は、レジスタ22から出力された、第1のデータ対{D1L、D6L}の一方の入力データD1Lを、選択出力する。さらに、レジスタ21より遅延出力された第1のデータ対{D1L、D6L}の他方の入力データD6Lが、レジスタ22に一時的に格納されるとともに、セレクタ50は、これを選択出力する。この結果、加算器60は、セレクタ40から選択出力された入力データD1Lと、セレクタ50から選択出力された入力データD6Lと、の加算を行い、その加算結果{D1L+D6L}をレジスタ61へと一時的に格納する。さらに、データRAM20からつぎの第1のデータ対{D2L、D5L}の一方の入力データD2Lが、レジスタ21に一時的に格納される。
さらに、時間t=“4”のとき、レジスタ31より遅延出力された第2のデータ対{D1R、D6R}の一方の入力データD1Rが、レジスタ32に一時的に格納される。また、データRAM30から読み出された第2のデータ対{D1R、D6R}の他方の入力データD6Rがレジスタ31に一時的に格納される。さらに、係数格納ROM70から、第1のデータ対{D1L、D6L}及び第2のデータ対{D1R、D6R}の共通因子であるフィルタ係数C1が読み出されレジスタ71に一時的に格納される。
つぎに、時間t=“5”のとき、レジスタ91より遅延出力された加算器90の累積加算結果{A0L+A7L}が、レジスタ92に一時的に格納される。また、レジスタ81より遅延出力された乗算器80の乗算結果{A0R+A7R}が、加算器90の一方の入力へと供給される。なお、加算器90の他方の入力は、“0”のままである。よって、加算器90は、レジスタ81より遅延出力された乗算結果{A0R+A7R}を、レジスタ91に一時的に格納する。さらに、乗算器80は、レジスタ71より遅延出力されたフィルタ係数C1と、レジスタ61より遅延出力された加算器60の加算結果{D1L+D6L}との乗算を行い、その乗算結果{A1L(=C1*D1L)+A6L(=C1*D6L)}をレジスタ81に一時的に格納する。
また、時間t=“5”のとき、セレクタ40は、レジスタ32から出力された、第2のデータ対{D1R、D6R}の一方の入力データD1Rを、選択出力する。さらに、レジスタ31より遅延出力された第2のデータ対{D1R、D6R}の他方の入力データD6Rが、レジスタ32に一時的に格納されるとともに、セレクタ50は、これを選択出力する。
この結果、加算器60は、セレクタ40から選択出力された入力データD1Rと、セレクタ50から選択出力された入力データD6Rと、の加算を行い、その加算結果{D1R+D6R}をレジスタ61へと一時的に格納する。さらに、データRAM30からつぎの第2のデータ対{D2R、D5R}の一方の入力データD2Rが、レジスタ31に一時的に格納される。
さらに、時間t=“5”のとき、レジスタ21より遅延出力された第1のデータ対{D2L、D5L}の一方の入力データD2Lが、レジスタ22に一時的に格納される。また、データRAM20から読み出された第1のデータ対{D2L、D5L}の他方の入力データD5Lがレジスタ21に一時的に格納される。
つぎに、時間t=“6”のとき、レジスタ92より遅延出力された加算器90の累積加算結果{A0L+A7L}が加算器90の他方の入力へと供給される。また、レジスタ91より遅延出力された加算器90の累積加算結果{A0R+A7R}が、レジスタ92に一時的に格納される。また、レジスタ81より遅延出力された乗算器80の乗算結果{A1L+A6L}が、加算器90の一方の入力へと供給される。よって、加算器90は、レジスタ81より遅延出力された乗算結果{A1L+A6L}と、レジスタ92より遅延出力された累積加算結果{A0L+A7L}との累積加算を行い、その累積加算結果{A0L+A1L+A6L+A7L}をレジスタ91に一時的に格納する。さらに、乗算器80は、レジスタ71より遅延出力されたフィルタ係数C1と、レジスタ61より遅延出力された加算器60の加算結果{D1R+D6R}との乗算を行い、その乗算結果{A1R(=C1*D1R)+A6R(=C1*D6R)}をレジスタ81に一時的に格納する。
また、時間t=“6”のとき、セレクタ40は、レジスタ22から出力された、第1のデータ対{D2L、D5L}の一方の入力データD2Lを、選択出力する。さらに、レジスタ21より遅延出力された第1のデータ対{D2L、D5L}の他方の入力データD5Lが、レジスタ22に一時的に格納されるとともに、セレクタ50は、これを選択出力する。この結果、加算器60は、セレクタ40から選択出力された入力データD2Lと、セレクタ50から選択出力された入力データD5Lと、の加算を行い、その加算結果{D2L+D5L}をレジスタ61へと一時的に格納する。さらに、データRAM20からつぎの第1のデータ対{D3L、D4L}の一方の入力データD3Lが、レジスタ21に一時的に格納される。
さらに、時間t=“6”のとき、レジスタ31より遅延出力された第2のデータ対{D2R、D5R}の一方の入力データD2Rが、レジスタ32に一時的に格納される。また、データRAM30から読み出された第2のデータ対{D2R、D5R}の他方の入力データD5Rがレジスタ31に一時的に格納される。さらに、係数格納ROM70から、第1のデータ対{D2L、D5L}及び第2のデータ対{D2R、D5R}の共通因子であるフィルタ係数C2が読み出されレジスタ71に一時的に格納される。
つぎに、時間t=“7”のとき、レジスタ92より遅延出力された加算器90の累積加算結果{A0R+A7R}が加算器90の他方の入力へと供給される。また、レジスタ91より遅延出力された加算器90の累積加算結果{A1L+A6L}が、レジスタ92に一時的に格納される。また、レジスタ81より遅延出力された乗算器80の乗算結果{A1R+A6R}が、加算器90の一方の入力へと供給される。よって、加算器90は、レジスタ81より遅延出力された乗算結果{A1R+A6R}と、レジスタ92より遅延出力された累積加算結果{A0R+A7R}との累積加算を行い、その累積加算結果{A0R+A1R+A6R+A7R}をレジスタ91に一時的に格納する。さらに、乗算器80は、レジスタ71より遅延出力されたフィルタ係数C2と、レジスタ61より遅延出力された加算器60の加算結果{D2L+D5L}との乗算を行い、その乗算結果{A2L(=C2*D2L)+A5L(=C2*D5L)}をレジスタ81に一時的に格納する。
また、時間t=“7”のとき、セレクタ40は、レジスタ32から出力された、第2のデータ対{D2R、D5R}の一方の入力データD2Rを、選択出力する。さらに、レジスタ31より遅延出力された第2のデータ対{D2R、D5R}の他方の入力データD5Rが、レジスタ32に一時的に格納されるとともに、セレクタ50は、これを選択出力する。この結果、加算器60は、セレクタ40から選択出力された入力データD2Rと、セレクタ50から選択出力された入力データD5Rと、の加算を行い、その加算結果{D2R+D5R}をレジスタ61へと一時的に格納する。さらに、データRAM30からつぎの第2のデータ対{D3R、D4R}の一方の入力データD3Rが、レジスタ31に一時的に格納される。
さらに、時間t=“7”のとき、レジスタ21より遅延出力された第1のデータ対{D3L、D4L}の一方の入力データD3Lが、レジスタ22に一時的に格納される。また、データRAM20から読み出された第1のデータ対{D3L、D4L}の他方の入力データD4Lがレジスタ21に一時的に格納される。
つぎに、時間t=“8”のとき、レジスタ92より遅延出力された加算器90の累積加算結果{A0L+A1L+A6L+A7L}が加算器90の他方の入力へと供給される。また、レジスタ91より遅延出力された加算器90の累積加算結果{A0R+A1R+A6R+A7R}が、レジスタ92に一時的に格納される。また、レジスタ81より遅延出力された乗算器80の乗算結果{A2L+A5L}が、加算器90の一方の入力へと供給される。よって、加算器90は、レジスタ81より遅延出力された乗算結果{A2L+A5L}と、レジスタ92より遅延出力された累積加算結果{A0L+A1L+A6L+A7L}との累積加算を行い、その累積加算結果{A0L+A1L+A2L+A5L+A6L+A7L}をレジスタ91に一時的に格納する。さらに、乗算器80は、レジスタ71より遅延出力されたフィルタ係数C2と、レジスタ61より遅延出力された加算器60の加算結果{D2R+D5R}との乗算を行い、その乗算結果{A2R(=C2*D2R)+A5R(=C2*D5R)}をレジスタ81に一時的に格納する。
また、時間t=“8”のとき、セレクタ40は、レジスタ22から出力された、第1のデータ対{D3L、D4L}の一方の入力データD3Lを、選択出力する。さらに、レジスタ21より遅延出力された第1のデータ対{D3L、D4L}の他方の入力データD4Lが、レジスタ22に一時的に格納されるとともに、セレクタ50は、これを選択出力する。この結果、加算器60は、セレクタ40から選択出力された入力データD3Lと、セレクタ50から選択出力された入力データD4Lと、の加算を行い、その加算結果{D3L+D4L}をレジスタ61へと一時的に格納する。
さらに、時間t=“8”のとき、レジスタ31より遅延出力された第2のデータ対{D3R、D4R}の一方の入力データD3Rが、レジスタ32に一時的に格納される。また、データRAM30から読み出された第2のデータ対{D3R、D4R}の他方の入力データD4Rがレジスタ31に一時的に格納される。さらに、係数格納ROM70から、第1のデータ対{D3L、D4L}及び第2のデータ対{D3R、D4R}の共通因子であるフィルタ係数C3が読み出されレジスタ71に一時的に格納される。
つぎに、時間t=“9”のとき、レジスタ92より遅延出力された加算器90の累積加算結果{A0R+A1R+A6R+A7R}が加算器90の他方の入力へと供給される。また、レジスタ91より遅延出力された加算器90の累積加算結果{A0L+A1L+A2L+A5L+A6L+A7L}が、レジスタ92に一時的に格納される。また、レジスタ81より遅延出力された乗算器80の乗算結果{A2R+A5R}が、加算器90の一方の入力へと供給される。よって、加算器90は、レジスタ81より遅延出力された乗算結果{A2R+A5R}と、レジスタ92より遅延出力された累積加算結果{A0R+A1R+A6R+A7R}との累積加算を行い、その累積加算結果{A0R+A1R+A2R+A5R+A6R+A7R}をレジスタ91に一時的に格納する。さらに、乗算器80は、レジスタ71より遅延出力されたフィルタ係数C3と、レジスタ61より遅延出力された加算器60の加算結果{D3L+D4L}との乗算を行い、その乗算結果{A3L(=C3*D3L)+A4L(=C4*D4L)}をレジスタ81に一時的に格納する。
また、時間t=“9”のとき、セレクタ40は、レジスタ32から出力された、第2のデータ対{D3R、D4R}の一方の入力データD3Rを、選択出力する。さらに、レジスタ31より遅延出力された第2のデータ対{D3R、D4R}の他方の入力データD4Rが、レジスタ32に一時的に格納されるとともに、セレクタ50は、これを選択出力する。この結果、加算器60は、セレクタ40から選択出力された入力データD3Rと、セレクタ50から選択出力された入力データD4Rと、の加算を行い、その加算結果{D3R+D4R}をレジスタ61へと一時的に格納する。
つぎに、時間t=“10”のとき、レジスタ92より遅延出力された加算器90の累積加算結果{A0L+A1L+A2L+A5L+A6L+A7L}が加算器90の他方の入力へと供給される。また、レジスタ91より遅延出力された加算器90の累積加算結果{A0R+A1R+A2R+A5R+A6R+A7R}が、レジスタ92に一時的に格納される。また、レジスタ81より遅延出力された乗算器80の乗算結果{A3L+A4L}が、加算器90の一方の入力へと供給される。よって、加算器90は、レジスタ81より遅延出力された乗算結果{A3L+A4L}と、レジスタ92より遅延出力された累積加算結果{A0L+A1L+A2L+A5L+A6L+A7L}との累積加算を行い、その累積加算結果{A0L+A1L+A2L+A3L+A4L+A5L+A6L+A7L}をレジスタ91に一時的に格納する。さらに、乗算器80は、レジスタ71より遅延出力されたフィルタ係数C3と、レジスタ61より遅延出力された加算器60の加算結果{D3R+D4R}との乗算を行い、その乗算結果{A3R(=C3*D3R)+A4R(=C4*D4R)}をレジスタ81に一時的に格納する。
つぎに、時間t=“11”のとき、レジスタ92より遅延出力された加算器90の累積加算結果{A0R+A1R+A2R+A5R+A6R+A7R}が加算器90の他方の入力へと供給される。また、レジスタ91より遅延出力された加算器90の累積加算結果{A0L+A1L+A2L+A3L+A4L+A5L+A6L+A7L}が、レジスタ92に一時的に格納される。また、レジスタ81より遅延出力された乗算器80の乗算結果{A3R+A4R}が、加算器90の一方の入力へと供給される。よって、加算器90は、レジスタ81より遅延出力された乗算結果{A3R+A4R}と、レジスタ92より遅延出力された累積加算結果{A0R+A1R+A2R+A5R+A6R+A7R}との累積加算を行い、その累積加算結果{A0R+A1R+A2R+A3R+A4R+A5R+A6R+A7R}をレジスタ91に一時的に格納する。
このように、本発明の第1実施形態に係る直線位相FIRフィルタ演算器は、時間t=“0”から時間t=“11”まで、すなわち12マシン・サイクル分、前述した一連の処理を実行する。この結果、時間t=“10”のとき、Lチャンネルのデータ系列{D0L〜D7L}に対するフィルタ演算処理の最終的な出力データy(10){=A0L+A1L+・・・+A7L}が得られることになる。また、時間t=“11”のとき、Rチャンネルのデータ系列{D0R〜D7R}に対するフィルタ演算処理の最終的な出力データy(11){=A0R+A1R+・・・+A7R}が得られる。
なお、前述した第1実施形態では、係数格納ROM70からレジスタ71へのフィルタ係数の読み出し回数を減らすため、同一の値を示すフィルタ係数Cnの乗算対象となる第1のデータ対の加算値と第2のデータ対の加算値とが連続してレジスタ61に格納される(図2に示す、t=“2”とt=“3”、t=“4”とt=“5”等を参照)。しかし、係数格納ROM70からレジスタ71へのフィルタ係数の読み出しを毎回行うようにすれば、これに限られない。
ところで、本発明の第1実施形態に係るヒルベルトフィルタ演算器の場合、図2と図4を対比すれば分かるように、レジスタ61にはセレクタ40及びセレクタ50の各選択出力の減算結果が一時的に格納される点と、レジスタ81にはセレクタ40及びセレクタ50の各選択出力の減算結果とそれに対応するフィルタ係数Cnとの乗算結果が一時的に格納される点、が相違するが、動作タイミング自体は同一であるので、説明は省略する。
ここで、本発明の第1実施形態を、従来例1及び従来例2と対比する。
従来例1では、本発明と同様に、シングルポートのデータRAM4を採用しているが、2チャンネル且つ8タップの場合のフィルタ演算処理を実施する場合、1チャンネル毎に逐次処理される。また、図11に示すように、Lチャンネルのフィルタ演算処理に、t=“0”からt=“9”までの10マシン・サイクル分必要とし、その後、t=“10”からRチャンネルのフィルタ演算処理を開始する際に2マシン・サイクル分オーバーラップするため、2チャンネルのフィルタ演算処理に合計18マシン・サイクル分必要とする。
従来例2では、本発明と同様に、シングルポートのデータRAM4を採用しているが、2チャンネル且つ8タップの場合のフィルタ演算処理を実施する場合、1チャンネル毎に逐次処理される。また、図13に示すように、Lチャンネルのフィルタ演算処理に、t=“0”からt=“10”までの11マシン・サイクル分必要とし、その後、t=“8”からRチャンネルのフィルタ演算処理を開始する際に3マシン・サイクル分オーバーラップするため、2チャンネルのフィルタ演算処理に合計19マシン・サイクル分必要とする。
一方、本発明の第1実施形態では、2チャンネル分のフィルタ演算処理を、1チャンネル毎の逐次処理ではなく、同時並列的に実施できる。しかも、2チャンネル分のフィルタ演算処理が12マシン・サイクルで済み、従来例1の場合の合計18マシン・サイクルや、従来例2の場合の合計19マシン・サイクルよりも短縮化される。
さらに、本発明の第1実施形態を、従来例3と対比する。
従来例3では、デュアルポートのデータRAM15を採用している。
一方、本発明の第1実施形態では、従来例3の場合と対比して、デュアルポートではなくシングルポートであり、更に、データRAM15の半分の記憶容量に設計可能なデータRAM20、30を採用している。ここで、前述したように、従来例3に係るデュアルポートのデータRAM15の回路面積は、本発明の第1実施形態に係るシングルポートのデータRAM20、30の合計回路面積よりも大きい。よって、本発明の第1実施形態に係るFIRフィルタ演算器は、従来例3に係るFIRフィルタ演算器と対比して、ダウンサイジングされる。
===FIRフィルタ演算器の動作(2チャンネル処理、奇数タップの場合)===
図5は、奇数タップの一例として“7”タップの場合における、図1に示した本発明の第1実施形態に係る直線位相FIRフィルタ演算器の動作タイミングを示したものである。なお、図5に示す時間t=“0”から時間t=“11”までの各期間が、1マシン・サイクルに相当する。
図5に示すように、奇数タップの場合は、図2に示した偶数タップの場合の動作タイミングと同様な動作タイミングを示す。なお、奇数タップの場合、中央タップに係る入力データD3L及びD3Rが、第1及び第2のデータ対を形成することができない。
このため、図5に示すように、時間t=“7”のとき、データRAM20からは入力データD3Lとデータ対を形成する入力データが存在しないため、レジスタ21には“0”が格納される。例えば、レジスタ21の入力に対して、データRAM20又はデータ“0”を格納したレジスタ(不図示)の一方を選択して出力するセレクタ(不図示)によって実現される。よって、時間t=“8”のとき、レジスタ61に一時的に格納される加算器60の加算結果はD3Lであり、時間t=“9”のとき、レジスタ81に一時的に格納される乗算器80の乗算結果は{C3*D3L}である。
また、同様に、時間t=“8”のとき、データRAM30からは入力データD3Rとデータ対を形成する入力データが存在しないため、レジスタ31には“0”が格納される。例えば、レジスタ31の入力に対して、データRAM30又はデータ“0”を格納したレジスタ(不図示)の一方を選択して出力するセレクタ(不図示)によって実現される。よって、時間t=“9”のとき、レジスタ61に一時的に格納される加算器60の加算結果はD3Rであり、時間t=“10”のとき、レジスタ81に一時的に格納される乗算器80の乗算結果は{C3*D3R}である。
なお、本発明の第1実施形態に係るヒルベルトフィルタ演算器の場合、レジスタ61にはセレクタ40及びセレクタ50の各選択出力の減算結果が一時的に格納される点と、レジスタ81にはセレクタ40及びセレクタ50の各選択出力の減算結果とそれに対応するフィルタ係数Cnとの乗算結果が一時的に格納される点、が相違するが、動作タイミング自体は図5の内容と同一であるので、説明は省略する。
このように、本発明の第1実施形態では、偶数タップ又は奇数タップのいずれの場合もフィルタ演算処理を実施可能である。
<第2実施形態>
===FIRフィルタ演算器の構成(1チャンネル処理)===
本発明の第2実施形態に係るFIRフィルタ演算器として、直線位相FIRフィルタ演算器の場合のハードウェア構成例を図6に示す。なお、本発明の第2実施形態に係る直線位相FIRフィルタ演算器は、モノクロの1チャンネル方式等において、1チャンネル分の単独フィルタ演算処理のみ実施可能である。よって、2チャンネル分のフィルタ演算処理を実施するためには、1チャンネル毎のフィルタ演算処理を逐次処理する必要がある。
図1に示した本発明の第1実施形態の場合との相違点についてのみ説明する。
まず、入力データ系列Dn(n=0〜N)を、同一の値を示すフィルタ係数Cnの乗算対象とする2個の入力データDnで構成される『データ対』毎に分類するとともに、当該データ対を構成する2個の入力データDnのうち、一方の入力データDnをデータRAM20に格納し、他方の入力データをデータRAM30に格納する。
なお、このとき、入力データ系列Dn(n=0〜N)について、nが偶数の入力データをデータRAM20又はデータRAM30の一方に格納し、nが奇数の入力データを他方に格納すればよい。このようにした結果、フィルタ演算の一連の処理が終了して、つぎの入力データ系列Dn(n=1〜N+1)をデータRAM20及びデータRAM30に格納する際には、新たな入力データDn(n=N+1)を入力データDn(n=0)と差し替えるだけで済む。
レジスタ21、31、61、加算器60で構成される回路は、本発明に係る『入力データ演算部』の一実施形態であり、データRAM20及びデータRAM30からデータ対を構成する2個の入力データを併行して読み出すとともに当該2個の入力データを加算する。
レジスタ21及びレジスタ31は、本発明に係る入力データ演算部の『第1の遅延器』及び『第2の遅延器』の一実施形態である。レジスタ21は、データRAM20から読み出されたデータ対の一方の入力データを1マシン・サイクル分遅延出力させる。レジスタ31は、データRAM30から読み出されたデータ対の他方の入力データを1マシン・サイクル分遅延出力させる。なお、このとき、データRAM20及びデータRAM30からレジスタ21及びレジスタ31への読み出しは、併行して行われる。
加算器60は、本発明に係る入力データ演算部の『加算器』であり、レジスタ21及びレジスタ31の遅延出力を加算して、その加算結果をレジスタ61に一時的に格納する。
レジスタ71、81、91、係数格納ROM70、乗算器80、加算器90で構成される回路は、本発明に係る『係数乗加算部』の一実施形態であり、加算器60の加算結果とそれに対応するフィルタ係数Cnとの乗算を行い、さらに、その乗算結果を累積加算することで出力データy(t)を得る。
また、本発明の第2実施形態に係るヒルベルトフィルタ演算器の場合のハードウェア構成例としては、図3に示した本発明の第1実施形態の場合と同様に、加算器60が減算器100に置き換わる点以外は、図6に示した構成と同一である為、説明を省略する。
===FIRフィルタ演算器の動作(1チャンネル処理)===
図7は、偶数タップの一例として“8”タップの場合における、図6に示した直線位相FIRフィルタ演算器の動作タイミングを示す。同図に示す時間t=“0”から時間t=“6”までの各期間が、1マシン・サイクルに相当する。
まず、時間t=“0”のとき、データRAM20から読み出されたデータ対{D0、D7}の一方の入力データD0がレジスタ21に一時的に格納されるとともに、データRAM30から読み出されたデータ対{D0、D7}の他方の入力データD7がレジスタ31に一時的に格納される。
つぎに、時間t=“1”のとき、レジスタ21から加算器60の一方の入力へとデータ対{D0、D7}の一方の入力データD0が供給されるとともに、レジスタ31から加算器60の他方の入力へとデータ対{D0、D7}の他方の入力データD7が供給される。この結果、加算器60は、入力データD0と入力データD7との加算を行い、この加算結果{D0+D7}をレジスタ61に一時的に格納する。
また、時間t=“1”のとき、データRAM20から読み出されたつぎのデータ対{D6、D1}の一方の入力データD6がレジスタ21に一時的に格納されるとともに、データRAM30から読み出されたデータ対{D6、D1}の他方の入力データD1がレジスタ31に一時的に格納される。さらに、係数格納ROM70からデータ対{D0、D7}の共通因子であるフィルタ係数C0が読み出されてレジスタ71に一時的に格納される。
つぎに、時間t=“2”のとき、乗算器80は、レジスタ71より遅延出力されたフィルタ係数C0と、レジスタ61より遅延出力された加算器60の加算結果{D0+D7}との乗算を行い、その乗算結果{A0(=C0*D0)+A7(=C0*D7)}をレジスタ81に一時的に格納する。
また、時間t=“2”のとき、レジスタ21から加算器60の一方の入力へとデータ対{D6、D1}の一方の入力データD6が供給されるとともに、レジスタ31から加算器60の他方の入力へとデータ対{D6、D1}の他方の入力データD1が供給される。この結果、加算器60は、入力データD1、D6の加算を行い、この加算結果{D1+D6}をレジスタ61に一時的に格納する。
さらに、時間t=“2”のとき、データRAM20から読み出されたつぎのデータ対{D2、D5}の一方の入力データD2がレジスタ21に一時的に格納されるとともに、データRAM30から読み出されたデータ対{D2、D5}の他方の入力データD5がレジスタ31に一時的に格納される。さらに、係数格納ROM70からデータ対{D6、D1}の共通因子であるフィルタ係数C1が読み出されてレジスタ71に一時的に格納される。
つぎに、時間t=“3”のとき、レジスタ81より遅延出力された乗算器80の乗算結果{A0+A7}が、加算器90の一方の入力へと供給される。なお、加算器90の他方の入力は、累積加算が未実施のため“0”である。よって、加算器90は、レジスタ81より遅延出力された乗算結果{A0L+A7L}をレジスタ91に一時的に格納する。また、乗算器80は、レジスタ71より遅延出力されたフィルタ係数C1と、レジスタ61より遅延出力された加算器60の加算結果{D1+D6}との乗算を行い、その乗算結果{A1(=C1*D1)+A6(=C1*D6)}をレジスタ81に一時的に格納する。
また、時間t=“3”のとき、レジスタ21から加算器60の一方の入力へとデータ対{D2、D5}の一方の入力データD2が供給されるとともに、レジスタ31から加算器60の他方の入力へとデータ対{D2、D5}の他方の入力データD5が供給される。この結果、加算器60は、入力データD2、D5の加算を行い、この加算結果{D2+D5}をレジスタ61に一時的に格納する。
さらに、時間t=“3”のとき、データRAM20から読み出されたつぎのデータ対{D4、D3}の一方の入力データD4がレジスタ21に一時的に格納されるとともに、データRAM30から読み出されたデータ対{D4、D3}の他方の入力データD3がレジスタ31に一時的に格納される。さらに、係数格納ROM70からデータ対{D2、D5}の共通因子であるフィルタ係数C2が読み出されてレジスタ71に一時的に格納される。
つぎに、時間t=“4”のとき、レジスタ81より遅延出力された乗算器80の乗算結果{A1+A6}が、加算器90の一方の入力へと供給される。また、レジスタ91より遅延出力された加算器90の累積加算結果{A0+A7}が、加算器90の他方の入力へと供給される。よって、加算器90は、乗算器80の乗算結果{A1+A6}と加算器90の加算結果{A0+A7}との累積加算を行い、その累積加算結果{A0+A1+A6+A7}をレジスタ91に一時的に格納する。また、乗算器80は、レジスタ71より遅延出力されたフィルタ係数C2と、レジスタ61より遅延出力された加算器60の加算結果{D2+D5}との乗算を行い、その乗算結果{A2(=C2*D2)+A5(=C2*D5)}をレジスタ81に一時的に格納する。
また、時間t=“4”のとき、レジスタ21から加算器60の一方の入力へとデータ対{D4、D3}の一方の入力データD4が供給されるとともに、レジスタ31から加算器60の他方の入力へとデータ対{D4、D3}の他方の入力データD3が供給される。この結果、加算器60は、入力データD3、D4の加算を行い、この加算結果{D3+D4}をレジスタ61に一時的に格納する。さらに、係数格納ROM70からデータ対{D4、D3}の共通因子であるフィルタ係数C3が読み出されてレジスタ71に一時的に格納される。
つぎに、時間t=“5”のとき、レジスタ81より遅延出力された乗算器80の乗算結果{A2+A5}が、加算器90の一方の入力へと供給される。また、レジスタ91より遅延出力された加算器90の累積加算結果{A0+A1+A6+A7}が、加算器90の他方の入力へと供給される。よって、加算器90は、乗算器80の乗算結果{A2+A5}と加算器90の累積加算結果{A0+A1+A6+A7}との累積加算を行い、その累積加算結果{A0+A1+A2+A5+A6+A7}をレジスタ91に一時的に格納する。また、乗算器80は、レジスタ71より遅延出力されたフィルタ係数C3と、レジスタ61より遅延出力された加算器60の加算結果{D3+D4}との乗算を行い、その乗算結果{A3(=C3*D3)+A4(=C3*D4)}をレジスタ81に一時的に格納する。
つぎに、時間t=“6”のとき、レジスタ81より遅延出力された乗算器80の乗算結果{A3+A4}が、加算器90の一方の入力へと供給される。また、レジスタ91より遅延出力された加算器90の累積加算結果{A0+A1+A2+A5+A6+A7}が、加算器90の他方の入力へと供給される。よって、加算器90は、乗算器80の乗算結果{A3+A4}と加算器90の累積加算結果{A0+A1+A2+A5+A6+A7}との累積加算を行い、その累積加算結果{A0+A1+A2+A3+A4+A5+A6+A7}をレジスタ91に一時的に格納する。
このように、本発明の第2施形態に係る直線位相FIRフィルタ演算器は、時間t=“0”から時間t=“6”まで、すなわち7マシン・サイクル分、前述した一連の処理を実行する。この結果、時間t=“6”のとき、入力データ系列{D0〜D7}に対するフィルタ演算処理の最終的な出力データy(6){=A0+A1+・・・+A7}が得られる。
ここで、本発明の第2実施形態を、従来例1と対比する。従来例1では、本発明と同様に、シングルポートのデータRAM4を採用しているが、1チャンネル分のフィルタ演算処理に10マシン・サイクル分必要とする。一方、本発明の第2実施形態では、図7に示したように、1チャンネル分のフィルタ演算処理が7マシン・サイクルで済み、従来例1の場合よりも短縮化される。
つぎに、本発明の第2実施形態を、従来例2と対比する。従来例2では、本発明と同様に、シングルポートのデータRAM4を採用しているが、1チャンネル分のフィルタ演算処理に12マシン・サイクル分必要とする。一方、本発明の第2実施形態では、図7に示したように、1チャンネル分のフィルタ演算処理が7マシン・サイクルで済み、従来例2の場合よりも短縮化される。
さらに、本発明の第2実施形態を、従来例3と対比する。従来例3では、デュアルポートのデータRAM15を採用しており、1チャンネル分のフィルタ演算処理に7マシン・サイクル分必要とする。一方、本発明の第2実施形態では、図7に示したように、シングルポートのデータRAM20、30にも関わらず、1チャンネル分のフィルタ演算処理が従来例3と同様の7マシン・サイクルで済む。
以上、本発明の実施形態について説明したが、前述した実施形態は、本発明の理解を容易にするためのものであり、本発明を限定して解釈するためのものではない。本発明は、その趣旨を逸脱することなく、変更/改良され得るとともに、その等価物も含まれる。