JP2008217359A - 高速フーリエ変換装置及び高速フーリエ変換処理方法 - Google Patents
高速フーリエ変換装置及び高速フーリエ変換処理方法 Download PDFInfo
- Publication number
- JP2008217359A JP2008217359A JP2007053219A JP2007053219A JP2008217359A JP 2008217359 A JP2008217359 A JP 2008217359A JP 2007053219 A JP2007053219 A JP 2007053219A JP 2007053219 A JP2007053219 A JP 2007053219A JP 2008217359 A JP2008217359 A JP 2008217359A
- Authority
- JP
- Japan
- Prior art keywords
- data
- address
- butterfly
- ram
- radix
- 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.)
- Withdrawn
Links
Images
Landscapes
- Complex Calculations (AREA)
Abstract
【課題】高速フーリエ変換装置及び高速フーリエ変換処理方法に関し、演算データの並び替えを行うことなくバタフライ演算を行い、より高速にフーリエ変換を行う。
【解決手段】高速フーリエ変換におけるバタフライ演算の演算対象のデータを、入力RAM1−1の4つのRAMの各アドレスに、アドレス値の各ビットの排他的論理和の値に従って、4つのメモリの番号のインクリメント順又はデクリメント順に、順番に振り分けて格納し、データ選択部1−3で、基数2バタフライ演算の実行対象とするデータを読み出し、各ステージの基数2のバタフライ演算を、2つのバタフライ演算部1−41,1−42で実行し、各ステージの演算結果を演算RAM1−5に書き込む。そのとき、バタフライ演算の対象となったデータを読み出したメモリと同一番号のメモリの同一のアドレスに書き込む。演算対象のデータのアドレス等は簡易なロジックで生成することができる。
【選択図】図1
【解決手段】高速フーリエ変換におけるバタフライ演算の演算対象のデータを、入力RAM1−1の4つのRAMの各アドレスに、アドレス値の各ビットの排他的論理和の値に従って、4つのメモリの番号のインクリメント順又はデクリメント順に、順番に振り分けて格納し、データ選択部1−3で、基数2バタフライ演算の実行対象とするデータを読み出し、各ステージの基数2のバタフライ演算を、2つのバタフライ演算部1−41,1−42で実行し、各ステージの演算結果を演算RAM1−5に書き込む。そのとき、バタフライ演算の対象となったデータを読み出したメモリと同一番号のメモリの同一のアドレスに書き込む。演算対象のデータのアドレス等は簡易なロジックで生成することができる。
【選択図】図1
Description
本発明は、高速フーリエ変換装置及び高速フーリエ変換処理方法に関し、特に、高速フーリエ変換(FFT:Fast Fourier Transform)における代表的な演算の一つであるバタフライ演算の改良を図った高速フーリエ変換装置及び高速フーリエ変換処理方法に関する。
高速フーリエ変換処理は、時間領域信号のサンプルポイントの離散値の複素数データを入力し、サンプルポイント数の入力データに対して、基数4(Radix−4)又は基数2(Radix−2)のバタフライ演算を実行し、演算回数を大幅に減らして周波数領域信号に高速に変換する。
上記演算を行うために、演算データを保存するメモリ(RAM:Random Access Memory)、回転子(WN=exp(−2πi/N)の係数を格納したメモリ(ROM:Read Only Memory)及び複数の演算器を用いて演算を行う構成となっており、サンプルポイント数をNとしたとき、基数2(Radix−2)の場合log2N、基数4(Radix−4の場合log4Nのステージ数のバタフライ演算を行う。
バタフライ演算については下記の特許文献等に記載されている。下記の特許文献1に記載のバタフライ演算は、メモリ(RAM)に保存した演算データの並び替えを演算のステージ毎に行って演算処理を行うものである。該演算データの並び替えは、ポイント数が増えるほど、またステージ数が増えるほど、多くの処理時間が掛かり、また、並び替えを行うためのメモリ(RAM)を別途用意する必要があり、回路規模が増大してしまう。
また、下記の特許文献2や特許文献3では、演算データを複数のメモリ(RAM)に分けて格納し、2つの演算部で同時にバタフライ演算を行う、或いは複数のメモリ(RAM)に同時に独立してアクセス可能とすることにより、処理速度の向上を図った高速フーリエ変換装置が提案されている。
下記の特許文献4では、基数4(Radix−4)のバタフライ演算と基数2(Radix−2)のバタフライ演算との混合方式を用いることで、処理時間の短縮を図った高速フーリエ変換処理が提案されている。但し、2の奇数のべき乗のポイント数の場合に基数2(Radix−2)のバタフライ演算を行うときに、データの並べ替えを行っているため、その処理時間を必要とする。
特開平11−203272号公報
特開2005−196787号公報
特開2001−56806号公報
特表2005−531252号公報
バタフライ演算において、演算データの並び替えの処理は、メモリ(RAM)へのアクセス時間のために、ポイント数の増加とともに処理時間が増えてしまい、上記特許文献1に記載のバタフライ演算のように、ステージ毎に演算データの並び替えを行うと、並び替え処理の時間だけで、例えばポイント数256の場合は、ポイント数16の場合の32倍に処理時間が増えてしまう。
これは、ポイント数256の場合のステージ数は8(=log2256)で、ポイント数16の場合のステージ数は4(=log216)であり、並び替えのためのメモリ(RAM)へのアクセス時間は、ポイント数256の場合、
(8段×256アドレス)/(4段×16アドレス)=32倍
となるからである。
(8段×256アドレス)/(4段×16アドレス)=32倍
となるからである。
演算時間を短縮するためにはデータの並び替えの処理時間の無駄をなくし、効率的に演算を行うことが必要である。また、バタフライ演算として、基数4(Radix−4)と基数2(Radix−2)とがあるが、基数2(Radix−2)のバタフライ演算は、基数4(Radix−4)のバタフライ演算より、ステージ数が2倍となるため、演算時間が2倍掛かる。一方、基数4(Radix−4)のバタフライ演算は、2の奇数のべき乗のポイント数の場合の高速フーリエ変換処理を実施することができない。
基数2(Radix−2)のバタフライ演算部を2個設け、基数2(Radix−2)のバタフライ演算を並列して同時に行うことにより、基数4(Radix−4)のバタフライ演算と同等の処理速度が得られる高速フーリエ変換装置を構成することができるが、従来のものは、演算データの並び替えなしに演算を行うことができず、基数2(Radix−2)バタフライ演算自体は高速化されても、演算データの並び替えの処理時間が掛かり、メモリ(RAM)の個数も増え、回路規模が増大するという問題があった。
本発明は、基数2(Radix−2)のバタフライ演算部を2個設けて並列に演算を実行させても、演算データの並び替えの必要がないように、バタフライ演算を行い、これにより、2の奇数のべき乗のバタフライ演算も実施することができ、基数4(Radix−4)のバタフライ演算と同等の処理時間で高速に演算を行うことができる高速フーリエ変換装置及び高速フーリエ変換処理方法を提供する。
本発明の高速フーリエ変換装置は、高速フーリエ変換におけるバタフライ演算の演算対象のデータを格納する4つのメモリと、前記4つのメモリに格納されたデータの中から、基数2のバタフライ演算の実行対象とするデータのアドレスを生成するアドレス生成部と、前記アドレス生成部で生成されたアドレスのデータを前記メモリから読み出して基数2バタフライ演算部に出力するデータ選択部と、前記データ選択部から入力されるデータに対して、各ステージの基数2のバタフライ演算を実行するバタフライ演算部と、を備え、前記アドレス生成部は、演算対象の入力データを、4つのメモリの各アドレスに、該アドレス値の各ビットの排他的論理和の値に従って、該4つのメモリの番号のインクリメント順又はデクリメント順に、順番に振り分けて格納するよう、該4つのメモリの書き込みアドレスを生成し、かつ、前記バタフライ演算部で実行された各ステージのバタフライ演算の結果を、該バタフライ演算の対象となったデータを読み出したメモリの番号と同一のメモリの同一アドレスに書き込むよう、4つのメモリの書き込みアドレスを生成する構成を有することを特徴とする。
この構成により、演算データの並び替えを行うことなく、各ステージの基数2のバタフライ演算を行うことができる。
また、前記バタフライ演算部を2個備え、該2個のバタフライ演算部により、それぞれ異なるデータの組に対して、基数2のバタフライ演算を同時に並列して実行する構成を有することを特徴とする。この構成により、基数2のバタフライ演算を基数4のバタフライ演算と同等の処理時間で実行することができる。
また、前記演算対象のデータを格納する4つのメモリとして、入力データを取り込むメモリと、前記バタフライ演算の各ステージの演算結果を格納するメモリとを、別々に設けたことを特徴とする。この構成により、1周期分のサンプルポイントの入力データのバタフライ演算の最中に、次の周期の入力データをメモリに取り込んで保持しておき、実行中のバタフライ演算の終了後に、次周期の入力データのバタフライ演算を連続的に行うことができる。
本発明によれば、各ステージのバタフライ演算において、演算対象のデータを読み出したメモリの同一アドレスに演算結果を書き込むことにより、演算データの並び替えを行う必要が無く、その分の処理時間を短縮し、並び替え用のメモリを削減することができる。また、基数2のバタフライ演算のみを行い、基数4のバタフライ演算を行わないため、2の奇数のべき乗のポイント数のデータの演算も行うことができる。
また、演算対象のデータを4つのメモリの各アドレスに、該アドレス値の各ビットの排他的論理和の値に従って、該4つのメモリの番号のインクリメント順又はデクリメント順に順番に振り分けて格納することにより、ポイント数によって振り分け方を変えることなく格納することができ、また、演算対象のデータを読み出すメモリのアドレスを、ポイント数に拘わりなく、ビットシフト、デクリメント若しくはインクリメント、排他的論理和等の簡単な論理回路又は論理演算で生成することができ、また、データの出力順のメモリの番号及びアドレスも、同様の簡単な論理回路又は論理演算で生成することができる。
また、基数2のバタフライ演算部を2個設けて並列に動作させることにより、基数4のバタフライ演算と同等の処理時間で演算を行うことができ、2の奇数のべき乗のポイント数のデータの演算も高速に行うことができる。また、データ入力用のメモリと演算用のメモリとを分けて設けたことにより、バタフライ演算を連続的に行うことができ、フーリエ変換処理を高速に行うことができる。
図1に本発明の高速フーリエ変換装置の構成を示す。本発明の高速フーリエ変換装置は、入力データx(0),・・・,x(N)を格納する入力メモリ(RAM)1−1と、回転子(W)の係数を格納した回転子メモリ(ROM)1−2と、データ選択部1−3と、基数2(Radix−2)の1ステージ分のバタフライ演算を行う第1及び第2のRadix−2バタフライ演算部1−41,1−42と、バタフライ演算の演算データを格納する演算メモリ(RAM)1−5と、アドレス生成部1−6とを備える。
入力メモリ(RAM)1−1は、4つのメモリRAM1(in)〜RAM4(in)から成り、また、演算メモリ(RAM)1−5も、4つのメモリRAM1(op)〜RAM4(op)から成る。入力メモリ(RAM)1−1及び演算メモリ(RAM)1−5は、共に演算対象のデータを格納するメモリであり、共用することも可能であるが、入力メモリ(RAM)1−1と演算メモリ(RAM)1−5とに分けて設けたのは、1周期分のサンプルポイントの入力データを、演算メモリ(RAM)1−5を使用してバタフライ演算を行っている最中に、次の周期の入力データを入力メモリ(RAM)1−1に取り込んで保持しておき、実行中のバタフライ演算の終了後に、次周期の入力データのバタフライ演算を連続的に行い、バタフライ演算処理の高効率化、高速化を図るためである。
図2に連続的なバタフライ演算処理のタイムチャートを示す。同図に示すように、期間T1で入力データD1を入力メモリ(RAM)1−1に書き込み、次の期間T2で演算メモリ(RAM)1−5を用いて入力データD1のバタフライ演算を実行中に、次の入力データD2を入力メモリ(RAM)1−1に書き込んでおくことにより、入力データD1のバタフライ演算処理が終了した直後に、次の期間T3で次の入力データD2のバタフライ演算処理を連続して実行することが可能となる。
図1に示した本発明の高速フーリエ変換装置におけるバタフライ演算処理のフローは、まず、入力データx(0),・・・,x(N)を、以下に述べる振り分け法によって、入力メモリ(RAM)1−1の4つのメモリRAM1(in)〜RAM4(in)に振り分けて格納する。
データ選択部1−3は、アドレス生成部1−6から生成されるアドレスに従って、入力メモリ(RAM)1−1の4つのメモリRAM1(in)〜RAM4(in)から同時に4つ入力データ読み出し、また、回転子メモリ(ROM)1−2から回転子(W)の係数を読み出して、第1及び第2のRadix−2バタフライ演算部1−41,1−42に出力する。
第1及び第2のRadix−2バタフライ演算部1−41,1−42は、データ選択部1−3から入力されたデータに対して第1ステージのRadix−2バタフライ演算を行い、その演算結果を、アドレス生成部1−6によって生成されるアドレスに従って、演算メモリ(RAM)1−5の4つのメモリRAM1(op)〜RAM4(op)に書き込むが、書き込む場所は、演算対象の入力データを読み出したメモリ入力メモリ(RAM)1−1と同一の記憶位置(RAM1(in)〜RAM4(in)のRAM番号及びアドレスが同一の位置)に書き込む。
第2ステージのバタフライ演算は、演算メモリ(RAM)1−5の4つのメモリRAM1(op)〜RAM4(op)から読み出した演算データを、データ選択部1−3で選択して、第1及び第2のRadix−2バタフライ演算部1−41,1−42に入力し、第1及び第2のRadix−2バタフライ演算部1−41,1−42は、第2ステージ以降のRadix−2バタフライ演算を行い、該演算結果を、演算データを読み出した演算メモリ(RAM)1−5(RAM1(op)〜RAM4(op))の同一記憶位置に書き込み、第3ステージ以降も同様の動作を繰り返す。そして、最終ステージのバタフライ演算が終了したときに、出力順に演算メモリ(RAM)1−5の4つのメモリRAM1(op)〜RAM4(op)から演算結果を読み出し、出力データF(0),・・・F(N)として出力する。
上述したように、本発明によるバタフライ演算自体は、演算メモリ(RAM)1−5のRAM1(op)〜RAM4(op)の4個のメモリのみの使用で実行可能である。ここで、前述の入力データx(0),・・・,x(N)を、入力メモリ(RAM)1−1の4つのメモリRAM1(in)〜RAM4(in)に振り分ける振り分け法について説明する。
該入力データの振り分け法を図3の表1に示す。表1は、4つのメモリRAM1(in)〜RAM4(in)がそれぞれ0番〜31番の32個のアドレスを有し、該4つのメモリRAM1(in)〜RAM4(in)に、x0〜x127の128個の入力データを振り分けて格納する例を示している。
図3の表1に示すように、4つのメモリRAM1(in)〜RAM4(in)の共通のアドレスに関して、アドレス生成部1−6は、該アドレス値の各ビットの排他的論理和(XOR)を算出し、該排他的論理和(XOR)が0のときは、各メモリRAM1(in)〜RAM4(in)のRAM番号のインクリメント順に入力データを各メモリRAM1(in)〜RAM4(in)に振り分けて当該アドレスに格納し、該アドレス値の各ビットの排他的論理和(XOR)が1のときは、各メモリRAM1(in)〜RAM4(in)のRAM番号のデクリメント順に入力データを振り分けて当該アドレスに格納するよう、入力メモリ(RAM)に対して、書き込みアドレスを送出する。
即ち、アドレス0(=“00000”)については、その各ビットの排他的論理和(XOR)が0なので、入力データの最初の4つの入力データx0〜x3をRAM番号のインクリメント順に、RAM1(in)にx0,RAM2(in)にx1,RAM3(in)にx2,RAM4(in)にx3を格納する。
アドレス1(=“00001”)については、その各ビットの排他的論理和(XOR)が1なので、入力データの次の4つの入力データx4〜x7をRAM番号のデクリメント順に、RAM4(in)にx4,RAM3(in)にx5,RAM2(in)にx6,RAM1(in)にx7を格納する。
以下同様に、アドレス値の排他的論理和(XOR)が0か1かによってインクリメント順又はデクリメント順に、入力データを4つのメモリRAM1(in)〜RAM4(in)に振り振り分けて格納する。このように格納しておくことにより、演算データの並び替えを行うことなく、バタフライ演算を行うことが可能となる。
図3の表では、入力データx127までの場合について記載しているが、x128以降の入力データに対しても同様の振り分け法で4つのメモリRAM1(in)〜RAM4(in)に格納することにより、演算データの並び替えを行うことなく、バタフライ演算を行うことが可能であり、ポイント数(N)によって、振り分け方が変わることはない。
図4にポイント数16の場合のバタフライ演算の処理フローを示す。同図に示すように、第1ステージの演算として、入力メモリ(RAM)のRAM1(in)のアドレス0のデータx0とRAM4(in)のアドレス2のデータx8とのRadix−2バタフライ演算を、第1のRadix−2バタフライ演算部1−41で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM1(op)のアドレス0及びRAM4(op)のアドレス2に書き込む。
同様に、入力メモリ(RAM)のRAM1(in)のアドレス1のデータx7とRAM4(in)のアドレス3のデータx15とのRadix−2バタフライ演算を、第1のRadix−2バタフライ演算部1−41で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM1(op)のアドレス1及びRAM4(op)のアドレス3に書き込む。
同様に、入力メモリ(RAM)のRAM1(in)のアドレス2のデータx11とRAM4(in)のアドレス0のデータx3とのRadix−2バタフライ演算を、第1のRadix−2バタフライ演算部1−41で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM1(op)のアドレス2及びRAM4(op)のアドレス0に書き込む。
同様に、入力メモリ(RAM)のRAM1(in)のアドレス3のデータx12とRAM4(in)のアドレス1のデータx4とのRadix−2バタフライ演算を、第1のRadix−2バタフライ演算部1−41で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM1(op)のアドレス3及びRAM4(op)のアドレス1に書き込む。
同様に、入力メモリ(RAM)のRAM2(in)のアドレス0のデータx1とRAM3(in)のアドレス2のデータx9とのRadix−2バタフライ演算を、第2のRadix−2バタフライ演算部1−42で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM2(op)のアドレス0及びRAM3(op)のアドレス2に書き込む。
同様に、入力メモリ(RAM)のRAM2(in)のアドレス1のデータx6とRAM3(in)のアドレス3のデータx14とのRadix−2バタフライ演算を、第2のRadix−2バタフライ演算部1−42で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM2(op)のアドレス1及びRAM3(op)のアドレス3に書き込む。
同様に、入力メモリ(RAM)のRAM2(in)のアドレス2のデータx10とRAM3(in)のアドレス0のデータx2とのRadix−2バタフライ演算を、第2のRadix−2バタフライ演算部1−42で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM2(op)のアドレス2及びRAM3(op)のアドレス0に書き込む。
同様に、入力メモリ(RAM)のRAM2(in)のアドレス3のデータx13とRAM3(in)のアドレス1のデータx5とのRadix−2バタフライ演算を、第2のRadix−2バタフライ演算部1−42で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM2(op)のアドレス3及びRAM3(op)のアドレス1に書き込む。
第2ステージでは、演算メモリ(RAM)のRAM1(op)のアドレス0のデータx0とRAM4(op)のアドレス1のデータx4とのRadix−2バタフライ演算を、第1のRadix−2バタフライ演算部1−41で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM1(op)のアドレス0及びRAM4(op)のアドレス1に書き戻す。
同様に、演算メモリ(RAM)のRAM1(op)のアドレス1のデータx7とRAM4(op)のアドレス0のデータx3とのRadix−2バタフライ演算を、第1のRadix−2バタフライ演算部1−41で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM1(op)のアドレス1及びRAM4(op)のアドレス0に書き戻す。
同様に、演算メモリ(RAM)のRAM1(op)のアドレス2のデータx11とRAM4(op)のアドレス3のデータx15とのRadix−2バタフライ演算を、第1のRadix−2バタフライ演算部1−41で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM1(op)のアドレス2及びRAM4(op)のアドレス3に書き戻す。
同様に、演算メモリ(RAM)のRAM1(op)のアドレス3のデータx12とRAM4(op)のアドレス2のデータx8とのRadix−2バタフライ演算を、第1のRadix−2バタフライ演算部1−41で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM1(op)のアドレス3及びRAM4(op)のアドレス2に書き戻す。
同様に、演算メモリ(RAM)のRAM2(op)のアドレス0のデータx1とRAM3(op)のアドレス1のデータx5とのRadix−2バタフライ演算を、第2のRadix−2バタフライ演算部1−42で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM2(op)のアドレス0及びRAM3(op)のアドレス1に書き戻す。
同様に、演算メモリ(RAM)のRAM2(op)のアドレス1のデータx6とRAM3(op)のアドレス0のデータx2とのRadix−2バタフライ演算を、第2のRadix−2バタフライ演算部1−42で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM2(op)のアドレス1及びRAM3(op)のアドレス0に書き戻す。
同様に、演算メモリ(RAM)のRAM2(op)のアドレス2のデータx10とRAM3(op)のアドレス3のデータx14とのRadix−2バタフライ演算を、第2のRadix−2バタフライ演算部1−42で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM2(op)のアドレス2及びRAM3(op)のアドレス3に書き戻す。
同様に、演算メモリ(RAM)のRAM2(op)のアドレス3のデータx13とRAM3(op)のアドレス2のデータx9とのRadix−2バタフライ演算を、第2のRadix−2バタフライ演算部1−42で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM2(op)のアドレス3及びRAM3(op)のアドレス2に書き戻す。
第3ステージでは、演算メモリ(RAM)のRAM1(op)のアドレス0のデータx0とRAM3(op)のアドレス0のデータx2とのRadix−2バタフライ演算を、第1のRadix−2バタフライ演算部1−41で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM1(op)のアドレス0及びRAM3(op)のアドレス0に書き戻す。
同様に、演算メモリ(RAM)のRAM1(op)のアドレス1のデータx7とRAM3(op)のアドレス1のデータx5とのRadix−2バタフライ演算を、第1のRadix−2バタフライ演算部1−41で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM1(op)のアドレス1及びRAM3(op)のアドレス1に書き戻す。
同様に、演算メモリ(RAM)のRAM1(op)のアドレス2のデータx11とRAM3(op)のアドレス2のデータx9とのRadix−2バタフライ演算を、第1のRadix−2バタフライ演算部1−41で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM1(op)のアドレス2及びRAM3(op)のアドレス2に書き戻す。
同様に、演算メモリ(RAM)のRAM1(op)のアドレス3のデータx12とRAM3(op)のアドレス3のデータx14とのRadix−2バタフライ演算を、第1のRadix−2バタフライ演算部1−41で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM1(op)のアドレス3及びRAM3(op)のアドレス3に書き戻す。
同様に、演算メモリ(RAM)のRAM2(op)のアドレス0のデータx1とRAM4(op)のアドレス0のデータx3とのRadix−2バタフライ演算を、第2のRadix−2バタフライ演算部1−42で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM2(op)のアドレス0及びRAM4(op)のアドレス0に書き戻す。
同様に、演算メモリ(RAM)のRAM2(op)のアドレス1のデータx6とRAM4(op)のアドレス1のデータx4とのRadix−2バタフライ演算を、第2のRadix−2バタフライ演算部1−42で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM2(op)のアドレス1及びRAM4(op)のアドレス1に書き戻す。
同様に、演算メモリ(RAM)のRAM2(op)のアドレス2のデータx10とRAM4(op)のアドレス2のデータx8とのRadix−2バタフライ演算を、第2のRadix−2バタフライ演算部1−42で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM2(op)のアドレス2及びRAM4(op)のアドレス2に書き戻す。
同様に、演算メモリ(RAM)のRAM2(op)のアドレス3のデータx13とRAM4(op)のアドレス3のデータx15とのRadix−2バタフライ演算を、第2のRadix−2バタフライ演算部1−42で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM2(op)のアドレス3及びRAM4(op)のアドレス3に書き戻す。
第4ステージでは、演算メモリ(RAM)のRAM1(op)のアドレス0のデータx0とRAM2(op)のアドレス0のデータx1とのRadix−2バタフライ演算を、第1のRadix−2バタフライ演算部1−41で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM1(op)のアドレス0及びRAM2(op)のアドレス0に書き戻す。
同様に、演算メモリ(RAM)のRAM1(op)のアドレス1のデータx7とRAM2(op)のアドレス1のデータx6とのRadix−2バタフライ演算を、第1のRadix−2バタフライ演算部1−41で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM1(op)のアドレス1及びRAM2(op)のアドレス1に書き戻す。
同様に、演算メモリ(RAM)のRAM1(op)のアドレス2のデータx11とRAM2(op)のアドレス2のデータx10とのRadix−2バタフライ演算を、第1のRadix−2バタフライ演算部1−41で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM1(op)のアドレス2及びRAM2(op)のアドレス2に書き戻す。
同様に、演算メモリ(RAM)のRAM1(op)のアドレス3のデータx12とRAM2(op)のアドレス3のデータx13とのRadix−2バタフライ演算を、第1のRadix−2バタフライ演算部1−41で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM1(op)のアドレス3及びRAM2(op)のアドレス3に書き戻す。
同様に、演算メモリ(RAM)のRAM3(op)のアドレス0のデータx2とRAM4(op)のアドレス0のデータx3とのRadix−2バタフライ演算を、第2のRadix−2バタフライ演算部1−42で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM3(op)のアドレス0及びRAM4(op)のアドレス0に書き戻す。
同様に、演算メモリ(RAM)のRAM3(op)のアドレス1のデータx5とRAM4(op)のアドレス1のデータx4とのRadix−2バタフライ演算を、第2のRadix−2バタフライ演算部1−42で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM3(op)のアドレス1及びRAM4(op)のアドレス1に書き戻す。
同様に、演算メモリ(RAM)のRAM3(op)のアドレス2のデータx9とRAM4(op)のアドレス2のデータx8とのRadix−2バタフライ演算を、第2のRadix−2バタフライ演算部1−42で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM3(op)のアドレス2及びRAM4(op)のアドレス2に書き戻す。
同様に、演算メモリ(RAM)のRAM3(op)のアドレス3のデータx14とRAM4(op)のアドレス3のデータx15とのRadix−2バタフライ演算を、第2のRadix−2バタフライ演算部1−42で行い、その演算結果を、それぞれ、演算メモリ(RAM)のRAM3(op)のアドレス3及びRAM4(op)のアドレス3に書き戻す。
上述のポイント数16の場合のバタフライ演算における入力データの組み合わせを図5及び図6の表2に示す。図5は第1ステージ及び第2ステージにおけるRadix−2バタフライ演算の入力データの組み合わせを示している。また、図6は第3ステージ及び第4ステージにおけるRadix−2バタフライ演算の入力データの組み合わせを示している。
上述の表2は、例えば、第1ステージのRadix−2演算(第1の演算部1−41)の入力1の欄のRAM番号RAM1のアドレス0のデータx0と、入力2の欄のRAM番号RAM4のアドレス2のデータx8とが、第1のRadix−2バタフライ演算部1−41でRadix−2バタフライ演算されることを示している。他の欄についても同様である。
また、第1ステージのRadix−2演算(第2の演算部1−42)の入力1の欄のRAM番号RAM2のアドレス0のデータx1と、入力2の欄のRAM番号RAM3のアドレス2のデータx9とが、第2のRadix−2バタフライ演算部1−42でRadix−2バタフライ演算されることを示している。他の欄についても同様である。
本発明において、Radix−2バタフライ演算部を2つ備えているため、2組の入力データに対するRadix−2バタフライ演算を同時に行うことが可能である。例えば、第1ステージの場合では、RAM1のアドレス0のデータx0とRAM4のアドレス2のデータx8との演算と、RAM2のアドレス0のデータx1とRAM3のアドレス2のデータx9との演算とを同時に行うことができる。
ポイント数が変わっても演算データの組み合わせは変わらない。これは、表1に示したように、ポイント数が増加しても、前述の振り分け法に従って、増加した入力データを、順番に4つの各入力メモリのRAM番号の順番に従って、インクリメント順又はデクリメント順に格納し、その演算結果を、該入力データを格納した記憶位置と同一の記憶位置の演算メモリ(RAM)に格納するからである。
但し、ポイント数の増加によって、演算のステージ数及びデータ数が増加するが、増加分を除いたデータ部分は、増加前のデータのバタフライ演算と同一である。例えば、ポイント数16とポイント数32の場合、ポイント数16の第1ステージはポイント数32の第2ステージに当たり、ポイント数16に対して、ポイント数32は第1ステージを新たに追加したような形になる。図7〜図9の表3に、ポイント数32の場合のバタフライ演算における入力データの組み合わせを示す。
次に、Radix−2バタフライ演算の演算対象(入力1及び入力2)の組み合わせのアドレス生成について説明する。演算対象(入力1及び入力2)の組み合わせのアドレスは、以下のようにして生成することができる。該演算対象の一方(入力1)のアドレスは、アドレス値の昇順に生成すればよく、もう一方(入力2)のアドレス生成は、ポイント数の値から導き出すことができる。
上記入力2のアドレス生成について図10及び図11を参照して説明する。図10及び図11は、ポイント数32の場合の第1ステージ及び第2ステージにおける入力2のアドレス生成の手順を示しているが、ポイント数が16や64等の場合でも同様であり、また、第3ステージ以降についても同様である。
第1ステージの入力2の最初のアドレスは、ポイント数÷8によって算出される。ポイント数が16の場合は2(=16÷8)、ポイント数が32の場合は4(=32÷8)となる。ポイント数が32の場合、第1ステージの入力2のアドレス(4,5,6,7,0,1,2,3)は、図10に示すように、最初のアドレス4を2進数で表した“100”を、その下位2ビットを順にインクリメントし、第2ビット目が“1”から“0”に変化するときに、最上位ビットを“1”から“0”にデクリメントすることによって生成される。
第2ステージの入力2のアドレス(2,3,0,1,6,7,4,5)は、図10に示すように、第1ステージの最初のアドレス“100”を1ビット分右シフトすることにより、最初のアドレス“010”が生成され、この最初のアドレス“010”を、最下位ビットを順にインクリメントし、第2ビット目は、最下位ビットが“1”から“0”に変化するときに、“1”から“0”にデクリメントし、第2ビット目が“0”から“1”に変化するときに、最上位ビットを“0”から“1”にインクリメントすることによって生成される。
第3ステージの入力2のアドレス(1,0,3,2,5,4,7,6)は、図11に示すように、第2ステージの最初のアドレス“010”を1ビット分右シフトすることにより最初のアドレス“001”が生成され、この最初のアドレス“001”を、最下位ビットを順にデクリメントし、第2ビット目は、最下位ビットが“0”から“1”に変化するときに、“0”から“1”にインクリメントし、第2ビット目が“1”から“0”に変化するときに、最上位ビットを“0”から“1”にインクリメントすることによって生成される。
第4ステージの入力2のアドレス(0,1,2,3,4,5,6,7)は、第3ステージの最初のアドレス“001”を1ビット分右シフトすることにより最初のアドレス“000”が生成され、この最初のアドレス“000”から順にインクリメントすることによって生成することができる。第5ステージの入力2のアドレス(0,1,2,3,4,5,6,7)についても同様である。
次にデータの出力順について説明する。データの出力順は、入力データの順序の値を2進数で表示したビットの並び順を、上位側と下位側とで互いに入れ替えて逆向きにした値として得られる。図12の表4にポイント数16の場合の出力順、図13の表5にポイント数32の場合の出力順を示す。表4及び表5には、入力データの順序並びに出力データの順序順及び該出力データが格納されているRAM番号及びアドレスを示している。
ポイント数32の場合のデータ出力順のRAM番号及びアドレスの生成を図14に示す。データ出力順のアドレスは、同図(a)に示すように、データ出力順(入力データの順序の値を2進数で表示したビットの並び順を上位側と下位側とで互いに入れ替えて逆向きにした値)の上位3ビットの値によって与えられる。
また、データ出力順のRAM番号は、同図(b)に示すように、データの出力順(入力データの順序の値を2進数で表示したビットの並び順を上位側と下位側とで互いに入れ替えて逆向きにした値)の上位4ビットの排他的論理和(XOR)の値を第2ビット目に配置し、データの出力順の下位2ビットの排他的論理和(XOR)の値を第1ビット目に配置して合成した値に、1を加えることによって与えられる。
ポイント数16の場合のデータ出力順のRAM番号及びアドレスの生成も、類似の手法で生成することができる。データ出力順のアドレスは、同様に、データ出力順(入力データの順序の値を2進数で表示したビットの並び順を上位側と下位側とで互いに入れ替えて逆向きにした値)の上位2ビットの値によって与えられる。
また、ポイント数16の場合のデータ出力順のRAM番号は、データ出力順の上位3ビットの排他的論理和(XOR)の値を第2ビット目に配置し、データ出力順の下位1ビットと上位2ビットとの排他的論理和(XOR)の値を第1ビット目に配置して合成した値に、1を加えることによって与えられる。
1−1 入力メモリ(RAM)
1−2 回転子メモリ(ROM)
1−3 データ選択部
1−41,1−42 Radix−2バタフライ演算部
1−5 演算メモリ(RAM)
1−6 アドレス生成部
1−2 回転子メモリ(ROM)
1−3 データ選択部
1−41,1−42 Radix−2バタフライ演算部
1−5 演算メモリ(RAM)
1−6 アドレス生成部
Claims (4)
- 高速フーリエ変換におけるバタフライ演算の演算対象のデータを格納する4つのメモリと、
前記4つのメモリに格納されたデータの中から、基数2のバタフライ演算の実行対象とするデータのアドレスを生成するアドレス生成部と、
前記アドレス生成部で生成されたアドレスのデータを前記メモリから読み出して出力するデータ選択部と、
前記データ選択部から入力されるデータに対して、各ステージの基数2のバタフライ演算を実行するバタフライ演算部と、を備え、
前記アドレス生成部は、演算対象の入力データを、4つのメモリの各アドレスに、該アドレス値の各ビットの排他的論理和の値に従って、該4つのメモリの番号のインクリメント順又はデクリメント順に振り分けて格納するよう、該4つのメモリの書き込みアドレスを生成し、かつ、前記バタフライ演算部で実行された各ステージのバタフライ演算の結果を、該バタフライ演算の対象となったデータを読み出したメモリの番号と同一のメモリの同一アドレスに書き込むよう、4つのメモリの書き込みアドレスを生成する構成を有することを特徴とする高速フーリエ変換装置。 - 前記バタフライ演算部を2個備え、該2個のバタフライ演算部により、それぞれ異なるデータの組に対して、基数2のバタフライ演算を並列して実行する構成を有することを特徴とする請求項1に記載の高速フーリエ変換装置。
- 前記演算対象のデータを格納する4つのメモリとして、入力データを取り込むメモリと、前記バタフライ演算の各ステージの演算結果を格納するメモリとを、別々に設けたことを特徴とする請求項1又は2に記載の高速フーリエ変換装置。
- 高速フーリエ変換におけるバタフライ演算の演算対象のデータを、4つのメモリの各アドレスに、該アドレス値の各ビットの排他的論理和の値に従って、該4つのメモリの番号のインクリメント順又はデクリメント順に振り分けて格納し、
前記4つのメモリに格納されたデータの中から、基数2のバタフライ演算の実行対象とするデータを読み出し、各ステージの基数2のバタフライ演算を実行し、
前記バタフライ演算の各ステージの演算結果を、該バタフライ演算の対象となったデータを読み出したメモリと同一番号のメモリの同一のアドレスに書き込むことを特徴とする高速フーリエ変換処理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007053219A JP2008217359A (ja) | 2007-03-02 | 2007-03-02 | 高速フーリエ変換装置及び高速フーリエ変換処理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007053219A JP2008217359A (ja) | 2007-03-02 | 2007-03-02 | 高速フーリエ変換装置及び高速フーリエ変換処理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2008217359A true JP2008217359A (ja) | 2008-09-18 |
Family
ID=39837330
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007053219A Withdrawn JP2008217359A (ja) | 2007-03-02 | 2007-03-02 | 高速フーリエ変換装置及び高速フーリエ変換処理方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2008217359A (ja) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101833540A (zh) * | 2010-04-07 | 2010-09-15 | 华为技术有限公司 | 信号处理方法和装置 |
WO2011013251A1 (ja) * | 2009-07-31 | 2011-02-03 | 株式会社 東芝 | 信号受信装置および通信システム |
WO2011074128A1 (en) * | 2009-12-16 | 2011-06-23 | Telefonaktiebolaget L M Ericsson (Publ) | Information processing apparatus, control method thereof, program, and computer-readable storage medium |
WO2011102291A1 (ja) * | 2010-02-16 | 2011-08-25 | 日本電気株式会社 | 高速フーリエ変換回路 |
JP2012022500A (ja) * | 2010-07-14 | 2012-02-02 | Mitsubishi Electric Corp | Fft演算装置 |
WO2020084721A1 (ja) * | 2018-10-24 | 2020-04-30 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
-
2007
- 2007-03-02 JP JP2007053219A patent/JP2008217359A/ja not_active Withdrawn
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2011013251A1 (ja) * | 2009-07-31 | 2011-02-03 | 株式会社 東芝 | 信号受信装置および通信システム |
JP4995987B2 (ja) * | 2009-07-31 | 2012-08-08 | 株式会社東芝 | 信号受信装置および通信システム |
US8577946B2 (en) | 2009-07-31 | 2013-11-05 | Kabushiki Kaisha Toshiba | Signal receiving apparatus and communication system |
WO2011074128A1 (en) * | 2009-12-16 | 2011-06-23 | Telefonaktiebolaget L M Ericsson (Publ) | Information processing apparatus, control method thereof, program, and computer-readable storage medium |
WO2011102291A1 (ja) * | 2010-02-16 | 2011-08-25 | 日本電気株式会社 | 高速フーリエ変換回路 |
CN102763101A (zh) * | 2010-02-16 | 2012-10-31 | 日本电气株式会社 | 快速傅里叶变换电路 |
CN101833540A (zh) * | 2010-04-07 | 2010-09-15 | 华为技术有限公司 | 信号处理方法和装置 |
CN101833540B (zh) * | 2010-04-07 | 2012-06-06 | 华为技术有限公司 | 信号处理方法和装置 |
JP2012022500A (ja) * | 2010-07-14 | 2012-02-02 | Mitsubishi Electric Corp | Fft演算装置 |
WO2020084721A1 (ja) * | 2018-10-24 | 2020-04-30 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
JPWO2020084721A1 (ja) * | 2018-10-24 | 2021-09-24 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
JP7078129B2 (ja) | 2018-10-24 | 2022-05-31 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
He et al. | GPU-accelerated parallel sparse LU factorization method for fast circuit analysis | |
Wang et al. | VLSI design of a large-number multiplier for fully homomorphic encryption | |
JP2008217359A (ja) | 高速フーリエ変換装置及び高速フーリエ変換処理方法 | |
CN103870438B (zh) | 一种利用数论变换计算循环卷积的电路结构 | |
US9767074B2 (en) | Method and device for fast fourier transform | |
JP6003744B2 (ja) | 演算処理装置及び演算処理方法 | |
KR20230138519A (ko) | 병렬 조합 설계를 위한 시스템 및 방법 | |
Al Badawi et al. | Faster number theoretic transform on graphics processors for ring learning with errors based cryptography | |
US9582474B2 (en) | Method and apparatus for performing a FFT computation | |
JP5549442B2 (ja) | Fft演算装置 | |
JP2005196787A (ja) | 処理速度の向上した高速フーリエ変換装置およびその処理方法 | |
Isupov et al. | Fast power-of-two RNS scaling algorithm for large dynamic ranges | |
US20080228845A1 (en) | Apparatus for calculating an n-point discrete fourier transform by utilizing cooley-tukey algorithm | |
US11604852B2 (en) | Signal processing apparatus, method, program, and recording medium | |
JP5269137B2 (ja) | 演算装置 | |
Chang et al. | Accelerating multiple precision multiplication in GPU with Kepler architecture | |
JP5654373B2 (ja) | 演算装置、演算方法およびプログラム | |
Kasat et al. | Multiplication algorithms for vlsi-a review | |
Honda et al. | A warp-synchronous implementation for multiple-length multiplication on the GPU | |
JP6995629B2 (ja) | 演算回路 | |
CN112149046A (zh) | 一种基于并行时分复用技术的fft处理器及处理方法 | |
Wu et al. | Efficient VLSI architecture of Bluestein’s FFT for fully homomorphic encryption | |
CN114116012B (zh) | 基于混洗操作的fft码位反序算法向量化实现方法及装置 | |
Li et al. | An area-efficient large integer NTT-multiplier using discrete twiddle factor approach | |
JP6687700B2 (ja) | 情報処理装置、情報処理方法およびプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Withdrawal of application because of no request for examination |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20100511 |