以下に、本発明を実施するための形態について図面を用いて説明する。ただし、以下に述べる実施形態には、本発明を実施するために技術的に好ましい限定がされているが、発明の範囲を以下に限定するものではない。
(パイプライン処理)
本発明の実施形態を説明する前に、図7〜11を用いてFFT処理を用いたパイプライン処理について説明する。
(構成)
まず、図7を参照して、パイプライン回路方式によるFFT回路の構成例を説明する。図7において、FFT回路100は、時間領域のデータx(n)を入力し、FFT処理によりフーリエ変換した周波数領域の信号X(k)を生成して出力する回路である(n=0、1、・・・、N−1;k=0、1、・・・、N−1)。なお、NはFFTブロックサイズをあらわす正整数である。
図8は、64ポイントFFT/IFFTをPrime Factor法を利用して2段階の基数8のバタフライ処理112に分解したデータフロー図である。図8においては、時間領域のデータx(n)を入力し、FFT処理によりフーリエ変換した周波数領域の信号X(k)を出力する(k=0、1、・・・、63)。ただし、一部のデータフローの図示は省略している。
このデータフロー図の全てを回路で実現した場合、その回路規模が膨大になる。そのため、必要な処理性能に応じて、一部分を回路で実現し、その回路を繰り返し使用することで、FFT処理を実現する方法を用いることができる。
例えば、図8において、8データ並列でFFT処理を行うFFT回路100を物理的な回路として実装した場合、合計8回の繰り返し処理により64ポイントFFT/IFFT処理を実現することができる。具体的には、1回目に、部分データフロー110aに当たる処理を行い、2回目に、部分データフロー110bに当たる処理を行う。同様に、3〜7回目の処理を実行し、8回目に、部分データフロー110hに当たる処理を行う。このようにして、64ポイントFFT/IFFT処理を実現することができる。
具体的には、図8の例において、FFT回路100は、8データ並列で64ポイントFFT処理を行うとすると、時間領域のデータx(n)を入力し、FFT処理によりフーリエ変換した周波数領域の信号X(k)を生成して出力する(k=0、1、・・・、63)。このとき、入力データx(n)は、8データずつ8サイクルの期間に、図9の逐次順序テーブル80に示す順序で64データが入力されるとする。なお、図9の逐次順序テーブル80中の数値は、x(n)の括弧内の数値nを示す。具体的には、1サイクル目に、データ組Aを構成するx(0)、x(1)、・・・、x(7)の8データが入力される。2サイクル目に、データ組Bを構成するx(8)、x(9)、・・・、x(15)の8データが入力される。以降、3サイクル目から8サイクル目まで同様にして、データ組C〜Hを構成するデータが入力される。
同様に、出力データX(k)は、8データずつ8サイクルの期間に、図9の逐次順序テーブル80に示す順序で64データを出力する。なお、図9の逐次順序テーブル80中の数値は、X(k)の括弧内の数値kを示す。具体的には、1サイクル目に、データ組Aを構成するX(0)、X(1)、・・・、X(7)の8データを出力する。2サイクル目に、データ組Bを構成するX(8)、X(9)、・・・、X(15)の8データを出力する。以降、3サイクル目から8サイクル目まで同様にして、データ組C〜Hを構成するデータを出力する。
図7のFFT回路100は、第1データ並べ替え処理回路101、第1バタフライ演算処理回路102、第2データ並べ替え処理回路103、ひねり乗算処理回路104、第2バタフライ演算処理回路105、第3データ並べ替え処理回路106を備えている。FFT回路100は、前述の各構成要素において、第1のデータ並べ替え処理と、第1のバタフライ演算処理と、第2のデータ並べ替え処理と、ひねり乗算処理と、第2のバタフライ演算処理と、第3のデータ並べ替え処理とをパイプライン状に処理する。
第1データ並べ替え処理回路101、第2データ並べ替え処理回路103及び第3データ並べ替え処理回路106は、データ並べ替えのためのバッファ回路である。第1データ並べ替え処理回路101、第2データ並べ替え処理回路103及び第3データ並べ替え処理回路106は、バタフライ演算処理回路の前後で、FFT処理のアルゴリズム上のデータ依存に基づいたデータシーケンスの並べ替えを行う。
第1バタフライ演算処理回路102及び第2バタフライ演算処理回路105は、FFT処理を構成するバタフライ演算処理を行う。具体的には、第1データ並べ替え処理回路101は、図9の逐次順序テーブル80に示す入力データx(n)の入力順序を、図10のビットリバース順序テーブル90に示す順序に並べ替える。なお、これ以降、図9の逐次順序テーブル80に示す入力データx(n)の入力順序を逐次順序と表記し、図10のビットリバース順序テーブル90に示す順序をビットリバース順序と表記する。
図10のビットリバース順序テーブル90に示すビットリバース順序は、図8に示したデータフロー図における1段目(左側)の基数8のバタフライ処理112への入力データ組に対応する。具体的には、まず、1サイクル目に、データ組Aを構成するx(0)、x(8)、・・・、x(56)の8データを入力する。次に、2サイクル目に、データ組Bを構成するx(1)、x(9)、・・・、x(57)の8データを入力する。以降、3サイクル目から8サイクル目まで同様にして、データ組C〜Hを構成するデータを入力する。
第1のバタフライ演算処理回路102は、図8のデータフロー図における1段目(左側)の基数8のバタフライ演算処理112を実行するバタフライ回路である。第1のバタフライ演算処理回路102は、バタフライ演算処理結果を、データy(n)として、図9の逐次順序で出力する(n=0、1、・・・、63)。
第2のデータ並べ替え処理回路103は、第1のバタフライ演算処理回路102が逐次順序(図9)で出力するデータy[n]を、第2のバタフライ演算処理回路105に入力するビットリバース順序(図10)に並べ替えを行う。第2のデータ並べ替え処理回路103は、図8においては、データ並べ替え処理111に対応する。
ひねり乗算処理回路104は、第1のバタフライ演算処理後にFFT演算における複素平面上の複素回転を処理する。ひねり乗算処理回路104は、図8においては、ひねり乗算処理113に対応する。
第2のバタフライ演算処理回路105は、図8のデータフロー図における2段目(右側)の基数8のバタフライ処理112を処理するバタフライ回路である。第2のバタフライ演算処理回路105は、図10のビットリバース順序で入力されるひねり乗算処理後のデータy’(n)に対してバタフライ演算処理を行い、その結果X(k)を、図10のビットリバース順序で出力する(n=0、1、・・・、63)。
第3のデータ並べ替え処理回路106は、第2のバタフライ演算処理回路105が図10のビットリバース順序で出力するデータX(k)を、FFT回路100がFFT処理結果として出力する順序である図9の逐次順序に並べ替えを行う。
(動作)
次に、図11を参照して、FFT回路100の動作例を説明する。図11は、FFT回路100の動作を示すタイミング図である。図11では、FFT処理の処理単位であるFFTブロックの例として、FFTブロックF1、FFTブロックF2及びFFTブロックF3に対して時間T1〜T6において実行する処理を図示している。このF1〜F3のFFTブロックは、入力する時間領域の信号x(n)をFFTブロックの大きさごとに分割したデータブロックに相当する。
(内部処理)
図11には、FFT処理を(1)〜(9)の内部処理に分割して図示している。
(1)並べ替え1(write)の処理は、第1データ並べ替え処理回路101に対するデータの書き込み処理である。
(2)並べ替え1(read)の処理は、第1データ並べ替え処理回路101によって並べ替えられたデータの読み出し処理である。
(3)バタフライ演算1の処理は、第1バタフライ演算処理回路102による第1のバタフライ演算処理である。
(4)並べ替え2(write)の処理は、第2データ並べ替え処理回路103に対するデータの書き込み処理である。
(5)並べ替え2(read)の処理は、第2データ並べ替え処理回路103によって並べ替えられたデータの読み出し処理である。
(6)ひねり乗算の処理は、ひねり乗算処理回路104によるひねり乗算処理である。
(7)バタフライ演算2の処理は、第2バタフライ演算処理回路105による第2のバタフライ演算処理である。
(8)並べ替え3(write)の処理は、第3データ並べ替え処理回路106に対するデータの書き込み処理である。
(9)並べ替え3(read)の処理は、第3データ並べ替え処理回路106によって並べ替えられたデータの読み出し処理である。
以上が、図7に示したFFT回路100におけるパイプライン処理の内部処理である。
以下において、各処理期間において実行される処理について詳細に説明する。以下の説明においては、図11のタイミング図を参照する。
(T1)
時間T1の処理期間において実行される処理について説明する。
FFT回路100(図7)は、FFTブロックF1を構成する入力データx(n)を第1データ並べ替え処理回路101に入力する。第1データ並べ替え処理回路101は、このFFTブロックF1に対する並べ替え1(write)の処理を行う(F1(M1W))。
(T2)
時間T2の処理期間において実行される処理について説明する。
FFT回路100は、FFTブロックF2を構成する入力データx(n)を第1データ並べ替え処理回路101に入力する。第1データ並べ替え処理回路101は、このFFTブロックF2に対して並べ替え1(write)の処理を行う(F2(M1W))。
さらに、第1データ並べ替え処理回路101は、T1で処理されたFFTブロックF1に対して並べ替え1(read)の処理を行う(F1(M1R))。このとき、第1データ並べ替え処理回路101は、並べ替え1(write)の処理におけるデータの書き込み順序とは異なる順序で、並べ替え1(read)の処理におけるデータの読み出しを行う。すなわち、第1データ並べ替え処理回路101は、FFT処理のアルゴリズム上のデータ依存に基づいたデータシーケンスの並べ替えを行うことになる。
さらに、第1バタフライ演算処理回路102は、並べ替え1(read)による並べ替え処理後のFFTブロックF1に対して、バタフライ演算1の処理を行う(F1(B1))。
続けて、第2データ並べ替え処理回路103は、バタフライ演算1の処理後のFFTブロックF1に対して並べ替え2(write)の処理を行う(F1(M2W))。
(T3)
以降同様にして、時間T3の処理期間において実行される処理について説明する。
FFT回路100は、第1データ並べ替え処理回路101にFFTブロックF3を構成する入力データx(n)を入力する。第1データ並べ替え処理回路101は、このFFTブロックF3に対して並べ替え1(write)の処理を行う(F3(M1W))。
さらに、第1データ並べ替え処理回路101は、FFTブロックF2に対して並べ替え1(read)の処理を行う(F2(M1R))。第1バタフライ演算処理回路102は、並べ替え1(read)の処理後のFFTブロックF2に対してバタフライ演算1の処理を行う(F2(B1))。第2データ並べ替え処理回路103は、バタフライ演算1の処理後のFFTブロックF2に対して並べ替え2(write)の処理を続けて行う(F2(M2W))。
さらに、第2データ並べ替え処理回路103は、FFTブロックF1に対して並べ替え2(read)の処理を行う(F1(M2R))。ひねり演算処理回路104は、並べ替え2(read)の処理後のFFTブロックF1に対してひねり乗算の処理を続けて行う(F1(TW))。第2バタフライ演算処理回路105は、ひねり乗算の処理後のFFTブロックF1に対してバタフライ演算2の処理を行う(F1(B2))。第3データ並べ替え処理回路106は、バタフライ演算2の処理後のデータに対して並べ替え3(write)の処理を続けて行う(F1(M3W))。
(T4)
時間T4の処理期間において実行される処理について説明する。
第1データ並べ替え処理回路101は、FFTブロックF3に対して並べ替え1(read)の処理(F3(M1R))を行う。第1バタフライ演算処理回路102は、並べ替え1(read)の処理後のFFTブロックF3に対してバタフライ演算1の処理を行う(F3(B1))。第2データ並べ替え処理回路103は、FFTブロックF3に対して並べ替え2(write)の処理を続けて行う(F3(M2W))。
さらに、第2データ並べ替え処理回路103は、FFTブロックF2に対して並べ替え2(read)の処理を行う(F2(M2R))。ひねり演算処理回路104は、並べ替え2(read)の処理後のFFTブロックF2に対してひねり乗算の処理を行う(F2(TW))。続けて、第2バタフライ演算処理回路105は、ひねり乗算の処理後のFFTブロックF2に対してバタフライ演算2の処理を行う(F2(B2))。さらに、第3データ並べ替え処理回路106は、バタフライ演算2の処理後のFFTブロックF2に対して並べ替え3(write)の処理(F2(M3W))を続けて行う。
さらに、第3データ並べ替え処理回路106は、FFTブロックF1に対して並べ替え3(read)の処理を行う(F1(M3R))。FFTブロックF1に対するFFT処理が完了すると、FFT回路100は、そのデータを周波数領域のデータX(k)(F1)として出力する。
(T5)
時間T5の処理期間において実行される処理について説明する。
第2データ並べ替え処理回路103は、FFTブロックF3に対して並べ替え2(read)の処理を行う(F3(M2R))。ひねり乗算処理回路104は、並べ替え2(read)の処理後のFFTブロックF3に対してひねり乗算の処理を行う(F3(TW))。第2バタフライ演算処理回路105は、ひねり乗算の処理後のFFTブロックF3に対してバタフライ演算2の処理を行う(F3(B2))。第3データ並べ替え処理回路106は、バタフライ演算2の処理後のFFTブロックF3に対して並べ替え3(write)の処理(図11のF3(M3W))を行う。
さらに、第3データ並べ替え処理回路106は、FFTブロックF2に対して並べ替え3(read)の処理を行う(F2(M3R))。ここで、FFTブロックF2に対するFFT処理が完了すると、FFT回路100は、そのデータを周波数領域のデータX(k)(F2)として出力する。
(T6)
時間T6の処理期間において実行される処理について説明する。
第3データ並べ替え処理回路106は、FFTブロックF3に対して並べ替え3(read)の処理を行う(F3(M3R))。ここで、FFTブロックF3に対するFFT処理が完了すると、FFT回路100は、そのデータを周波数領域のデータX(k)(F3)として出力する。
以上、FFTブロックF1〜F3に対する処理についてのみ説明したが、FFTブロックF3より後のFFTブロックについても同様である。
以上のような処理によって、FFT回路100は、複数のFFTブロックをパイプライン状に処理することで、入力データを連続的に処理し、高い処理スループット性能を達成する。
(変調方式)
ここで、変調方式の例として、QPSK、16QAM、256QAMについて図12を用いて説明する(QPSK:Quadrature Phase Shift Keying、16QAM:16 Quadrature Amplitude Modulation、256QAM:256 Quadrature Amplitude Modulation)。
QPSK方式は、1シンボルに4値を割り当てるため、1シンボル当たり2ビットの情報を伝送することができる。16QAM方式は、1シンボルに16値を割り当てるため、1シンボル当たり4ビットの情報を伝送することができる。256QAM方式は、1シンボルに256値を割り当てるため、1シンボル当り8ビットの情報を伝送することができる。
すなわち、QPSK方式に対して16QAM方式は、1シンボル当たり2倍の情報を伝送することができるため、1/2のシンボルレートで同じ伝送速度を実現することができる。同様に、16QAM方式に対して256QAM方式は、1シンボル当たり2倍の情報を伝送することができるため、1/2のシンボルレートで同じ伝送速度を実現することができる。
フィルタ処理などのデジタル信号処理に要求される処理スループットは、シンボルレートに比例する。そのため、同じ伝送速度を実現する場合において、FFT処理に要求される処理スループットは、QPSK方式を1とすると、16QAM方式は1/2、256QAM方式は1/4となる。
一方、QPSK方式よりも16QAM方式の方が、1シンボルに対して多値を割り当てるため、QPSK方式におけるシンボル間の距離(D1)よりも、16QAM方式におけるシンボル間距離(D2)は小さくなる(D1>D2)。同様に、16QAM方式におけるシンボル間距離(D2)よりも256QAM方式におけるシンボル間距離(D3)は、より多値を割り当てる分だけ小さくなる(D2>D3)。
フィルタ処理などのデジタル信号処理に要求される演算精度は、シンボル間距離が小さくなるほど、より高い精度の演算が必要となる。そのため、FFT処理に要求される演算精度も、QPSK方式よりも16QAM方式がより高い演算精度が要求され、256QAM方式はさらに高い演算精度が要求される。
デジタル信号処理回路の演算精度は、主に、データの表現形式及びデータのビット幅で決定される。
デジタル信号処理におけるデータの表現形式としては、浮動小数点形式や固定小数点方式、ブロック浮動小数点方式が、主に用いられている。
浮動小数点形式は、扱う信号データの値の範囲が広い場合でも高い精度で演算できるという利点があるが、複雑な回路が必要になるため、回路規模や消費電力が大きいという問題がある。
固定小数点形式は、回路が単純で、回路規模や消費電力が小さいという利点があるが、扱う信号データの値の範囲が広い場合に演算精度が低下するという問題がある。
一方、浮動小数点形式と固定小数点形式の双方の利点を兼ね備えた演算方法として、ブロック浮動小数点形式がある。ブロック浮動小数点形式による演算では、複数の信号データを1つのブロックとしてまとめ、各ブロック単位で共通の指数をもつように、ブロック全体で正規化する。
いずれの表現形式においても、演算精度を高くするにはデータのビット幅を大きくする必要がある。そのため、回路規模や消費電力を小さくするには、要求される演算精度に応じて、データのビット幅を必要十分な値に最適化する必要がある。
ここで、複数の変調方式に対して、FFT回路の構成方法を最適化することによって、回路規模や消費電力を低減することを考える。例えば、QPSK方式及び16QAM方式に対応する場合、QPSK方式に対しては、16QAM方式よりも高い処理スループットと低い演算精度が要求される。一方、16QAM方式に対しては、QPSK方式よりも低い処理スループット・高い演算精度が要求される。すなわち、データビットの幅を大きくすると演算精度は高くなるものの、処理スループットが低くなる。
以上が変調方式についての説明である。
以下において、本発明の実施形態に係るFFT回路について図面を参照しながら説明する。
(実施形態)
(構成)
図1は、本発明の第1の実施形態に係るFFT回路10の構成例を示すブロック図である。
図1のFFT回路10は、パイプライン回路方式によるFFT回路であり、時間領域のデータx(n)を入力し、FFT処理によりフーリエ変換した周波数領域の信号X(k)を生成して出力する。ここで、NはFFTブロックサイズをあらわす正整数である(n=0、1、・・・、N−1、k=0、1、・・・、N−1)。
FFT回路10は、第1データ並べ替え処理回路11と、第1バタフライ演算処理回路12と、第2データ並べ替え処理回路13と、ひねり乗算処理回路14と、第2バタフライ演算処理回路15と、第3データ並べ替え処理回路16とを備えている。さらに、FFT回路10は、第1データ選択回路21と、第2データ選択回路22とを備えている。なお、図7と同じ名称の構成要素は、それらの構成要素と同様の処理を行う。
第1データ並べ替え処理回路11、第2データ並べ替え処理回路13及び第3データ並べ替え処理回路16は、データ並べ替えのためのバッファ回路である。第1データ並べ替え処理回路11、第2データ並べ替え処理回路13及び第3データ並べ替え処理回路16は、バタフライ演算処理回路の前後で、FFT処理のアルゴリズム上のデータ依存に基づいたデータシーケンスの並べ替えを行う。
第1バタフライ演算処理回路12及び第2バタフライ演算処理回路15は、FFT処理を構成するバタフライ演算処理を行う。
ひねり乗算処理回路14は、第1のバタフライ演算処理後にFFT演算における複素平面上の複素回転を処理する。
第1データ選択回路21及び第2データ選択回路22は、CPU(Central Processing Unit)などの上位回路(図示せず)から与えられる動作設定信号31を参照して、データの選択処理を行う。なお、第1及び第2データ選択回路21,22は、後述する動作モード1及び2を含む複数の動作モードのいずれかに対応して第1及び第2バタフライ演算処理回路12,15を選択制御する制御手段に含まれる。
具体的には、第1データ選択回路21は、動作設定信号31を参照して、入力する第1データ信号32または第4データ信号35のいずれか1つを選択して、第2データ並べ替え処理回路13に出力する。
また、第2データ選択回路22は、動作設定信号31を参照して、入力する第2データ信号33または第3データ信号34のいずれか1つを選択して、第2バタフライ演算処理回路15に出力する。
動作設定信号31は、FFT回路10の動作モードを設定する信号である。動作設定信号31は、具体的には、低演算精度・高処理スループットで動作するモードである動作モード1、または、高演算精度・低処理スループットで動作するモードである動作モード2、のいずれか1つの動作モードを設定する信号である。
CPUなどの上位回路(図示せず)は、例えば、変調方式に応じて動作設定信号31の値を設定する。
具体的には、QPSK方式などのように低い演算精度・高い処理スループットのFFT処理が必要な場合、上位回路は動作モード1を指示する値を動作設定信号31に設定する。
また、16QAM方式などのように高い演算精度・低い処理スループットのFFT処理が必要な場合、上位回路は動作モード2を指示する値を動作設定信号31に設定する。
第1バタフライ演算処理回路12の演算ビット幅は、動作モード1において要求される低い演算精度を実現するのに必要十分なビット幅であるSビット幅の回路で実現されている。第1バタフライ演算処理回路12では、Sビット幅に対応した第1のバタフライ演算が実行される。なお、Sビット幅におけるSは、1以上の整数である。
一方、第2バタフライ演算処理回路15の演算ビット幅は、動作モード2において要求される高い演算精度を実現するのに必要十分なビット幅であるLビット幅の回路で実現されている。第2バタフライ演算処理回路15では、Lビット幅に対応した第2のバタフライ演算が実行される。なお、Lビット幅におけるLは、1以上の整数である。また、SとLは異なる整数であり、Lの方がSよりも大きいものとする。
第2バタフライ演算処理回路15のビット幅Lよりも第1バタフライ演算処理回路12のビット幅Sの方が小さい。そのため、第2バタフライ演算処理回路15よりも第1バタフライ演算処理回路12の方が、回路規模や消費電力を小さくすることができる。
図7に示したようなFFT回路100は常に同一のビット幅の回路で動作する。図7のようなFFT回路100をビット幅Lのみの回路構成とした場合、常に高い演算精度で計算を実行するため、QPSK方式などの低い演算精度で十分な場合には余分な消費電力が生じる。また、例えば、図7のようなFFT回路100をビット幅Sのみの回路構成とした場合、16QAM方式などに要求される高い演算精度を実現することができない。
それに対し、本発明の実施形態のFFT回路10では、高い演算精度が要求されない場合、ビット幅の小さなビット幅Sとビット幅Lの回路の両方を使用することによって消費電力を低下させることができる。また、高い演算精度が要求される場合は、一つのビット幅Lの回路を効率的に使用することによって高い演算精度を実現できる。
(動作)
以下、図1に示すFFT回路10の動作について、図2〜5を参照して説明する。
(動作モード1)
図2は、動作モード1における図1に示すFFT回路10の動作状態を示すブロック図である。
図2において、動作設定信号31は、動作モード1を指示する値に設定されており、FFT回路10は動作モード1で動作する。図2では、FFT回路10を構成する各回路・データ信号のうち、動作モード1において、実際に使用する回路・データ信号は実線で示し、使用しない回路・データ信号は点線で示している。
動作モード1において、第1データ選択回路21は、入力する第1データ信号32を常に選択して、第2データ並べ替え処理回路13に出力する。したがって、もう一方の入力である第4データ信号35は使用されない。
また、動作モード1において、第2データ選択回路22は、入力する第2データ信号33を常に選択して、第2バタフライ演算処理回路15に出力する。したがって、もう一方の入力である第3データ信号34は使用されない。
次に、図3を参照して、動作モード1におけるFFT回路10の動作例を説明する。
図3は、動作モード1におけるFFT回路10の動作を示すタイミング図である。図11と同様に、図3では、FFT処理の処理単位であるFFTブロックの例として、FFTブロックF1、FFTブロックF2及びFFTブロックF3に対する、時間T1〜T6における処理を図示している。このF1〜F3のFFTブロックは、入力する時間領域の信号x(n)をFFTブロックの大きさごとに分割したデータブロックに相当する。
図3では、FFT処理を1〜9の内部処理に分割して図示している。以下において、動作モード1における内部処理1〜9を説明する。
(1)並べ替え1(write)の処理は、第1データ並べ替え処理回路11に対するデータの書き込み処理である。
(2)並べ替え1(read)の処理は、第1データ並べ替え処理回路11によって並べ替えられたデータの読み出し処理である。
(3)バタフライ演算1の処理は、第1バタフライ演算処理回路12による第1のバタフライ演算処理である。
(4)並べ替え2(write)の処理は、第2データ並べ替え処理回路13に対するデータの書き込み処理である。
(5)並べ替え2(read)の処理は、第2データ並べ替え処理回路13によって並べ替えられたデータの読み出し処理である。
(6)ひねり乗算の処理は、ひねり乗算処理回路14によるひねり乗算処理である。
(7)バタフライ演算2の処理は、第2バタフライ演算処理回路15による第2のバタフライ演算処理である。
(8)並べ替え3(write)の処理は、第3データ並べ替え処理回路16に対するデータの書き込み処理である。
(9)並べ替え3(read)の処理は、第3データ並べ替え処理回路16によって並べ替えられたデータの読み出し処理である。
以上が動作モード1における内部処理1〜9の説明である。
以下において、図3の各処理期間において実行する処理について説明する。
(T1)
時間T1の処理期間において実行される処理について説明する。
FFT回路10は、FFTブロックF1を構成する入力データx(n)を第1データ並べ替え処理回路11に入力する。第1データ並べ替え処理回路11は、このFFTブロックF1に対して並べ替え1(write)の処理を行う(F1(M1W))。
(T2)
時間T2の処理期間において実行される処理について説明する。
FFT回路10は、FFTブロックF2を構成する入力データx(n)を第1データ並べ替え処理回路11に入力する。第1データ並べ替え処理回路11は、この入力データに対して並べ替え1(write)の処理を行う(F2(M1W))。
さらに、第1データ並べ替え処理回路11は、FFTブロックF1に対して並べ替え1(read)の処理を行う(F1(M1R))。このとき、並べ替え1(write)の処理におけるデータの書き込み順序とは異なる順序で、並べ替え1(read)の処理におけるデータの読み出しを行うことで、FFT処理のアルゴリズム上のデータ依存に基づいたデータシーケンスの並べ替えを行う。第1バタフライ演算処理回路12は、並べ替え1(read)による並べ替え処理後のFFTブロックF1に対してバタフライ演算1の処理を行う(F1(B1))。第2データ並べ替え処理回路13は、バタフライ演算1の処理後のFFTブロックF1に対して並べ替え2(write)の処理(F1(M2W))を続けて行う。
(T3)
時間T3の処理期間において実行される処理について説明する。
FFT回路10は、FFTブロックF3を構成する入力データx(n)を第1データ並べ替え処理回路11に入力する。第1データ並べ替え処理回路11は、このFFTブロックF3に対して並べ替え1(write)の処理を行う(F3(M1W))。
さらに、第1データ並べ替え処理回路11は、処理期間T2において処理されたFFTブロックF2に対して並べ替え1(read)の処理を行う(F2(M1R))。第1バタフライ演算処理回路12は、並べ替え1(read)の処理後のFFTブロックF2に対してバタフライ演算1の処理を行う(F2(B1))。第2データ並べ替え処理回路13は、バタフライ演算1の処理後のFFTブロックF2に対して並べ替え2(write)の処理を行う(F2(M2W))。
さらに、第2データ並べ替え処理回路13は、処理期間T2において処理されたFFTブロックF1に対して並べ替え2(read)の処理を行う(F1(M2R)。ひねり乗算処理回路14は、並べ替え2(read)の処理後のFFTブロックF1に対してひねり乗算の処理を行う(F1(TW))。第2バタフライ演算処理回路15は、ひねり乗算の処理後のFFTブロックF1に対してバタフライ演算2の処理を行う(F1(B2))。第3データ並べ替え処理回路16は、バタフライ演算2の処理後のFFTブロックF1に対して並べ替え3(write)の処理(F1(M3W))を行う。
(T4)
時間T4の処理期間において実行される処理について説明する。
第1データ並べ替え処理回路11は、処理期間T3において処理されたFFTブロックF3に対して並べ替え1(read)の処理(F3(M1R))を行う。第1バタフライ演算処理回路12は、並べ替え1(read)の処理後のFFTブロックF3に対してバタフライ演算1の処理を行う(F3(B1))。第2データ並べ替え処理回路13は、バタフライ演算1の処理後のFFTブロックF3に対して並べ替え2(write)の処理を行う(F3(M2W))。
さらに、第2データ並べ替え処理回路13は、処理期間T3において処理されたFFTブロックF2に対して並べ替え2(read)の処理を行う(F2(M2R))。ひねり乗算処理回路14は、並べ替え2(read)の処理後のFFTブロックF2に対してひねり乗算の処理を行う(F2(TW))。第2バタフライ演算処理回路15は、ひねり乗算の処理後のFFTブロックF2に対してバタフライ演算2の処理を行う(F2(B2))。第3データ並べ替え処理回路16は、バタフライ演算2の処理後のFFTブロックF2に対して並べ替え3(write)の処理(F2(M3W))を行う。
さらに、第3データ並べ替え処理回路16は、処理期間T3において処理されたFFTブロックF1に対して並べ替え3(read)の処理(F1(M3R))を行う。ここで、FFTブロックF1に対するFFT処理が完了すると、FFT回路10は、そのデータを周波数領域のデータX(k)(F1)として出力する。
(T5)
時間T5の処理期間において実行される処理について説明する。
FFT回路10は、処理期間T4において処理されたFFTブロックF3に対して並べ替え2(read)の処理を行う(F3(M2R))。ひねり乗算処理回路14は、並べ替え2(read)の処理後のFFTブロックF3に対してひねり乗算の処理を行う(F3(TW))。第2バタフライ演算処理回路15は、ひねり乗算の処理後のFFTブロックF3に対してバタフライ演算2の処理を行う(F3(B2))。第3データ並べ替え処理回路16は、バタフライ演算2の処理後のFFTブロックF2に対して並べ替え3(write)の処理(F3(M3W))を続けて行う。
さらに、第3データ並べ替え処理回路16は、処理期間T4において処理されたFFTブロックF2に対して並べ替え3(read)の処理(F2(M3R))を行う。ここで、FFTブロックF2に対するFFT処理が完了すると、FFT回路10は、そのデータを周波数領域のデータX(k)(F2)として出力する。
(T6)
時間T6の処理期間において実行される処理について説明する。
第3データ並べ替え処理回路16は、処理期間T3において処理されたFFTブロックF3に対して並べ替え3(read)の処理を行う(F3(M3R))。ここで、FFTブロックF3に対するFFT処理が完了すると、FFT処理回路10は、そのデータを周波数領域のデータX(k)(F3)として出力する。
以上、FFTブロックF1〜F3に対する処理について説明した。なお、FFTブロックF3より後のFFTブロックについても同様である。
また、動作モードは必ずしも2つに限定されず、3つ以上のバタフライ演算処理回路を備えた構成とし、それぞれのバタフライ演算処理回路に対応した演算ビット幅のバタフライ演算を行うようにしてもよい。その場合、複数のバタフライ演算に対応させた動作モードを選択することが好ましい。
以上説明したように、FFT回路10は、動作モード1においては、第1バタフライ演算処理回路12及び第2バタフライ演算処理回路15の両方を使用して、バタフライ演算をパイプライン状に処理する。その結果、動作モード1において要求される高いスループット性能を実現することができる。
また、第1バタフライ演算処理回路12は、動作モード1において要求される演算精度に必要十分な演算ビット幅(Sビット)の回路で実現されている。さらに、第2バタフライ演算処理回路15は、より広い演算ビット幅(Lビット)の回路で実現されている。その結果、動作モード1において要求される演算精度を実現することができる。
(動作モード2)
次に、動作モード2におけるFFT回路10の動作を説明する。図4は、動作モード2におけるFFT回路10の動作状態を示すブロック図である。図4において、動作設定信号31は、動作モード2を指示する値に設定されており、FFT回路10は動作モード2で動作する。図4では、FFT回路10を構成する各回路・データ信号のうち、動作モード2において、実際に使用する回路・データ信号は実線で示し、使用しない回路・データ信号は点線で示している。
動作モード2において、第1データ選択回路21は、入力された第4データ信号35を常に選択して、第2データ並べ替え処理回路13に出力する。したがって、もう一方の入力信号である第1データ信号32は使用されない。
第2データ選択回路22は、入力された第2データ信号33及び第3データ信号34のいずれかを、第2バタフライ演算処理回路15の処理内容に応じて適宜選択して、第2バタフライ演算処理回路15に出力する。
次に、図5を参照して、動作モード2におけるFFT回路10の動作例を説明する。図5は、動作モード2におけるFFT回路10の動作を示すタイミング図である。図5では、FFT処理の処理単位であるFFTブロックの例として、FFTブロックF1、FFTブロックF2及びFFTブロックF3に対する時間T1’〜T5’における処理を図示している。このF1〜F3のFFTブロックは、入力する時間領域の信号x(n)をFFTブロックの大きさごとに分割したデータブロックに相当する。
ここで、動作モード2では、データx(n)の入力速度である入力スループットは、動作モード1における入力スループットの1/2であるとする。
例えば、動作モード1が対応するQPSK方式のシンボルレートに対して、動作モード2が対応する16QAM方式のシンボルレートは1/2でよい。そのため、入力スループットも1/2になることになる。したがって、動作モード2におけるFFT回路10の処理スループットは、動作モード1におけるFFT回路10の処理スループットの1/2になる。そのため、図5に示す動作モード2における時間T1’〜T5’のそれぞれの長さは、図3に示す動作モード1における時間T1〜T5それぞれの長さの2倍となっている。
(動作モード2の内部処理)
図5において、FFT処理を1〜9の内部処理に分割して図示している。以下において、動作モード2における内部処理1〜9を説明する。
(1)並べ替え1(write)の処理は、第1データ並べ替え処理回路11に対するデータの書き込み処理である。
(2)並べ替え1(read)の処理は、第1データ並べ替え処理回路11によって並べ替えられたデータの読み出し処理である。
(3)バタフライ演算1の処理は、第2バタフライ演算処理回路15による第1のバタフライ演算処理である。
(4)並べ替え2(write)の処理は、第2データ並べ替え処理回路13に対するデータの書き込み処理である。
(5)並べ替え2(read)の処理は、第2データ並べ替え処理回路13によって並べ替えられたデータの読み出し処理である。
(6)ひねり乗算の処理は、ひねり乗算処理回路14によるひねり乗算処理である。
(7)バタフライ演算2の処理は、第2バタフライ演算処理回路15による第2のバタフライ演算処理である。
(8)並べ替え3(write)の処理は、第3データ並べ替え処理回路16に対するデータの書き込み処理である。
(9)並べ替え3(read)の処理は、第3データ並べ替え処理回路16によって並べ替えられたデータの読み出し処理である。
以上が動作モード2における内部処理の説明である。
すなわち、動作モード2の処理においては、第1バタフライ演算処理回路12は使用されない。その一方で、第2バタフライ演算処理回路15のみを2回使用して、バタフライ演算1及びバタフライ演算2の両方を処理する。
以下において、図5の各処理期間において動作モード2で実行する処理について説明する。
(T1’)
時間T1’の処理期間において実行される処理について説明する。
FFT回路10は、第1データ並べ替え処理回路11にFFTブロックF1を構成する入力データx(n)を入力する。第1データ並べ替え処理回路11は、このFFTブロックF1に対して並べ替え1(write)の処理を行う(F1(M1W))。
(T2’)
時間T2’の処理期間において実行される処理について説明する。
FFT回路10は、FFTブロックF2を構成する入力データx(n)を第1データ並べ替え処理回路11に入力する。第1データ並べ替え処理回路11は、このFFTブロックF2に対して並べ替え1(write)の処理を行う(F2(M1W))。
さらに、第1データ並べ替え処理回路11は、時間T1’の処理期間において処理されたFFTブロックF1に対して並べ替え1(read)の処理を行う(F1(M1R))。並べ替え1(read)の処理は、動作モード1と同じ速度で処理されるため、時間T2’の1/2の処理時間、すなわち、動作モード1における時間T2と同じ処理時間に相当する「時間T2’の処理期間の前半」で完了する。
データ並べ替え処理回路11が出力した処理後のデータは、第3データ信号34を通じて選択回路22に入力される。選択回路22は、入力された第3データ信号34を選択して、第2バタフライ演算処理回路15に出力する。
第2バタフライ演算処理回路15は、入力されたデータに対してバタフライ演算1の処理(F1(B2))を行う。続けて、第2データ並べ替え処理回路13は、バタフライ演算1の処理後のFFTブロックF1に対して並べ替え2(write)の処理を行う(F1(M2W))。
これらの処理(F1(M1R)、F1(B2)、F1(M2W))は、動作モード1と同じ速度で処理されるため、時間T2’の1/2の処理時間、すなわち、動作モード1における時間T2と同じ処理時間である「時間T2’の処理期間の前半」で完了する。
次に、時間T2’の処理期間の後半において、第2データ並べ替え処理回路13は、時間T2’の処理期間の前半において処理されたFFTブロックF1に対して並べ替え2(read)の処理を行う(F1(M2R))。ひねり乗算処理回路14は、並べ替え2(read)の処理後のFFTブロックF1に対してひねり乗算の処理を行う(F1(TW))。
選択回路22は、入力された第2データ信号33を選択して、第2バタフライ演算処理回路15に出力する。
第2バタフライ演算処理回路15は、入力されたFFTブロックF1に対してバタフライ演算2の処理を行う(F1(B2))。続けて、第3データ並べ替え処理回路16は、バタフライ演算2の処理後のFFTブロックF2に対して並べ替え3(write)の処理を行う(F1(M3W))。
これらの処理(F1(M2R)・F1(TW)・F1(B2)・F1(M3W))も、動作モード1と同じの速度で処理されるため、時間T2’の1/2の処理時間、すなわち、動作モード1における時間T2と同じ処理時間に相当する「時間T2’の処理期間の後半」で全て完了する。
(T3’)
時間T3’の処理期間において実行される処理について説明する。
FFT回路10は、第1データ並べ替え処理回路11にFFTブロックF3を構成する入力データx(n)を入力する。第1データ並べ替え処理回路11は、このFFTブロックF3に対して並べ替え1(write)の処理を行う(F3(M1W))。
さらに、第3データ並べ替え処理回路16は、時間T2’の処理期間において処理されたFFTブロックF1に対して並べ替え3(read)の処理(F1(M3R))を行う。ここで、FFTブロックF1に対するFFT処理が完了すると、第3データ並べ替え処理回路16は、そのデータを周波数領域のデータX(k)(F1)として出力する。
また、時間T3’の処理期間の前半において、第1データ並べ替え処理回路11は、時間T2’の処理期間において処理されたFFTブロックF2に対して並べ替え1(read)の処理を行う(F2(M1R))。
第1データ並べ替え処理回路11が出力した処理後のデータは、第3データ信号34を通じて選択回路22に入力される。選択回路22は、入力された第3データ信号34を選択して、第2バタフライ演算処理回路15に出力する。
第2バタフライ演算処理回路15は、入力されたデータに対してバタフライ演算1の処理(F2(B2))を行う。続けて、第2データ並べ替え処理回路13は、バタフライ演算1の処理後のFFTブロックF2に対して並べ替え2(write)の処理を行う(F2(M2W))。
以上のように、時間T3’の処理期間の前半において、FFTブロックF2に対してF2(M1R)・F2(B2)・F2(M2W)の処理が実行される。
次に、時間T3’の処理期間の後半において、第2データ並べ替え処理回路13は、時間T3’の処理期間の前半において処理されたFFTブロックF2に対して並べ替え2(read)の処理を行う(F2(M2R))。ひねり乗算処理回路14は、並べ替え2(read)の処理後のFFTブロックF2に対してひねり乗算の処理を行う(F2(TW))。
ひねり乗算処理回路14が出力したひねり乗算の処理後のFFTブロックF2は、第2データ信号33を通じて選択回路22に入力される。選択回路22は、入力された第2データ信号33を選択して、第2バタフライ演算処理回路15に出力する。
第2バタフライ演算処理回路15は、入力されたデータに対してバタフライ演算2の処理を行う(F2(B2))。続けて、第3データ並べ替え処理回路16は、バタフライ演算2の処理後のFFTブロックF2に対して並べ替え3(write)の処理(F2(M3W))を行う。
以上のように、時間T3’の処理期間の後半において、FFTブロックF2に対してF2(M2R)・F2(TW)・F2(B2)・F2(M3W)の処理が実行される。
(T4’)
時間T4’の処理期間において実行される処理について説明する。
第3データ並べ替え処理回路16は、時間T3’の処理期間において処理されたFFTブロックF2に対して並べ替え3(read)の処理を行う(F2(M3R))。ここで、FFTブロックF2に対するFFT処理が完了すると、第3データ並べ替え処理回路16は、そのデータを周波数領域のデータX(k)(F2)として出力する。
また、時間T4’の処理期間の前半において、第1データ並べ替え処理回路11は、時間T3’の処理時間において処理されたFFTブロックF3に対して並べ替え1(read)の処理を行う(F3(M1R))。
第1データ並べ替え処理回路11が出力した処理後のデータは、第3データ信号34を通じて選択回路22に入力される。選択回路22は、入力された第3データ信号34を選択して、第2バタフライ演算処理回路15に出力する。
第2バタフライ演算処理回路15は、入力されたデータに対してバタフライ演算1の処理を行う(F3(B2))。続けて、第2データ並べ替え処理回路13は、バタフライ演算1の処理後のFFTブロックF3に対して並べ替え2(write)の処理を行う(F3(M2W))。
以上のように、時間T4’の処理期間の前半において、FFTブロックF3に対してF3(M1R)・F3(B2)・F3(M2W)の処理が実行される。
次に、時間T4’の処理期間の後半において、第2データ並べ替え処理回路13は、時間T4’の処理期間の前半において処理されたFFTブロックF3に対して並べ替え2(read)の処理を行う(F3(M2R))。ひねり乗算処理回路14は、並べ替え2(read)の処理後のFFTブロックF3に対してひねり乗算の処理(F3(TW))を行う。
ひねり乗算処理回路14が出力したひねり乗算の処理後のFFTブロックF3は、第2データ信号33を通じて選択回路22に入力される。選択回路22は、入力された第2データ信号33を選択して、第2バタフライ演算処理回路15に出力する。
第2バタフライ演算処理回路15は、入力されたデータに対してバタフライ演算2の処理を行う(F3(B2))。続けて、第3データ並べ替え処理回路16は、バタフライ演算2の処理後のFFTブロックF3に対して並べ替え3(write)の処理を行う(F3(M3W))。
以上のように、時間T4’の処理期間の後半においては、FFTブロックF3に対してF3(M2R)・F3(TW)・F3(B2)・F3(M3W)の処理が実行される。
(T5’)
時間T5’の処理期間において実行される処理について説明する。
第3データ並べ替え処理回路16は、FFTブロックF3に対して並べ替え3(read)の処理(F3(M3R))を実行する。ここで、FFTブロックF3に対するFFT処理が完了すると、FFT回路10は、そのデータを周波数領域のデータX(k)(F3)として出力する。
以上、FFTブロックF1〜F3に対する処理についてのみ説明したが、FFTブロックF3より後のFFTブロックについても同様である。
以上説明したように、FFT回路10は、バタフライ演算処理において第2バタフライ演算処理回路15のみを使用し、バタフライ演算1及び2の処理を行うことができる。
動作モード2において要求される処理スループットは、動作モード1において要求される処理スループットの1/2である。動作モード2においては、演算ビット幅の大きい第2バタフライ演算処理回路15のみを使用し、演算ビット幅の小さい第1バタフライ演算処理回路12を使用しないので、要求される高い演算精度でFFT処理を行うことができる。
なお、本実施形態では、第1バタフライ演算処理回路12の演算ビット幅は小さく、第2バタフライ演算処理回路15の演算ビット幅は大きいものとし、動作モード2では、演算ビット幅が大きい第2バタフライ演算処理回路15のみを使用するとした。それとは反対に、第1バタフライ演算処理回路12の演算ビット幅を大きく、第2バタフライ演算処理回路15の演算ビット幅を小さいものとし、動作モード2では、演算ビット幅が大きい第1バタフライ演算処理回路12のみを使用するとしてもよい。
本実施形態によれば、FFT回路10は、要求される処理スループット及び演算精度に応じて、動作モードを切り替えることができる。図6に示すように、QPSK方式のような低演算精度・高処理スループットが要求される場合には動作モード1で対応し、16QAM方式のような高演算精度・低処理スループットが要求される場合には動作モード2で対応する、というように動作モードを変更する。
一方、図7のFFT回路100においては、動作モードが固定である。したがって、高い演算精度を要求される場合に備えて、FFT回路100を構成する2つのバタフライ演算処理回路の両方とも、高い演算精度を実現するのに必要な大きな演算ビット幅に合わせる必要がある。
それに対して、本実施形態に係るFFT回路10は、動作モードに応じて回路構成を変更し、2つのバタフライ演算処理回路のうち、処理に使用するバタフライ演算処理回路を選択制御する。したがって、少なくとも一方のバタフライ演算処理回路の演算ビット幅を、低い演算精度の要求に合わせて小さくすることができる。その結果、回路規模や消費電力を削減することができる。
なお、本発明の実施形態に係るFFT処理方法及びそのFFT処理方法に関するプログラムについても本発明の範囲に含まれる。また、本発明の実施形態に係るFFT回路を含む半導体装置、コンピュータ、通信装置などといった装置、さらにはこれらの装置を含むシステムについても、本発明に係るFFT処理回路・処理方法・プログラムが含まれているならば本発明の範囲に含まれる。本発明の実施形態に係るFFT処理は、より具体的には、有線及び無線における伝送路の通信波形歪みに対するデジタル信号処理による歪み補償処理などに好適である。
以上、実施形態及び実施例を参照して本願発明を説明してきたが、本願発明は上記実施形態及び実施例に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
この出願は、2012年11月26日に出願された日本出願特願2012−257728を基礎とする優先権を主張し、その開示の全てをここに取り込む。