(57)【特許請求の範囲】
【請求項１】
入力データに対して、固定ビット長の固定小数点演算で高速フーリエ変換を行う複数のバタフライ演算部を有する高速フーリエ変換演算装置であって、
前記入力データを取り込む入力線と、
前記複数のバタフライ演算部の少なくとも１つの演算データに対してビットシフトを行うビットシフト部と、
前記ビットシフト部のうちの最も下流側に設けられたビットシフト部に接続されて演算結果を出力する出力線と、
前記ビットシフト部におけるビットシフト量を制御するシフト量制御部と、
前記入力線の下流側に挿入されて前記入力データを蓄積する入力バッファと、
前記出力線の上流側に挿入されて前記演算結果を蓄積する出力バッファと、を備え、
前記複数のバタフライ演算部の少なくとも１つは、自身の桁あふれを検出する機能を有し、
前記シフト量制御部は、前記複数のバタフライ演算部のいずれかで桁あふれが検出された場合に、前記ビットシフト量を調整するとともに、前記入力バッファに蓄積された入力データを、前記複数のバタフライ演算部のうちの最も上流側のバタフライ演算部に導入して、演算処理を再実行させることを特徴とする高速フーリエ変換演算装置。
【請求項２】
前記出力バッファの上流側に挿入された最大値検出部を備え、
前記シフト量制御部は、前記最大値検出部の検出結果に応じて、前記ビットシフト量を調整することを特徴とする請求項１に記載の高速フーリエ変換演算装置。
【請求項３】
前記シフト量制御部は、複数回の高速フーリエ変換演算処理を１つの塊として、前記１つの塊の間のビットシフト量を共通に設定することを特徴とする請求項１または２に記載の高速フーリエ変換演算装置。
【請求項４】
前記シフト量制御部は、前記１つの塊の中からサンプルを取得して、前記サンプルに対して前記ビットシフト量を決定することを特徴とする請求項３に記載の高速フーリエ変換演算装置。
【請求項５】
前記シフト量制御部は、複数回の高速フーリエ変換演算処理のうちの、複数の同じ高速フーリエ変換演算処理に対しても、それぞれに異なるビットシフト量を与え、各ビットシフト量を調整することを特徴とする請求項１から請求項４までのいずれか１項に記載の高速フーリエ変換演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、バタフライ演算を固定小数点演算で行い、ＦＦＴ（高速フーリエ変換）演算またはＩＦＦＴ（逆高速フーリエ変換）演算を繰り返し実行し続ける高速フーリエ変換演算装置に関するものである。
【背景技術】
【０００２】
一般に、固定小数点は、浮動小数点に比べて演算回路が簡単となり、回路規模を小さくできるという利点がある反面、扱うことのできる数のダイナミックレンジが狭いという問題を抱えている。なお、このような演算装置においては、入力されるデータの傾向が似通っている（急変することが少ない）問題を扱うことが多い。
【０００３】
上記のようなダイナミックレンジが狭いという問題を改善するために、従来から、特定のバタフライ演算のみでビットシフトを行うという演算方法および演算装置が提案されている（たとえば、特許文献１参照）。
ただし、上記特許文献１では、バタフライ演算における桁あふれを監視しておらず、ビットシフトを行う位置を固定している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平１０−４９５１６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
従来の高速フーリエ変換演算装置は、上記特許文献１に記載のように、バタフライ演算で桁あふれが生じても、これを回避することができないという課題があった。
【０００６】
この発明は、上記のような課題を解決するためになされたものであり、桁あふれが生じた場合に、ビットシフト量を更新することにより、後続データの演算処理の際に、桁あふれの発生を抑制することのできる高速フーリエ変換演算装置を得ることを目的とする。
【課題を解決するための手段】
【０００７】
この発明に係る高速フーリエ変換演算装置は、入力データに対して、固定ビット長の固定小数点演算で高速フーリエ変換を行う複数のバタフライ演算部を有する高速フーリエ変換演算装置であって、前記入力データを取り込む入力線と、前記複数のバタフライ演算部の少なくとも１つの演算データに対してビットシフトを行うビットシフト部と、前記ビットシフト部のうちの最も下流側に設けられたビットシフト部に接続されて演算結果を出力する出力線と、前記ビットシフト部におけるビットシフト量を制御するシフト量制御部と、前記入力線の下流側に挿入されて前記入力データを蓄積する入力バッファと、前記出力線の上流側に挿入されて前記演算結果を蓄積する出力バッファと、を備え、前記複数のバタフライ演算部の少なくとも１つは、自身の桁あふれを検出する機能を有し、前記シフト量制御部は、前記複数のバタフライ演算部のいずれかで桁あふれが検出された場合に、前記ビットシフト量を調整するとともに、前記入力バッファに蓄積された入力データを、前記複数のバタフライ演算部のうちの最も上流側のバタフライ演算部に導入して、演算処理を再実行させるものである。
【発明の効果】
【０００８】
この発明によれば、桁あふれの有無に応じて、ビットシフト量（ビットシフト位置）を制御することにより、桁あふれが発生しても、その後のデータ処理においてビットシフトの制御を補正して、桁あふれの発生を抑制することができる。
【図面の簡単な説明】
【０００９】
【図１】この発明の実施の形態１に係る高速フーリエ変換演算装置を示すブロック構成図である。
【図２】この発明の実施の形態３に係る高速フーリエ変換演算装置を示すブロック構成図である。
【図３】この発明の実施の形態４に係る高速フーリエ変換演算装置を示すブロック構成図である。
【図４】この発明の実施の形態６に係る高速フーリエ変換演算装置を示すブロック構成図である。
【図５】この発明の実施の形態６による演算処理を示す説明図である。
【発明を実施するための形態】
【００１０】
実施の形態１．
以下、図面を参照しながら、この発明の実施の形態１について説明する。
図１はこの発明の実施の形態１に係る高速フーリエ変換演算装置を示すブロック構成図であり、最大で２１４（＝１６３８４）点のＦＦＴ（または、ＩＦＦＴ）演算を実行可能な構成を示している。
【００１１】
図１において、高速フーリエ変換演算装置は、高速フーリエ変換の対象となる入力データを取り込む入力線１と、入力データに対して高速フーリエ変換演算を行う高速フーリエ変換部２と、高速フーリエ変換部２のビットシフト量を制御するシフト量制御部３と、高速フーリエ変換の結果（出力データ）を出力する出力線４とを備えている。
【００１２】
高速フーリエ変換部２は、バタフライ演算を行う１４個（ａ、ｂ、・・・、ｍ、ｎ）のバタフライ演算部５ａ〜５ｎと、ビットシフトを行うビットシフト部６ａ〜６ｎとを備えている。
バタフライ演算部５ａ〜５ｎとビットシフト部６ａ〜６ｎとは、交互にかつ順次に配置されるとともに、それぞれ、シフト量制御部３に接続されている。
【００１３】
すなわち、バタフライ演算部５ａ〜５ｎのデータ出力端子には、ビットシフト部６ａ〜６ｎが個別に接続され、バタフライ演算部５ａ〜５ｎは、ビットシフト部６ａ〜６ｍを介して順次に直列接続されており、最終段のビットシフト部６ｎには、出力線４が接続されている。
【００１４】
バタフライ演算部５ａ〜５ｎは、各々の演算データを、下段側のビットシフト部６ａ〜６ｎに個別に入力するとともに、シフト量制御部３に入力する。
ビットシフト部６ａ〜６ｎは、シフト量制御部３の制御下で入力データに対するビットシフトを行い、ビットシフト部６ａ〜６ｍは、下段側のバタフライ演算部５ｂ〜５ｎに対して順次にビットシフト後のデータを入力し、最終段のビットシフト部６ｎは、出力線４を介して出力データを出力する。
【００１５】
以下、図１に示したこの発明の実施の形態１に係る高速フーリエ変換演算装置の各部の機能および動作について説明する。
（１）まず、入力線１からのデータが、高速フーリエ変換部２内の最上段側のバタフライ演算部５ａに入力される。
（２）高速フーリエ変換部２は、シフト量制御部３の指示にしたがって、入力データに対してＦＦＴ（または、ＩＦＦＴ）演算を順次に実行する。
（３）高速フーリエ変換部２は、最終的なＦＦＴ（または、ＩＦＦＴ）の演算結果を、ビットシフト部６ｎから出力線２を介して出力する。
【００１６】
（４）このとき、シフト量制御部３は、高速フーリエ変換部２内の各バタフライ演算部５ａ〜５ｎから「桁あふれ状況（または、最大値）」を取り込み、高速フーリエ変換部２内の各ビットシフト部６ａ〜６ｎに対する指示内容を更新する。
（５）以下、高速フーリエ変換部２およびシフト量制御部３は、次の入力データ（後続データ）に対して、上記（１）〜（４）の処理を実行する。
【００１７】
次に、高速フーリエ変換部２の内部における動作について、さらに詳細に説明する。
（６）まず、最上段側のバタフライ演算部５ａは、常に、入力データに対してバタフライ演算を実行して、演算データを下段側に出力する。
（７）バタフライ演算部５ａは、バタフライ演算時の「桁あふれ」の有無情報を、シフト量制御部３に報告する。
（８）以下、下段側のバタフライ演算部５ｂ〜５ｎは、バタフライ演算部５ａと同じように、上記処理動作を順次に実行する。
【００１８】
（９）一方、バタフライ演算部５ａに接続されたビットシフト部６ａは、常に、入力データに対してビットシフトを行い、ビットシフト後のデータを出力する。このとき、ビットシフト部６ａによるビットシフト量は、シフト量制御部３からの指示にしたがって決定される。
（１０）以下、下段側のビットシフト部６ｂ〜６ｎは、ビットシフト部６ａと同じように、上記処理動作（９）を実行する。このとき、シフト量制御部３は、ビットシフト５ａ〜５ｎに対して、個別にビットシフト量を指示する。
【００１９】
以上の処理動作（１）〜（１０）により、高速フーリエ変換演算装置は、高速フーリエ変換を実行し続けることができる。
なお、バタフライ演算部５ａ〜５ｎは、内部メモリ（図示せず）を有し、バタフライ演算の実行時に、データの入れ替え処理も同時に行う。
また、図１に示した高速フーリエ変換演算装置は、出力線４の後段処理（図示せず）で必要となる場合には、桁あふれの有無やビットシフト量の情報を、後段処理に渡すことができるように構成されているものとする。
【００２０】
ここで、シフト量制御部３の動作例について補足説明する。
シフト量制御部３は、シミュレーション結果や事前観測結果に基づいて、ビットシフト部６ａ〜６ｎに対するシフト量の初期値を定める。これにより、各ビットシフト部６ａ〜６ｎは、それぞれに指定されたシフト量のビットシフトを行う。
【００２１】
このとき、各ビットシフト部６ａ〜６ｎに対するシフト量の初期値は、たとえば、以下のような値に定められる。
奇数番目のビットシフト部６ａ、６ｃ、６ｅ、６ｇ、６ｉ、６ｋ、６ｍに対するシフト量は、「１」に設定される。
偶数番目のビットシフト部６ｂ、６ｄ、６ｆ、６ｈ、６ｊ、６ｌ、６ｎに対するシフト量は、「０」に設定される。
【００２２】
シフト量制御部３は、バタフライ演算部５ｂ〜５ｎのいずれかから「桁あふれ」が報告された場合に、「桁あふれ」を報告したバタフライ演算部の上段側に接続されたビットシフト部のシフト量を変更する。
【００２３】
このときのシフト量の変更処理は、具体的には、たとえば以下のように実行される。
「桁あふれ」を検出したバタフライ演算部よりも上段側で、かつ、「桁あふれ」を検出したバタフライ演算部に最も近い位置のビットシフト部の値を「１」だけ増加させる。
なお、バタフライ演算部５ａから「桁あふれ」が報告された場合には、一過性のものと見なして、特に対処（シフト量の変更処理）を行わないものとする。
【００２４】
以上のように、この発明の実施の形態１（図１）に係る高速フーリエ変換演算装置は、入力データに対して、固定ビット長の固定小数点演算で高速フーリエ変換を行う複数のバタフライ演算部５ａ〜５ｎを有する高速フーリエ変換演算装置であって、入力データを取り込む入力線１と、複数のバタフライ演算部５ａ〜５ｎの少なくとも１つの演算データに対してビットシフトを行うビットシフト部６ａ〜６ｎと、ビットシフト部６ａ〜６ｎのうちの最終段のビットシフト部６ｎに接続されて演算結果を出力する出力線４と、ビットシフト部６ａ〜６ｎにおけるビットシフト量を制御するシフト量制御部３とを備えている。
【００２５】
複数のバタフライ演算部５ａ〜５ｎの少なくとも１つは、自身の桁あふれを検出する機能を有し、シフト量制御部３は、複数のバタフライ演算部５ａ〜５ｎのいずれかで「桁あふれ」が検出された場合に、ビットシフト部６ａ〜６ｎ（の少なくとも１つ）のビットシフト量を調整（変更）する。
このシフト量変更処理により、同様の傾向を有する後続データに対してＦＦＴ（または、ＩＦＦＴ）演算を行う際に、「桁あふれ」の発生を抑制することができる。
【００２６】
なお、上記説明では、バタフライ演算部５ａから「桁あふれ」が報告された場合に対処しなかったが、シフト量制御部３から入力線１の前段処理部に向けて制御線（図示せず）を設け、バタフライ演算部５ａから「桁あふれ」が報告された場合に、バタフライ演算部５ａの前段処理に対して、シフト量制御部３から入力データのレベル値の低解させる要求を出力してもよい。これにより、バタフライ演算部５ａにおける「桁あふれ」も抑制することができる。
【００２７】
また、バタフライ演算部５ａにおける「桁あふれ」を抑制するために、バタフライ演算部５ａの上段側にビットシフト部（図示せず）を増設し、増設したビットシフト部に対して、シフト量制御部３からシフト量「１」を指定してもよい。
これにより、同様の傾向を有する後続データにＦＦＴ（または、ＩＦＦＴ）演算を行う際に、バタフライ演算部５ａでの「桁あふれ」の発生が一過性とならない場合であっても、「桁あふれ」の発生を抑制することができる。
【００２８】
実施の形態２．
上記実施の形態１（図１）では、バタフライ演算部５ａ〜５ｎとビットシフト部６ａ〜６ｎとにより１４個の対を構成し、かつ、ビットシフト部６ａ〜６ｎの各シフト量を任意に設定したが、偶数番目のビットシフト部６ｂ、６ｄ、６ｆ、６ｈ、６ｊ、６ｌ、６ｎを削減して、２回のバタフライ演算処理に対して１回のビットシフト処理を行うように構成してもよい。
【００２９】
また、上記のようにビットシフト部を削減する代わりに、図１の構成を変更せずに、各ビットシフト部６ａ〜６ｎで指定可能なシフト量を最大「１」としてもよい。
以下、シフト量を最大「１」とした場合のシフト量制御部３の動作について、補足説明する。
【００３０】
この場合、シフト量制御部３は、バタフライ演算部５ｂ〜５ｎのいずれかから「桁あふれ」が報告された場合に、以下の条件（ａ）〜（ｃ）のすべてを満たすビットシフト部のシフト量を「１」に変更する。
（ａ）「桁あふれ」を検出したバタフライ演算部よりも上段側に位置する。
（ｂ）シフト量が「０」である。
（ｃ）上記（ａ）、（ｂ）の両方を満たすビットシフト部のうち、最も下段側に位置する。
【００３１】
なお、上記シフト量変更処理において、シフト量が更新されるビットシフト部は、１４個のビットシフト部６ａ〜６ｎのうちの１個のみであるが、シフト量が更新されたビットシフト部よりも下段側のすべてのビットシフト部のシフト量を変更してもよい。
たとえば、前述の条件（ａ）〜（ｃ）を満たすビットシフト部が、ビットシフト部６ｄのみであった場合、ビットシフト部６ｄおよび下段側のビットシフト部６ｅ〜６ｎのシフト量（「０」または「１」）が反転することになる。
【００３２】
このシフト量変更処理の場合、ビットシフト部６ａ〜６ｎのうちの１個のみのシフト量を「１」に変更する場合よりも、「桁あふれ」に対する抑制作用が弱くなるので、シフト量制御部３は、「桁あふれ」に対して、さらに緩やかな調整を行うことができる。
これにより、「桁あふれ」の発生を抑制しつつ、さらに小さい回路規模で高速フーリエ変換演算装置を実現することができる。
【００３３】
なお、以上の説明では、シフト量制御部３において、バタフライ演算部５ａ〜５ｎのうちのどこで「桁あふれ」が発生したかが検出可能な場合を例にとって説明したが、「桁あふれ」の発生の有無さえ検出できれば、バタフライ演算部５ａ〜５ｎのうちのどこで発生したかが検出不可能な場合であっても、上記と同様の対応を行うことができる。
【００３４】
たとえば、「桁あふれ」の発生位置が区別不可能な場合、「桁あふれ」の発生箇所を、以下の基準（Ａ）または（Ｂ）のいずれか一方で設定することにより、前述の対応が可能になる。
（Ａ）最終段のバタフライ演算部５ｎで発生したと見なす。
（Ｂ）シフト量が「０」であるビットシフト部のうち、最も上段側に位置するビットシフト部の直後のバタフライ演算部で発生したものと見なす。
上記基準（Ａ）、（Ｂ）のいずれを採用するかは、高速フーリエ変換演算装置の使用目的などに応じて任意に選択され得る。
【００３５】
以上のように、この発明の実施の形態２によれば、前述の実施の形態１よりも構成が簡略化するので、さらに小さい回路規模で高速フーリエ変換演算装置を実現することができる。
【００３６】
実施の形態３．
なお、上記実施の形態１（図１）では、最終段のビットシフト部６ｎを出力線４に接続したが、図２のように、ビットシフト部６ｎと出力線４との間に最大値検出部７を挿入してもよい。
【００３７】
図２はこの発明の実施の形態３に係る高速フーリエ変換演算装置を示すブロック構成図であり、前述（図１参照）と同様のものについては、前述と同一符号を付して、または、符号の後に「Ａ」を付して詳述を省略する。
この場合、図１との相違点は、高速フーリエ変換部２Ａ内に最大値検出部７が追加された点のみである。
【００３８】
以下、図２に示したこの発明の実施の形態３による動作について説明する。
図２において、最大値検出部７は、ビットシフト部６ｎからの出力データに基づいて、ＦＦＴ（または、ＩＦＦＴ）の演算結果の塊ごとに絶対値の最大値を検出し、最大値をシフト量制御部３Ａに報告するとともに、出力線４を介して外部に出力する。
【００３９】
シフト量制御部３Ａは、最大値検出部７から受け取った最大値が所定値よりも小さい場合には、ビットシフト部６ａ〜６ｎに指示するシフト量を削減する。
たとえば、各データのビット幅が「１６ビット」であるのに対し、受け取った最大値が２１３（＝８１９２）未満であった場合には、出力データ値を４倍にしても１６ビットの表現範囲内に収まることが明らかなので、ビットシフト部６ａ〜６ｎのうちでシフト量が「１」以上で、かつ、最も下段側に位置するビットシフト部のシフト量を「１」だけ減らす。
【００４０】
これにより、「桁あふれ」を抑制すると同時に、出力データ値の大きさが小さいレベルに固定されることを防ぐことができる。
【００４１】
なお、前述の図１（最大値検出部７を有していない）の構成においても、以下のシフト量制御部３の動作（Ａ１）、（Ａ２）を選択することにより、同様に、「桁あふれ」を抑制すると同時に、出力データ値の大きさが小さいレベルに固定されることを防ぐことができる。
【００４２】
（Ａ１）「桁あふれ」が発生しない期間が設定値を超えた場合に、シフト量を初期値に戻す。
（Ａ２）シフト量の変更履歴を保持し、「桁あふれ」が発生しない期間が設定値を超えるごとに、変更履歴を逆にたどって、順次に変更を元に戻す。
【００４３】
以上のように、この発明の実施の形態３（図２）に係る高速フーリエ変換演算装置によれば、出力線４の上段側に挿入された最大値検出部７を備え、シフト量制御部３Ａは、最大値検出部７の検出結果に応じて、ビットシフト量を調整するので、図１の（最大値検出部７を有していない）構成においても、「桁あふれ」を抑制すると同時に、出力データ値の大きさが小さいレベルに固定されることを防ぐことができる。
【００４４】
実施の形態４．
なお、上記実施の形態３（図２）では、出力線４の上段側に最大値検出部７のみを挿入したが、図３のように、入力線１の下段側に入力バッファ８を挿入するとともに、出力線４の上段側にさらに出力バッファ９を挿入してもよい。
【００４５】
図３はこの発明の実施の形態４に係る高速フーリエ変換演算装置を示すブロック構成図であり、前述（図１、図２参照）と同様のものについては、前述と同一符号を付して、または、符号の後に「Ｂ」を付して詳述を省略する。
この場合、図２との相違点は、高速フーリエ変換部２Ｂ内に入力バッファ８および出力バッファ９が追加された点のみである。
【００４６】
入力バッファ８は、後述する「桁あふれ」の発生時において、シフト量制御部３Ｂの制御下で、蓄積した入力データを再送する。
また、出力バッファ９は、「桁あふれ」の発生時において、シフト量制御部３Ｂの制御下で、蓄積した出力データを破棄する。
【００４７】
以下、図３を参照しながら、この発明の実施の形態４による動作について、前述との相違部に着目して説明する。
まず、入力線１から入力されたデータは、一度、入力バッファ８に蓄えられ、入力バッファ８を介して高速フーリエ変換部２Ｂに取り込まれる。
【００４８】
以下、高速フーリエ変換部２Ｂは、入力データに対して高速フーリエ変換演算を行い、演算結果を、最大値検出部７を介して出力バッファ９に蓄えた後、出力線４から演算結果（出力データ）を出力する。
【００４９】
このとき、バタフライ演算部５ａ〜５ｎのいずれにおいても「桁あふれ」が発生していなければ、データは、入力バッファ８および出力バッファ９を経由するのみであり、前述と比べて、出力線４から得られる出力データ値に変化はない。
【００５０】
一方、バタフライ演算部５ａ〜５ｎのいずれかで「桁あふれ」が発生した場合には、次の動作（Ｂ１）〜（Ｂ５）により対処が可能になる。
（Ｂ１）「桁あふれ」が発生したバタフライ演算部は、「桁あふれ」をシフト量制御部３Ｂに報告する。
（Ｂ２）すべてのバタフライ演算部５ａ〜５ｎは、一度、演算処理を打ち切る。
（Ｂ３）出力バッファ９は、既に演算済みのデータを途中まで受け取っていたとしても、これを破棄する。
（Ｂ４）シフト量制御部３Ｂは、ビットシフト部６ａ〜６ｎのシフト量を更新する。
（Ｂ５）シフト量制御部３Ｂは、入力バッファ８にデータの再送を指示する。
【００５１】
以上のように、この発明の実施の形態４（図３）に係る高速フーリエ変換演算装置は、入力線１の下段側に挿入されて入力データを蓄積する入力バッファ８と、出力線４の上段側に挿入されて演算結果を蓄積する出力バッファ９とを備えている。
【００５２】
シフト量制御部３Ｂは、複数のバタフライ演算部５ａ〜５ｎのいずれかで「桁あふれ」が発生した場合に、ビットシフト部のビットシフト量を調整するとともに、入力バッファ８に蓄積された入力データを、複数のバタフライ演算部５ａ〜５ｎのうちの最上段のバタフライ演算部５ａに導入して、演算処理を再実行させる。
これにより、「桁あふれ」が生じていないＦＦＴ（または、ＩＦＦＴ）の演算結果を、出力線４の下段側に送ることができる。
【００５３】
実施の形態５．
なお、上記実施の形態４（図３）では、各ＦＦＴ（または、ＩＦＦＴ）演算を独立に扱うものとしたが、複数回分（たとえば、８０００個分）を１つの塊として扱い、その塊内においては、同一のシフト量で演算処理を施してもよい。
【００５４】
ただし、図３の構成において、１つの塊とする数が大きい場合には、何度もやり直しが発生して、大幅に処理時間が増大する可能性がある。
したがって、処理時間の増大を回避するために、シフト量制御部３Ｂの制御下で、以下の動作を行うことが望ましい。
【００５５】
図３において、まず、シフト量制御部３Ｂは、塊の中から数個のＦＦＴ（または、ＩＦＦＴ）をサンプルとして取り出し、入力バッファ８を介して高速フーリエ変換部２Ｂに導入する。
以下、高速フーリエ変換部２Ｂによる演算処理において「桁あふれ」が発生すれば、前述のようにシフト量を調整し、すべてのサンプルに対して上記を施す。この間、出力バッファ９は、受け取るデータをすべて破棄する。
【００５６】
続いて、入力バッファ８は、１つの塊内のデータのすべてを高速フーリエ変換部２Ｂに導入し、高速フーリエ変換部２Ｂは、高速フーリエ変換を行う。このとき、「桁あふれ」が発生しても、シフト量の更新や演算処理のやり直しは行わない。
【００５７】
なお、「桁あふれ」の発生時において、出力バッファ９は、サンプルとして処理した結果を破棄せず、また、入力バッファ８は、高速フーリエ変換部２Ｂに導入するデータをサンプル以外に限定することにより、サンプルに対する重複処理を回避してもよい。
上記動作により、「桁あふれ」を完全には抑制することができないものの、処理時間の大幅な増加を招かずに処理を行う高速フーリエ変換演算装置を得ることができる。
【００５８】
以上のように、この発明の実施の形態５によれば、シフト量制御部３Ｂは、複数回の高速フーリエ変換演算処理を１つの塊として、１つの塊の間のビットシフト量を共通に設定し、１つの塊として演算処理を行う。
また、シフト量制御部３Ｂは、１つの塊の中からサンプルを取得して、サンプルに対してビットシフト量を決定する。
【００５９】
これにより、１つの塊内の処理条件を同一にすることができる。
また、出力線４よりも後段の処理において、同一塊内の異なるＦＦＴ（または、ＩＦＦＴ）の演算結果について、相互に比較および参照する処理を行うことができる。
【００６０】
実施の形態６．
なお、上記実施の形態１〜５（図１〜図３）では、単一の高速フーリエ変換部に対してビットシフト量を制御したが、図４のように、複数の高速フーリエ変換部２ａ〜２ｄに対してビットシフト量を制御してもよい。
【００６１】
図４はこの発明の実施の形態６に係る高速フーリエ変換演算装置を示すブロック構成図であり、前述（図１参照）と同様のものについては、前述と同一符号を付して、または、符号の後に「Ｃ」を付して詳述を省略する。
【００６２】
図４において、高速フーリエ変換演算装置は、直列配置された複数（たとえば、４個）の高速フーリエ変換部２ａ〜２ｄと、高速フーリエ変換部２ａ、２ｃの出力データを蓄えるメモリ１１ａ、１１ｂと、高速フーリエ変換部２ｂと高速フーリエ変換部２ｃとの間に挿入されて任意の処理を行う中間処理部１２とを備えている。
【００６３】
入力線１は、最上段の高速フーリエ変換部２ａに接続され、演算結果を出力する出力線４は、最終段の高速フーリエ変換部２ｄに接続されている。
シフト量制御部３Ｃは、高速フーリエ変換部２ａ〜２ｄのビットシフト量を制御する。
高速フーリエ変換部２ａ〜２ｄは、それぞれ、前述の実施の形態１〜５のいずれかで示したものと同様の構成を有している。
【００６４】
ここでは、高速フーリエ変換演算処理を複数回実行する一例として、まず、高速フーリエ変換部２ａ、２ｂにおいて２次元ＦＦＴ演算を行い、中間処理部１２において中間処理を施した後で、さらに、高速フーリエ変換部２ｃ、２ｄにおいて２次元ＩＦＦＴ演算を行う場合の構成を示している。
【００６５】
図５はこの発明の実施の形態６による演算処理を示す説明図である。
図５において、２次元ＦＦＴは、２次元データ１００に対して、横軸の１次元ＦＦＴ演算と縦軸の１次元ＦＦＴ演算との両方を行うことにより実現する。
【００６６】
以下、図４および図５を参照しながら、この発明の実施の形態６による動作（Ｃ１）〜（Ｃ１１）について説明する。
（Ｃ１）まず、入力線１を介して、高速フーリエ変換部２ａに２次元データが入力される。
（Ｃ２）高速フーリエ変換部２ａは、シフト量制御部３Ｃの指示にしたがって、図５内の横軸の１次元ＦＦＴ演算を行う。
（Ｃ３）高速フーリエ変換部２ａは、ＦＦＴの演算結果をメモリ１１ａに格納する。
【００６７】
（Ｃ４）次段の高速フーリエ変換部２ｂは、メモリ１１ａから、図５内の縦軸の１次元ＦＦＴ演算を実行可能な順番でデータを取り出す。
（Ｃ５）高速フーリエ変換部２ｂは、シフト量制御部３Ｃの指示にしたがって、図５内の縦軸の１次元ＦＦＴ演算を行う。
（Ｃ６）高速フーリエ変換部２ｂは、ＦＦＴの演算結果を中間処理部１２に送る。
【００６８】
（Ｃ７）中間処理部１２は、高速フーリエ変換部２ｂの演算結果にデータ処理を施し、高速フーリエ変換部２ｃに入力する。
（Ｃ８）高速フーリエ変換部２ｃは、シフト量制御部３Ｃの指示にしたがって、図５内の縦軸の１次元ＩＦＦＴ演算を行う。
（Ｃ９）高速フーリエ変換部２ｃは、ＦＦＴの演算結果をメモリ１１ｂに格納する。
【００６９】
（Ｃ１０）最終段の高速フーリエ変換部２ｄは、メモリ１１ｂから、図５内の横軸の１次元ＩＦＦＴを実行できる順番でデータを取り出す。
（Ｃ１１）高速フーリエ変換部２ｄは、シフト量制御部３Ｃの指示にしたがって、図５内の横軸の１次元ＩＦＦＴ演算を行う。
【００７０】
ここで、シフト量制御部３Ｃは、個々の高速フーリエ変換部２ａ〜２ｄに対し、シミュレーション結果や事前観測結果に基づいて、それぞれに個別のシフト量を設定する。
また、シフト量制御部３Ｃは、たとえば高速フーリエ変換２ｂ内の最上段のバタフライ演算部で「桁あふれ」が発生した場合に、前述の実施の形態１で述べた複数の高速フーリエ変換部に対するシフト量制御も行う。
【００７１】
すなわち、シフト量制御部３Ｃは、高速フーリエ変換２ｂ内の最上段のバタフライ演算部で「桁あふれ」が発生した場合には、高速フーリエ変換２ａ内の最終段のビットシフト部のシフト量を調整することになる。
【００７２】
以上のように、この発明の実施の形態６（図４）によれば、シフト量制御部３Ｃは、複数の高速フーリエ変換演算処理のうちの、複数の同じ高速フーリエ変換演算処理に対しても、それぞれに異なるビットシフト量を与え、各ビットシフト量を調整する。
【００７３】
これにより、複数の高速フーリエ変換部２ａ〜２ｄを用いて複数の演算処理を行う際に、高速フーリエ変換ごとに適したシフト量に基づき演算を行うことのできる高速フーリエ変換演算装置を得ることができる。
【符号の説明】
【００７４】
１  入力線、２、２Ａ、２Ｂ、２ａ〜２ｄ  高速フーリエ変換部、３、３Ａ、３Ｂ、３Ｃ  シフト量制御部、４  出力線、５ａ〜５ｎ  バタフライ演算部、６ａ〜６ｎ  ビットシフト部、７  最大値検出部、８  入力バッファ、９  出力バッファ、１１ａ、１１ｂ  メモリ、１２  中間処理部。
【図１】
0005414434.tif 000002
【図２】
0005414434.tif 000003
【図３】
0005414434.tif 000004
【図４】
0005414434.tif 000005
【図５】
0005414434.tif 000006