(57)【特許請求の範囲】
【請求項１】
点順次に入力されるＮ点の入力データの系列をＮ点ＦＦＴ（Ｆａｓｔ  Ｆｏｕｒｉｅｒ  Ｔｒａｎｓｆｏｒｍ）演算してＮ点の出力データの系列を点順次に出力するＦＦＴ演算装置であって、
Ｎ点の入力データの系列の前半Ｎ／２点の入力データと後半Ｎ／２点の入力データに対してＮ点ＦＦＴ演算の基数２のバタフライ演算を実行してＮ点の中間データを生成する基数２のバタフライ演算器と、
基数Ｋのバタフライ演算に対する回転因子係数を記憶する回転因子記憶部と、
この回転因子記憶部が記憶する回転因子係数に基づいて、前記Ｎ点の中間データに対して前記Ｎ点ＦＦＴ演算の前記基数Ｋのバタフライ演算を実行してＮ点の中間データの更新値を生成する基数Ｋのバタフライ演算器と、
Ｎアドレス分のデータ記憶領域からなり、データの読み出し命令および書き込み命令を受けて読み出しおよび書き込みアドレスを生成し、前記読み出しおよび書き込みアドレスの前記データ記憶領域に対し、データの読み出しおよび書き込みを行うデータ記憶部と、
このデータ記憶部に前記データの読み出し命令および書き込み命令を送って、点順次に入力される前記前半Ｎ／２点の入力データを書き込ませる第１の処理サイクルと、前記前半Ｎ／２点の入力データを読み出させ、この前半Ｎ／２点の入力データおよび点順次に入力される前記後半Ｎ／２点の入力データから前記基数２のバタフライ演算器により生成されるＮ点の中間データを書き込ませる第２の処理サイクルと、前記Ｎ点の中間データを読み出させ、このＮ点の中間データから前記基数Ｋのバタフライ演算器により生成されるＮ点の中間データの更新値を上書きさせる少なくとも１つの第３の処理サイクルと、前記Ｎ点の中間データを前記Ｎ点の出力データの系列として読み出させて点順次に出力する第４の処理サイクルとを制御して、先に入力されたＮ点の入力データの系列に対する前記第４の処理サイクルとこの後に入力されるＮ点の入力データの系列に対する前記第１および前記第２の処理サイクルを重畳させる制御部と
を備えるＦＦＴ演算装置。
【請求項２】
前記データ記憶部は、前記制御部から前記読み出しおよび書き込み命令を指定されると、
先に入力されたＮ点の入力データの系列に対する前記第４の処理サイクルの読み出しアドレスとこの後に入力されるＮ点の入力データの系列に対する前記第１および前記第２の処理サイクルの書き込みアドレスをビット正順またはビット逆順の同一の並び順で生成する
請求項１記載のＦＦＴ演算装置。
【請求項３】
前記データ記憶部を２つ備え、
前記制御部は、
Ｎ点の入力データの系列が入力されるごとに前記２つのデータ記憶部を切り替えて指定し、
前記２つのデータ記憶部の一方を指定して処理させる先に入力されたＮ点の入力データの系列に対する前記第３の処理サイクルと前記２つのデータ記憶部の他方を指定して処理させる後に入力されるＮ点の入力データの系列に対する前記第１および前記第２の処理サイクルを重畳させる
請求項１または請求項２記載のＦＦＴ演算装置。
【請求項４】
前記データ記憶部は、
Ｋ個の（Ｎ／Ｋ）ワードの１リード／１ライトの２ポートＲＡＭで構成したＮワードのＫリード／Ｋライトの２ＫポートＲＡＭである
請求項１ないし請求項３のいずれか１項に記載のＦＦＴ演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ＦＦＴ演算を行うＦＦＴ演算装置に関するものである。
【背景技術】
【０００２】
従来、フーリエ級数の解を求める一手法として、高速フーリエ変換（以下、ＦＦＴという。Ｆａｓｔ  Ｆｏｕｒｉｅｒ  Ｔｒａｎｓｆｏｒｍ）が提案されている。この高速フーリエ変換を実行するＦＦＴ演算装置では、バタフライ演算器を核とし、メモリから読み出した２個のデータを入力データ対としてバタフライ演算を施し、２個の出力データを得、この２個の出力データを演算前に格納されていたメモリに戻し、戻された２個のデータをメモリから読み出してバタフライ演算を施すというパイプライン処理を繰り返す（例えば、特許文献１）。すなわち、メモリから２個のデータを入力データ対として読み出し、パイプライン構成によるバタフライ演算を施して、高速フーリエ変換を行う。
【０００３】
この特許文献１には、Ｎ＝２ｍ個のデータにＦＦＴを行う際、２ｍ−１＝（Ｎ／２）個分のデータをそれぞれ格納可能な１ポートメモリで構成された第１のメモリ，第２のメモリ、第１の入力バッファ、第２の入力バッファ、第１の出力バッファおよび第２の出力バッファを用意し、これら６個の１ポートメモリを１個のデータを読み出すと同時に１個のデータを書き込むように前半と後半とに分けて動作させ、かつ第１および第２のメモリの動作スピードをバタフライ演算器の２倍とし、第１および第２の入力バッファからデータを１個ずつ読み出してバタフライ演算器に入力し、このバタフライ演算器からの演算結果である２個のデータを１個ずつ第１および第２のメモリに書き込み、再度バタフライ演算を行うデータを第１および第２のメモリから１個ずつ読み出してバタフライ演算器に入力するという動作を繰り返し、最終的なバタフライ演算の結果として２個ずつ出力するデータを１個ずつ第１および第２の出力バッファに書き込むＦＦＴ演算装置が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平９−３０５５７３
【発明の概要】
【発明が解決しようとする課題】
【０００５】
従来のＦＦＴ演算装置では、アドレス領域を（Ｎ／２）個持つメモリが合計６個、すなわちデータを記憶するためのメモリ領域として３Ｎ個分のアドレス領域が必要であり、Ｎが大きくなるとその３倍のオーダでメモリ規模が増大するという問題がある。
【０００６】
また、入力バッファを１ポートのメモリで構成するため、入力バッファが空にならないと次の入力が行えず、Ｎ点のＦＦＴデータが連続、例えば４連続であれば４Ｎ点の連続して入力される場合に待ち時間が必要となるため、時間当たりの処理性能が半分となってしまう問題があった。
【０００７】
この発明は、上記のような課題を解決するためになされたもので、Ｎ点の連続する入力に対しても少ないメモリ量でＦＦＴ演算するＦＦＴ演算装置を得ることを目的とする。
【課題を解決するための手段】
【０００８】
この発明に係るＦＦＴ演算装置は、点順次に入力されるＮ点の入力データの系列をＮ点ＦＦＴ（Ｆａｓｔ  Ｆｏｕｒｉｅｒ  Ｔｒａｎｓｆｏｒｍ）演算してＮ点の出力データの系列を点順次に出力するＦＦＴ演算装置であって、Ｎ点の入力データの系列の前半Ｎ／２点の入力データと後半Ｎ／２点の入力データに対してＮ点ＦＦＴ演算の基数２のバタフライ演算を実行してＮ点の中間データを生成する基数２のバタフライ演算器と、基数Ｋのバタフライ演算に対する回転因子係数を記憶する回転因子記憶部と、この回転因子記憶部が記憶する回転因子係数に基づいて、前記Ｎ点の中間データに対して前記Ｎ点ＦＦＴ演算の前記基数Ｋのバタフライ演算を実行してＮ点の中間データの更新値を生成する基数Ｋのバタフライ演算器と、Ｎアドレス分のデータ記憶領域からなり、データの読み出し命令および書き込み命令を受けて読み出しおよび書き込みアドレスを生成し、前記読み出しおよび書き込みアドレスの前記データ記憶領域に対し、データの読み出しおよび書き込みを行うデータ記憶部と、このデータ記憶部にデータの読み出し命令および書き込み命令を送って、点順次に入力される前記前半Ｎ／２点の入力データを書き込ませる第１の処理サイクルと、前記前半Ｎ／２点の入力データを読み出させ、この前半Ｎ／２点の入力データおよび点順次に入力される前記後半Ｎ／２点の入力データから前記基数２のバタフライ演算器により生成されるＮ点の中間データを書き込ませる第２の処理サイクルと、前記Ｎ点の中間データを読み出させ、このＮ点の中間データから前記基数Ｋのバタフライ演算器により生成されるＮ点の中間データの更新値を上書きさせる少なくとも１つの第３の処理サイクルと、前記Ｎ点の中間データを前記Ｎ点の出力データの系列として読み出させて点順次に出力する第４の処理サイクルとを制御して、先に入力されたＮ点の入力データの系列に対する前記第４の処理サイクルとこの後に入力されるＮ点の入力データの系列に対する前記第１および前記第２の処理サイクルを重畳させる制御部とを備えた。
【発明の効果】
【０００９】
この発明に係るＦＦＴ演算装置によれば、Ｎ点の連続する入力に対しても少ないメモリ量でＦＦＴ演算することができる。
【図面の簡単な説明】
【００１０】
【図１】この発明の実施の形態１に係るＦＦＴ演算装置の一例を示すブロック構成図である。
【図２】この発明の実施の形態１に係るＦＦＴ演算装置における８ワードＲＡＭの一例を示す詳細ブロック構成図である。
【図３】この発明の実施の形態１に係るＦＦＴ演算装置における基数２のバタフライ演算の一例を示す説明図である。
【図４】この発明の実施の形態１に係るＦＦＴ演算装置における８ワードＲＡＭのアドレス設定の一例を示す詳細ブロック構成図である。
【図５】この発明の実施の形態１に係るＦＦＴ演算装置の第０から第３サイクルのデータの流れの一例を示す説明図である。
【図６】この発明の実施の形態１に係るＦＦＴ演算装置の第０から第３サイクルの８ワードＲＡＭの更新推移の一例を示す説明図である。
【図７】この発明の実施の形態１に係るＦＦＴ演算装置の第４から第７サイクルのデータの流れの一例を示す説明図である。
【図８】この発明の実施の形態１に係るＦＦＴ演算装置の第４から第７サイクルの８ワードＲＡＭの更新推移の一例を示す説明図である。
【図９】この発明の実施の形態１に係るＦＦＴ演算装置の第８から第１１サイクルのデータの流れの一例を示す説明図である。
【図１０】この発明の実施の形態１に係るＦＦＴ演算装置の第８から第１１サイクルの８ワードＲＡＭの更新推移の一例を示す説明図である。
【図１１】この発明の実施の形態１に係るＦＦＴ演算装置の第１２から第１５サイクルのデータの流れの一例を示す説明図である。
【図１２】この発明の実施の形態１に係るＦＦＴ演算装置の第１２から第１５サイクルの８ワードＲＡＭの更新推移の一例を示す説明図である。
【図１３】この発明の実施の形態１に係るＦＦＴ演算装置の第１６から第１９サイクルのデータの流れの一例を示す説明図である。
【図１４】この発明の実施の形態１に係るＦＦＴ演算装置の第１６から第１９サイクルの８ワードＲＡＭの更新推移の一例を示す説明図である。
【図１５】この発明の実施の形態１に係るＦＦＴ演算装置の第２０から第２３サイクルのデータの流れの一例を示す説明図である。
【図１６】この発明の実施の形態１に係るＦＦＴ演算装置の第２０から第２３サイクルの８ワードＲＡＭの更新推移の一例を示す説明図である。
【図１７】この発明の実施の形態１に係るＦＦＴ演算装置の８ワードＲＡＭのデータ蓄積の入出力推移の一例を示す説明図である。
【図１８】この発明の実施の形態１に係る基数Ｋのバタフライ演算を適用したＦＦＴ演算装置の一例を示すブロック構成図である。
【発明を実施するための形態】
【００１１】
この発明のＦＦＴ演算装置は、対象データ数ＮとするＮ点ＦＦＴ演算においてバタフライ演算を適用して行うものである。ＦＦＴ演算で実行するバタフライ演算は、Ｎ点入力データからＮ点の中間データを生成するまでを基数２のバタフライ演算、残るＮ点の中間データからＮの出力データを生成するまでを処理数Ｋのバタフライ演算を適用する。ここで、処理数Ｋのバタフライ演算とは、任意基数のバタフライ演算器を任意個並列に並べ、一度に処理できるバタフライ演算処理点数をＫとしたバタフライ演算である。例えば、処理数４のバタフライ演算は、基数２のバタフライ演算器の２並列で実行可能である。
【００１２】
以下の実施の形態では、説明および図を簡単化するために、ＦＦＴ演算の対象データ数ＮをＮ＝８とし、またデータ記憶部であるＮワードＲＡＭに書き込む入力ポート数、読み出す出力ポート数および処理数Ｋのバタフライ演算器のＫはいずれもＫ＝２として説明する。
【００１３】
実施の形態１．
図１は、この発明の実施の形態１に係るＦＦＴ演算装置の一例を示すブロック構成図（Ｎ＝８、Ｋ＝２）である。図において、データ記憶部１−１、１−２は、２のべき乗値で表される８点の入力データ（Ｉ０〜Ｉ７）の前半のデータ（Ｉ０〜Ｉ３）を記憶し、この記憶した８点の入力データの前半のデータと８点の入力データの後半のデータ（Ｉ４〜Ｉ７）に対して生成された８点の中間データ（Ｔ０〜Ｔ７）を記憶し、この記憶した８点の中間データ（Ｔ０〜Ｔ７）に対して生成される８点の中間データ（Ｔａ〜Ｔｈ）を記憶し、この記憶した８点の中間データ（Ｔａ〜Ｔｈ）に対して生成される８点の出力データ（Ｆ０〜Ｆ７）を記憶する８ワードＲＡＭである。基数２のバタフライ演算器２は、データ記憶部１−１または１−２が記憶した８点の入力データの前半のデータ（Ｉ０〜Ｉ３）と８点の入力データの後半のデータ（Ｉ４〜Ｉ７）に対して８点ＦＦＴ演算のバタフライ演算を実行して８点の中間データ（Ｔ０〜Ｔ７）を生成してデータ記憶部１−１または１−２に出力する。回転因子記憶部３は、処理数Ｋのバタフライ演算に対する回転因子係数（Ｗ０〜Ｗ３）を記憶するＲＯＭである。処理数Ｋのバタフライ演算器４は、回転因子記憶部３が記憶する回転因子係数に基づいて、８点ＦＦＴ演算の処理数Ｋのバタフライ演算を実行して、データ記憶部１−１または１−２が記憶した８点の中間データ（Ｔ０〜Ｔ７）に対する８点の中間データ（Ｔａ〜Ｔｈ）、８点の中間データ（Ｔａ〜Ｔｈ）に対する８点の出力データ（Ｆ０〜Ｆ７）を生成してデータ記憶部１−１または１−２に出力する。制御部５は、データ記憶部１−１および１−２の書き込みおよび読み出しを制御し、Ｎ点ＦＦＴ演算処理済みの８点の入力データに対する８点の出力データ（Ｆ０〜Ｆ７）をデータ記憶部１−１または１−２から読み出して出力する処理サイクル、および、Ｎ点ＦＦＴ演算処理中の８点の入力データの前半の入力データ（Ｉ０〜Ｉ３）をデータ記憶部１−１または１−２に記憶させ、この記憶させたＮ点ＦＦＴ演算処理中の８点の入力データの前半の入力データ（Ｉ０〜Ｉ３）とＮ点ＦＦＴ演算処理中の８点の入力データの後半のデータ（Ｉ４〜Ｉ７）に対して基数２のバタフライ演算器２により８点の中間データ（Ｔ０〜Ｔ７）を生成してデータ記憶部１−１または１−２に書き込む処理サイクルを同時に実行させる。
【００１４】
また、セレクタ１１は、８点の入力データの前半の入力データ（Ｉ０〜Ｉ３）と空データ“０”の対と、基数２のバタフライ演算器２が出力する２データの対のいずれか一方を選択し、セレクタ１２およびセレクタ１３へ出力する。セレクタ１２およびセレクタ１３は、セレクタ１１の出力するデータの対と、処理数Ｋのバタフライ演算器４の出力するデータ対のいずれかを選択し、データ記憶部１−１または１−２に出力する。セレクタ１４は、データ記憶部１−１または１−２の出力データのうちいずれか一方を選択して、基数２のバタフライ演算器２へ出力する。セレクタ１５は、データ記憶部１−１または１−２が出力するデータ対のいずれか一方を選択して、処理数Ｋのバタフライ演算器４へ出力する。セレクタ１６は、データ記憶部１−１または１−２の出力データのうちいずれか一方を選択して、ＦＦＴ演算結果として出力する。制御部５がこれらのセレクタ１１からセレクタ１６を設定することによって、ＦＦＴ演算の過程のデータをデータ記憶部１−１、１−２に書き込んで記憶させ、また読み出し、出力する経路を制御する。
【００１５】
また、制御部５は、これらのセレクタ１１からセレクタ１６を適宜制御して、入力されるＮ点の入力データごとに２つのデータ記憶部１−１、１−２を切り替えて、一方のデータ記憶部に、Ｎ点ＦＦＴ演算処理済みのＮ点の入力データに対するＮ点の出力データを読み出して出力させると同時に、Ｎ点ＦＦＴ演算処理中のＮ点の入力データの前半のデータと後半のデータに対して基数２のバタフライ演算器２によりＮ点の中間データを生成して書き込む処理サイクル中に、他方のデータ記憶部に、Ｎ点ＦＦＴ演算処理中のＮ点の入力データとＮ点ＦＦＴ演算処理済みのＮ点の入力データの間に入力されたＮ点の入力データに対するＮ点の中間データに対して処理数Ｋのバタフライ演算器によりＮ点の出力データを生成する処理サイクルを行わせる。
【００１６】
また、図２は、この発明の実施の形態１に係るＦＦＴ演算装置におけるデータ記憶部である８ワードＲＡＭ１の一例を示す詳細ブロック構成図である（Ｎ＝８、Ｋ＝２）。図において、ライトアドレスデコーダ２１は、制御部のライト命令に基づいて、２個のライトデータの出力ポートを指定するセレクト信号と、この２個のライトデータを書き込むライトアドレスを生成する。ライトデータセレクタ２２は、２個のライトデータをライトアドレスデコーダ２１が生成したセレクト信号に基づいて指定される出力ポートに振り分けて出力する。リードアドレスデコーダ２３は、制御部のリード命令に基づいて、２個のリードデータを読み出すリードアドレスと、このリードアドレスに基づいて読み出された２個のリードデータの出力ポートを指定するセレクト信号を生成する。４ワードＲＡＭ２４ａ、２４ｂは、各４ワード１リード／１ライトの２ポートＲＡＭとして、リードアドレスデコーダ２３が生成したリードアドレスからリードデータを読み出して出力するとともに、ライトデータセレクタ２２が振り分けたライトデータをライトアドレスデコーダ２１が生成したライトアドレスに書き込む。リードデータセレクタ２５は、リードアドレスデコーダ２３が生成したリードアドレスに基づいて４ワードＲＡＭ２４ａ、２４ｂから読み出された２個のリードデータを、リードアドレスデコーダ２４が生成したセレクト信号に基づいて指定される出力ポートに振り分けて出力する。
【００１７】
ここでは、Ｎ＝８、Ｋ＝２として説明したが、一般的には、データ記憶部であるＮワードＲＡＭ１（１−１、１−２）は、Ｋ個の（Ｎ／Ｋ）ワードの１リード／１ライトの２ポートＲＡＭ（（Ｎ／Ｋ）ワードＲＡＭ）によってＮワードのＫリード／Ｋライトの２ＫポートＲＡＭとして構成することができる。
【００１８】
図３は、この発明の実施の形態１に係るＦＦＴ演算装置における基数２バタフライ演算の一例を示す説明図である。図において、入力データＩ０〜Ｉ７から時間間引きアルゴリズムに従ったバタフライ演算により出力データＦ０〜Ｆ７が得られる。図３に示すようにバタフライ演算の結果を同じアドレスに書き戻す処理(in-place計算)を行うと、得られるＦＦＴ演算結果は、格納されるアドレスに対してビット逆順に並ぶ。従って、ＦＦＴ演算結果を自然な並び順（ビット正順）で得たい場合、図３左、または右に示すように、出力データをビット逆順で読み出すか、入力データをビット逆順で書き込むことで、入力データまたは出力データの並べ替え処理を行うためのメモリ領域を不要とする。
【００１９】
ここで、入力データＩ０〜Ｉ３は、そのまま入力され、入力データＩ４〜Ｉ７は、入力と同時に入力データＩ０〜Ｉ３を１つずつ参照し、２つの入力データから演算した中間データＴ０〜Ｔ７（第１の中間データ）を得る。また、中間データＴ０〜Ｔ７を２つずつ参照して演算し、中間データＴａ〜Ｔｈ（第２の中間データ）を得る。さらに、中間データＴａ〜Ｔｈを２つずつ参照して演算し、出力データＦ０〜Ｆ７が得られる。図中、Ｗ０〜Ｗ３は、回転因子係数である。
【００２０】
ここで、中間データＴ０〜Ｔ７を得る初段（第１段）のバタフライ演算は、基数２のバタフライ演算器２が実行する。また、中間データＴａ〜Ｔｈを得る第２段、出力データＦ０〜Ｆ７を得る第３段のバタフライ演算は、処理数Ｋのバタフライ演算器４が実行する。
【００２１】
このように、in-place計算によるデータの並び替わりを考慮して、制御部５は、入力される８点の入力データごとに、ビット正順のアドレスの記憶領域に８点の入力データを記憶して処理数Ｋのバタフライ演算器４が実行した処理数Ｋのバタフライ演算でビット逆順のアドレスの記憶領域に並び替わって記憶された８点の出力データを８点の入力データの入力順に並び替えて読み出す処理と、ビット逆順のアドレスの記憶領域に８点の入力データを並び替えて記憶して処理数Ｋのバタフライ演算器４が実行した処理数Ｋのバタフライ演算でビット正順のアドレスの記憶領域に並び替わって記憶された８点の出力データを８点の入力データの入力順に読み出す処理を交互に繰り返す事で、入力データまたは出力データの並べ替えのためのメモリ領域を設けなくても、in-place計算を実行することができる。
【００２２】
図４は、この発明の実施の形態１に係るＦＦＴ演算装置における８ワードＲＡＭ（ＮワードＲＡＭ）のアドレス設定の一例を示す詳細ブロック構成図である。図において、８ワードＲＡＭから読み出されるリードデータの読み出しアドレスまたは８ワードＲＡＭに書き込まれるライトデータの書き込みアドレスは、それぞれ０〜７（０〜（Ｎ−１））で与えられると、上段の４ワードＲＡＭ２３ａおよび下段の４ワードＲＡＭ２３ｂ（（Ｎ／Ｋ）ワードＲＡＭ）に振り分けられ、ＲＡＭアドレスが指定される。例えば、この表では０〜７の８アドレスを示す３桁の２進アドレスでビット“１”が奇数個であれば下段とし、それ以外は上段とし、また３桁の２進アドレスの上位２桁をＲＡＭアドレスとして解釈してもよい。このような８ワードＲＡＭのアドレス設定によれば、図３で説明したようなバタフライ演算の過程でアドレスが衝突することなく同時参照できる。図２で説明したライト命令とリード命令には、それぞれの書き込むまたは読み込むデータ数に応じたデータのアドレスが含まれる。なお、上段の４ワードＲＡＭ２３ａおよび下段の４ワードＲＡＭ２３ｂの上下段の解釈は、逆にしてもよいことはいうまでもない。
【００２３】
次に、この発明の実施の形態１に係るＦＦＴ演算装置において、Ｎ点ＦＦＴ演算処理する場合の入力データ、中間データ、出力データの流れと、ＦＦＴ演算データの更新過程について説明する。なお、実施の形態１はパイプライン処理を想定し、１サイクルに１つの入力データがビット正順で入力され、入力が完了してからＮサイクル後にＦＦＴ演算結果がビット正順で１サイクル１データ出力される。またＮ点のＦＦＴ入力データは連続で入力され、処理数Ｋのバタフライ演算器は１サイクルで処理を完了できる場合を想定する。データ記憶部である２つのＮワードＲＡＭのデータ更新の過程については、一方のＮワードＲＡＭのデータ更新の過程をＮサイクルずらした処理として説明でき、入力データＮ点ごとに２つのＮワードＲＡＭが交互にＮサイクルで処理する。以下、図を示しながら、データの流れと、ＮワードＲＡＭ１−１のＮ点ＦＦＴ演算データの推移について説明する（Ｎ＝８、Ｋ＝２）。
【００２４】
（１）第０から第３サイクルの演算データの推移
図５は、この発明の実施の形態１に係るＦＦＴ演算装置の第０から第３サイクルのデータの流れの一例を示す説明図である。この第０から第３サイクルという期間は、Ｎ点ＦＦＴ演算の第０から第（Ｎ／２−１）サイクルの期間を指す。図において、入力データＩ０〜Ｉ３は、セレクタ１１、セレクタ１２を経由して、８ワードＲＡＭ１−１のアドレス０〜３に記憶される。
【００２５】
図６は、この発明の実施の形態１に係るＦＦＴ演算装置の第０から第３サイクルの８ワードＲＡＭの更新推移の一例を示す説明図である。図において、８ワードＲＡＭ１−１のアドレス０〜３に記憶される入力データＩ０〜Ｉ３は、丸で囲んだサイクルで書き込まれる。
【００２６】
（２）第４から第７サイクルの演算データの推移
図７は、この発明の実施の形態１に係るＦＦＴ演算装置の第４から第７サイクルのデータの流れの一例を示す説明図である。この第４から第７サイクルという期間は、Ｎ点ＦＦＴ演算の第（Ｎ／２）から第（Ｎ−１）サイクルの期間を指す。図において、入力データＩ４〜Ｉ７は、基数２のバタフライ演算器２に入力されるとバタフライ演算されて中間データＴ４〜Ｔ７として、セレクタ１１、セレクタ１２を経由して、８ワードＲＡＭ１−１のアドレス４〜７に記憶される。このとき、すでに８ワードＲＡＭ１−１のアドレス０〜３に記憶された入力データＩ０からＩ３が、セレクタ１４を経由して、入力データＩ４〜Ｉ７とともに基数２のバタフライ演算器２に入力されるとバタフライ演算されて中間データＴ０〜Ｔ３として、中間データＴ４〜Ｔ７と対にされて、セレクタ１１、セレクタ１２を経由して、８ワードＲＡＭ１−１のアドレス０〜３に上書きされて、記憶される。
【００２７】
図８は、この発明の実施の形態１に係るＦＦＴ演算装置の第４から第７サイクルの８ワードＲＡＭの更新推移の一例を示す説明図である。図において、８ワードＲＡＭ１−１のアドレス０〜７に記憶される中間データＴ０〜Ｔ７は、Ｔ０とＴ４、Ｔ１とＴ５、Ｔ２とＴ６、Ｔ３とＴ７が対にされ、丸で囲んだサイクルで書き込まれ、入力データＩ０〜Ｉ３は順次上書きされて、この（Ｎ／２）サイクル終了時に、中間データＴ０〜Ｔ７が出揃う。
【００２８】
（３）第８から第１１サイクルの演算データの推移
図９は、この発明の実施の形態１に係るＦＦＴ演算装置の第８から第１１サイクルのデータの流れの一例を示す説明図である。この第８から第１１サイクルという期間は、Ｎ点ＦＦＴ演算の第Ｎから第（３Ｎ／２−１）サイクルの期間を指す。図において、この間の（Ｎ／２）サイクルで、すでに８ワードＲＡＭ１−１のアドレス０〜７に記憶された中間データＴ０〜Ｔ７は、セレクタ１５を経由して、処理数Ｋのバタフライ演算器４に入力されるとバタフライ演算されて中間データＴａ〜Ｔｈとして、セレクタ１２を経由して、８ワードＲＡＭ１−１のアドレス０〜７に順次上書きされて、記憶される。
【００２９】
この（Ｎ／２）サイクル期間に、８ワードＲＡＭ１−１で処理中の８点の入力データの次の８点の入力データのうち、前半（Ｎ／２）点の入力データＩ０〜Ｉ３が、８ワードＲＡＭ１−２において、図５で説明した８ワードＲＡＭ１−１に対する処理と同様に処理される。
【００３０】
図１０は、この発明の実施の形態１に係るＦＦＴ演算装置の第８から第１１サイクルの８ワードＲＡＭの更新推移の一例を示す説明図である。図において、この間の（Ｎ／２）サイクルで、８ワードＲＡＭ１−１のアドレス０〜７に記憶される中間データＴａ〜Ｔｈは、ＴａとＴｃ、ＴｂとＴｄ、ＴｅとＴｇ、ＴｆとＴｈが対にされ、丸で囲んだサイクルで書き込まれ、中間データＴ０〜Ｔ７は順次上書きされて、この（Ｎ／２）サイクル終了時に、中間データＴａ〜Ｔｈが出揃う。なお、この（Ｎ／２）サイクル内のデータの演算処理順序は、直前の（Ｎ／２）サイクルで出揃ってから参照される中間データＴ０〜Ｔ７で対となる中間データの単位で入れ替えてもよい。
【００３１】
（４）第１２から第１５サイクルの演算データの推移
図１１は、この発明の実施の形態１に係るＦＦＴ演算装置の第１２から第１５サイクルのデータの流れの一例を示す説明図である。この第１２から第１５サイクルという期間は、Ｎ点ＦＦＴ演算の第（３Ｎ／２）から第（２Ｎ−１）サイクルの期間を指す。図において、この間の（Ｎ／２）サイクルで、すでに８ワードＲＡＭ１−１のアドレス０〜７に記憶された中間データＴａ〜Ｔｈは、セレクタ１５を経由して、処理数Ｋのバタフライ演算器４に入力されるとバタフライ演算されて出力データＦ０〜Ｆ７として、セレクタ１２を経由して、８ワードＲＡＭ１−１のアドレス０〜７に順次上書きされて、記憶される。
【００３２】
この（Ｎ／２）サイクル期間に、８ワードＲＡＭ１−１で処理中の８点の入力データの次の８点の入力データのうち、後半（Ｎ／２）点の入力データＩ４〜Ｉ７が、８ワードＲＡＭ１−２において、図７で説明した８ワードＲＡＭ１−１に対する処理と同様に処理される。
【００３３】
図１２は、この発明の実施の形態１に係るＦＦＴ演算装置の第１２から第１５サイクルの８ワードＲＡＭの更新推移の一例を示す説明図である。図において、この間の（Ｎ／２）サイクルで、８ワードＲＡＭ１−１のアドレス０〜７に記憶される中間データＦ０〜Ｆ７は、Ｆ０とＦ４、Ｆ２とＦ６、Ｆ１とＦ５、Ｆ３とＦ７が対にされ、丸で囲んだサイクルで書き込まれ、中間データＴａ〜Ｔｈは順次上書きされて、この（Ｎ／２）サイクル終了時に、出力データＦ０〜Ｆ７が出揃う。なお、この各（Ｎ／２）サイクル内のデータの演算処理順序は、直前の（Ｎ／２）サイクルで出揃ってから参照される中間データＴａ〜Ｔｈで対となる中間データの単位で入れ替えてもよい。
【００３４】
（５）第１６から第１９サイクルの演算データの推移
図１３は、この発明の実施の形態１に係るＦＦＴ演算装置の第１６から第１９サイクルのデータの流れの一例を示す説明図である。この第１６から第１９サイクルという期間は、Ｎ点ＦＦＴ演算の第２Ｎから第（５Ｎ／２−１）サイクルの期間を指す。図において、８ワードＲＡＭ１−１のアドレス０，４，２，６（ビット逆順）から読み出された出力データＦ０〜Ｆ３は、セレクタ１６を経由して、出力される。次のＮサイクルの処理対象として入力されるデータＩ０〜Ｉ３は、セレクタ１１、セレクタ１２を経由して、出力データＦ０〜Ｆ３の出力直後の８ワードＲＡＭ１−１のアドレス０，４，２，６（ビット逆順）に順次上書きされて、記憶される。
【００３５】
この（Ｎ／２）サイクル期間に、８ワードＲＡＭ１−１で処理中の８点の入力データの直後の８点の入力データに対する中間データＴ０〜Ｔ７が、８ワードＲＡＭ１−２において、図９で説明した８ワードＲＡＭ１−１に対する処理と同様に処理される。
【００３６】
図１４は、この発明の実施の形態１に係るＦＦＴ演算装置の第１６から第１９サイクルの８ワードＲＡＭの更新推移の一例を示す説明図である。図において、出力データＦ０〜Ｆ３は、８ワードＲＡＭ１−１のアドレス０，４，２，６（ビット逆順）から読み出されて、セレクタ１６を経由して、順次出力される。この出力直後に、入力データＩ０〜Ｉ３は、セレクタ１１、セレクタ１２を経由して、８ワードＲＡＭ１−１のアドレス０，４，２，６に順次上書きされて、記憶される。
【００３７】
（６）第２０から第２３サイクルの演算データの推移
図１５は、この発明の実施の形態１に係るＦＦＴ演算装置の第２０から第２３サイクルのデータの流れの一例を示す説明図である。この第２０から第２３サイクルという期間は、Ｎ点ＦＦＴ演算の第（５Ｎ／２）から第（３Ｎ−１）サイクルの期間を指す。図において、８ワードＲＡＭ１−１のアドレス１，５，３，７（ビット逆順）から読み出された出力データＦ４〜Ｆ７は、出力データＦ０〜Ｆ３と同様にセレクタ１６を経由して、出力される。次のＮサイクルの処理対象として入力されるデータＩ４〜Ｉ７は、基数２のバタフライ演算器２に入力されるとバタフライ演算されて中間データＴ４〜Ｔ７として、セレクタ１１、セレクタ１２を経由して、出力データＦ４〜Ｆ７の出力直後の８ワードＲＡＭ１−１のアドレス１，５，３，７（ビット逆順）に順次上書きされて、記憶される。このとき、すでに８ワードＲＡＭ１−１のアドレス０，４，２，６（ビット逆順）に記憶された入力データＩ０からＩ３が、セレクタ１４を経由して、入力データＩ４〜Ｉ７とともに基数２のバタフライ演算器２に入力されるとバタフライ演算されて中間データＴ０〜Ｔ３として、中間データＴ４〜Ｔ７と対にされて、セレクタ１１、セレクタ１２を経由して、８ワードＲＡＭ１−１のアドレス０，４，２，６（ビット逆順）に順次上書きされて、記憶される。
【００３８】
この（Ｎ／２）サイクル期間に、８ワードＲＡＭ１−１で処理中の８点の入力データの直後の８点の入力データに対する中間データＴａ〜Ｔｈが、８ワードＲＡＭ１−２において、図１１で説明した８ワードＲＡＭ１−１に対する処理と同様に処理される。
【００３９】
図１６は、この発明の実施の形態１に係るＦＦＴ演算装置の第２０から第２３サイクルの８ワードＲＡＭの更新推移の一例を示す説明図である。図において、出力データＦ４〜Ｆ７は、８ワードＲＡＭ１−１のアドレス１，５，３，７（ビット逆順）から読み出されて、セレクタ１６を経由して、順次出力される。この出力直後に、入力データＩ４〜Ｉ７は、８ワードＲＡＭ１−１のアドレス０〜７に記憶される中間データＴ０〜Ｔ７は、Ｔ０とＴ４、Ｔ１とＴ５、Ｔ２とＴ６、Ｔ３とＴ７が対にされ、丸で囲んだサイクルで書き込まれ、出力データＦ４〜Ｆ７のアドレス１，５，３，７には中間データＴ４〜Ｔ７が、入力データＩ０〜Ｉ３のアドレス０，４，２，６（ビット逆順）には中間データＴ０〜Ｔ３が順次上書きされて、この（Ｎ／２）サイクル終了時に、中間データＴ０〜Ｔ７が出揃う。
【００４０】
このように、この発明の実施の形態１に係るＦＦＴ演算装置の制御部は、データ記憶部である８ワードＲＡＭ１−１、１−２の書き込みおよび読み出しを制御し、処理中の８点の入力データに対する８点の出力データの前半のデータ（Ｆ０〜Ｆ３）を出力する処理サイクルと次に処理する８点の入力データの前半のデータ（Ｉ０〜Ｉ３）を記憶する処理サイクル、および処理中の８点の入力データに対する８点の出力データの後半のデータ（Ｆ４〜Ｆ７）を出力する処理サイクルと８ワードＲＡＭに記憶させた次に処理する８点の入力データの前半の入力データと次に処理する８点の入力データの後半のデータ（Ｉ４〜Ｉ７）に対して基数２のバタフライ演算器が生成する８点の第１の中間データ（Ｔ０〜Ｔ７）を記憶する処理サイクルを同時に実行させるように制御する。
【００４１】
また、制御部は、入力される８点の入力データごとに２つのデータ記憶部を切り替えて、一方のデータ記憶部に、記憶された処理済みの８点の入力データに対する８点の出力データ（Ｆ０〜Ｆ７）を出力させると同時に、処理中の８点の入力データの前半のデータ（Ｉ０〜Ｉ３）を記憶させ、この処理中の８点の入力データに対して生成された８点の第１の中間データ（Ｔ０〜Ｔ７）を記憶させる処理サイクル中に、他方のデータ記憶部に、処理中の８点の入力データと処理済みの８点の入力データの間に入力された８点の入力データに対して生成された８点の第２の中間データ（Ｔａ〜Ｔｈ）を記憶させ、この記憶させた８点の第２の中間データに対して生成された８点の出力データ（Ｆ０〜Ｆ７）を記憶させるように制御する。
【００４２】
ここで、処理数Ｋのバタフライ演算器４による第２の中間データと出力データの生成するバタフライ演算は、基数２で説明したために各（Ｎ／２）サイクルとして説明していたが、処理数Ｋでは（Ｎ／Ｋ）サイクルで終了してしまう。しかし、８ワードＲＡＭ１−１、１−２が交互に切り替えられているため、一方の８ワードＲＡＭが処理中のＮ点の入力データを入力して生成された第１の中間データを記憶するとともに処理済みのＮ点の入力データに対する出力データの出力を処理が連続して動作させることで、バタフライ演算で生成された第２の中間データと出力データを記憶する他方の８ワードＲＡＭには（Ｎ／２−Ｎ／Ｋ）サイクルの待ち時間が発生しても問題はない。なお、このような待ち時間が発生する場合とは、一般に、全体のパイプラインサイクル数に対して処理数Ｋのバタフライ演算器４の処理数Ｋを大きくし過ぎたオーバースペックとなる設定によって、必要以上の処理性能を備えたときに発生する。よって、待ち時間となる処理サイクル数がより小さくなるように、より望ましくは無くなるように、必要最小限の処理性能を満たすことができる処理数Ｋの値を設定することで、処理数Ｋのバタフライ演算器４の回路規模を抑えることもできる。
【００４３】
図１７は、この発明の実施の形態１に係るＦＦＴ演算装置の８ワードＲＡＭのデータ蓄積の入出力推移の一例を示す説明図である。図において、８サイクルで繰り返し入力される入力データＩ０〜Ｉ７を交互に処理する８ワードＲＡＭ１−１および８ワードＲＡＭ１−２が、入力データＩ０〜Ｉ３、Ｉ４〜Ｉ７の４サイクルずつの入力期間に入出力するバタフライ演算の過程のデータの推移が示されており、待ち時間が発生することなく８点ＦＦＴ演算が動作できることが分かる。
【００４４】
なお、この発明の実施の形態１に係るＦＦＴ演算装置では、連続データ数Ｎ＝８として８点ＦＦＴ演算を行う場合について説明したが、Ｎ＝８に限らず、Ｎ＝２ｎ個のデータに対して適用可能であることはいうまでもない。
【００４５】
また、この発明の実施の形態１に係るＦＦＴ演算装置では、バタフライ演算器の動作速度に対して８ワードＲＡＭ１１、１２がＳ倍速で読み書きできるＲＡＭで構成できるとき、８ワードＲＡＭの１出力ポートからシリアルアクセスする出力データを切り替えて出力してもよい。すなわち、図１５で説明したセレクタ１６への出力データＦ４〜Ｆ７の出力と、直前の（Ｎ／２）サイクルで記憶した入力データＩ０〜Ｉ３の出力を１サイクル中にＲＡＭの速度に合わせて切り替えることで同一のポートから出力を行っても構わない。
【００４６】
また、この発明の実施の形態１に係るＦＦＴ演算装置では、Ｋ＝２のときの処理数Ｋのバタフライ演算器４として説明したが、処理数２に限らず、任意のＫを設定しても良い。
【００４７】
なお、Ｎ点ＦＦＴ演算のＮ点の入力データ（Ｉ０〜Ｉ（Ｎ−１））数Ｎに基づいて、処理数Ｋのバタフライ演算器４がオーバースペックとならない処理数Ｋの設定値は、次のような関係を満たす。一般に、入力データ数Ｎ＝２ｎで表される場合は、初段（第１段）のバタフライ演算を基数２のバタフライ演算器２、また第２段以降第ｎ段（＝ｌｏｇ２Ｎ）までのバタフライ演算を処理数Ｋのバタフライ演算器４が実行してＮ点の出力データ（Ｆ０〜Ｆ（Ｎ−１））を生成することになる。このとき、２つのＮワードＲＡＭを備えたＦＦＴ演算装置で、入力データの入力に待ち時間を発生させないためには、一方のＮワードＲＡＭのデータに対して初段（第１段）の基数２のバタフライ演算を実行しているＮサイクル中に、他方のＮワードＲＡＭのデータに対して第２段以降の（ｎ−１）段の基数Ｋのバタフライ演算の合計処理点数（Ｎ×（ｎ−１））を処理しきらなければならないので、Ｎ≧Ｎ／Ｋ×（ｎ−１）となる整数Ｋ≧ｎ−１であればよく、例えば２のべき乗で表される整数値Ｋを設定する。よって、極端なオーバースペックになり過ぎないようにするには、Ｋ≧ｎ−１を満たす最小の２のべき乗で表される整数値Ｋを処理数Ｋのバタフライ演算器４の処理数として設定すればよい。よって、この発明の実施の形態１に係るＦＦＴ演算装置において、図３に示した入力データ数Ｎ＝８（ｎ＝３）の場合、処理数Ｋ＝２は、この条件を満たす設定であることは明らかである。
【００４８】
図１８は、この発明の実施の形態１に係る処理数Ｋのバタフライ演算を適用したＦＦＴ演算装置の一例を示すブロック構成図である。図において、図１に示したブロック構成図からの変更部分を示しており、処理数Ｋは４のときの各構成ブロック間の結線数で表しているが、ＮワードＲＡＭ１−１、１−２をＫ個の（Ｎ／Ｋ）ワード１リード／１ライト（２ポート）ＲＡＭで構成して、見かけ上ＮワードＫリード／Ｋライト（２Ｋポート）ＲＡＭとして動作させ、リードアドレスセレクタ２５ａ、２５ｂ、セレクタ１５、処理数Ｋのバタフライ演算器４、セレクタ１２、セレクタ１３、ライトアドレスセレクタ２２ａ、２２ｂについてもそれぞれＫ入力／Ｋ出力とすることで、処理数Ｋのバタフライ演算の第２段、第３段に対応するように構成することができる。このとき、セレクタ１１からセレクタ１２、セレクタ１３への入力は各２入力となるので、処理数Ｋのバタフライ演算器４からＫ入力されるセレクタ１２、セレクタ１３の出力は選択的に使用される。なお、ＮワードＲＡＭ１−２の詳細構成は省略したが、ＮワードＲＡＭ１−１と同様とする。また、セレクタ１１からセレクタ１２、セレクタ１３に入力するデータ対と組にして（Ｋ−２）個の空データ“０”を入力するものとしたが、セレクタ１１の入力において挿入しても構わない。
【００４９】
また、図１に示したブロック構成図では、データ記憶部である８ワードＲＡＭを２つ備えたＦＦＴ演算装置について説明したが、より少ないメモリ構成となる８ワードＲＡＭ１−２、セレクタ１３、セレクタ１４、セレクタ１５およびセレクタ１６を備えないＦＦＴ演算装置でもＦＦＴ演算が実行できる。このとき、これまで説明した８ワードＲＡＭ１−１は図示した８点ＦＦＴ演算データの推移のように動作し、備えない８ワードＲＡＭ１−２が処理していた入力データの入力サイクルは入力の待ち時間となるが、少ないメモリ構成でＦＦＴ演算が実行できる。
【００５０】
また、この発明の実施の形態１に係るＦＦＴ演算装置では、入出力データの単位をワードで表現したが、ワードに限らず、バイトやダブルワードなどを単位とするデータサイズに対応した構成とすることで同様のＦＦＴ演算が実行できることはいうまでもない。
【００５１】
以上のように、この発明の実施の形態１に係るＦＦＴ演算装置によれば、Ｎ点の連続する入力データに対して少ないメモリ量でＦＦＴ演算することができる。
【００５２】
また、この発明の実施の形態１に係るＦＦＴ演算装置によれば、データ記憶部に記憶した処理済みのＮ点の入力データに対するＮ点の出力データの前半のデータを出力する処理サイクルと処理中のＮ点の入力データの前半のデータをデータ記憶部に記憶する処理サイクルおよびデータ記憶部に記憶した処理済みのＮ点の入力データに対するＮ点の出力データの後半のデータを出力する処理サイクルと、データ記憶部に記憶した処理中のＮ点の入力データの前半の入力データおよび処理中のＮ点の入力データの後半のデータに対して基数２のバタフライ演算器が生成するＮ点の中間データをデータ記憶部に記憶する処理サイクルとを同時に実行させるように制御することで、Ｎ点ＦＦＴ演算に要する処理サイクルを短縮することができる。
【００５３】
また、この発明の実施の形態１に係るＦＦＴ演算装置によれば、入力されるＮ点の入力データごとに２つのデータ記憶部を切り替えて、一方のデータ記憶部に、記憶された処理済みのＮ点の入力データに対するＮ点の出力データを出力させると同時に、処理中のＮ点の入力データの前半のデータを記憶させ、この処理中のＮ点の入力データの前半と後半のデータに対して生成されたＮ点の中間データを記憶させる処理サイクル中に、他方のデータ記憶部に、処理中のＮ点の入力データと処理済みのＮ点の入力データの間に入力されたＮ点の入力データに対して生成された処理中のＮ点の中間データを記憶させ、この記憶させたＮ点の第２の中間データに対して生成されたＮ点の出力データを記憶させるように制御することで、２Ｎ個のメモリ量で入力データの入力に待ち時間が発生することなくＮ点ＦＦＴ演算をＮサイクルで実行することができる。
【００５４】
また、この発明の実施の形態１に係るＦＦＴ演算装置によれば、入力されるＮ点の入力データごとに、ビット正順のアドレスの記憶領域にＮ点の入力データを記憶して処理数Ｋのバタフライ演算器が実行した処理数Ｋのバタフライ演算でビット逆順のアドレスの記憶領域に並び替わって記憶されたＮ点の出力データをＮ点の入力データの入力順に並び替えて読み出す処理と、ビット逆順のアドレスの記憶領域にＮ点の入力データを並び替えて記憶して処理数Ｋのバタフライ演算器が実行した処理数Ｋのバタフライ演算でビット正順のアドレスの記憶領域に並び替わって記憶されたＮ点の出力データをＮ点の入力データの入力順に読み出す処理を交互に行い、Ｋリード/Ｋライトのデータ記憶部に入出力を同時実行することで、並べ替えに必要なメモリ領域を必要とせずにＦＦＴ演算を実行できる。
【符号の説明】
【００５５】
１、１−１、１−２  データ記憶部（ＮワードＲＡＭ）
２  基数２のバタフライ演算器
３  回転因子記憶部（回転因子ＲＯＭ）
４  処理数Ｋのバタフライ演算器
１１、１２、１３、１４、１５、１６  セレクタ
２１  ライトアドレスデコーダ（ＷＡデコーダ）
２２  ライトデータセレクタ（ＷＤセレクタ）
２３  リードアドレスデコーダ（ＲＡデコーダ）
２４ａ、２４ｂ  （Ｎ／Ｋ）ワードＲＡＭ
２５  リードデータセレクタ（ＲＤセレクタ）
【図１】
0005549442.tif 000002
【図２】
0005549442.tif 000003
【図３】
0005549442.tif 000004
【図４】
0005549442.tif 000005
【図５】
0005549442.tif 000006
【図６】
0005549442.tif 000007
【図７】
0005549442.tif 000008
【図８】
0005549442.tif 000009
【図９】
0005549442.tif 000010
【図１０】
0005549442.tif 000011
【図１１】
0005549442.tif 000012
【図１２】
0005549442.tif 000013
【図１３】
0005549442.tif 000014
【図１４】
0005549442.tif 000015
【図１５】
0005549442.tif 000016
【図１６】
0005549442.tif 000017
【図１７】
0005549442.tif 000018
【図１８】
0005549442.tif 000019