introductiontodigitalsignalprocessingwithmajrlabexercisesvb1.5,no.2,pp105-114,march2001 篭...

11
JoumalofSignalProcessing,Vb1.5,No.2,pp105-114,March2001 基礎シリーズ MAmLABで学ぶディジタル信号処理の基礎(全6回) MATLABで学ぶディジタル信号処理の基礎 IntroductiontoDigitalSignalProcessingwithMAjrLABExercises 一第2回離散フーリエ変換と高速フーリエ変換一 -2.DiscreteFourier'nansfbrmsandFastFourier‘nansfbrms- 川又政征* MasayukiKawamata* 》鍵 Journalor S且gnalProcessmg 信号処理

Upload: doanhanh

Post on 08-Apr-2018

218 views

Category:

Documents


5 download

TRANSCRIPT

JoumalofSignalProcessing,Vb1.5,No.2,pp105-114,March2001

基礎シリーズ MAmLABで学ぶディジタル信号処理の基礎(全6回)

MATLABで学ぶディジタル信号処理の基礎

IntroductiontoDigitalSignalProcessingwithMAjrLABExercises

一第2回離散フーリエ変換と高速フーリエ変換一

-2.DiscreteFourier'nansfbrmsandFastFourier‘nansfbrms-

川又政征*

MasayukiKawamata*

壷韓》

》鍵

JournalorS且gnalProcessmg

信号処理

基礎シリーズ 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

一一一一

凹離皿一一一一

一一

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

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

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