(57)【特許請求の範囲】
【請求項１】
実部と虚部を表す２ビットの入力データと、回転因子表に含まれた回転因子との間の乗算を行う正の整数Ｎ点まで演算可能な高速フーリエ変換装置であって、
上記入力データの実部ビット値と虚部ビット値との間の排他的論理和を求める排他的論理和演算手段と、
０からN/8までの各整数ｎについて、上記各整数ｎごとに{cos(2πn/N) + cos(2π(N/4-n)/N)}/2の値を一つずつ格納した第１の回転因子表を格納した第１記憶手段と、
０からN/8までの各整数ｎについて、上記各整数ｎごとに{cos(2πn/N) - cos(2π(N/4-n)/N)}/2の値を一つずつ格納した第２の回転因子表を格納した第２記憶手段と、
上記各整数ｎごとに、上記第１記憶手段から読み出された値と第２記憶手段から読み出された値とを、上記排他的論理和手段の出力値に応じて入れ替えて又は入れ替えずにそのまま第１出力値、第２出力値として出力する第３演算手段と、
演算結果を格納し得る第１の一時記憶手段および第２の一時記憶手段と、
第３演算手段の第１出力値と第１の一時記憶手段から読み出された値とを、上記入力データの実部ビット値に応じて加算又は減算する第１演算手段と、
第３演算手段の第２出力値と第２の一時記憶手段から読み出された値とを、上記入力データの虚部ビット値に応じて加算又は減算する第２演算手段と
を備えたことを特徴とする高速フーリエ変換装置。
【請求項２】
実部と虚部を表す２ビットの入力データと、回転因子表に含まれた回転因子との間の乗算を行う正の整数Ｎ点まで演算可能な高速フーリエ変換装置であって、
上記入力データの実部ビット値と虚部ビット値との間の排他的論理和を求める排他的論理和演算手段と、
０からN/8までの各整数ｎについて、上記各整数ｎごとに{cos(2πn/N) + cos(2π(N/4-n)/N)}/2の値と{cos(2πn/N) - cos(2π(N/4-n)/N)}/2の値とを対応付けて１対格納した回転因子表を格納した記憶手段と、
上記各整数ｎごとに、上記記憶手段から読み出された一対の値を、上記排他的論理和手段の出力値に応じて入れ替えて又は入れ替えずにそのまま第１出力値、第２出力値として出力する第３演算手段と、
演算結果を格納し得る第１の一時記憶手段および第２の一時記憶手段と、
第３演算手段の第１出力値と第１の一時記憶手段から読み出された値とを、上記入力データの実部ビット値に応じて加算又は減算する第１演算手段と、
第３演算手段の第２出力値と第２の一時記憶手段から読み出された値とを、上記入力データの虚部ビット値に応じて加算又は減算する第２演算手段と
を備えたことを特徴とする高速フーリエ変換装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、回転因子表を用いた高速フーリエ変換装置に関する。
【０００２】
【従来の技術】
画像信号の圧縮処理や拡大縮小処理およびフィルタ処理などのディジタル信号処理において（式１）に示すようなN点離散フーリエ変換（以下「DFT」という。）あるいは（式２）のN点逆離散フーリエ変換(以下「IDFT」という。)の演算がしばしば用いられる。
【０００３】
１次元N点DFT演算は、時間領域のN個の離散データxn（n=0, 1, 2, …, N-1）を入力データとし、周波数領域のN個の離散データXk（k = 0, 1, 2, …, N-1）を出力データとする変換であり、
N点１次元DFTの定義式：
【数１】
0003872724.tif 000002
で表される。また、１次元N点IDFTは、周波数領域のN個の離散データXk（k = 0, 1, 2, …, N-1）を入力とし、時間領域のN個の離散データxn（n=0, 1, 2, …, N-1）を出力データとする変換であり、
N点１次元IDFTの定義式：
【数２】
0003872724.tif 000003
で表される。
【０００４】
ここでWNは回転因子(twiddle factor)と呼ばれ、複素指数関数WN = e- 2πi /Nで定義される。またiは虚数でi2＝-1である。Wには次のような性質がある。
WNN/2 = -1,  WN/2 = WN2,  WNN = 1
（式１）および（式２）はN次元の正方行列とN次元のベクトルの内積演算であり、（式１）ならば行列で表示すると次の（式３）のように書ける。
【０００５】
【数３】
0003872724.tif 000004
この（式３）の演算はN×N回の乗算とN(N-1)回の加算を含んでいる。なお、係数が１の乗算は実質的には省けるので乗算回数は(N-1)×(N-1)回ですむが、Nが大きくなるにつれてほぼNの２乗に比例して演算回数が増加し、現実的な時間内での演算ができなくなってしまうことに変わりはない。
【０００６】
この演算回数を削減する方法として、次に示すように偶数番と奇数番とに分割する方法が広く用いられており、考案者の名前からCooley-Tukey（クーリー−テューキー）型高速フーリエ変換（FFT）と呼ばれている（参考文献  J.W.Cooley, J.W.Tukey, ``An Algorithm for the Machine Calculation of Complex Fourier Series,'' Mathematics of Computation, Vol.19, pp.297-301, 1965.) 。
【０００７】
(i)  FFTの例として、まずDFTにおいて基数2（Radix-2）の周波数間引き演算（DIF) を行う方法を示す。この基数2の周波数間引き演算では、出力の周波数列Xkを間引いて、kが偶数番(k=2h)の集合{ X2h | h= 0,1,…,N/2-1}と奇数番(k=2h+1)の集合{ X2h+1 | h= 0,1,…,N/2-1}とに分ける。
【０００８】
具体的には、サイズが半分の部分問題を定めるために（式１）の和（summation）をnが前半（0からN/2-1）の和と後半（N/2からN-1）の和との２つに分割して次のように書き直す。
【０００９】
【数４】
0003872724.tif 000005
そして、この（式４）をkが偶数(k=2h)の項と奇数(k=2h+1)の項とに分けて、次のように別々に考える。
【００１０】
まず、N点１次元DFTの周波数領域インデックスkが偶数の項 (k=2h)は、WNN =1およびWN/2 = WN2の性質を使うと、
【数５】
0003872724.tif 000006
と表される。したがって、
yn=xn + xn+N/2   ， n = 0, 1, …, N/2-1      （式６）
というN/2回の加算を予め行っておけば、（式５）の演算は半分のサイズの部分問題になり、
【数６】
0003872724.tif 000007
というN/2点DFTになる。
【００１１】
次に、N点１次元DFTの周波数領域インデックスkが奇数の項(k=2h+1)は、偶数の項と同様にして、
【数７】
0003872724.tif 000008
と表される。したがって、
zn = (xn - xn+N/2) WNn,    n = 0, 1, …, N/2-1            （式８）
というN/2回の減算とN/2回の乗算を予め行っておけば、（式７’）の演算は半分のサイズの部分問題になり、
【数８】
0003872724.tif 000009
というN/2点DFTになる。
【００１２】
（式６）と（式８）で表される演算は、同じ項同士の加算xn+xn+N/2と減算xn-xn+N/2を含んでおり、演算フローグラフの形からバタフライ演算と呼ばれている。
【００１３】
結局、N点DFTはこのN/2回のバタフライ演算を行うことによって、２つのN/2点DFTに分解できる。
【００１４】
この演算処理は「基数２の周波数間引き演算」あるいはRadix-2 DIF と呼ばれている。この演算処理は更にhが偶数の場合と奇数の場合とに分割できるので、再帰的に繰り返すことができる。
【００１５】
(ii)  次に、DFTにおいて基数4（Radix-4）の周波数間引き演算（DIF) を行う方法を示す。N点DFTは、Nが2rで割り切れるならば、上記のRadix-2と同様に基数2rの周波数間引き演算によって、r分の１のDFTに分割することができる。
【００１６】
一般的には基数４の間引き演算の効率がよいので、基数４の周波数間引き演算についての結果を示す。
【００１７】
【数９】
0003872724.tif 000010
ただし、
【数１０】
0003872724.tif 000011
である。
【００１８】
(iii)  次に、DFTにおいて基数2（Radix-2）の時間間引き演算（DIT) を行う方法を示す。この基数2の時間間引き演算では、（式１）の入力集合{ xn }をnが偶数の場合n=2m（m = 0, 1, 2, …, N/2 - 1）と奇数の場合n=2m + 1（m = 0, 1, 2, …, N/2 - 1）とに分割する。すると、
【数１１】
0003872724.tif 000012
となる。
【００１９】
ここでWN/2N/2=1 を使うと、WN/2km = WN/2km (WN/2N/2)m = WN/2(k + N/2)m だから、周波数領域のインデックスkについて半分のk = 0, 1, …, N/2-1 に対する和（summation）を計算するだけで十分である。
【００２０】
つまり、（式１２）の各和はサイズN/2のDFTとして扱え、時間領域のインデックスが偶数番の集合{x2m | m = 0, 1, …, N/2-1 }のN/2点DFTと奇数番の集合{x2m+1 | m = 0, 1, …, N/2-1 }のN/2点DFTとに分けることができる。このことから、この演算処理は時間間引き（desimation-in-time, DIT）と呼ばれている。
【００２１】
この（式１２）において
ym = x2m 
zm = x2m+1
と置くと、（式１２）は次の２つの部分問題に帰着できる。
【００２２】
まず、N点１次元DFTの時間領域インデックスnが偶数の項(n=2m)は、
【数１２】
0003872724.tif 000013
と表される。
【００２３】
また、N点１次元DFTの時間領域インデックスnが奇数の項(n=2m+1)は、
【数１３】
0003872724.tif 000014
と表される。
【００２４】
これら２つのN/2点DFTをあらかじめ計算しておくと、周波数領域インデックスkが0からN/2-1までのN/2個の出力項は、
【数１４】
0003872724.tif 000015
で与えられる。これはN/2回の加算とN/2回の乗算である。
【００２５】
また、WNN/2+k = -WNkとWN/2N/2=1を使うと、残りのN/2個の出力項は、
【数１５】
0003872724.tif 000016
で与えられる。これはN/2回の減算とN/2回の乗算である。
【００２６】
つまり、入力の偶数項に関するN/2点DFT（式１３）と奇数項に関するN/2点DFT（式１４）を求め、（式１５）と（式１６）で表されるバタフライ演算を実行すれば、元々のN点DFTが得られる。この分解は再帰的に適用できるので、結局、時間間引きDFTは周波数間引きDFTのバタフライ演算を逆向きに実行していることになる。これらの式は任意の偶数サイズの問題に適用可能である。
【００２７】
(iv)  さらに具体例として、８点１次元DFTを基数２の周波数間引き演算で求める場合(Radix-2 DIF DFT)を示す。この８点１次元DIF-DFTの演算フローは図５に示すように模式化される。
（式１）から、８点１次元DFTの定義式は
【数１６】
0003872724.tif 000017
と表される。この（式１７）をkが偶数(k=2h)の場合と奇数(k=2h+1)の場合に分けると、次に示す２つの４点１次元ＤＦＴになる。
【００２８】
【数１７】
0003872724.tif 000018
【数１８】
0003872724.tif 000019
【００２９】
図５中の５０１から５０４は（式１８）と（式１９）の中のバタフライ演算に相当し、５０５は（式１９）中の回転因子を用いた乗算に相当する。（式１８）は４点ＤＦＴ５０６を表し、（式１９）は４点ＤＦＴ５０７を表している。
【００３０】
さらに、（式１８）と（式１９）とをそれぞれhが偶数(h=2m)の場合と奇数(h=2m+1)の場合に分けると、次に示す４つの２点１次元ＤＦＴに分解できる。
【００３１】
【数１９】
0003872724.tif 000020
【００３２】
このようにCooley-Tukey型FFTは、バタフライ演算と呼ばれる加減算と回転因子と呼ばれるWとの間の乗算で構成される。
【００３３】
周波数間引き演算と時間間引き演算とは基本的に演算量は変わりなく、手順が互いに逆順になっているだけである。周波数間引き演算はGentleman-Sande（ジェントルマン−サンド）型FFTと呼ばれることもある。
【００３４】
以上がDFTおよびIDFTのCooley-Tukey型FFTの概略である。Cooley-Tukey型FFTにはこの他にも様々な変形手法が知られているが、ここでは省略する。
【００３５】
FFTによって現実的な時間内で計算できるようになったとはいえ、FFTポイント数Nが大きい場合に実時間処理を行うには、なお相当な計算量を要する。このため、携帯機器等の小型情報処理装置においては、FFTは集積回路内部の専用回路ブロックとして実現される場合が多い。その場合、回路規模が重要な問題となる。
【００３６】
すなわち、FFTを集積回路内部の専用回路として実現する場合、加減算に比べて乗除算の回路規模が大きくなるので工夫を要する。回転因子を用いた乗算を実現するに当たっては、回転因子を予めメモリーに記憶しておく方式と、必要なときに漸化式を用いて計算する方式とがある。本発明は回転因子を予めメモリーに記憶しておく方式に関するので、そのような回転因子を用いた乗算に関する従来の技術を次に説明する。
【００３７】
FFTにおける回転因子を用いた乗算は複素数同士の乗算であり、２つの実数の内積演算を実行することになる。例えば複素数の入力データをa = aR + i aI、複素数の回転因子をWNn = WnR + i WnIとすると、入力データと回転因子との間の乗算結果zも複素数になり、z = a・WNn = (aR・WnR - aI・WnI) + i (aR・WnI + aI・WnR)で表される。直接、複素数を回路で計算することはできないので、実際の計算としては、
実部  zR = aR・WnR - aI・WnI （式２１）
虚部  zI = aR・WnI + aI・WnR （式２２）
という、実部と虚部の２つの実数演算を各々、実行することになる。これには４回の乗算と２回の加減算が必要である。
【００３８】
Ｎ点１次元ＤＦＴを計算するために必要な回転因子は、Radix-2では（式８）中のWNn (n = 0, 1, ..., N/2 - 1)であり、N/2点ＤＦＴに分解した後に必要な回転因子はWN/2n (n = 0, 1, ..., N/4 - 1)である。これらは全てＮ点ＤＦＴで必要な回転因子の部分集合である。
【００３９】
回転因子Wは、定義に従って、
WNn = e- 2πi n/N = cos(2πn/N) - i sin(2πn/N)            （式２３）
と表される。ただしiは純虚数、n = 0, 1, ..., N/2 - 1である。（式２３）を一覧表（回転因子表）にすると、表１のようになる。
【００４０】
【表１】
0003872724.tif 000021
【００４１】
この表１の実部と虚部の値をそれぞれnの関数としてグラフで表現すると、図６中に示す余弦波６０１、正弦波６０２の曲線上の点になる。つまり、WNnをn=0から小さな順番にn=N/2-1まで並べれば、全区間６０４（n=0からn=N/2までの全範囲を指す。）をN/2等分したグラフ上の点が表１の実部および虚部を示す。ここで簡単のために、
Cn = cos(２πn/N)，
Sn = sin(２πn/N)
と書くことにする。Cnは曲線６０１上の点であり、Snは曲線６０３上の点である。
【００４２】
点Snが作る曲線６０３は、全区間６０４において、n=N/4の直線６０８を中心とした線対称になっている。したがって、全区間６０４にわたる点Snの値を、前半区間（n=0からn=N/4までの範囲を指す。）６０５におけるSnの値によって表すことができる（但し、Nは４の倍数とする）。また、点Cnが作る曲線６０１は、全区間６０４において、n=N/4の直線６０８とWNn＝０の直線との交点を中心とした点対称になっている。したがって、絶対値と符号を加味することによって、全区間６０４にわたるCnの値を、前半区間６０５におけるCnの値によって表すことができる。
【００４３】
さらに、前半区間６０５において、点Snが作る曲線６０３と点Cnが作る曲線６０１とを併せてできる曲線は、n=N/8の直線６０９を中心とした線対称となっている。したがって、全区間６０４にわたるCnとSnの値を、第１クォータ区間（n=0からn=N/8までの範囲を指す。）６０６におけるCnとSnの値によって表すことができる。
【００４４】
さらに、第１クォータ区間６０６におけるSnが作る曲線と、その隣の第２クォータ区間（n=N/8からn=N/4までの範囲を指す。）６１０におけるCnが作る曲線とは、n=N/8の直線６０９を中心にして線対称になっている。したがって、次の（式２４）のように、第１クォータ区間６０６におけるSnの値を第２クォータ区間６１０におけるCnの値によって表すことができる。
Sn = CN/4-n （式２４）
これから分かるように、必要な回転因子を全てテーブル（これを「回転因子表」と呼ぶ。）に記憶すればN/2個の複素数が必要であるが、Nが４の倍数の場合には、表２のごとく、N/8個ごとに絶対値の同じ数値が順序を変えて並ぶことになる。
【００４５】
【表２】
0003872724.tif 000022
【００４６】
そこで従来から、n = 0,1, ..., N/8までの実部の絶対値|WnR| = Cn = cos(2πn/N)と虚部の絶対値|WnI| = CN/4-n = cos(2π(N/4-n)/N)のペアを一覧表として記憶しておく方式が行われている（例えば特開平２-１０１５７５）。これにより、N点DFTのために必要な回転因子表のサイズを、N個の実数（N/2個の複素数）を含むサイズからその約４分の１に縮小することができる。
【００４７】
このような回転因子表を用いた乗算を行うための回路構成は、例えば図７に示すようなものである。記憶手段７０５には表２中に示したｎ＝０からｎ＝Ｎ/８までの実部と虚部のペアが記憶されている。記憶手段７０５から読み出された値は第５演算手段７１０と第６演算手段７１１に入力される。第５演算手段７１０は複数のマルチプレクサで構成されており、入力データのアドレスnにしたがって、CnとCN/4-nを第１演算手段７０６と第２演算手段７０７に振り分ける。第６演算手段７１０も複数のマルチプレクサで構成されており、入力データのアドレスnにしたがって、CnとCN/4-nを第３演算手段７０８と第４演算手段７０９に振り分ける。実部入力７０１からの入力は第１演算手段７０６と第３演算手段７０８に入力され、虚部入力７０２からの入力は第２演算手段７０７と第４演算手段７０９に入力される。第１演算手段７０６から第４演算手段７０９はそれぞれが入力値同士の乗算を実行する。第１演算手段７０６の出力と第２演算手段７０７の出力とが第７演算手段７１２で減算されて実部出力７０３に結果を出力する。第３演算手段７０８の出力と第４演算手段７０９の出力とが第８演算手段７１３で加算され、虚部出力７０４に結果が出力される。このようにして入力複素数と回転因子との間の乗算が実行される。
【００４８】
【発明が解決しようとする課題】
ところで、図７に示した方式によれば、読み出してきた回転因子の値を使って（式２１）と（式２２）の４回の乗算と２回の加減算を実行してはじめて目的の演算が完了する。すなわち、必要な演算精度に応じたビット長をもつ４個の乗算器７０６〜７０９と２個の加（減）算器７１２〜７１３とを必要とする。このため、依然として回路規模が大きいという問題がある。
【００４９】
例えば１６点DFTの場合、本来回転因子として用いられる８個の複素数W160 ，W161 ，W162 ，W163 ，W164 ，W165 ，W166 ，W167 の間に、
W160 = C0 - iS0 = C0 - iC4，
W161 = C1  iS1 = C1 - iC3，
W162 = C2  iS2 = C2 - iC2，
W163 = C3  iS3 = C3 - iC1，
W164 = C4  iS4 = C4 - iC0，
W165 = C5  iS5 = - C3 - iC1，
W166 = C6  iS6 = - C2 - iC2，
W167 = C7  iS7 = - C1 - iC3
という関係がある。そこで、従来の方式では、上述のように、
{（|WnR| ，|WnI|）} = {(C0, C4), (C1, C3), (C2, C2)}
の３組の数値ペアを一覧表として記憶しておき、n=0の時にはzR = aR・C0 - aI・C4とzI = aR・C4 + aI・C0を計算し、n=1の時にはzR = aR・C1 - aI・C3とzI = aR・C3 + aI・C1を計算し、という具合にその都度読み出した回転因子の数値ペアを用いて乗算と加減算を実行する。このため、回転因子表のサイズを小さくできるが、回路規模が大きくなるという問題がある。
【００５０】
そこで、この発明の課題は、回路規模を削減できる高速フーリエ変換装置を提供することにある。
【００５１】
【課題を解決するための手段】
上記課題を解決するため、本発明の基礎となる回転因子表は、正の整数Ｎ点まで演算可能な高速フーリエ変換のための回転因子表であって、次のような特徴を有するものである。すなわち、本発明の回転因子表は、０からN/8までの各整数ｎについて、
{cos(2πn/N) + cos(2π(N/4-n)/N)}/2の値と、
{cos(2πn/N) - cos(2π(N/4-n)/N)}/2の値と
を格納したことを特徴とする。
【００５２】
簡単のために、従来例の説明に用いたのと同様に、
Cn = cos(２πn/N)，
Sn = sin(２πn/N)
という記号を用いることにすると、本発明の回転因子表は、
A = {cos(2πn/N) + cos(2π(N/4-n)/N)}/2
= (Cn + CN/4 - n)/2
= (|WnR| + |WnI|)/2
B = {cos(2πn/N) - cos(2π(N/4-n)/N)}/2
= (Cn - CN/4 - n)/2
= (|WnR| - |WnI|)/2
の値を格納したことを特徴とする。例えば１６点ＤＦＴに用いられるものでは、
{(A, B)} = {((C0+C4)/2, (C0-C4)/2), ((C1+C3)/2, (C1-C3)/2), (C2, 0)}
の３組の数値を格納しておく。また、１０２４点ＤＦＴに用いられるものでは、１０２４/８＋１＝１２９組の数値を格納しておく。
【００５３】
この回転因子表に格納された回転因子を用いて、高速フーリエ変換のための演算を分散算術演算（Distributed Arithmetic）法（以下、DA法という。）によって実行すれば、高速フーリエ変換を効率よく実現でき、従来例における乗算器７０６から７０９（図７参照）を省略できる（詳しくは後述する）。したがって、高速フーリエ変換装置の回路規模を削減できる。
【００５４】
なお、分散算術演算法は、行列の内積演算を、乗算器を使わずに、ビットシリアル演算によって行う方法である。
【００５５】
一形態の回転因子表は、
上記各整数ｎごとに{cos(2πn/N) + cos(2π(N/4-n)/N)}/2の値を一つずつ格納した第１の回転因子表と、
上記各整数ｎごとに{cos(2πn/N) - cos(2π(N/4-n)/N)}/2の値を一つずつ格納した第２の回転因子表と
を含むことを特徴とする。
【００５６】
この一形態の回転因子表によれば、各回転因子表が各整数ｎごとに例えば入力データの実部と虚部に対応して複数個の値を格納する場合に比して、回転因子表のサイズを少なくとも半分以下にすることができる（詳しくは後述する）。したがって、高速フーリエ変換装置の回路規模をさらに削減できる。また、高速フーリエ変換装置の消費電力も低減できる。
【００５７】
一形態の回転因子表は、
上記各整数ｎごとに{cos(2πn/N) + cos(2π(N/4-n)/N)}/2の値と{cos(2πn/N) - cos(2π(N/4-n)/N)}/2の値とを対応付けて１対格納したことを特徴とする。
【００５８】
この一形態の回転因子表によれば、例えば入力データの実部と虚部に対応して第１の回転因子表と第２の回転因子表を選択する場合に比して、アドレスデコーダ部を半減できる。したがって、高速フーリエ変換装置の回路規模をさらに削減できる。また、高速フーリエ変換装置の消費電力も低減できる。
【００５９】
また、本発明の基礎となる高速フーリエ変換装置は、実部と虚部を表す２ビットの入力データと、回転因子表に含まれた回転因子との間の乗算を行う正の整数Ｎ点まで演算可能な高速フーリエ変換装置であって、次のような特徴を有するものである。すなわち、本発明の高速フーリエ変換装置は、０からN/8までの各整数ｎごとに、上記入力データで指定されるべきアドレスに所定の順で{cos(2πn/N) + cos(2π(N/4-n)/N)}/2の値または{cos(2πn/N) - cos(2π(N/4-n)/N)}/2の値を並べて格納した第１記憶手段と、各整数ｎごとに、上記入力データで指定されるべきアドレスに所定の順で{cos(2πn/N) + cos(2π(N/4-n)/N)}/2の値または{cos(2πn/N) - cos(2π(N/4-n)/N)}/2の値を並べて格納した第２記憶手段とを備える。また、演算結果を格納し得る第１の一時記憶手段および第２の一時記憶手段を備える。また、第１記憶手段から読み出された値と第１の一時記憶手段から読み出された値とを、上記入力データの実部ビット値に応じて加算又は減算する第１演算手段を備える。さらに、第２記憶手段から読み出された値と第２の一時記憶手段から読み出された値とを、上記入力データの虚部ビット値に応じて加算又は減算する第２演算手段を備える。
【００６０】
この高速フーリエ変換装置によれば、ＤＡ法による回転因子を用いた乗算を効率よく実現でき、従来例の高速フーリエ変換装置における乗算器７０６〜７０９（図７参照）を省略できる（詳しくは後述する）。したがって、回路規模を削減できる。
【００６１】
また、本発明の基礎となる別の高速フーリエ変換装置は、実部と虚部を表す２ビットの入力データと、回転因子表に含まれた回転因子との間の乗算を行う正の整数Ｎ点まで演算可能な高速フーリエ変換装置であって、次のような特徴を有するものである。すなわち、本発明の高速フーリエ変換装置は、上記入力データの実部ビット値と虚部ビット値との間の排他的論理和を求める排他的論理和演算手段を備える。また、０からN/8までの各整数ｎごとに、上記排他的論理和演算手段の出力値に応じて指定されるべきアドレスに所定の順で{cos(2πn/N) + cos(2π(N/4-n)/N)}/2の値または{cos(2πn/N) - cos(2π(N/4-n)/N)}/2の値を並べて格納した第１記憶手段と、各整数ｎごとに、上記排他的論理和演算手段の出力値に応じて指定されるべきアドレスに所定の順で{cos(2πn/N) + cos(2π(N/4-n)/N)}/2の値または{cos(2πn/N) - cos(2π(N/4-n)/N)}/2の値を並べて格納した第２記憶手段とを備える。また、演算結果を格納し得る第１の一時記憶手段および第２の一時記憶手段を備える。また、第１記憶手段から読み出された値と第１の一時記憶手段から読み出された値とを、上記入力データの実部ビット値に応じて加算又は減算する第１演算手段を備える。さらに、第２記憶手段から読み出された値と第２の一時記憶手段から読み出された値とを、上記入力データの虚部ビット値に応じて加算又は減算する第２演算手段を備える。
【００６２】
この高速フーリエ変換装置によれば、ＤＡ法による回転因子を用いた乗算を効率よく実現でき、従来例の高速フーリエ変換装置における乗算器７０６〜７０９（図７参照）を省略できる。したがって、回路規模を削減できる。しかも、第１記憶手段および第２記憶手段の記憶容量を、前記高速フーリエ変換装置のものに比して、少なくとも半分以下にできる。
【００６３】
本発明の高速フーリエ変換装置は、実部と虚部を表す２ビットの入力データと、回転因子表に含まれた回転因子との間の乗算を行う正の整数Ｎ点まで演算可能な高速フーリエ変換装置であって、次のような特徴を有するものである。すなわち、本発明の高速フーリエ変換装置は、上記入力データの実部ビット値と虚部ビット値との間の排他的論理和を求める排他的論理和演算手段を備える。また、上記各整数ｎごとに{cos(2πn/N) + cos(2π(N/4-n)/N)}/2の値を一つずつ格納した第１の回転因子表を格納した第１記憶手段と、上記各整数ｎごとに{cos(2πn/N) - cos(2π(N/4-n)/N)}/2の値を一つずつ格納した第２の回転因子表を格納した第２記憶手段とを備える。また、上記各整数ｎごとに、上記第１記憶手段から読み出された値と第２記憶手段から読み出された値とを、上記排他的論理和手段の出力値に応じて入れ替えて又は入れ替えずにそのまま第１出力値、第２出力値として出力する第３演算手段を備える。また、演算結果を格納し得る第１の一時記憶手段および第２の一時記憶手段を備える。また、第３演算手段の第１出力値と第１の一時記憶手段から読み出された値とを、上記入力データの実部ビット値に応じて加算又は減算する第１演算手段を備える。さらに、第３演算手段の第２出力値と第２の一時記憶手段から読み出された値とを、上記入力データの虚部ビット値に応じて加算又は減算する第２演算手段を備える。
【００６４】
本発明の高速フーリエ変換装置によれば、ＤＡ法による回転因子を用いた乗算を効率よく実現でき、従来例の高速フーリエ変換装置における乗算器７０６〜７０９（図７参照）を省略できる。したがって、回路規模を削減できる。しかも、第１記憶手段および第２記憶手段の記憶容量を、前記高速フーリエ変換装置のものに比して、少なくとも半分以下にできる。また、消費電力も低減できる。
【００６５】
別の局面では、本発明の高速フーリエ変換装置は、実部と虚部を表す２ビットの入力データと、回転因子表に含まれた回転因子との間の乗算を行う正の整数Ｎ点まで演算可能な高速フーリエ変換装置であって、次のような特徴を有するものである。すなわち、本発明の高速フーリエ変換装置は、上記入力データの実部ビット値と虚部ビット値との間の排他的論理和を求める排他的論理和演算手段と、上記各整数ｎごとに{cos(2πn/N) + cos(2π(N/4-n)/N)}/2の値と{cos(2πn/N) - cos(2π(N/4-n)/N)}/2の値とを対応付けて１対格納した回転因子表を格納した記憶手段とを備える。また、上記各整数ｎごとに、上記記憶手段から読み出された一対の値を、上記排他的論理和手段の出力値に応じて入れ替えて又は入れ替えずにそのまま第１出力値、第２出力値として出力する第３演算手段を備える。また、演算結果を格納し得る第１の一時記憶手段および第２の一時記憶手段を備える。また、第３演算手段の第１出力値と第１の一時記憶手段から読み出された値とを、上記入力データの実部ビット値に応じて加算又は減算する第１演算手段を備える。さらに、第３演算手段の第２出力値と第２の一時記憶手段から読み出された値とを、上記入力データの虚部ビット値に応じて加算又は減算する第２演算手段を備える。
【００６６】
本発明の高速フーリエ変換装置によれば、ＤＡ法による回転因子を用いた乗算を効率よく実現でき、従来例の高速フーリエ変換装置における乗算器７０６〜７０９（図７参照）を省略できる。したがって、回路規模を削減できる。しかも、記憶手段のアドレスデコーダを、前記高速フーリエ変換装置のように第１記憶手段、第２記憶手段から読み出された値を排他的論理和手段の出力値（もとは入力データの実部ビット値と虚部ビット値）に応じて入れ替える場合に比して、半減できる。また、消費電力も低減できる。
【００６７】
【発明の実施の形態】
以下、この発明を図示の実施の形態により詳細に説明する。
【００６８】
最初に分散算術演算（Distributed Arithmetic, 以下ＤＡと表記する）法を、回転因子を用いた乗算に適用したときの原理を説明し、続いて本発明を適用した高速フーリエ変換装置を説明する。
【００６９】
（ＤＡ法を、回転因子を用いた乗算に適用したときの原理）
ＤＡ法を用いて、ある一つの回転因子WNn = WnR + i WnIとバタフライ演算後の値a = aR + i aIとの間の乗算
実部  znR = aR・WnR - aI・WnI （式２１）
虚部  znI = aR・WnI + aI・WnR （式２２）
を実行する場合を考える。
【００７０】
aRとaIは共に２の補数表現された２進数のJビット固定小数点数であるとするとそれぞれ、
【数２０】
0003872724.tif 000023
と表される。j=0が最上位ビット、j=J-1が最下位ビットである。（式２１）と（式２２）に（式２５）を代入して入力データのビットによる表現形式にすると、
【数２１】
0003872724.tif 000024
となる。（式２６）をjに関する和に書き直すと、
【数２２】
0003872724.tif 000025
となる。（式２７）がDA法の原理を表している。すなわち、予め分かっている定数WnRとWnIに任意の入力aRとaIを掛け合わせて加える場合、（式２７）中の大括弧内の
【数２３】
0003872724.tif 000026
の値を予め一覧表（回転因子表）として記憶しておけば、乗算を行うことなくznRとznIを得ることができる。（式２８）中のaRとaIは各々が２進数の１ビットなので、それぞれは表３と表４に示したように、入力aRとaIの４種類のビットパターンに対する値で、とり得る全ての値を表すことができる。そしてj=1からj=J-1まではそれぞれの値に2-jが掛かるので１桁ずつ右へずらせて加えるだけで乗算結果を得ることができる。
【００７１】
【表３】
実部（znR）のためのLUT
0003872724.tif 000027
【００７２】
【表４】
虚部（znI）のためのLUT
0003872724.tif 000028
【００７３】
以上が単純なDA法の原理である。この単純なDA法では、１つの複素数の回転因子につき、４ワードのルックアップテーブル（LUT）が２つ必要になる。N点DFTではN/8+1個の複素数の回転因子が必要なので４ワードのLUTがN/4+2個必要になる。
【００７４】
ところで、上記のような単純なDA法ではなく、{0,1}→{-1,+1}という変数変換を施してオフセット・バイナリ・コード DA法（参考文献  Stanley A. White, ``Applications of distributed arithmetic to digital signal processing: A tutorial review,'' IEEE ASSP magazine (Acoustics, Speech, and Signal Processing Magazine), Vol.6, No.3, pp.4-19, July 1989.）を適用すると、前記のLUTは表５と表６のように整理される。
【００７５】
【表５】
znRのためのLUT(オフセットバイナリDA)
0003872724.tif 000029
【００７６】
【表６】
znIのためのLUT(オフセットバイナリDA)
0003872724.tif 000030
【００７７】
表５と表６では、それぞれ表の上半分と下半分との間で、ROM内容（記憶値）に対称性がある。つまり、表５と表６のROM内容は、それぞれ表の上半分と下半分との間で、絶対値が同じで、かつ符号が反対の関係にある。そこで、各々がワード数を半分にできて、表７と表８のようになる。ただし、表７では、aR=0なら読み出したROM内容にマイナス符号、aR=1ならプラス符号を付ける。また、表８では、aI=0なら読み出したROM内容にマイナス符号、aI=1ならプラス符号を付ける。ここで○を排他的論理和（XOR）を表す演算記号として用いた。この性質は一般的な内積演算と同じである。
【００７８】
【表７】
znRのためのLUT
0003872724.tif 000031
【００７９】
【表８】
znIのためのLUT
0003872724.tif 000032
【００８０】
表７と表８を見ると、DFTに用いられる回転因子表に特有の性質として実部LUTも虚部LUTも、任意の(aR, aI)の入力ビット対に対して、出力の値は(WnR + WnI)/2と(WnR - WnI)/2のいずれかになることが分かる。したがって (WnR + WnI)/2を記憶するLUT+と (WnR - WnI)/2を記憶するLUT-という構成にすることによって、それぞれ表９、表１０に示すように、LUTの大きさを更に半分にできる。
【００８１】
【表９】
znRのためのLUT指定
0003872724.tif 000033
【００８２】
【表１０】
znIのためのLUT指定
0003872724.tif 000034
【００８３】
また、実部演算（znR）用LUTと虚部演算（znI）用LUTとを一つのROMにまとめて、表１１のように１ワードのLUTが１個で済むようにできる。こうすることによって、アドレスデコーダ部を簡略化できる。
【００８４】
【表１１】
実部虚部共用LUT
0003872724.tif 000035
【００８５】
ところで、Ｎ点DFTを実行するためには、表２のn = 0, 1, ..., N/8の値を使って、残りのn = N/8+1, ..., N/2-1を生成する必要がある。それにはnの値の上位２ビットによってLUT番号を昇順で適用するか降順で適用するかを決定し（00=昇順，01=降順，10=昇順，11=降順）、下位２ビットでLUT番号を決定する（昇順：00=LUT0, 01=LUT1, 10=LUT2, 11=LUT3 ／降順：00=LUT4, 01=LUT3, 10=LUT2, 11=LUT1）。
【００８６】
また、第１クォータ区間(n=0からn=N/8までの範囲を指す。)ではWnR=Cn，WnI=-CN/4-n，第２クォータ区間(n=N/8からn=2N/8までの範囲を指す。)ではWnR=CN/4-n，WnI=-Cn，第３クォータ区間(n=2N/8からn=3N/8までの範囲を指す。)ではWnR=-CN/4-n，WnI=-Cn，第4クォータ区間(n=3N/8からn=4N/8までの範囲を指す。)ではWnR=-Cn，WnI=-CN/4-nを使うことになる。Qn+=Cn+CN/4-n，Qn-=Cn-CN/4-n，と表すものとすると、例えば３２点DFTに用いられるLUTは、次の表１２のようになる。
【００８７】
【表１２】
0003872724.tif 000036
【００８８】
これから分かるように、N/8+1ワードの表を使うだけで、乗算器を必要とせず、N点DFTを実行することができる。
【００８９】
（第１参考例の高速フーリエ変換装置）
図１は、標準的なオフセットバイナリDA法を、回転因子表を用いた乗算に適用した第１参考例の高速フーリエ変換装置の要部、つまり、バタフライ演算によって得られた入力データと回転因子表に含まれた回転因子との乗算を行う回路の構成を示している。
【００９０】
この高速フーリエ変換装置は、２ビットの入力データが入力される実部入力端子１０１および虚部入力端子１０２と、各ｎの値ごとにそれらの入力データに応じて所定の記憶データを出力する第１記憶手段（実部LUT）１０５および第２記憶手段（虚部LUT）１０６と、第１演算手段（加減算器１）１０７および第２演算手段（加減算器２）１０８と、第１の一時記憶手段（レジスタ１）１０９および第２の一時記憶手段（レジスタ２）１１０とを備えている。
【００９１】
実部入力端子１０１と虚部入力端子１０２とからは入力データaの実部aRと虚部aIがそれぞれ最下位ビットからビットシリアルに入力されてくる。
【００９２】
今、aRのj番目のビットをaR[j]というように書く。入力データは２の補数表現されたビット長Jの小数であるとすると、
【数２４】
0003872724.tif 000037
である。ここで最上位ビット(MSB)をj=0とする。第１記憶手段１０５は、n=0からn=N/8までの各ｎについて、表５のROM内容欄の値の絶対値を記憶している。また、第２記憶手段１０６は、n=0からn=N/8までの各ｎについて、表６のROM内容欄の値の絶対値を記憶している。第１記憶手段（実部LUT）１０５および第２記憶手段（虚部LUT）１０６については、図８（ａ）にデータ構造と記憶値を模式的に示す。
【００９３】
第１記憶手段１０５からは、各ｎの値ごとに、入力された（aR ， aI）のビット対に応じた値が読み出される。すなわち、第１記憶手段１０５からは、
（aR ， aI）＝（０，０）ならば(|WnR| - |WnI|)/2、
（aR ， aI）＝（０，１）ならば(|WnR| + |WnI|)/2、
（aR ， aI）＝（１，０）ならば(|WnR| + |WnI|)/2、
（aR ， aI）＝（１，１）ならば(|WnR| - |WnI|)/2
がそれぞれ読み出される。第２記憶手段１０６からも同様に、各ｎの値ごとに
（aR ， aI）＝（０，０）ならば(|WnR| + |WnI|)/2、
（aR ， aI）＝（０，１）ならば(|WnR| - |WnI|)/2、
（aR ， aI）＝（１，０）ならば(|WnR| - |WnI|)/2、
（aR ， aI）＝（１，１）ならば(|WnR| + |WnI|)/2
がそれぞれ読み出される。
【００９４】
第１演算手段１０７は、第１記憶手段１０５から読み出された値と第１の一時記憶手段１０９から読み出された値とを加算し、その結果を改めて第１の一時記憶手段１０９に入力する。この加算のとき、符号判定ビットaRが０ならば第１記憶手段１０５から読み出された値は符号反転されるので実質的には減算となる。また、第１の一時記憶手段１０９からの出力は１ビットだけ下位ビット側へシフト（右シフト）して第１演算手段１０７へ入力されている。このことにより、第１の一時記憶手段１０９からの出力１０３には乗算結果の実部znR = aR・WnR - aI・WnIが得られる。
【００９５】
第２演算手段１０８は、第２記憶手段１０６から読み出された値と第２の一時記憶手段１１０から読み出された値とを加算し、その結果を改めて第２の一時記憶手段１１０に入力する。この加算のとき、符号判定ビットaI が０ならば第２記憶手段１０６から読み出された値は符号反転されるので実質的には減算となる。また、第２の一時記憶手段１１０からの出力は１ビットだけ下位ビット側へシフト（右シフト）して第２演算手段１０８へ入力されている。このことにより、第２の一時記憶手段１１０からの出力１０４には乗算結果の虚部znI = aR・WnI + aI・WnRが得られる。
【００９６】
これらの乗算結果znR、znIを用いて高速フーリエ変換が実現される。
【００９７】
本参考例の高速フーリエ変換装置によれば、図７の従来例に比べて乗算器７０６〜７０９を省略できるので、回路規模を削減できる。
【００９８】
（第２参考例の高速フーリエ変換装置）
図２は、オフセットバイナリDA法を、回転因子表を用いた乗算に適用した第２参考例の高速フーリエ変換装置の要部、つまり、バタフライ演算によって得られた入力データと回転因子表に含まれた回転因子との乗算を行う回路の構成を示している。本参考例で用いる回転因子表は、第１参考例で用いたものに比してサイズが半分のものである。
【００９９】
この高速フーリエ変換装置は、２ビットの入力データが入力される実部入力端子２０１および虚部入力端子２０２と、その入力データの実部ビット値と虚部ビット値との間の排他的論理和を求めるＸＯＲ回路２１２と、各ｎの値ごとにそれらの入力データに応じて所定の記憶データを出力する第１記憶手段（実部LUT）２０５および第２記憶手段（虚部LUT）２０６と、第１演算手段（加減算器１）２０７および第２演算手段（加減算器２）２０８と、第１の一時記憶手段（レジスタ１）２０９および第２の一時記憶手段（レジスタ２）２１０とを備えている。
【０１００】
実部入力端子２０１と虚部入力端子２０２とからは入力データaの実部aRと虚部aIがそれぞれ最下位ビットからビットシリアルに入力されてくる。ＸＯＲ回路２１２は、それらのaRとaIとの間の排他的論理和aR○aIを求める。
【０１０１】
第１記憶手段２０５は、n=0からn=N/8までの各ｎについて、表７のROM内容欄の値を記憶している。この第１記憶手段２０５からは、各ｎの値ごとに、入力データの排他的論理和aR○aIの値に応じて、記憶値が読み出される。すなわち、aR○aI=0ならば(WnR - WnI)/2が読み出され、aR○aI=1ならば(WnR + WnI)/2が読み出される。
【０１０２】
第２記憶手段２０６は、n=0からn=N/8までの各ｎについて、表８のROM内容欄の値を記憶している。この第２記憶手段２０６からは、各ｎの値ごとに、入力データの排他的論理和aR○aIの値に応じて、記憶値が読み出される。すなわち、aR○aI=0ならば(WnR + WnI)/2が読み出され、aR○aI=1ならば(WnR - WnI)/2が読み出される。
【０１０３】
第１記憶手段（実部LUT）２０５および第２記憶手段（虚部LUT）２０６については、図８（ｂ）にデータ構造と記憶値を模式的に示す。
【０１０４】
第１演算手段２０７は、符号判定ビットaRの値に応じて、aR=0ならば第１記憶手段２０５から受けた値を第１の一時記憶手段２０９の値から減算し、aR=1ならば第１記憶手段２０５から受けた値を第１の一時記憶手段２０９の値に加算する。第１演算手段２０７の演算結果は第１の一時記憶手段２０９へ入力される。また、第１の一時記憶手段２０９からの出力は１ビットだけ下位ビット側へシフト（右シフト）して第１演算手段２０７へ入力されている。このことにより、第１の一時記憶手段２０９からの出力２０３には乗算結果の実部znR = aR・WnR - aI・WnIが得られる。
【０１０５】
第２演算手段２０８は、符号判定ビットaIの値に応じて、aI=0ならば第２記憶手段２０６から受けた値を第２の一時記憶手段２１０の値から減算し、aI=1ならば第１記憶手段２０５から受けた値を第１の一時記憶手段２１０の値に加算する。第２演算手段２０８の結果は第２の一時記憶手段２１０へ入力される。また、第２の一時記憶手段２１０からの出力は１ビットだけ下位ビット側へシフト（右シフト）して第２演算手段２０８へ入力されている。このことにより、第２の一時記憶手段２１０からの出力２０４には乗算結果の虚部znI = aR・WnI + aI・WnRが得られる。
【０１０６】
これらの乗算結果znR、znIを用いて高速フーリエ変換が実現される。
【０１０７】
本参考例の高速フーリエ変換装置によれば、図７の従来例に比べて乗算器７０６〜７０９を省略できるので、回路規模を削減できる。また、消費電力も低減できる。しかも、第１記憶手段（実部LUT）２０５および第２記憶手段（虚部LUT）２０６の記憶容量は、第１参考例のものに比して、半分で済む。
【０１０８】
（第１実施形態の高速フーリエ変換装置）
図３は、オフセットバイナリDA法を、回転因子表を用いた乗算に適用した第１実施形態の高速フーリエ変換装置の要部、つまり、バタフライ演算によって得られた入力データと回転因子表に含まれた回転因子との乗算を行う回路の構成を示している。本実施形態で用いる回転因子表は、第２参考例で用いたものに比して、さらにサイズが半分のものである。
【０１０９】
この高速フーリエ変換装置は、２ビットの入力データが入力される実部入力端子３０１および虚部入力端子３０２と、その入力データの実部ビット値と虚部ビット値との間の排他的論理和を求めるＸＯＲ回路３１２と、ｎの値に応じて所定の記憶データを出力する第１記憶手段（第１LUT）３０５および第２記憶手段（第２LUT）３０６と、それらの記憶手段３０５，３０６から読み出された値を入れ替えて出力し得る第３演算手段３１１と、第１演算手段（加減算器１）３０７および第２演算手段（加減算器２）３０８と、第１の一時記憶手段（レジスタ１）３０９および第２の一時記憶手段（レジスタ２）３１０とを備えている。
【０１１０】
実部入力端子３０１と虚部入力端子３０２とからは入力データaの実部aRと虚部aIがそれぞれ最下位ビットからビットシリアルに入力されてくる。ＸＯＲ回路３１２は、それらのaRとaIとの間の排他的論理和aR○aIを求める。
【０１１１】
第１記憶手段３０５は、第１の回転因子表として、n=0からn=N/8までの各ｎごとに、Qn+=(WnR + WnI)/2の値を一つずつ記憶している。この第１記憶手段３０５からは、ｎの値に応じてQn+=(WnR + WnI)/2の値が読み出される。また、第２記憶手段３０６は、第２の回転因子表として、n=0からn=N/8までの各ｎごとに、Qn-=(WnR - WnI)/2の値を一つずつ記憶している。この第２記憶手段３０６からは、ｎの値に応じてQn-=(WnR - WnI)/2の値が読み出される。第１記憶手段（第１LUT）３０５および第２記憶手段（第２LUT）３０６については、図９（ａ）にデータ構造と記憶値を模式的に示す。
【０１１２】
第３演算手段３１１は、第１記憶手段３０５および第２記憶手段３０６から読み出された値Qn+とQn-を受けて、入力データの排他的論理和aR○aIの値に応じて、それらの値Qn+とQn-を入れ替えて又は入れ替えずにそのまま第１出力値、第２出力値として第１演算手段（加減算器１）３０７、第２演算手段（加減算器２）３０８へ出力する。すなわち、aR○aI=0ならば、第２記憶手段３０６の出力値Qn-を第１演算手段３０７へ第１出力値として出力するとともに、第１記憶手段３０５の出力値Qn+を第２演算手段３０８へ第２出力値として出力する。また、aR○aI=1ならば、第１記憶手段３０５の出力値Qn+を第１演算手段３０７へ第１出力値として出力するとともに、第２記憶手段３０６の出力値Qn-を第２演算手段３０８へ第２出力値として出力する。
【０１１３】
第１演算手段３０７は、符号判定ビットaRの値に応じて、aR=0ならば第３演算手段３１１から受けた値を第１の一時記憶手段（レジスタ１）３０９の値から減算し、aR=1ならば第３演算手段３１１から受けた値を第１の一時記憶手段３０９の値に加算する。第１演算手段３０７の演算結果は第１の一時記憶手段３０９へ入力される。また、第１の一時記憶手段３０９からの出力は１ビットだけ下位ビット側へシフト（右シフト）して第１演算手段３０７へ入力されている。このことにより、第１の一時記憶手段３０９からの出力３０３には乗算結果の実部znR = aR・WnR - aI・WnIが得られる。
【０１１４】
第２演算手段３０８は、符号判定ビットaIの値に応じて、aI=0ならば第３演算手段３１１から受けた値を第２の一時記憶手段（レジスタ２）３１０の値から減算し、aI=1ならば第３演算手段３１１から受けた値を第２の一時記憶手段３１０の値に加算する。第２演算手段３０８の結果は第２の一時記憶手段３１０へ入力される。また、第２の一時記憶手段３１０からの出力は１ビットだけ下位ビット側へシフト（右シフト）して第２演算手段３０８へ入力されている。このことにより、第２の一時記憶手段３１０からの出力３０４には乗算結果の虚部znI = aR・WnI + aI・WnRが得られる。
【０１１５】
これらの乗算結果znR、znIを用いて高速フーリエ変換が実現される。
【０１１６】
本実施形態の高速フーリエ変換装置によれば、図７の従来例に比べて乗算器７０６〜７０９を省略できるので、回路規模を削減できる。しかも、第１記憶手段（第１LUT）３０５および第２記憶手段（第２LUT）３０６の記憶容量は、第２参考例のものに比して、さらに半分で済む。
【０１１７】
（第２実施形態の高速フーリエ変換装置）
図４は、オフセットバイナリDA法を、回転因子表を用いた乗算に適用した第２実施形態の高速フーリエ変換装置の要部、つまり、バタフライ演算によって得られた入力データと回転因子表に含まれた回転因子との乗算を行う回路の構成を示している。本実施形態で用いる回転因子表は、第１実施形態における第１LUT３０５と第２LUT３０６とを一つに統合したものに相当する。
【０１１８】
この高速フーリエ変換装置は、２ビットの入力データが入力される実部入力端子４０１および虚部入力端子４０２と、その入力データの実部ビット値と虚部ビット値との間の排他的論理和を求めるＸＯＲ回路４１２と、ｎの値に応じて所定の記憶データを１対出力する記憶手段（０LUT）４０５と、その記憶手段４０５の１対の出力値を入れ替えて出力し得る第３演算手段４１１と、第１演算手段（加減算器１）４０７および第２演算手段（加減算器２）４０８と、第１の一時記憶手段（レジスタ１）４０９および第２の一時記憶手段（レジスタ２）４１０とを備えている。
【０１１９】
実部入力端子４０１と虚部入力端子４０２とからは入力データaの実部aRと虚部aIがそれぞれ最下位ビットからビットシリアルに入力されてくる。ＸＯＲ回路４１２は、それらのaRとaIとの間の排他的論理和aR○aIを求める。
【０１２０】
記憶手段（０ＬＵＴ）４０５は、n=0からn=N/8までの各ｎごとに、Qn+=(WnR + WnI)/2の値とQn+=(WnR + WnI)/2の値とを対応付けて１対記憶している。この記憶手段４０５からは、入力データaRとaIには関係なく、ｎの値に応じてQn+=(WnR + WnI)/2とQn-=(WnR - WnI)/2の１対の値が読み出される。LUT４０５については、図９（ｂ）にデータ構造と記憶値を模式的に示す。
【０１２１】
第３演算手段４０６は、記憶手段４０５から読み出された一対の値Qn+とQn-を受けて、入力データの排他的論理和aR○aIの値に応じて、それらの値Qn+とQn-を入れ替えて又は入れ替えずにそのまま第１出力値、第２出力値として第１演算手段４０７、第２演算手段４０８へ出力する。すなわち、aR○aI=0ならば、Qn-を第１演算手段４０７へ第１出力値として出力するとともに、Qn+を第２演算手段４０８へ第２出力値として出力する。また、aR○aI=1ならば、Qn+を第１演算手段４０７へ第１出力値として出力するとともに、Qn-を第２演算手段４０８へ第２出力値として出力する。
【０１２２】
第１演算手段４０７は、符号判定ビットaRの値に応じて、aR=0ならば第３演算手段４０６から受けた値を第１の一時記憶手段４０９の値から減算し、aR=1ならば第３演算手段４０６から受けた値を第１の一時記憶手段４０９の値に加算する。第１演算手段４０７の結果は第１の一時記憶手段４０９へ入力される。また、第１の一時記憶手段４０９からの出力は１ビットだけ下位ビット側へシフト（右シフト）して第１演算手段４０７へ入力されている。このことにより、第１の一時記憶手段４０９からの出力４０３には乗算結果の実部znR = aR・WnR - aI・WnIが得られる。
【０１２３】
第２演算手段４０８は、符号判定ビットaIの値に応じて、aI=0ならば第３演算手段４０６から受けた値を第２の一時記憶手段４１０の値から減算し、aI=1ならば第３演算手段４０６から受けた値を第２の一時記憶手段４１０の値に加算する。第２演算手段４０８の結果は第２の一時記憶手段４１０へ入力される。また、第２の一時記憶手段４１０からの出力は１ビットだけ下位ビット側へシフト（右シフト）して第２演算手段４０８へ入力されている。このことにより、第２の一時記憶手段４１０からの出力４０４には乗算結果の虚部znI = aR・WnI + aI・WnRが得られる。
【０１２４】
これらの乗算結果znR、znIを用いて高速フーリエ変換が実現される。
【０１２５】
本実施形態の高速フーリエ変換装置によれば、図７の従来例に比べて乗算器７０６〜７０９を省略できるので、回路規模を削減できる。しかも、記憶手段(0LUT)のアドレスデコーダを、第１実施形態のように入力データの実部ビット値と虚部ビット値に対応して第１LUT、第２LUTから読み出された値を入れ替える場合に比して、半減できる。また、消費電力も低減できる。
【０１２６】
このように、本発明の回転因子表によれば、N点DFT/IDFTを実行するためにはN/8+1組のデータを記憶しておくだけで済む。したがって、高速フーリエ変換装置の回路規模を削減できる。
【０１２７】
なお、本実施形態では基数２のFFTについて説明を行ったが、当然ながら、これに限られるものではない。N/8が420の倍数ならば、nが０からN/8までの区間のCnとSnの組で回転因子を表すことができ、したがって、本発明は、基数４のFFTや基数８のFFTに広く適用することができる。
【０１２８】
【発明の効果】
以上より明らかなように、本発明の高速フーリエ変換装置によれば、回路規模を削減できる。
【図面の簡単な説明】
【図１】  本発明の第１参考例の高速フーリエ変換装置の要部、つまり、バタフライ演算によって得られた入力データと回転因子表に含まれた回転因子との乗算を行う回路の構成を示す図である。
【図２】  本発明の第２参考例の高速フーリエ変換装置の要部を示す図である。
【図３】  本発明の第１実施形態の高速フーリエ変換装置の要部を示す図である。
【図４】  本発明の第２実施形態の高速フーリエ変換装置の要部を示す図である。
【図５】  一般的な８点離散フーリエ変換装置の周波数間引き演算を行う回路の構成を示す図である。
【図６】  高速フーリエ変換のための回転因子の周期性を示す図である。
【図７】  従来の高速フーリエ変換装置における、バタフライ演算によって得られた入力データと回転因子表に含まれた回転因子との乗算を行う回路の構成を示す図である。
【図８】  （ａ）は、表５と表６の回転因子表を具体化したものに相当し、図１中に示したＬＵＴ１０５とＬＵＴ１０６のデータ構造と記憶値とを模式化して示す図である。（ｂ）は、表５と表６の回転因子表を具体化したものに相当し、図２中に示したＬＵＴ２０５とＬＵＴ２０６のデータ構造と記憶値とを模式化して示す図である。
【図９】  （ａ）は、図３中に示したＬＵＴ３０５とＬＵＴ３０６のデータ構造と記憶値とを模式化して示す図である。（ｂ）は、図４中に示したＬＵＴ４０５のデータ構造と記憶値とを模式化して示す図である。
【符号の説明】
１０５，２０５，３０５  第１の記憶手段（ＬＵＴ）
１０６，２０６，３０６  第２の記憶手段（ＬＵＴ）
１０７，２０７，３０７，４０７  第１の演算手段
１０８，２０８，３０８，４０８  第２の演算手段
２１２，３１２，４１２  ＸＯＲ回路
３１１，４０６  第３の演算手段
４０５  記憶手段
【図１】
0003872724.tif 000038
【図２】
0003872724.tif 000039
【図３】
0003872724.tif 000040
【図４】
0003872724.tif 000041
【図５】
0003872724.tif 000042
【図６】
0003872724.tif 000043
【図７】
0003872724.tif 000044
【図８】
0003872724.tif 000045
【図９】
0003872724.tif 000046