(57)【特許請求の範囲】
【請求項１】
複数の直列に接続されたバタフライ演算部からなり、演算対象のＦＦＴ長を任意に選択して設定するＦＦＴ演算回路であり、
前記バタフライ演算部が、
入力される信号を一旦格納する一時記憶部を備え、バタフライ演算において複素乗算及び複素加減算を行う順番に、順次信号を読み出す信号順変換部と、
ＦＦＴ長及びバタフライ演算部の段数に対応して、各信号に複素乗算する複素係数が記憶された複素係数記憶部と、
読み出された前記信号毎に、前記複素係数記憶部から対応する複素係数を順次読み出して複素乗算する複素乗算部と、
該複素乗算部から出力される、複素係数が複素乗算された信号に対し、順次複素加減算を行う複素加減算部と
を有し、
前記バタフライ演算部の間はシリアルで信号が転送され、前記複素乗算部から出力されるシリアル信号はシリアル／パラレル変換部でパラレル信号に変換されて前記複素加減算部に入力され、前記複素加減算部から出力されるパラレル信号はパラレル／シリアル変換部でシリアル信号に変換されて、次段のバタフライ演算部に入力されることを特徴とするＦＦＴ演算回路。
【請求項２】
ＦＦＴ長により、前記複数のバタフライ演算部のいずれの演算結果をＦＦＴ演算結果として出力するかを選択するセレクタを有することを特徴とする請求項１記載のＦＦＴ演算回路
【請求項３】
前記信号順変換部が、
入力される前記信号を順次前記一時記憶部に書き込む入力アドレスを生成する入力アドレス生成部と、
ＦＦＴ長に対応して、複素乗算部が読み出した前記複素係数を複素乗算する順番に読み出す出力アドレスを生成する出力アドレス生成部と、
該出力アドレスに対応して、前記一時記憶部から信号を順次読み出す読出回路と
を有することを特徴とする請求項１または請求項２に記載のＦＦＴ演算回路。
【請求項４】
前記信号順変換部がＦＦＴ長に対応した複数の入力アドレス生成部と複数の出力アドレス生成部を有し、選択されたＦＦＴ長に対応した入力アドレス生成部及び出力アドレス生成部を選択し、入力アドレス及び出力アドレスを生成することを特徴とする請求項３に記載のＦＦＴ演算回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ通信や画像・音声信号のデジタル信号処理に用いられるＦＦＴ（Fast Fourier Transform：高速フーリエ変換）演算回路に関する。
【背景技術】
【０００２】
ＦＦＴは、時間領域における一連の信号データに潜む周波数成分を抽出するのに用いられる手法であり、多数のデータを短時間で処理できるという優れた特徴を有する。また、ＦＦＴをハードウェアにより実現する際には、面積の小さい回路が必要とされる。
一方、携帯電話などの無線通信の規格において、様々なCellular方式や無線LAN方式が用いられている。一般の利用者としては、これらの規格の利点を利用して、効率的な無線通信を行えることを望んでいる。
【０００３】
例えば、データ通信の分野においては、ＦＦＴのデータ長（ＦＦＴ長）が用途により異なり、一例として、無線ＬＡＮの規格の１つであるＩＥＥＥ８０２.１１ａにてデータ長６４であり、４Ｇ-Mobileの規格の候補の１つが１０２４である。
そのため、１つの携帯端末に複数の機能を持たせる場合、外部からの設定により、処理するデータ長に対応して上述した２つの演算を切り替え、１つのＦＦＴ回路で実現することが必要となってくる。すなわち、複数の規格を１つのハードウェアにより構成するＭｕｌｔｉ−Ｍｏｄｅ端末が最近用いられているが、複数のチップセットを用いているため、実装面積を無駄とし、ハードウェアが大型化してしまう欠点がある。したがって、１つのチップセットによって、複数の規格に対応するＦＦＴ演算回路が必要となる。
【０００４】
上述した課題に対して、特許文献１に記載されているＦＦＴ専用プロセッサは、ＦＦＴ演算を行う処理回路に、ＦＦＴ演算を行うＦＦＴ長として複数の値に対応させるため、複数の基数に対応した複数の演算回路が設けられており、ＦＦＴ演算の各ステージにおける基数に対応した演算回路を選択して使用する構成となっている。
【特許文献１】特開平０８−０３００５８４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記特許文献１に示すＦＦＴ専用プロセッサは、複数のＦＦＴ長の種類に対応させるため、基数に対応した複数の演算回路を設けているため、回路規模が大きくなり、消費電力が増大するという欠点がある。
本発明は、このような事情に鑑みてなされたもので、従来のように、基数に対応した複数の演算回路を設けず、複数のＦＦＴ長に対応することができ、回路数を削減し、消費電力を低下させることができるＦＦＴ演算回路を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明のＦＦＴ演算回路は、複数の直列に接続されたバタフライ演算部（例えば、実施形態におけるバタフライ演算器１１〜１５）からなり、演算対象のＦＦＴ長を任意に選択して設定するＦＦＴ演算器であり、前記バタフライ演算部が、入力される信号を一旦格納する一時記憶部を備え、バタフライ演算において複素乗算及び複素加減算を行う順番に、順次信号を読み出す信号順変換部（例えば、実施形態における入力アドレス生成部２３，２５と、セレクタ２４，２８と記憶部２２から構成されている）と、ＦＦＴ長及びバタフライ演算部の段数に対応して、各信号に複素乗算する複素係数が記憶された複素係数記憶部（例えば、実施形態におけるＦＦＴ回転因子テーブル）と、読み出された前記信号毎に、前記複素係数記憶部から対応する複素係数を順次読み出して複素乗算する複素乗算部と、該複素乗算部から出力される、複素係数が複素乗算された信号に対し、順次複素加減算を行う複素加減算部とを有することを特徴とする。
【０００７】
上述した構成により、本発明のＦＦＴ演算回路は、複数のバタフライ演算部が直列に接続されて形成されているため、ＦＦＴ長に応じたバタフライ演算の回数に対応したバタフライ演算部から出力を選択することにより、複数のＦＦＴ長の種類に対応した演算が行うことができる。
【発明の効果】
【０００８】
以上説明したように、発明によれば、従来のように、基数に対応した複数の演算回路を設けずに、複数のＦＦＴ長に対応したＦＦＴ演算を行うことができるため、従来例のように、基数に対応する複数の演算回路を設ける必要がなく、従来例に比較して回路規模を小さくすることができ、消費電力を削減することが可能となる効果が得られる。
【発明を実施するための最良の形態】
【０００９】
以下、本発明の一実施形態によるＦＦＴ演算回路を図面を参照して説明する。図１は同実施形態によるＦＦＴ演算回路１の構成例を示すブロック図である。
本実施形態においては、基数４を用いたバタフライ演算を例にとり説明するが、基数を２のｎ乗とした２，４，８，１６，…としても同様に回路を構成することができる。また、外部から入力されるＦＦＴ演算の対象としてのサンプル（チャンネル）数により、使用されるバタフライ演算器の数が変化する。ＦＦＴ演算回路１は、基数４にて、ＦＦＴ長が６４，２５６及び１０２４各々に対するＦＦＴ演算に対応する構成である。
すなわち、本実施形態のＦＦＴ演算回路１は、バタフライ演算器１１、１２，１３，１４及び１５各々がそれぞれの出力端子と次段の入力端子とを接続した直列接続となっている。また、本実施形態のＦＦＴ演算回路１は、ＦＦＴ長が６４，２５６及び１０２４に対応した構成のため、上記バタフライ演算器１３，１４及び１５のいずれかの出力を、ＦＦＴ長の情報により選択して、選択された演算結果をＦＦＴ演算結果として出力する構成となっている。
【００１０】
本実施形態において、例えば、ＦＦＴ長が６４（４３）の場合、４の３乗のため３段目のバタフライ演算器１３からＦＦＴの演算結果が出力され、ＦＦＴ長が２５６（４４）の場合、４の４乗のため４段目のバタフライ演算器１４からＦＦＴの演算結果が出力され、ＦＦＴ長が１０２４（４５）の場合、４の５乗のため５段目のバタフライ演算器１５から演算結果が出力される。また、ＦＦＴ長が２５６の際、バタフライ演算器１３からは中間データとしてのバタフライ演算結果がバタフライ演算器１４に出力され、すなわち、ＦＦＴ長に必要なバタフライ演算器の前段までのバタフライ演算器からは、計算途中のＦＦＴ長と同数の中間データが出力される。
【００１１】
バタフライ演算器（１１〜１５）各々は、後に詳細に述べるが、外部から入力されるＦＦＴ長を示すＦＦＴ長情報により、外部からまたは前段から入力される信号各々（入力信号）に複素乗算する複素係数のデータ（以下、係数データまたは係数とする）を変化させ、ＦＦＴ長に対応したバタフライ演算に必要な段の前段まで、上記中間データに対応したバタフライ演算を行い、ＦＦＴ長に対応したバタフライ演算に必要な段のバタフライ演算器から最終的な演算結果が出力されるように、動作が設定される。ここでの、信号とは、初段のバタフライ演算器１１に入力されるサンプル、または後段のバタフライ演算器１２〜１５に入力される前段からの中間データの双方を含むものとする。例えば、ＦＦＴ長が２５６の場合、バタフライ演算器１１〜１３までは、中間データ生成としての演算を行い、バタフライ演算器１４がバタフライ演算器１３から出力される中間データから最終的なＦＦＴ演算結果を出力信号として出力する。
セレクタ１６は、各バタフライ演算器からの出力が入力されており、上記ＦＦＴ長及びバタフライ演算器の段数（何番目のバタフライ演算器であるか）により、ＦＦＴ演算結果が出力される段のバタフライ演算器からの出力を選択して、出力信号として出力する。
【００１２】
次に、図２を参照して、図１に示すバタフライ演算器１１の説明を行う。図２は、本実施形態におけるＦＦＴ演算回路１を構成するバタフライ演算器を代表して、バタフライ演算器１１の構成例を説明する。他のバタフライ演算器１２，１３，１４及び１５各々の構成は、バタフライ演算器１１と同様のバタフライ演算を行う構成となっている。各演算器が異なる点は、次段に対して出力する中間データを演算する際、入力されるデータに対して複素乗算する係数が異なることと、この係数が複素乗算された結果を加減演算する信号（サンプルまたは中間データ）の組合せが異なることにある。
また、バタフライ演算器１４はＦＦＴ長が２５６個と１０２４個の場合のみ、バタフライ演算を行うため、ＦＦＴ長が６４の場合のバタフライ演算に対応する構成を必要とせず、バタフライ演算器１５はＦＦＴ長が１０２４個の場合のみ、バタフライ演算を行うため、ＦＦＴ長が６４及び２５６の場合のバタフライ演算に対応する構成を必要としない。このため、バタフライ演算器１４及び１５は、バタフライ演算器１１〜１３と同様の回路構成でも、また必要とする回路のみで構成しても、どちらでも良い。
【００１３】
記憶部２２には、外部から時系列に入力される入力信号ｘ（k）、すなわち｛ｘ（0），ｘ（1），ｘ（2），…，ｘ（k-1），ｘ（k）｝の信号列が、セレクタ２４から出力される入力アドレス（下記に説明）に従い、対応する入力アドレス、例えば初段のバタフライ演算器１１においては連続したアドレスに順次書き込み、次段以降のバタフライ演算器１２〜１５においては前段の出力アドレスと同一のアドレスに入力される。
入力アドレス生成部２３は、記憶部２２に対して、信号を順次書き込むアドレスを生成する。このアドレス生成部２３は、ＦＦＴ長６４に対応する入力アドレスを生成する入力アドレス生成６４部２３Ａと，ＦＦＴ長２５６に対応する入力アドレスを生成する入力アドレス生成部２５６部２３Ｂと、ＦＦＴ長１０２４に対応する入力アドレスを生成する入力アドレス生成１０２４部２３Ｃとから構成されている。
セレクタ２４は、入力アドレス生成部２３より入力される入力アドレスから、入力されるＦＦＴ長情報に従い、ＦＦＴ長に対応する入力アドレスを選択し、入力アドレスとして、記憶部２２へ出力する。
【００１４】
上記記憶部２２は、読み出しと書き込みとが同一のタイミングで行える、例えばデュアルポートＲＡＭ（ランダムアクセスメモリ）で構成され、かつ記憶領域が２つに分割され、ダブルバッファ構造として入力信号ｘ（k）（すなわち入力される信号）を書き込むための記憶領域が第１及び第２の記憶領域として２つある。したがって、本実施形態において、記憶部２２は、１０２４のＦＦＴ長に対応した構成となっているため、２０４８個の信号に対応する容量を有している。
【００１５】
また、記憶部２２は、例えば、図３に示すように、上述したアドレス数が２０４８のメモリ空間を有している。このメモリ空間におけるメモリマップとしては、ＦＦＴ長が６４の場合、使用するアドレス空間がアドレス数が６４のため、書き込み及び読み出しを交互に交代させるアドレス空間としてはアドレス数が１２８となる。記憶部２２においては、この１２８を示すアドレスの最上位ビットが「０」のアドレス空間（第１の記憶領域）と、最上位ビットが「１」のアドレス空間（第２の記憶領域）とで、ＦＦＴ長６４に対する２つのアドレス空間を構成することになる。
【００１６】
また、同様に、記憶部２２において、このメモリ空間におけるメモリマップとしては、ＦＦＴ長が２５６の場合、使用するアドレス空間がアドレス数が２５６のため、書き込み及び読み出しを交互に交代させる（切り替える）アドレス空間としてはアドレス数が５１２となる。記憶部２２においては、この５１２を示すアドレスの最上位ビットが「０」のアドレス空間（第１の記憶領域）と、最上位ビットが「１」のアドレス空間（第２の記憶領域）とで、ＦＦＴ長２５６に対する２つのアドレス空間を構成することになる。
【００１７】
また、同様に、記憶部２２において、このメモリ空間におけるメモリマップとしては、ＦＦＴ長が１０２４の場合、使用するアドレス空間がアドレス数が１０２４のため、書き込み及び読み出しを交互に交代させるアドレス空間としてはアドレス数が２０４８となる。記憶部２２においては、この２０４８を示すアドレスの最上位ビットが「０」のアドレス空間（第１の記憶領域）と、最上位ビットが「１」のアドレス空間（第２の記憶領域）とで、ＦＦＴ長１０２４に対する２つのアドレス空間を構成することになる。
アドレス生成部２３は、入力するＦＦＴ長に対応した各入力アドレス生成部が、上述した記憶部２２のアドレス空間に対応する記憶部２２のアドレスを生成する。
【００１８】
出力アドレス生成部２５は、複素複素乗算部２６が記憶部２２から、信号を順次読み出すアドレスを生成する。この出力アドレス生成部２５は、ＦＦＴ長６４に対応する出力アドレスを生成する出力アドレス生成６４部２５Ａと，ＦＦＴ長２５６に対応する出力アドレスを生成する出力アドレス生成部２５６部２５Ｂと、ＦＦＴ長１０２４に対応する出力アドレスを生成する出力アドレス生成１０２４部２５Ｃとから構成されている。
また、出力アドレス生成部２５は、上述したＦＦＴ長及び、各バタフライ演算器の上記段数により、読み出すための出力アドレスが異なるため、それぞれの場合に対応した出力アドレスを生成する。
【００１９】
上記出力アドレス生成６４部２５Ａは、ＦＦＴ長が６４個の場合において、後述ように複素加減算部２７において、複素加減算部２７において実行される複素加減算を行う組み合わせの順に、信号のデータが記憶部２２から読み出されるように、記憶されている信号のデータを読み出す順に、対応するアドレスとして出力アドレスを順次生成する。すなわち、入力アドレス生成部２３，出力アドレス生成部２５及び記憶部２２は、信号順変換部を構成し、信号が入力された順番のアドレスに対し、後に複素加減算部２７にて加減演算を行う信号の組合せ（基数４なので組合せの信号または中間データは４個）が連続して複素複素乗算部２６に出力されるように読み出す出力アドレスに変換する。
また、同様に、出力アドレス生成２５６部２５Ｂ及び出力アドレス１０２４部２５Ｃ各々は、ＦＦＴ長が２５６個及び１０２４個それぞれの場合において、後述ように複素加減算部２７において、複素加減算部２７において実行される複素加減算を行う信号の組み合わせの順に、信号のデータが記憶部２２から読み出されるように、記憶されている信号のデータを読み出す順に、対応するアドレスとして出力アドレスを順次生成する。
【００２０】
例えば、基数４で、ＦＦＴ長が２５６の場合を例にとり説明すると、本実施形態における（ＦＦＴ演算のアルゴリズによって以下の式は異なる）基数４のバタフライ演算が、信号のデータとして、ｘ（k）が０≦k≦２５５の範囲で入力されてくる。
ＤＦＴ（離散フーリエ変換）として、
Ｘ（ｎ）＝Σｘ（k）ＷＮｎｋ                            …（１）
とする（１／Ｎを省略）。
上述した式において、信号番号ｎと周波数を示すインデックスｋとは以下のように示される。
n＝６４n３＋１６n２＋４n１＋n０  ；（n０，n１，n２，n３＝０，１，２，３）
k＝６４k３＋１６k２＋４k１＋k０  ；（k０，k１，k２，k３＝０，１，２，３）…（２）
【００２１】
ＤＦＴは、
Ｘ（n３，n２，n１，n０）
＝ΣΣΣΣｘ（k３，k２，k１，k０）ＷＮｎ（６４ｋ３＋１６ｋ２＋４ｋ１＋ｋ０）   …（３）
と示される。このk３，k２，k１，k０の各々和において、第１段目のバタフライ演算器１１にてｋ３についての和を求め、第２段目のバタフライ演算器１２にてｋ２についての和を求め、第３段目のバタフライ演算器１３にてｋ１についての和を求め、第４段目のバタフライ演算器１４にてｋ０についての和を求めることとなる。
この場合には、上記（３）式が以下の（４）〜（７）を順番に、対応する各バタフライ演算器において演算することにより、バタフライ演算の最終結果であるＤＦＴとしてＸ（n３，n２，n１，n０）が求められる。
【００２２】
ｘ１（n０，k２，k１，k０）＝Σｘ（k３，k２，k１，k０）Ｗ４ｎ０ｋ３                   …（４）
ｘ２（n０，n１，k１，k０）＝Σｘ１（n０，k２，k１，k０）ＷＮ１６ｎ０ｋ２Ｗ４ｎ１ｋ２         …（５）
ｘ３（n０，n１，n２，k０）＝Σｘ２（n０，n１，k１，k０）ＷＮ４（４ｎ１＋ｎ０）ｋ１Ｗ４ｎ２ｋ１       …（６）
ｘ４（n０，n１，n２，n３）＝Σｘ３（n０，n１，n２，k０）ＷＮ（１６ｎ２＋４ｎ１＋ｎ０）ｋ０Ｗ４ｎ３ｋ０…（７）
ここで、ｘ４（n０，n１，n２，n３）がＸ（n３，n２，n１，n０）である。
（４）式が１段目のバタフライ演算器１１の出力であり、（５）式が２段目のバタフライ演算器１２の出力であり、（６）式が３段目のバタフライ演算器１３の出力であり、（７）式が４段目のバタフライ演算器１４の出力、すなわちＦＦＴ長２５６におけるＤＦＴである。また、上記ｘ１，ｘ２，ｘ３が、ＤＦＴ演算における各バタフライ演算器での中間データとなる。
【００２３】
この場合、バタフライ演算器１１は、（４）式における、入力される信号への係数「Ｗ４ｎ０ｋ３」の複素乗算、すなわち「＋１」，「−１」，「＋ｊ」または「−ｊ」の複素乗算については、複素加減算部２７において加算するか減算するかにより設定されているため、特に複素乗算の処理は行われない。複素加減算部２７においては、係数「Ｗ４ｎ０ｋ３」におけるｎ０が０，１，２，３の４つの場合に対応した４つの減算または加算が行われ、４つの中間データが出力される。
同様に、バタフライ演算器１２は、（５）式における、入力される信号（中間データ）への係数「Ｗ４ｎ１ｋ２」の複素乗算、すなわち「＋１」，「−１」，「＋ｊ」または「−ｊ」の複素乗算については、複素加減算部２７において加算するか減算するかにより設定されているため、特に複素乗算の処理は行われない。複素加減算部２７においては、係数「Ｗ４ｎ１ｋ２」におけるｎ１が０，１，２，３の４つの場合に対応した４つの減算または加算が行われ、４つの中間データが出力される。
【００２４】
また、バタフライ演算器１３は、（６）式における、入力される信号（中間データ）への係数「Ｗ４ｎ２ｋ１」の複素乗算、すなわち「＋１」，「−１」，「＋ｊ」または「−ｊ」の複素乗算については、複素加減算部２７において加算するか減算するかにより設定されているため、特に複素乗算の処理は行われない。複素加減算部２７においては、係数「Ｗ４ｎ２ｋ１」におけるｎ２が０，１，２，３の４つの場合に対応した４つの減算または加算が行われ、４つの中間データが出力される。
また、バタフライ演算器１２は、（７）式における、入力される信号（中間データ）への係数「Ｗ４ｎ３ｋ０」の複素乗算、すなわち「＋１」，「−１」，「＋ｊ」または「−ｊ」の複素乗算については、複素加減算部２７において加算するか減算するかにより設定されているため、特に複素乗算の処理は行われない。複素加減算部２７においては、係数「Ｗ４ｎ３ｋ０」におけるｎ３が０，１，２，３の４つの場合に対応した４つの減算または加算が行われ、４つの中間データが出力される。
【００２５】
バタフライ演算器１１に対しては、信号ｘ（k）が、すでに述べたようにｋ＝０〜２５５まで順番に入力され、記憶部２２の連続したアドレスに順に書き込まれる。このため、記憶部２２からの読み出しとして、以下のような出力アドレスが必要となる。
上記（４）式において、k３についての和を求めているため、複素加減算部２７においては、信号ｘ（k３，k２，k１，k０）の組として、初めの組がｘ（k３，０，０，０）となり、ｋ３を０，１，２，３と変化させた信号ｘ（０），ｘ（６４），ｘ（１２８），ｘ（１９２）の４つを組として所定の複素加減算を行う。
次に、ｘ（k３，０，０，１）として、ｋ３を０，１，２，３と変化させた信号ｘ（k）が４つの信号の組の信号列として順次読み出される必要がある。
したがって、バタフライ演算器１１における出力アドレス生成２５６部２５Ｂは、記憶部２２から信号列を読み出す順番として、ｋの数値を表現した（２）式における４進数の最も高い桁（６４）、すなわちこのバタフライ演算器１１にて和をとる番号k３の桁を基準とし、他の桁を固定し、基準とした桁を０，１，２，３と変化させて、順次出力アドレスを生成することとなる。
【００２６】
以下、バラフライ演算部１２、１３，１４も同様に、以下の様に求められる。
同様に、（５）式において、k２についての和を求めているため、複素加減算部２７（バタフライ演算器１２）においては、信号ｘ１（n０，k２，k１，k０）の組として、初めの組がｘ１（０，k２，０，０）となり、ｋ２を０，１，２，３と変化させた信号ｘ１（０），ｘ１（１６），ｘ１（３２），ｘ１（４８）の４つを組として所定の複素加減算を行う。
次に、ｘ１（０，k２，０，１）として、ｋ２を０，１，２，３と変化させた信号ｘ（k）が４つの信号の組の信号列として、順次読み出される必要がある。
したがって、バタフライ演算器１２における出力アドレス生成２５６部２５Ｂは、記憶部２２から信号列を読み出す順番として、ｋの数値を表現した（２）式における４進数の２番目に高い桁（１６）、すなわちこのバタフライ演算器１２にて和をとる番号k２を基準とし、他の桁を固定し、基準とした桁を０，１，２，３と変化させて順次出力アドレスを生成することとなる。
【００２７】
また、（６）式において、k１についての和を求めているため、複素加減算部２７（バタフライ演算器１３）では、信号ｘ２（n０，n１，k１，k０）の組として、初めの組がｘ２（０，０，k１，０）となり、ｋ１を０，１，２，３と変化させた信号ｘ２（０），ｘ２（４），ｘ２（８），ｘ２（１２）の４つを組として所定の複素加減算を行う。
このため、ｘ２（０，０，k１，１）として、ｋ１を０，１，２，３と変化させた信号ｘ（k）が４つの信号の組の信号列として、順次読み出される必要がある。
したがって、バタフライ演算器１３における出力アドレス生成２５６部２５Ｂは、記憶部２２から信号列を読み出す順番として、ｋの数値を表現した（２）式における４進数の３番目に高い桁（４）、すなわちこのバタフライ演算器１３にて和をとる番号k１を基準とし、他の桁を固定し、基準とした桁を０，１，２，３と変化させて順次出力アドレスを生成することとなる。
【００２８】
同様に、（７）式において、k０についての和を求めているため、複素加減算部２７（バタフライ演算器１４）では、信号ｘ３（n０，n１，n２，k０）の組として、初めの組がｘ３（０，０，０，k０）となり、ｋ０を０，１，２，３と変化させた信号ｘ３（０），ｘ３（１），ｘ３（２），ｘ３（３）の４つを組として所定の複素加減算を行う。
次に、ｘ３（０，０，１，k０）として、ｋ０を０，１，２，３と変化させた信号ｘ（k）が４つの信号の組を信号列として、順次読み出される必要がある。
したがって、バタフライ演算器１４における出力アドレス生成２５６部２５Ｂは、記憶部２２から信号列を読み出す順番として、ｋの数値を表現した（２）式における４進数の最も低い桁（１）、すなわちこのバタフライ演算器１３にて和をとる番号k０を基準とし、他の桁を固定し、基準とした桁を０，１，２，３と変化させて順次出力アドレスを生成することとなる。
【００２９】
すなわち、出力アドレス生成部２５の各ＦＦＴ長に対応したアドレス生成部は、対応する各バタフライ演算器における和を求める桁を基準とし、この基準となる桁以外の桁を順次変化させ、この変化させた値毎に、基準となる桁をｎ進数（基数に対応）で変化、例えば４進数であれば、０，１，２，３と変化させ、複素加減算部２７で用いる基数に対応する数の信号列に対する出力アドレスを生成する。
また、出力アドレス生成部２５の各アドレス生成部は、基準となる桁以外の桁の変化において、演算のアルゴリズムにより異なるが、例えば、より桁数の小さい桁から順に変化させることとする。
【００３０】
上述したことから、各バタフライ演算器における出力アドレス部２５における出力アドレス生成６４部２５Ａは、ＦＦＴ長６４に対応しているため、（２）式の表現が以下の式のようになる。
n＝１６n２＋４n１＋n０  ；（n０，n１，n２＝０，１，２，３）
k＝１６k２＋４k１＋k０  ；（k０，k１，k２＝０，１，２，３）
【００３１】
同様に、各バタフライ演算器における出力アドレス部２５における出力アドレス生成１０２４部２５Ｃは、ＦＦＴ長１０２４に対応しているため、（２）式の表現が以下の式のようになる。
n＝２５６n４＋６４n３＋１６n２＋４n１＋n０  ；（n０，n１，n２，n３，n４＝０，１，２，３）
k＝２５６n４＋６４k３＋１６k２＋４k１＋k０  ；（k０，k１，k２，k３，k４＝０，１，２，３）
【００３２】
上述したように、（２）式の表現が、ＦＦＴ長が異なると、読み出される信号のデータの組合せ（信号が入力されて記憶部２２に記憶された順番から、記憶部２２から複素複素乗算部２６に対して読み出す順番の変更）も異なってくるため、出力アドレスの生成は、ＦＦＴ長（すなわちＦＦＴ長情報）に対応して、各出力アドレス生成部（出力アドレス生成６４部２５Ａ，出力アドレス生成２５６部２５Ｂ，出力アドレス生成１０２４部２５Ｃ）により、基数とＦＦＴ長とから決まる読み出しアドレスの演算式により、順次出力アドレスの演算が行われる。
【００３３】
また、各バタフライ演算器において、（２）式における和をとる桁を最小桁とし、以降は（２）式の桁数の低い方から順に桁上がりをするカウンタを形成して、各出力アドレス生成回路２５を構成してもよい。
また、上記各出力アドレス部は、対応するＦＦＴ長に対応して、上述した組で信号のデータを読み出す出力アドレスが順番に記憶されたＲＯＭ（読み出し専用メモリ）から、時系列に順番にこのＲＯＭのアドレスをアクセスして、記憶された出力アドレスを読み出し、出力アドレスを生成する構成としてもよい。
【００３４】
セレクタ２７は、入力されるＦＦＴ長に従い、ＦＦＴ長に対応する出力アドレスを選択し、出力アドレスとして、記憶部２２へ出力する。
複素複素乗算部２５は、記憶部２２から時系列に入力される信号のデータｘ（k）に対して、ＦＦＴ回転因子テーブル部２７（請求項における複素係数記憶部に対応）から読み出される係数、例えば、ＦＦＴ長が２５６の場合、バタフライ演算器１１においては「１」、バタフライ演算器１２においては「ＷＮ１６ｎ０ｋ２」、バタフライ演算器１３においては「ＷＮ４（４ｎ１＋ｎ０）ｋ１」、バタフライ演算器１４においてはＷＮ（１６ｎ２＋４ｎ１＋ｎ０）ｋ０を順次複素乗算して、複素乗算結果を出力する。
複素係数（または複素回転因子）としての上記各係数各々は、複素乗算する対象の信号毎（すなわち、ＦＦＴ長及びバタフライ演算器の段数に対応して）に異なるため、図４に示すように、ＦＦＴ回転因子テーブル部２７には、ＦＦＴ長及びバタフライ演算器の段数各々に対応したテーブルを設けておく。このテーブルはＲＯＭに予め記憶させるようにして形成しても良いし、ＲＡＭに演算を開始させる前に、外部から読み込んでおくように形成してもよい。
【００３５】
ＦＦＴ回転因子テーブル部２７は、図４に示すように、ＦＦＴ長毎に対応した係数の記憶領域から構成されており、ＦＦＴ長が１０２４個の場合に使用する係数が記憶されている領域Ｄ６４と、ＦＦＴ長が２５６個の場合に使用する係数が記憶されている領域Ｄ２５６と、ＦＦＴ長が１０２４個の場合に使用する係数が記憶されている領域Ｄ１０２４とから構成されている。
アドレス生成部２８は、領域Ｄ６４に記憶されている係数を順番に読み出す因子アドレスを生成する因子アドレス生成６４部２８Ａと、領域Ｄ２５６に記憶されている係数を順番に読み出す因子アドレスを生成する因子アドレス生成２５６部２８Ｂと、領域Ｄ１０２４に記憶されている係数を順番に読み出す因子アドレスを生成する因子アドレス生成１０２４部２８Ｃとから構成されている。
【００３６】
アドレス生成部２８は、ＦＦＴ長に応じて記憶部２２から順次読み出される信号のデータに対して複素乗算する係数を、信号の読み出しに同期して読み出すため、ＦＦＴ回転因子テーブル２７から係数を読み出す因子アドレス順次生成する。
セレクタ２９は、入力されるＦＦＴ長情報により、因子アドレス生成６４部２８Ａ，因子アドレス生成２５６部２８Ｂ及び因子アドレス生成１０２４部２８Ｃ各々が生成して出力する因子アドレスのいずれかを選択し、選択した因子アドレスをＦＦＴ回転因子テーブル２７へ出力する。
【００３７】
複素複素乗算部２６は、記憶部２２から時系列に入力される信号のデータ各々に対し、ＦＦＴ回転因子テーブル２７から順番に読み出される各係数を、順次複素乗算してシリアル／パラレル変換部３０へ出力する。
パラレル／シリアル変換部３０は、係数が複素乗算された、４つの信号のデータの組がシリアルに（直列に）、出力アドレス生成部２５から出力されるアドレスに従い、記憶部２２から読み出された順に、例えば、｛ｘ（０），ｘ（６４），ｘ（１２８），ｘ（１９２）｝、｛ｘ（１），ｘ（６５），ｘ（１２９），ｘ（１９３）｝、…の順に入力された時点で、一旦この組の信号のデータを記憶し、これら信号のデータをパラレルに（並列に）、複素加減算部２７へ出力する。
【００３８】
また、複素加減算部２７は、各バタフライ演算器毎に、対応する上記（４）式から（７）式の加減演算を行い、得られた演算結果をパラレル／シリアル変換器３１へ並列に出力する。例えば、バタフライ演算器１１における複素加減算部２７は、入力される｛ｘ（０），ｘ（６４），ｘ（１２８），ｘ（１９２）｝の信号の組に対して所定の複素加減算を行い、演算結果として、中間データ｛ｘ１（０），ｘ１（６４），ｘ１（１２８），ｘ１（１９２）｝を並列に出力する。
パラレル／シリアル変換器３１は、並列に入力される演算結果｛ｘ１（０），ｘ１（６４），ｘ１（１２８），ｘ１（１９２）｝の並びを、パラレルからシリアルに変換して、ｘ１（０），ｘ１（６４），ｘ１（１２８），ｘ１（１９８）の順で出力する。
【００３９】
タイミング生成部３２は、記憶部２２に信号のデータが書き込まれるタイミング、入力アドレス生成部２３が入力アドレスを生成して出力するタイミング、出力アドレス生成部２５が出力アドレスを生成して出力するタイミング、セレクタ２４，２８，２９各々が選択処理を行うタイミング、複素複素乗算部２６が複素乗算するタイミング、シリアル／パラレル変換部３０がシリアル・パラレル変換処理を行うタイミング、複素加減算部２７が複素加減算を行うタイミング及び、パラレル／シリアル変換部２７が複素加減算部２７の出力をパラレル・シリアル変換を行うタイミング各々を制御する動作クロックを、上記各部に対して出力し、ＦＦＴ長情報の示すＦＦＴ長に応じて各部の動作を制御する。
すなわち、ＦＦＴ長が６４の場合、６４個のデータが入力される毎に、またＦＦＴ長が２５６の場合、２５６個のデータが入力される毎に、またＦＦＴ長が１０２４の場合、１０２４個のデータが入力される毎に、下記に説明するＦＦＴ演算を周期的に行う。
また、記憶部２２におけるダブルバッファとしての、第１及び第２の記憶領域は上記周期毎に、書き込みが行われる領域と、読み出しが行われる領域とに、セレクタ２４及びセレクタ２８それぞれにより順次切り替えて使用される。
【００４０】
次に、図１及び図２を参照して、本願発明のＦＦＴ演算回路１の動作の説明を行う。ここで、入力されるＦＦＴ長が２５６である場合を説明する。
ＦＦＴ演算回路１には、入力信号ｘ（k），０≦ｋ≦２５５として、すなわち｛ｘ（0），ｘ（1），ｘ（2），ｘ（3），…，ｘ（254），ｘ（255）｝の信号列が入力される。また、ＦＦＴ演算回路１には、ＦＦＴ長が２５６であることを示すＦＦＴ長情報が入力される。
【００４１】
上記信号列は、直列にバタフライ演算器１１へ入力される。バタフライ演算器１１において、ＦＦＴ長が２５６個であることを示すＦＦＴ長情報がセレクタ２４へ入力されているため、セレクタ２４は入力アドレス生成２５６部２３Ｂから入力される入力アドレスを記憶部２２に対し出力する。
そして、記憶部２２には、入力される上記入力アドレスに対応して、最上位ビットとして「０」を加えたアドレス（第１の記憶領域）に、順次、入力される信号列｛ｘ（0），ｘ（1），ｘ（2），ｘ（3），…，ｘ（254），ｘ（255）｝の信号を、記憶部２２の第１の記憶領域に対して連続した入力アドレスによって書き込む。
【００４２】
ここで、入力アドレス生成２５６部２３Ｂは、０〜２５５番目までの信号列に対する入力アドレスの生成及び出力を終了すると、次のＦＦＴ演算の周期における０〜２５５番目までの信号列に対する入力アドレスの出力を開始する。
これにより、記憶部２２には、次に入力される信号列を、入力アドレスに対して、最上位ビットとして「１」を加えたアドレス（第２の記憶領域）に、順次、入力される信号列｛ｘ（0），ｘ（1），ｘ（2），ｘ（3），…，ｘ（254），ｘ（255）｝の信号の書き込み処理が開始される。
【００４３】
また、ＦＦＴ長が２５６個であることを示すＦＦＴ長情報がセレクタ２８へ入力されているため、セレクタ２８は出力アドレス生成２５６部２８Ｂから入力される出力アドレスを記憶部２２に対し順次出力、すなわち入力アドレスに対して読み出しの順番が変換された出力アドレスを順次出力する。
このとき、セレクタ２８は、出力アドレスの最上位ビットが、ＦＦＴ長に対応した２５６個の信号に対応する出力アドレスの出力を終了する毎に、出力アドレスの最上位ビットを「０」と「１」との間で順番に切り替えるように構成されている。このとき、出力アドレス生成２５６部２８Ｂが出力する出力アドレスに対し、最上位ビットとして「０」を加えたアドレスを、順次、記憶部２２に対して出力する。
【００４４】
ここで、出力アドレス生成２５６部２８Ｂは、加減演算で行う演算処理に対応した信号の順番として、上記（４）式の演算が複素加減算部２７で行われるとした場合、セレクタ２８は、出力アドレス生成２５６部２８Ｂが出力する出力アドレスを順に時系列に出力する。この出力アドレスが入力されることにより、記憶部２２から｛ｘ（0），ｘ（64），ｘ（128），ｘ（192），ｘ（1），ｘ（65），ｘ（129），ｘ（193）…，ｘ（63），ｘ（127），ｘ（191），ｘ（255）｝の信号が順に読み出されて、複素演算部２６へ入力される。
このとき、ＦＦＴ長が２５６個であることを示すＦＦＴ長情報がセレクタ２９へ入力されているため、セレクタ２９は因子アドレス生成２５６部２９Ｂから入力される因子アドレスをＦＦＴ回転因子テーブル２７へ順次出力する。
【００４５】
これにより、ＦＦＴ回転因子テーブル２７は、｛ｘ（0），ｘ（64），ｘ（128），ｘ（192），ｘ（1），ｘ（65），ｘ（129），ｘ（193）…，ｘ（63），ｘ（127），ｘ（191），ｘ（255）｝の信号各々に複素乗算する２５６個の係数を順次、因子アドレス生成２５６部２８Ａの出力するアドレスに従って出力する。
しかしながら、（４）式から判るように、本実施形態の場合、バタフライ演算器１１においては、各信号に複素乗算する係数は整数「１」（複素数の実数部分のみ）である。しかしながら、演算アルゴリズムによっては、対応する係数が複素乗算されるため、対応した係数がＦＦＴ回転因子テーブルから読み出され、複素複素乗算部２６において対応する信号に複素乗算される。
したがって、複素演算部２６は、｛ｘ（0），ｘ（64），ｘ（128），ｘ（192），…，ｘ（63），ｘ（127），ｘ（191），ｘ（255）｝各々に、それぞれ係数「１」を複素乗算し、｛ｘ（0），ｘ（64），ｘ（128），ｘ（192），…，ｘ（63），ｘ（127），ｘ（191），ｘ（255）｝として、順次、シリアル／パラレル変換部３０へ出力する。
【００４６】
上記出力される演算結果に対して、シリアル／パラレル変換部３０は、入力される係数が複素乗算された信号が４個ずつの組、例えば｛ｘ（0），ｘ（64），ｘ（128），ｘ（192）｝が直列に入力された時点において、これらの信号を並列に並べ直して、複素加減算部２７へ出力する。
これにより、複素加減算部２７は、上記｛ｘ（0），ｘ（64），ｘ（128），ｘ（192）｝の各データを用い、上記（４）式における係数「Ｗ４ｎ０ｋ３」に対応した加減演算を行い、演算結果として｛ｘ１（0），ｘ１（64），ｘ１（128），ｘ１（192）｝を並列に出力する。
【００４７】
そして、パラレル／シリアル変換部３１は、これら複素加減算結果｛ｘ１（0），ｘ１（６４），ｘ１（128），ｘ１（192）｝を、ｘ１（0）→ｘ１（64）→ｘ１（128）→ｘ１（192）の順番にて直列に変換して、シリアル出力とする。そして、基数４で、かつＦＦＴ長が２５６個であるため、計算単位として６４つの組合せに分割されるため、上述した加減演算を６４回行い、４つの信号データの演算から求められた４つの中間データの組み合わせとして、６４組、すなわち２５６個の中間データを出力することで、ＦＦＴ演算の１つの周期（２５６個の信号に対するＦＦＴ処理）を終了する。
【００４８】
このバタフライ演算器１１からのパラレル／シリアル変換されたシリアル出力は、次段のバタフライ演算器１２の入力信号となり、２５６個の信号に対するＦＦＴ演算における１段目のステージによる中間データである。
バタフライ演算器１１は、上述したバタフライ演算の処理を、記憶部２２のダブルバッファにおいて、第１及び第２の記憶領域のいずれか一方から信号のデータを読み出してバタフライ演算を行っている際、他方に新たな信号列を書き込んでいる。
【００４９】
次に、バタフライ演算器１２は、バタフライ演算器１１から入力される中間データ列｛ｘ１（0），ｘ１（1），ｘ１（2），ｘ１（3），…，ｘ１（253），ｘ１（254），ｘ１（255）｝、すなわち中間データｘ１（k）を、入力データとして入力する。ここで、入力アドレス生成２５６部２５Ｂは、前段の出力アドレスと同一の入力アドレスを出力する。入力される中間データは、この入力アドレスに従い、記憶部２２へ書き込まれる。そして入力後、バタフライ演算器１２は、バタフライ演算器１１と同様なバタフライ演算の処理を行う。以下の処理は、特に説明が無い限り、バタフライ演算器１２におけるバタフライ演算の処理について説明する。この中間データｘ１（n０，ｋ２，k１，k０）において、中間データの番号ｋは、
ｋ＝６４ｎ０＋１６ｋ２＋４ｋ１＋ｋ０    ；（k０，k１，k２，n０＝０，１，２，３）
で決定される。
【００５０】
すなわち、バタフライ演算器１２においても、バタフライ演算器１１と同様に、ＦＦＴ長が２５６個であることを示すＦＦＴ長情報がセレクタ２４へ入力されているため、セレクタ２４は入力アドレス生成２５６部２３Ｂから入力される入力アドレスを記憶部２２に対し出力する。これにより、記憶部２２には、上記入力アドレスに従い、バタフライ演算器１１から入力される中間データが、前段の出力アドレスと同一の値の入力アドレスに順番に書き込まれる（バタフライ演算器１１と同様に、記憶部２２は第１及び第２の記憶領域からなるダブルバッファ構成となっており、データの書き込み読み出しの処理も同様である）。
【００５１】
バタフライ演算器１２において、ＦＦＴ長が２５６個であることを示すＦＦＴ長情報がセレクタ２５へ入力されているため、セレクタ２５は出力アドレス生成２５６部２５Ｂから入力される入力アドレスを記憶部２２に対し出力する。
同様に、ＦＦＴ長が２５６個であることを示すＦＦＴ長情報がセレクタ２８へ入力されているため、セレクタ２８は因子アドレス生成２５６部２８Ｂから入力される因子アドレスをＦＦＴ回転因子テーブル２７に対し出力する。
【００５２】
このとき、出力アドレス生成２５６部２５Ｂは、複素加減算部２７により、（５）式の演算が行われるため、すなわち１６の位の桁ｋ２についての和を求めるため、ｋ２以外のｎ０，ｋ１，ｋ０を固定し、ｘ１（０，ｋ２，０、０）としてｋ２を０，１，２，３で変化させ、中間データｘ１（0），ｘ１（16），ｘ１（32），ｘ１（48）を読み出すアドレスを生成し、次にｘ１（０，ｋ２，０、１）としてｋ２を０，１，２，３で変化させ、ｘ１（１），ｘ１（17），ｘ１（33），ｘ１（49）として、順次出力アドレスを生成する。
これにより、記憶部２２に書き込まれた中間データが、出力アドレス生成２５６部２５Ｂの出力する出力アドレスにより、読み出されて複素複素乗算部２６へ出力される。
【００５３】
すなわち、上記出力アドレス生成２５６部２５Ｂは、バタフライ演算器１１から入力される中間データｘ１（ｋ）を、複素加減算部２７にて、係数「Ｗ４ｎ１ｋ２」に対応して複素加減算する際の、中間データの組となるように、記憶部２２（例えば、第１の記憶領域）に記憶されている入力順に対して並べ替える出力アドレスを生成して出力する。
同様に、ＦＦＴ回転因子テーブル２７は、因子アドレス生成２５６部２８Ｂから出力される因子アドレスに対応した回転因子である係数「ＷＮ１６ｎ０ｋ２」を出力する。
ここで、バタフライ演算器１２のＦＦＴ回転因子テーブル２７は、各ＦＦＴ長毎に対応したテーブルを有している。これらのテーブルには、第２のステージであるバタフライ演算器１２において、記憶部２２から出力される中間データｘ１（k）各々に複素乗算する係数が、ＦＦＴ長毎に記憶されている。
【００５４】
次に、複素複素乗算部２６は、バタフライ演算器１１で説明したと同様に、記憶部２２から出力される中間データ各々に、ＦＦＴ回転因子テーブル２７から出力される係数を順次複素乗算して、シリアル／パラレル変換部３０へ出力する。
この後の、シリアル・パラレル変換部３０，複素加減算部２７及びパラレル／シリアル変換部３１における処理は、バタフライ演算器１１の場合と同様のため、説明を省略する。
そして、バタフライ演算器１２は、第２ステージのバタフライ演算の結果として、中間データ列ｘ２（k），０≦ｋ≦２５６を出力する。
【００５５】
次に、バタフライ演算器１３は、バタフライ演算器１２から入力される中間データ列｛ｘ２（0），ｘ２（1），ｘ２（2），ｘ２（3），…，ｘ２（253），ｘ２（254），ｘ２（255）｝、すなわち中間データｘ２（k）を、入力データとして入力する。ここで、入力アドレス生成２５６部２５Ｂは、前段の出力アドレスと同一の入力アドレスを出力する。入力される中間データは、この入力アドレスに従い、記憶部２２へ書き込まれる。そして入力後、バタフライ演算器１３は、バタフライ演算器１２と同様なバタフライ演算の処理を行う。以下の処理は、特に説明が無い限り、バタフライ演算器１３におけるバタフライ演算の処理について説明する。この中間データｘ２（n０，ｎ１，k１，k０）において、中間データの番号ｋは、
ｋ＝６４ｎ０＋１６ｎ１＋４ｋ１＋ｋ０    ；（k０，k１，ｎ１，n０＝０，１，２，３）
で決定される。
【００５６】
すなわち、バタフライ演算器１３においても、バタフライ演算器１１及び１２と同様に、ＦＦＴ長が２５６個であることを示すＦＦＴ長情報がセレクタ２４へ入力されているため、セレクタ２４は入力アドレス生成２５６部２３Ｂから入力される入力アドレスを記憶部２２に対し出力する。これにより、記憶部２２には、上記入力アドレスに従い、バタフライ演算器１２から入力される中間データを、前段の出力アドレスと同様の値の入力アドレスに順番に書き込まれる（バタフライ演算器１１及び１２と同様に、記憶部２２は第１及び第２の記憶領域からなるダブルバッファ構成となっており、データの書き込み読み出しの処理も同様である）。
【００５７】
バタフライ演算器１３において、ＦＦＴ長が２５６個であることを示すＦＦＴ長情報がセレクタ２５へ入力されているため、セレクタ２５は出力アドレス生成２５６部２５Ｂから入力される入力アドレスを記憶部２２に対し出力する。
同様に、ＦＦＴ長が２５６個であることを示すＦＦＴ長情報がセレクタ２８へ入力されているため、セレクタ２８は因子アドレス生成２５６部２８Ｂから入力される因子アドレスをＦＦＴ回転因子テーブル２７に対し出力する。
【００５８】
このとき、出力アドレス生成２５６部２５Ｂは、複素加減算部２７により、（６）式の演算が行われるため、すなわち４の位の桁ｋ１についての和を求めるため、ｋ１以外のｎ０，ｎ１，ｋ０を固定し、ｘ２（０，０，ｋ１，０）としてｋ１を０，１，２，３で変化させ、中間データｘ２（0），ｘ２（4），ｘ２（8），ｘ２（12）を読み出すアドレスを生成し、次にｘ３（０，０，ｋ１，１）としてｋ１を０，１，２，３で変化させ、ｘ２（１），ｘ２（5），ｘ２（9），ｘ２（13）として、順次出力アドレスを生成する。
これにより、記憶部２２に書き込まれた中間データが、出力アドレス生成２５６部２５Ｂの出力する出力アドレスにより、読み出されて複素複素乗算部２６へ出力される。
【００５９】
すなわち、上記出力アドレス生成２５６部２５Ｂは、バタフライ演算器１２から入力される中間データｘ２（ｋ）を、複素加減算部２７にて、係数「Ｗ４ｎ２ｋ１」に対応して複素加減算する際の、中間データの組となるように、記憶部２２（例えば、第１の記憶領域）に記憶されている入力順に対して並べ替える出力アドレスを生成して出力する。
同様に、ＦＦＴ回転因子テーブル２７は、因子アドレス生成２５６部２８Ｂから出力される因子アドレスに対応した回転因子である係数「ＷＮ４（４ｎ１＋ｎ０）ｋ１」を出力する。
ここで、バタフライ演算器１３のＦＦＴ回転因子テーブル２７は、各ＦＦＴ長毎に対応したテーブルを有している。これらのテーブルには、第３のステージであるバタフライ演算器１３において、記憶部２２から出力される中間データｘ２（k）各々に複素乗算する係数が、ＦＦＴ長毎に記憶されている。
【００６０】
次に、複素複素乗算部２６は、バタフライ演算器１２で説明したと同様に、記憶部２２から出力される中間データ各々に、ＦＦＴ回転因子テーブル２７から出力される係数を順次複素乗算して、シリアル／パラレル変換部３０へ出力する。
この後の、シリアル・パラレル変換部３０，複素加減算部２７及びパラレル／シリアル変換部３１における処理は、バタフライ演算器１１の場合と同様のため、説明を省略する。
そして、バタフライ演算器１３は、第３ステージのバタフライ演算の結果として、中間データ列ｘ２（k），０≦ｋ≦２５６を出力する。
上述したように、バタフライ演算器１３も、バタフライ演算器１２と同様な処理により、第３ステージにおける中間データ列ｘ３（k），０≦ｋ≦２５６を出力する。
【００６１】
次に、バタフライ演算器１４は、バタフライ演算器１３から入力される中間データ列｛ｘ３（0），ｘ３（1），ｘ３（2），ｘ３（3），…，ｘ３（253），ｘ３（254），ｘ３（255）｝、すなわち中間データｘ３（k）を、入力データとして入力する。ここで、入力アドレス生成２５６部２５Ｂは、前段の出力アドレスと同一の入力アドレスを出力する。入力される中間データは、この入力アドレスに従い、記憶部２２へ書き込まれる。そして入力後、バタフライ演算器１４は、バタフライ演算器１２及び１３と同様なバタフライ演算の処理を行う。以下の処理は、特に説明が無い限り、バタフライ演算器１４におけるバタフライ演算の処理について説明する。この中間データｘ３（n０，ｎ１，ｎ２，k０）において、中間データの番号ｋは、
ｋ＝６４ｎ０＋１６ｎ１＋４ｎ２＋ｋ０    ；（k０，ｎ２，ｎ１，n０＝０，１，２，３）
で決定される。
【００６２】
すなわち、バタフライ演算器１４においても、バタフライ演算器１２及び１３と同様に、ＦＦＴ長が２５６個であることを示すＦＦＴ長情報がセレクタ２４へ入力されているため、セレクタ２４は入力アドレス生成２５６部２３Ｂから入力される入力アドレスを記憶部２２に対し出力する。これにより、記憶部２２には、上記入力アドレスに従い、バタフライ演算器１３から入力される中間データが、前段の出力アドレスと同一の値の入力アドレスに順番に書き込まれる（バタフライ演算器１１及び１２と同様に、記憶部２２は第１及び第２の記憶領域からなるダブルバッファ構成となっており、データの書き込み読み出しの処理も同様である）。
【００６３】
バタフライ演算器１４において、ＦＦＴ長が２５６個であることを示すＦＦＴ長情報がセレクタ２５へ入力されているため、セレクタ２５は出力アドレス生成２５６部２５Ｂから入力される入力アドレスを記憶部２２に対し出力する。
同様に、ＦＦＴ長が２５６個であることを示すＦＦＴ長情報がセレクタ２８へ入力されているため、セレクタ２８は因子アドレス生成２５６部２８Ｂから入力される因子アドレスをＦＦＴ回転因子テーブル２７に対し出力する。
【００６４】
このとき、出力アドレス生成２５６部２５Ｂは、複素加減算部２７により、（７）式の演算が行われるため、すなわち１の位の桁ｋ０についての和を求めるため、ｋ０以外のｎ０，ｎ１，ｎ２を固定し、ｘ３（０，０，０，ｋ０）としてｋ０を０，１，２，３で変化させ、中間データｘ３（0），ｘ３（1），ｘ３（2），ｘ３（3）を読み出すアドレスを生成し、次にｘ３（０，０，１，ｋ０）としてｋ０を０，１，２，３で変化させ、ｘ３（4），ｘ３（5），ｘ３（6），ｘ３（7）として、順次出力アドレスを生成する。
これにより、記憶部２２に書き込まれた中間データが、出力アドレス生成２５６部２５Ｂの出力する出力アドレスにより、読み出されて複素複素乗算部２６へ出力される。
【００６５】
すなわち、上記出力アドレス生成２５６部２５Ｂは、バタフライ演算器１２から入力される中間データｘ３（ｋ）を、複素加減算部２７にて、係数「Ｗ４ｎ３ｋ０」に対応して複素加減算する際の、中間データの組となるように、記憶部２２（例えば、第１の記憶領域）に記憶されている入力順に対して並べ替える出力アドレスを生成して出力する。
同様に、ＦＦＴ回転因子テーブル２７は、因子アドレス生成２５６部２８Ｂから出力される因子アドレスに対応した回転因子である係数「ＷＮ（１６ｎ２＋４ｎ１＋ｎ０）ｋ０」を出力する。
ここで、バタフライ演算器１３のＦＦＴ回転因子テーブル２７は、各ＦＦＴ長毎に対応したテーブルを有している。これらのテーブルには、第４のステージであるバタフライ演算器１４において、記憶部２２から出力される中間データｘ３（k）各々に複素乗算する係数が、ＦＦＴ長毎に記憶されている。
【００６６】
次に、複素複素乗算部２６は、バタフライ演算器１３で説明したと同様に、記憶部２２から出力される中間データ各々に、ＦＦＴ回転因子テーブル２７から出力される係数を順次複素乗算して、シリアル／パラレル変換部３０へ出力する。
この後の、シリアル・パラレル変換部３０，複素加減算部２７及びパラレル／シリアル変換部３１における処理は、バタフライ演算器１３の場合と同様のため、説明を省略する。
そして、バタフライ演算器１２は、第４ステージのバタフライ演算の結果として、中間データ列ｘ４（k），０≦ｋ≦２５６を出力する。
上述したように、バタフライ演算器１４も、バタフライ演算器１２と同様な処理により、第４ステージにおける中間データ列ｘ４（k），０≦ｋ≦２５６を出力する。
【００６７】
ここで、ＦＦＴ長情報がＦＦＴ長が２５６個であることを示しているため、セレクタ１６は、バタフライ演算器１４の中間データｘ４，０≦ｋ≦２５６を選択して、ＦＦＴ演算結果であるＸ（ｎ），０≦ｎ≦２５６として出力する。
したがって、バタフライ演算器１４は、ＦＦＴ長が２５６個である場合に、入力信号である信号列｛ｘ（0），ｘ（1），ｘ（2），ｘ（3），…，ｘ（254），ｘ（255）｝のＦＦＴ演算結果である出力信号｛Ｘ（0），Ｘ（1），Ｘ（2），Ｘ（3），…，Ｘ（254），Ｘ（255）｝を出力し、ＦＦＴ演算回路１のＦＦＴ演算結果とする。
【００６８】
上述したように、バタフライ演算器１１，１２，１３，１４及び１５各々は、ＦＦＴ長が６４，２５６及び１０２４個の場合それぞれにおいて、入力信号である信号または中間データに対して、係数の複素乗算及び、係数が複素乗算された信号（サンプルまたは中間データ）の加減演算に対応して、記憶部２２からの信号（中間データ）の読み出し順の変更処理と、ＦＦＴ回転因子テーブル２７に記憶された係数の数値とが異なっているが、基本的に同様な処理を行っている。
【００６９】
また、バタフライ演算器１１，１２，１３，１４及び１５は、入力される信号、または前段からの中間データのバタフライ演算を行うため、各々の構成違いとして以下の点にある。
バタフライ演算器１１，１２及び１３は、信号及び中間データに対するバタフライ演算を行う必要があるため、ＦＦＴ長が６４、２５６及び１０２４個の場合に対応して、入力アドレス生成部２３に入力アドレス生成６４部２３Ａ，入力アドレス生成２５６部２３Ｂ及び入力アドレス生成１０２４部２３Ｃが設けられ、出力アドレス生成部２５に出力アドレス生成６４部２５Ａ，出力アドレス生成２５６部２５Ｂ，出力アドレス生成１０２４部２５Ｃ、また因子アドレス生成部２８に因子アドレス生成６４部２８Ａ，因子アドレス生成２５６部２５Ｂ，因子アドレス生成１０２４部２５Ｃが設けられ、ＦＦＴ回転因子テーブル２７にＦＦＴ長６４、２５６，１０２４それぞれの場合の係数が記憶されている。また、バタフライ演算器１１，１２及び１３のセレクタ２４、２８及び２９は、上述した構成に対応して、ＦＦＴ長がＦＦＴ長６４、２５６，１０２４の場合に対応して切り替えられる。
【００７０】
しかしながら、バタフライ演算器１４は、ＦＦＴ長が６４の場合においてバタフライ演算を行う必要がないため、ＦＦＴ長が２５６及び１０２４個の場合に対応して、入力アドレス生成部２３に入力アドレス生成２５６部２３Ｂ及び入力アドレス生成１０２４部２３Ｃが設けられ、出力アドレス生成部２５に出力アドレス生成２５６部２５Ｂ，出力アドレス生成１０２４部２５Ｃ、また因子アドレス生成部２８に因子アドレス生成２５６部２５Ｂ，因子アドレス生成１０２４部２５Ｃが設けられ、ＦＦＴ回転因子テーブル２７にＦＦＴ長２５６，１０２４それぞれの場合の係数が記憶されている。また、バタフライ演算器１４のセレクタ２４、２８及び２９は、上述した構成に対応して、ＦＦＴ長がＦＦＴ長２５６，１０２４の場合に対応して切り替えられる。
【００７１】
同様に、バタフライ演算器１５は、ＦＦＴ長が１０２４の場合においてのみ、バタフライ演算を行うため、ＦＦＴ長が１０２４個の場合に対応して、入力アドレス生成部２３に入力アドレス生成１０２４部２３Ｃが設けられ、出力アドレス生成部２５に出力アドレス生成１０２４部２５Ｃ、また因子アドレス生成部２８に因子アドレス生成１０２４部２５Ｃが設けられ、ＦＦＴ回転因子テーブル２７に信号１０２４の係数が記憶されている。また、バタフライ演算器１４には、ＦＦＴ長が１０２４個の場合のみの入力アドレス，出力アドレス及び因子アドレス、そして、中間データに複素乗算する係数しか必要とされないため、セレクタが設けられていない。
【００７２】
ここで、バタフライ演算器１４及び１５も、バタフライ演算器セルとして、バタフライ演算器１１〜１３と同様な回路構成とし、必要な部分のみ使用するように構成してもよい。
また、バタフライ演算器１４及び１５は、ＦＦＴ長情報がＦＦＴ長６４を示している場合に動作を停止し、バタフライ演算器１５は、ＦＦＴ長情報がＦＦＴ長２５６を示している場合に動作を停止するように構成してもよい。
【００７３】
また、信号順変換部としての、入力アドレス生成部２３，出力アドレス生成部２５及び記憶部２２において、上述した構成では、記憶部２２の連続したアドレスに、入力された順番に、記憶部２１が順次信号を書き込んでいた。そして、ＦＦＴ長に対応して、出力アドレス生成部２５が、複素乗算する順番に記憶部２２から信号を読み出す出力アドレスを生成するようにした。
しかしながら、信号順変換部として、記憶部２２に書き込む入力アドレスを、信号が複素乗算される順番に連続して記憶部２２に記憶されるアドレスとして生成し、その入力アドレスに対応して、入力する信号を順次記憶部２２に書き込むようにしてもよい。これにより、上述した実施形態と同様に、入力される信号順を各演算を行う順番に変換することができる。これにより、出力アドレス生成部２５は記憶部２２の連続したアドレスを生成し、順次、記憶部２２から信号を読み出すこととなる。
【００７４】
また、上述した本実施形態のＦＦＴ演算回路は、各バタフライ演算器における回転因子のテーブルにおける係数と、加減演算の式とを変更することにより、逆ＦＦＴ演算回路として用いることが可能である。
【図面の簡単な説明】
【００７５】
【図１】本発明の一実施形態によるＦＦＴ演算回路の構成例を示すブロック図である。
【図２】図１におけるバタフライ演算器１１（または、１２、１３，１４，１５）の構成例を示すブロック図である。
【図３】図２における記憶部２２のメモリ空間を説明する概念図である。
【図４】図２におけるＦＦＴ回転因子テーブルの構成を説明する概念図である。
【符号の説明】
【００７６】
１…ＦＦＴ演算回路
１１，１２，１３，１４，１５…バタフライ演算器
１６，２４，２８，２９…セレクタ
２２…記憶部
２３…入力アドレス生成部
２３Ａ…入力アドレス生成６３部
２３Ｂ…入力アドレス生成２５６部
２３Ｃ…入力アドレス生成１０２４部
２５…出力アドレス生成部
２５Ａ…出力アドレス生成６３部
２５Ｂ…出力アドレス生成２５６部
２５Ｃ…出力アドレス生成１０２４部
２６…複素複素乗算部
２７…複素加減算部
２８…因子アドレス生成部
２８Ａ…因子アドレス生成６３部
２８Ｂ…因子アドレス生成２５６部
２８Ｃ…因子アドレス生成１０２４部
３０…シリアル／パラレル変換部
３１…パラレル／シリアル変換部
３２…タイミング生成部
【図１】
0004791172.tif 000002
【図２】
0004791172.tif 000003
【図３】
0004791172.tif 000004
【図４】
0004791172.tif 000005