introductiontodigitalsignalprocessingwithmajrlabexercisesvb1.5,no.2,pp105-114,march2001 篭...
TRANSCRIPT
JoumalofSignalProcessing,Vb1.5,No.2,pp105-114,March2001
篭
基礎シリーズ MAmLABで学ぶディジタル信号処理の基礎(全6回)
MATLABで学ぶディジタル信号処理の基礎
IntroductiontoDigitalSignalProcessingwithMAjrLABExercises
一第2回離散フーリエ変換と高速フーリエ変換一
-2.DiscreteFourier'nansfbrmsandFastFourier‘nansfbrms-
川又政征*
MasayukiKawamata*
壷韓》
》鍵
蕊
JournalorS且gnalProcessmg
●
信号処理
弔
中
q
、
喝
。
●
3
号
’
●
塊
副
、
●
P
4
別
甘
箔
、
基礎シリーズ MA(ILABで学ぶディジタル信号処理の基礎(全6回)
MATLABで学ぶディジタル信号処理の基礎
IntroductiontoDigitalSignalProcessingwithMA皿LABExercises
-第2回離散フーリエ変換と高速フーリエ変換一
一2.DiscreteFourier1IhfansfbrmsandFastFourier'Iiansfbrms-
川又政征*
MasayukiKawamata*
1.はじめに
第2回の基礎講座では,フーリエ解析の一つである
離散フーリエ変換とその高速計算手法について学ぶ。
フーリエ解析は関数の解析や微分方程式の解法のため
の重要な数学的手法であることはよく知られている。
その利用分野は数学や物理学にとどまらず,工学的な
領域では信号処理,画像処理,通信,システム制御,
回路網理論など極めて広い。
離散フーリエ変換は有限長の離散時間信号から有限
長の数列としての変換を求める計算法であり,順変換
も逆変換も乗算と加算によって実行される。このため,
フーリエ積分や離散時間フーリエ変換とは異なり,コ
ンピュータプログラムやディジタルハードウェアとし
て容易に実行可能なものとなっている。
今回は,離散時間フーリエ変換から離散フーリエ変
換を導き,この直接的な計算法は計算量が多く効率的
ではないことを示す。次に,離散フーリエ変換の効率
的計算手法である高速フーリエ変換の導出の考え方を
紹介する。また,離散フーリエ変換の直接的な計算法
と高速フーリエ変換の計算量をMATLABを用いて実
験的に比較することで,高速フーリエ変換では計算量
が激減することを確認する。
*東北大学大学院工学研究科電子工学専攻
〒980-8579仙台市青葉区荒巻字青葉05
,IbhokuUniversity,Sendai980-8579,Japan
E-mail:kawamata◎ecei、tohoku.ac・jp
本講座のMAmLABのプログラムは以下のページから入手できる。
http://ww.nk.ecei.tohoku、ac・jp/jspmatユab/
JournalofSignalProcessing,Vol、5,No.2,March2001
2.離散フーリエ変換
2.1順変換
離散フーリエ変換を導出するために,Ⅳ点の信号
鰯(0),z(1),〃(2),…,鰯(Ⅳ-1)の離散時間フーリエ変
換X(e池)をまず考えよう。すなわち
x(e抑)
jV-1
E鰯(")e-”",“=一派一汀(1)”=0
(あるいは“=O~27T)
ここで,周波数⑳の基本区間は-7T~7Tあるいは
0~27rであることを考慮し,27rを1V等分した値の
周波数蝶=27rMVのみにおいて変換X(e”)を計算するものとすると,上式から次式を得る。
…‐言…・(-糾片=0,1,2,…,jV-1(2)
上式は離散時間フーリエ変換(1)において周波数のき
ざみ幅を2打/Ⅳとしたことに相当する。上式の記述の簡略化のために以下のような記法を定義する。
X(ん)=X(ej等偽),片=0,1,2,…,IV-1(3)
恥=・翼,(-'等)“これらを用いると,式(2)から次式が得られる。
jV-1
x(ん)=E”=0
鯵(")Wjy‘,k=0,1,2,…,IV-1(5)
105
上式で示されるような信号〃(、)からx(k)を求
める演算はⅣ点離散フーリエ変換(discreteFourier
transfbrm,DFT)とよばれる。|X(片)|は信号〃(、)
の振幅スペクトル(magnitudespectrum)とよばれ,
とX(k)は位相スペクトル(phasespectrum)とよばれる。
以上の説明では,離散時間フーリエ変換の計算を離
散的な周波数上でのみ行うことでDFTを導出してい
る。このため,Ⅳ点信号z(、)に対するDFTX(ん)の物理的な意味は離散時間フーリエ変換と同じもの
となる。すなわち,Ⅳ点信号〃(”)は様々な周波数
(⑳ルー2,rMV,k=0~jV-1)の複素指数関数WlIy‘の重ね合わせによって構成される。このとき,信号
z(")には周波数蝿の複素指数関数x(k)w1y,が入っ
ていることをDFTX(ん)は意味している。このとき,
複素指数関数x(k)w)Iy,の振幅は|x(k)|であり,位
相はとx(ル)である。
いま,DFTの計算を簡潔に記述するために以下の
ようにベクトル錘,Xと行列Wjvを定義する。
お=[z(O),錘(1),…,鰯(IV-1)]
X=[X(O),X(1),…,X(Ⅳ-1)1
1鰯l帆f霧雲川副
(6)
(7)
(8)
このとき,式(5)は以下のように書き換えられる。
X=”WiV(9)
ここで“t”は行列の転置を表す。
22インデックスkと周波数の対応
Ⅳ点DFTの導出における式(1),(2),(3)から,周
波数を表す整数のインデックスハは周波数⑳ルー帯A,[rad]に対応していることになる。周波数⑳として正
負の範囲の周波数を考えたい場合には,インデックス
kの前半o~[筈」-1は正の周波数恥=等A;に対応し,インデックス聡の後半[署」~Ⅳ-1は負の周波数恥=-2汀十等舟に対応することになる1.これはe池が周期27rの周期関数であることによる。
lHoor関数回は9cよりも小さくZに最も近い整数値を表す。
106
DFTを利用する場合には,以上のようにインデッ
クスハの大きさが直接には周波数の高低に対応しな
いことに留意する必要がある。このため,インデック
スの後半を負の側にシフトしてDFTを表示し,DFT
のインデックスと物理的な周波数の対応が明確になる
ように表示することがある2。
2.3回転因子
DFTとIDFTにおいて用いられるWメア,=
exp(-j2汀加/Ⅳ)は複素平面上の単位円の円周上を
27『/1Vごとに動く点を表し,回転因子(twiddlefac‐
tor)とよばれる。次式のように,回転因子W;;はべきpに関して周期Ⅳで周期的であることに注意して
ほしい。
昭=w'1;F十mⅣ,任意の整数、とpに対して('0)
したがって,p=0~Ⅳ-1の範囲のⅣ個の回転因
子w爵が独立な値である。ハードウェアやソフトウェアによってDFTを計算するときの記憶容量や計算量
を削減するために,この周期性を利用できる。
【例題2.1】式(9)の形式を利用して,入力信号
"(、)に対してDFTX(ん)を求めるMATLABの関数drtを定義し,以下の信号に対してDFTを
求めよ。また,信号と振幅スペクトルを図示せよ。
〃(、)=巳,1,1,1,0,0,0,0](11)
【Program2.1】(図2.1)%離散フーリエ変換の計算例
Clear;
x=[11110000];
n=0:1ength(x)-1;
subp1ot(2,2,1);
steIn(n,x);grid;
axis([Oユength(、)min(x)max(x)]);
xlabel('tiInen');yユabe1('x(、),);X=dft(x)
magX=abs(X)
k=n;
subpユot(2,2,2);
stem(k,magX);grid;
x1abeユ('frequencyk,);y1abeユ(,|X(k)|,);
kshift=k-noor(length(k)/2);
2MATLABでは,このために関数壬ftshi玉tが用意されている。
JoumalofSignaIProcessing,Vol、5,No.2,March2001
Xshift=fftshift(X);
magXshift=abs(Xshift);
subp1ot(2,2,3);
stem(kshift,InagXshift);grid;xユabel(,frequencyk');ylabeユ(,|X(k)|,);
シーク、夕、望
86420
●
。
●
0000
(こ)×
以下ディスプレイの表示
ヘヘへ
107
X=
Columnslthrough44.00001.0000-2.4142i
Co1umns5through8
(以下省略)0 2 468
time、
(a)信号〃(")
(a)Signalz(")
n.K
、ノ
●,《
x4L
〃l
、ノ
tNN
《工。.ノ/
換.0.1,△
刻変一一兆一一*(色
2工幻ak・‐.、J、,
*
mⅧリrL、、。,n-j
a-m噂旧刈狐Ⅷ
rフ・1e・.ke*
昭散此10
x
一一一一
凹離皿一一一一
一一
rL〃ん《工Nn肋WX
JoumalofSignalProcessing,Vol、5,No.2,March2001
4
3
2エ)×
2.4逆変換 0
0 2468
frequencyk
(b)振幅スペクトル|X(ん)|
(b)MagnitudespectrumlX(k)’
Ⅳ点のDFTX(ん)(ん=0~jV-1)から信号z(、)
を求める変換は離散フーリエ逆変換(inversediscrete
Fburiertransfbrm,IDFT)とよばれ,次式で与えられる。
‘{昨随x岬繍)丁側=詩(言x…)。側
上式の右辺の括弧の中の計算はx*(ん)をⅣ点の信号と考えたときのDFTを計算を行っていることがわ
4
3
忽(")=癌x(岬諏,"=叩ルル‘ん=0
(12)
式(9)のDFTに対応するIDFTの形式を求めるため
に,行列Wjv…を以下のように定義する。
2ヱ)×
0
- 4 ‐ 2 0 2 4
frequencyk
W7jv…=
畷iⅧ(c)インデックスをシフトして表示した振幅
スペクトル|x(k)|
(c)MagnitudespectrumlX(k)lwithshiftedind
ⅣⅣ
一一脈
噸
××
01
町脈
lX(k)lwithshiftedindexk
W1v(jv-')×(lv-')WIvUv-1)×1 図2.1離散フーリエ変換の計算例
Fig.2.1ExampleofDFT(13)
式(12)のIDFTは,ベクトルX,錘と行列Wjv…を用いると,以下のように表される。
”=完xw… (14)
IDFTを実行するために,次のようにして順変換(5)
を使うことができる。まず,複素共役を2重に用いる
と,逆変換('2)が以下のように変形できることに着目する。
ン、=
夕q夕可 夕、 夕
” L 戸 、 皿 Lへ
↑?
。。申■ULU■参
Jl
夕
心。。P●①◆七●
1寺●●■●a1
p●●●●◆●1
↑
かる・したがって,上式が教えることは,DFTX(ん)
の逆変換を求めるためには,まずx(A)の複素共役
X*(k)のDFTを求め,その複素共役をとり,これを
1Vで割ればよいということである。複素共役を求め
る計算は複素数の虚数部の符号反転だけを必要とし,
特別な計算を必要としない。そこで,DFTとIDFT
の計算のために共通のソフトウェアやハードウェアが
利用できる。
【例題2.2】式(14)に従って,離散フーリエ逆
変換を実行するMATLABの関数idftを定義せ
よ。また,この関数を用いて,例題2.1で求めら
れたDFTX(k)からIDFTz(〃)を求め,それが
式(11)と一致することを確認せよ。
【Program2.3】%離散時間フーリエ逆変換
function[x]=idft(X)
N=ユength(X);
n=O:N-1;k=0:N-1;
kn=k・》*n;
WNinv=exp(-j*2*pi/N).へ(-k、);x=X*WNinv/N;
以下ディスプレイの表示
X=
Co1umnslthrough41.001.00.-0.00i1.00-0.00i1.00-0.00i
Columns5through8-0.00+0.00i0.00+0.00i0.00+0.00i0.00+0.OOi
【例題2.3】Program2.2で定義された関数dft
を用いて,式(16)に従って実行される離散フー
リエ逆変換の関数idftv2を定義せよ。
【Program2.4】%離散フーリエ変換を利用した逆変換
function[x]=idftv2(X)
N=ユength(X);
x=conj(dft(conj(X)))/N;
2.5離散フーリエ変換の直接計算法の計算量
Ⅳ点の信号〃(、)に対するDFTX(ん)は次式で与えられていた。
X=記W1V(17)
ここで,信号のベクトル記は1×Ⅳベクトルであり,
行列WjvはⅣ×Ⅳ行列である。錘は一般には複素
108
数であり,Wjvも複素数である。上式の右辺に基づ
くDFTの計算を直接計算法(directcomputation)とよぶ。
いま,回転因子Wjvは何らかの方法であらかじめ
求められているとして,このための計算量は考慮して
いないことにしよう。このとき,式(17)の右辺から
DFTX(k)を求めるためには
Ⅳ×Ⅳ回の複素乗算
Ⅳ×(Ⅳ-1)回の複素加算
(18)
(19)
を必要するすることが容易にわかる。すなわち,直
接計算法の場合のⅣ点DFTの計算量はO(Ⅳ2)である。
たとえば,Ⅳ=2'0=1,024の場合,1,024点
DFTを求めるための複素乗算回数は,Ⅳ2=220=
1,048,576であり,複素加算回数はⅣ(Ⅳ-1)=
2'0(2'0-1)=1,047,552である。これは,約106
回の計算量であり,極めて大きな値となる。このため,
直接計算法はDFTのための実用的な方法とはいえ
ない。そこで,長い信号のDFTを計算するために,
Program2.2を用いることはすすめられない。
IDFTについても,式(14)に基づいて直接的な計
算を実行でき,この計算量もO(Ⅳ2)であることは容易に理解できる。このため,長い信号のIDFTを計
算するために,Program2.2や2.4を用いることはすすめられない。
3.高速フーリエ変換
3.1高速フーリエ変換の考え方
DFTを求めるための高速のアルゴリズムは高速フー
リエ変換(fastFouriertransfbrm,FFT)をよばれる。FFTのアルゴリズムは長い点数のDFTを短い点数の
DFTへと逐次的に分解することによって得られる。こ
の方法は,たとえばソーティングなどの高速のアルゴ
リズムを見出すときに用いられる分割統治法(divide‐and-conquer)の考え方を利用したものである。分割統
治法は,大きな問題を再帰的に小問題に分け(分割),
容易に解ける小問題の解を統合して(統治),もとの問題の解を求める方法である。たとえば,サイズがⅣ
のバブルソートの計算量はO(jV2)であるが,分割統
治法にもとづくマージソートの計算量はO(1V,。gjV)となることはよく知られている。
JoumalofSignalProcessing,Vol、5,No.2,March2001
ここで紹介するFFTの原理は,信号の長さⅣが
2のべき乗の場合,すなわち整数pに対してⅣ=2p
の場合のものである。この場合,信号を再帰的に2分
割してゆくため,基数2のFFT(radix-2FFT)とよ
ばれる。以下の基数2のFFTは時間のインデックス
、に着目してⅣ点の信号z(n)を半分ずつに分割し
てゆくことから,基数2の時間間引き形(decimation
intime)FFTとよばれる。
スハは0~Ⅳ-1まで広がり,一方,右辺のxO(ん)
とX,(ん)はⅣ/2点DFTであるため,そのインデッ
クスkは0~Ⅳ/2-1の範囲であることである。
いま,Ⅳ/2点DFTXb(k)とX,(k)に対して次の周期性が成立することに注意しよう。
jjhki
01
XX
Xo(ん十Ⅳ/2)
Xo(k+Ⅳ/2)
(27)
(28)
xb(ん)とx,(ん)はkに関して周期Ⅳ/2で周期的で3.2高速フーリエ変換の導出
あることから,式(26)の計算に支障はないことがわ
信号麹(卿)の長さがⅣ=2'(pは正整数)である次琴霊差裁雪関しても以下の周期性が成立式のⅣ点DFTを考えよう。
Wi;ナ号=-W)I;(29)jV-1
X(ん)=Ez(")WlIy‘,ルー0,1,2,…,jV-1(20)”=o これらの周期性を系11用すると,式(26)は以下のよ
まず,図2.2のように,信号砥(、)のインデックス呪うに記述される。が偶数であるか奇数であるかによって〃(、)を二つの
X(k)=Xo(ん)+WjI;X,(ル)(30)クラスに分ける。このとき,DFTX(k)は次のよう
X(A‘+1V/2)=Xo(k)-W}I;X,(ん)(31)に記述される。
k=0,1,…,Ⅳ/2-11V/2-1j V / 2 - 1
X(A‘)=Z懇(2m)WjIi:伽十Z〃(2m+1)W鳶(2m+'1上式から,Ⅳ点りFTX(ん)は二つのⅣ/2点DFTm=0 m=0
N/2-11V/2-l xO(k)とx,(k)に分割され,これらの線形結合によっ
=E鰯(2m)W縦十WメサE鰯(2m+1)W脇て求められることが明らかになった。jV=8の場合に、=0 m=0 ついて,この分害1と統治を表す流れ図を図2.3に示す。
(21)Ⅳ=2pの場合,このような分割はp=log21V回だた=O~Ⅳ-1
ただし け再帰的に行うことができる。すなわち,Ⅳ点DFT
は二つのⅣ/2点DFTから構成され,それぞれのⅣ/2
WjI;;2m=WiI恥(22)点DFTはⅣ/4点DFTから構成され,…,それぞ噸(2m+')=WjI;.W縦(23)れの2点DFTは二つの1点DFTから構成される。
DFTの定義から1点DFTを求めるために演算は不となることを利用している。ここで
要であり,信号の値そのものがDFTとなる。
jV/2-1 以上の分割統治法の考え方に基づくFFTのアルゴ
XO(k)=Z〃(2m)W)IリM=0-Ⅳ(24)リズムは再帰的構造を持ち,図24のように図示され、=0
る。FFTの再帰的計算は以下のようにまとめられる3.JV/2-1
X,(ん)=E鰯(2m+1)W縦,肉=0-N(25)FFTの再帰的計算:m=O jvを2のべき乗の整数とする。1V点の信号〃(、)
とおけば,Xb(ん)とX,(ん)は双方とも1V/2点DFTのDFTX(ん)は次のように再帰的に求められる。であり,これらを用いて式(21)は以下のように記述 olV=1のときできる。
(32)x(0)=〃(0)X(ん)=Xo(ん)十W;;X,(k),ルー0~Ⅳ-1(26)
109
3本講座では原理の理解のためにFFTを再帰的に記述して説明している。再帰的な関数の呼び出しは,ディジタル信号処理においては効率的とはいえない。そこで,実際の応用においては,FFTを再帰的関数呼び出しで実現することはすすめられない。
上式(26)において留意しなければならないことは,
左辺のX(k)はⅣ点DFTであるため,インデック
JoumaIofSignaIProcessing,Vol,5,No.2,March2001
0 2 3 4
,
(a)信号‘‘(、)
5 6 7
(a)Signalz(、)
へ
(仁)×
言十Fこ“)減
一上“)×
0 2 3
m
(b)偶数インデックスの信号懇(27,)
0 2 3
m
(c)奇数インデックスの信号2,(2m+1)
(c)Signalz(2m+1)ofoddindices(b)Signalz(2m)ofevenindices
図2.2時間間引き
Fig.2.2Decimationintimeofasignal
(
x(0)
x(2)
x(4)
x(6)
X(0)
X(1)
X(2)
X(3)
卜
x(1)
x(3)
x(5)
x(7)
X(4)
X(5)
X(6)
X(7)
図2.3二つのⅣ/2点DFTによるⅣ点DFTの計算(Ⅳ=8の場合)
Flow-graphofthejV-pointDFTimplementedwithtwojV/2-pointDFTIFig.2.3 DFTsfbrjV=8
110 JoumaIofSignaIProcessing,Vo1.5,No.2,Ma「℃h2001
)
I IIUI,
↑ ↑ I7 I
夕
4
。Ⅳ≠1のとき
z0(、)
",(、)
(33)
(34)
XO(ん)
x,(ん)
x(k)
X(k+Ⅳ/2)
"(2m)
"(2m+1)
m=0~Ⅳ/2-1
z0(、)のⅣ/2点DFT
z,(、)のⅣ/2点DFT
xb(ん)+WjIix,(ル)
XO(k)-W)I;X,(k)
k=0,1,…,Ⅳ/2-1
(35)
(36)
(37)
(38)
【例題2.4】マニュアルではあまり述べられてい
ないようであるが,MATLABでは再帰的に関数
を定義することができる。そこで,前述のFFT
を実行するMATLABの関数recfftを再帰的に
定義せよ。また,次の信号に対して,プログラム
が正しく動作していることを確認せよ。
z(")=巳,1,1,1,0,0,0,0](39)
【Program2.5】%再帰的に記述される高速フーリエ変換の計算例
Clear;
x=[11110000];
X=recfft(x)
以下ディスプレイの表示
X=
COユuInnslthrough44.00001.0000-2.4142i
Columns5through8
(以下省略)
【Program2.6】%再帰的に定義される高速フーリエ変換
function[X]=recfft(x)
N=ユength(x);
if2へfix(ユog2(N))~=N
error('Nisnotapowerof2');
end;
ifN==1
X=x;
e1se
In=0:N/2-1;
xO=x(2*m+1);
xl=x(2*m+1+1);
XO=recfft(xO);
X1=recfft(xl);
JoumalofSignalPmcessing,Vol、5,No.2,Ma『℃h2001
end
k=0:N/2-1;
Ⅶk=exp(-j*2*pi*k/N);
WNkX1=WNk.*X1;
X=[XO+WNkX1,XO-WNkX1];
3.3高速フーリエ変換の計算量
FFTが実際に効率的なアルゴリズムとなっている
ことを確認するために,計算量を求めてみよう。Ⅳ点
FFTの複素乗算回数を似(Ⅳ)とし,複素加算回数(減
算回数も含む)をα(Ⅳ)とおく。このとき,式(32)~式(38)から,複素乗算回数に対して次の差分方程
式が成立することがわかる。
“(Ⅳ'=2×似(筈)+署Jv≧,(‘01ただし,jv=1のとき,〃(Ⅳ)=0である。同様に,複素加算回数に対して次の差分方程式が成立すること
がわかる。
.(Ⅳ)=2xα(筈)+2×筈,Ⅳ≧,(411ただし,Ⅳ=1のとき,α(Ⅳ)=oである。
式(40)と式(41)は単純な1次の差分方程式であ
るから,容易に解くことができ,複素乗算回数〃(Ⅳ)
と複素加算回数α(Ⅳ)はそれぞれ次のようになることがわかる。
“(Ⅳ)=吾logzⅣ(42)α(Ⅳ)=Ⅳlog2jV(43)
したがって,FFTの複素乗算回数と複素加算回数は
ともにO(jVlog2jV)である。jVが実用的な大きさの
場合,この計算量は直接計算法の複素乗算回数と複素
加算回数のO(Ⅳ2)に比べて十分小さい値となる。
たとえば,Ⅳ=2'0=1,024のとき,1,024点FFT
の複素乗算回数は号log2jV=512×10=5,120である。この計算回数は前述のⅣ点DFTの直接計算の
計算回数の約1/200である。FFTの複素加算回数も
直接計算法の場合と比べて激減することが容易に確認
できる。したがって,FFTを用いると計算量が極め
て少なくなるため,実用的な処理時間でDFTの実行
が可能となるがわかる。
【例題2.5】DFTの二つの計算法の計算量を
MATLABで実測し,比較をしてみよう。Ⅳ=
111
N点DFT
112
血馴や淵I《)x(2m)x(、) N/2点DFT X(k)
十十wIiW;1
-岸
X'(k)
+
N/2点DFTX(k+N/2)x(2m+1)
図2.4FFTの再帰的構造
Fig.2.4RecursivestructureofFFT
1,2,4,...,29の信号〃(、)に対して,Program2.2
のdft,Program2.6のrecfftの計算量を求め,
比較せよ。ここで,信号として正規白色乱数を用
いよ。MATLABでは,計算量を求めるために関
数flOpSが準備されている4。
て,FFTの計算量が極めて少ないことがMATLABに
よっても確認された。
3.4JVが2のべき乗ではない場合のFFT
信号の長さⅣが2のべき乗ではない場合において
も,Ⅳが合成数ならば,分割統治法を適用すること
ができ,計算量の少ないアルゴリズムを求めることが
できる。ここでは,その考え方の概略を説明しよう。
いま,Ⅳが合成数5であり,Ⅳ=L×Mのように
分解できるとしよう。たとえば,Ⅳ=15は2のべき
乗ではないが合成数であり,15=3×5のように分解
できる。このとき,Ⅳ点DFTは以下のような手順で
計算できることが知られている[3,41.
1.JV点の信号を長さLのM個の信号に分割する。
2.M個のL点DFTを計算する。
3.L個のM点DFTを利用して,2.のDFTを
結合し,Ⅳ点DFTを求める。
51を除く複数の整数の積として表される自然数を合成数という。
【Program2.7】(図2.5)%dft.mとrecfft.mの計算量の測定
Clear;
pmax=9;
N=2.会(O:pmax);
x=randn(1,N(end));
%dft.mの計算量
form=1:(pmax+1)
fユops(O);
X=dft(x(1:N(、)));
dft-flops(、)=nops;end
%recfft.mの計算量
form=1:(pInax+1)
nops(O);
X=recfft(x(1:N(、)));
recfft-fユOPS(、)=nops;end
%計算量の図示
logユog(N,dft-fユOPS,,o''11,recfft-f1ops,'*');xlabel('LengthofsignaユsN');yユabel('Numberofoperations');
1egend('d壬t・In','recfft.m'’2);grid;
このような分割統治法を利用した場合,複素乗算回
数〃(ML)は
"(ML)=ML2+ML+LM2 (44)
となることが知られており,これは直接計算法のlV2
より小さくなる。たとえば,Ⅳ=15=3×5のとき,
"('5)=135<225=,52である。もし,MとLが
合成数ならば,このような分割統治法をさらに適用す
ることで,計算量をいっそう削減することができる。
一つの整数7.に対して,Ⅳ=rsと表せるとき,分
割はs段階行うことができる。このようなFFTは基
数γのFFTとよばれる。最も単純で効率的なプログ
図2.5の実験結果から明らかなように'直接計算法の
場合,信号の長さⅣに対して,計算量がO(Ⅳ2)で急激に増加している。一方,FFTの場合には,計算量の
増加はO(lVlog2jV)であり,緩やかである。したがつ
4f1opsは浮動小数点演算量の累積数を出力する。flops(0)は累積数を0にリセットする。
JoumalofSignalProcessing,Vol、5,No.2,March2001
8
10
113
7
10
6
10
5
4
3
hUnU《U
ql
dl
10
のこ◎一馬』のQ◎}。』のpE.Z
10
10
0
1020
10 10 10 10
LengthofsignaIsN
図2.5離散時間フーリエ変換の直接法とFFTの計算量の実験による比較
Fig.2.5ComparisonofthenumberofoperationsofdirectcomputationandFFT
対して,関数fftで高速フーリエ変換を実行し
て,Ⅳとfftの計算量の関係を実験的に求めよ。
なお,信号として正規白色乱数を利用せよ。
ラムを組むことができるFFTは,前述の基数2の
FFTである。Ⅳが合成数の場合には,素因数分解に
より,Ⅳ=pi1p;2…のように分解できることが知られている。この分解に基づくFFTは混合基数FFT
とよばれる。
もし,Ⅳが素数のときには,1Vは分解できない。
この場合には分割統治法は適用できないため,Ⅳ点
DFTのために直接計算法を用いざるを得ない。
6同様にIFFTのために関数i迂tが用意されている。
【Program2.8】(図2.6)%fft.mの計算量の測定
Clear;
Nmax=512;
N=1:NInax;
x=randn(1,Mnax);
fft-flops=zeros(1,Nmax);%fft.mの計算量
forM=N
fユOPS(0);
fft(x(1:M));
fft-f1ops(M)=fユOPS;end
%計算量の図示
ユoglog(N,fft-nops,,.’);grid;
xユabel('LengthofsignaユsN');
yユabel('Numberofoperations');
3.5MATLABの関数fft
MATLABでは様々な長さNに対して適用できる
FFTとして関数fftが用意されている6.信号の長
さNに適したFFTのアルゴリズムをfftは選択す
る。Ⅳが素数の場合には直接計算法が選択され,Ⅳが
2のべき乗の場合には最も効率のよい基数2のFFT
が選択され,1Vがその他の合成数の場合には混合基
数FFTが選択される。fftは機械語で書かれており,
極めて高速である。そこで,MATLABでDFTを実
行する場合には,関数fftを利用することを強くす
すめる。
計算量を図示した図2.6から,fftの計算量につい
て以下のことがわかる。
【例題2.6】1V=1~512のそれぞれの長さに 1.2のべき乗のⅣ(1,2,4,8,…)に対しては,fft
の計算量は極めて少なく,O(jVlog2jV)である。
JoumaIofSignalProcessing,Vol、5,No.2,March2001
7
0
114
Z.'B凸aC●■■?毛■■■・と
、4■●●●pず③■●gg
pef■■■・■ず■▼e2.
5GJq■●●■JOC●rq
r■。■●b中OG。』今
。r・■。。。刀■・・・fロ・$.・0.,
0凸。■自伊●●④"●●l●らqqq
D■■■■■自陣。①■■■■■己●“q
■■■①●●③■●1①■qq
理●①
廿●■
“。J●5町。
J1G酢j
J・叩』■①ロ
さげ■毎■凸
阜Q毎」?●ロ
6
0g■画q、、,・U■①geロ4も、
Q■■■■●ゅ●●Q①GBザ●d
gC・①旬■fP旬3句凸DDfJ
●凸ら●。■4・■1③●■、4"ざ
........I..:..,』
〉......母やUざ。■
視●0心09
自由f■ざ■凸。
IEEESeniorMember(1992).
5
0、甲ザウむら■■
、今F夕■Qr
L●ク伊垂■■■
い草FF』bOB
4
3
nU(U
寺I
41
吻匡ロ一一m」①巳○一○』のDEコヱ
!$qP
■●■
■●
JJ‐‐Ⅱ。‐‐‐‐
Pq令牌淋》》曲り
●●
酔一咽邪心叩・巳・口
qお魂鵡叩・・叩
“・●且↓?”
●?。αQ塵。。
。:恥《●。②J〃。
4。。。。●。・
毎■■■■e由■●■■
やJ亜誰》唖心的・叩
■■■■■●■①●■
■Q●凸甲●■旬■
DP0℃”す少も”●
凸●争寺●●?■●
■●■●凸■凸●■
,①●■①●甲qG,、■■ Uel
■早早勺
・ ・・ 甲・ P・ ㎡● ・・ ・~ ・・ .‐ 。。 。
●●6凸●
。画■●■$■●■b●、。■■DP●』
P●.■.■●
、■■ワ』由
2
0●。■。■字卓国
》●$■■■
町■凸d◇■。●
》』●。b』やや
色色Ⅱ &■■■■■昭
画I
109 2
(U
,1
3
1010 10
LengthofsignaIsN
図2.6MATLABの関数fftの計算量
Fig.2.6NumberofoperationsofMATLABfImctionfft
2.素数のⅣ(3,5,7,11,…)に対しては,fftの計
算量は極めて多く,O(ZV2)である。
3.その他のⅣについては,fftの計算量は2の
べき乗と素数の場合の間にあり,o(Iv,Ogjv)~
O(IV2)である。
参考文献
[1]A、V・OppenheimandR、WShafbr(伊達玄訳):ディジ
タル信号処理,(上),(下)コロナ社,1978.
[2]佐川雅彦,貴家仁志:高速フーリエ変換とその応用,昭晃堂,1992.
[3]L、B,Jackson:DigitalFiltersandSignalProcessingwith
MAJrLABExercise,ThirdEdition,KluwerAcademic
Publishers,1996.
[4]V・KIngleandJ.G・Proakis:DigitalSignalProcessing
UsingMATLAB,PWSPublishingCompany,1996.
[5]樋口龍雄,川又政征:MATLAB対応ディジタル信号処理昭晃堂,2000.
[6]http://www.mk・ecei・tohokuac.』p/dsptext/東北大学大学院工学研究科電子工学専攻,2000.
4.おわりに
第2回の講座では,紙幅の都合上,離散フーリエ
変換の性質と信号処理への応用については述べること
なく,おもに離散フーリエ変換と高速フーリエ変換の
計算手法について説明した。離散フーリエ変換の性質
と信号処理への応答については文献[1]-[51などを参考にしていただきたい。また,本講座では高速フーリ
エ変換のアルゴリズムの詳細な流れ図を与えることな
く,高速フーリエ変換の導出の考え方と計算量を求め
た。高速フーリエ変換の流れ図は極めて規則正しい構
造をもっており,この中にバタフライ回路やビット逆
順などの重要な特徴が現れる。これら特徴についても
前述の文献などを参照していただきたい。
なお,文献[5],[6]には,本講座で与えられたもの
とは異なる直接計算法と基数2の高速フーリエ変換
のためのMATLABのプログラム(mydft,my笠t)が掲載されているので,ご覧いただきたい。
、
川又政征1982年東北大学大学
院工学研究科電子工学専攻博士課程修
了,1995年同通信工学科教授,1997年東北大学大学院工学研究科電子工
学専攻教授.この間,1次元および多
次元ディジタルフィルタの設計,知的信号処理,画像・映像処理などに関す
る研究に従事.1984年度計測自動制
御学会論文賞,1996年度計測自動制
御学会著述賞,1997年第11回日本
IBM科学賞を受賞.電子'情報通信学
会,計測自動制御学会,情報処理学会,映像メディア学会,IEEEなどの会員.
唾
JoumalofSignalProcessing,Vol、5,No.2,March2001