(← 前のページへ // 次のページへ →)
 4. (D-1, 2) の漸化式と計算中のデータとの対応

 ここで念のため,次のことを繰り返しておく。

 DFTの式
FNkの定義式 ………(A-1)

の計算は,N =α1α2…αs 1 , α2 ,……,αs2) のとき,(D-1, 2) のように 『 s 段』 の計算で実行できる。ただし,

kとnの式
KmとNmの式

 特に,K1k1Ksk N1nNsns である。

このとき,
k の変数 (ks, ks -1,……, k2, k1) で,ksが『最上位』,k1が『最下位』
n の変数 (n1, n2,……, ns -1, ns ) で,n1が『最上位』,nsが『最下位』

であることに注意しよう。

 ここで (D-1, 2) の [m 段目] では (S の上の添え字 a, b は省略)

Sm -1[Km -1][Nm] : Km -1(km -1,……, k2, k1 ) ,Nm( nm , nm +1,……, ns -1, ns )
から
Sm [Km][Nm +1] : Km( km , km -1,……, k2, k1 ),Nm +1( nm +1,……, ns -1, ns )

になっていることにも注意しておこう。

 以上のことを踏まえて,実際にコンピュータプログラムを作成する上で,このような変数 (kmnmなど) をどう捕らえるかを考えてみる。

(1) k , n 内の変数の『上下関係』を変えない(『メモリ』を多めに使う)

 Smの『添え字変数』k 'm を次のようにおく。
k'mの式(E1)

………(E-1)

このとき k 'm の変数
(km , km -1,……, k2, k1, nm +1,……, ns -1, ns )

において,km が『最上位』,nsが『最下位』である。
 このとき,(D-1, 2) の計算では,『添え字変数』k 'm は次のように変化する。

    n : ( n1 , n2, n3,……, ns -1, ns )
[段目] → ↓
    k '1: ( k1 , n2 , n3,……, ns -1, ns )
[段目] → ↓
    k '2: ( k2 , k1, n3 ,……, ns -1, ns )
        ↓
         :
         :
        ↓
  k 'm -1: ( km-1 ,……, k2, k1, nm, nm +1,……, ns -1, ns )
[m 段目] →↓
   k 'm: ( km , km -1,……, k2, k1, km+1 ,……, ns -1, ns )
        ↓
         :
         :
        ↓
  k 's-1: ( ks-1 , ……, k2, k1, ns )
[ s 段目] →↓
   k 's: ( ks , ……, k2, k1 )
このとき k 'm -1k 'm では,『位』が同じ共通の変数は,nm +1,……, ns -1, ns だけなので,『小さい作業領域』での,Sm -1の『データ領域』へのSm のデータの上書きはできない。したがって,『計算途中用のデータ配列領域』が余分に必要である。

 なお,最終的に k 'sk となるので,データを並べ替える必要はない。
 更に『Wの値の表』( (D-1)では 残りのW(a),(D-2)では 残りのW(b) )の並べ替えも必要ない。

(2) 『計算途中用のデータ配列領域』を使わない

i ) 計算後に並べ替える

 まず,Km 内の変数の『上下関係』を逆にしたものを

K'mの式

とおき,Smの『添え字変数』k 'm を次のようにとる。

k'mの式(E2i)

………(E-2i)

 このとき k 'm の変数

(k1, k2,……, km -1, km , nm +1,……, ns -1, ns )

において,k1が『最上位』,nsが『最下位』である。

 こうすると,(D-1, 2) の計算では,『添え字変数』k 'm は次のように変化する。

    n : ( n1 , n2, n3,……, ns -1, ns )
[段目] → ↓
    k '1: ( k1 , n2 , n3,……, ns -1, ns )
[段目] → ↓
    k '2: ( k1, k2 , n3 ,……, ns -1, ns )
        ↓
         :
         :
        ↓
  k 'm -1: (k1, k2,……, km-1 , nm , nm +1,……, ns -1, ns )
[m 段目] →↓
   k 'm: (k1, k2,……, km -1, km , nm+1 ,……, ns -1, ns )
        ↓
         :
         :
        ↓
  k 's-1: (k1, k2,……, ks-1 , ns )
[ s 段目] →↓
   k 's: (k1, k2,……, ks -1, ks )
 このとき k 'm -1k 'm では,『位』が同じ共通の変数は,km nm 以外すべてなので,『小さい作業領域』での,Sm -1の『データ領域』へのSm のデータの上書きができる。したがって,余分の『計算途中用のデータ配列領域』は必要ない。

 しかし,最終的には k 'sk とはならず,

k の変数 (ks, ks -1,……, k2, k1) は,ksが『最上位』,k1が『最下位』
k 'sの変数 (k1, k2,……, ks -1, ks) は,k1が『最上位』,ksが『最下位』

なので, 計算後にデータの並べ替えが必要となる。

 a) (D-1) 式では
 [m 段目] 残りのW(a)Km -1では,

km -1 が『最上位』,k1が『最下位』


であるのに対し,(E-2i) 式の 'mでは,

k1が『最上位』,km が『最下位』

になっている。このことから,『Wの値の表』を使うときには,計算時に『表の並べ替え』をする必要があるのがわかる。

 b) (D-2) 式では
 [m 段目] 残りのW(b)Nm +1が,そのまま (E-2i) 式の k 'm に含まれている。したがって,『Wの値の表』を並べ替える必要はない。

ii ) 計算前に並べ替える

 fNn から fNn' に並べ替えたとする。
ただし,

nとn'の式

である。ここで,Nm 内の変数の『上下関係』を逆にしたものを

N'mの式

とすると,Smの『添え字変数』k 'm は次のようにおける。

k'mの式(E2ii)

………(E-2ii)

 なお,k 'm の変数

(ns, ns -1,……, nm +1, km ,……, k2, k1)

において,ns が『最上位』,k1が『最下位』である。

 このとき,(D-1, 2) の計算では,『添え字変数』k 'm は次のように変化する。
    n ' : ( ns, ns -1,……, n3, n2, n1)
[段目] → ↓
    k '1: ( ns, ns -1,……, n3, n2 , k1 )
[段目] → ↓
    k '2: ( ns, ns -1,……, n3 , k2 , k1)
        ↓
         :
         :
        ↓
  k 'm -1: ( ns, ns -1,……, nm +1, nm , km-1 ,……, k2, k1)
[m 段目] →↓
   k 'm: ( ns, ns -1,……, nm+1 , km , km -1, ……, k2, k1)
        ↓
         :
         :
        ↓
  k 's-1: ( ns , ks-1 , ……, k2, k1)
[ s 段目] →↓
   k 's: ( ks , ……, k2, k1 )
 このとき k 'm -1k 'm では,『位』が同じ共通の変数は,km nm 以外すべてなので,『小さい作業領域』での,Sm -1の『データ領域』へのSm のデータの上書きができる。したがって,余分な『計算途中用のデータ配列領域』は必要ない。

 なお,最終的に k 'sk となっているので,計算後にデータの並べ替える必要はない。

 a) (D-1) 式では
 [m 段目] 残りのW(a)Km -1 が,そのまま (E-2ii) 式の k 'm に含まれている。したがって『Wの値の表』を並べ替える必要はない。

 b) (D-2) 式では
 [m 段目] 残りのW(b)Nm +1では,

nm +1 が『最上位』, ns が『最下位』


であるのに対し,(E-2ii) 式の N 'm +1では,

ns が『最上位』,nm +1 が『最下位』

になっている。このことから,『Wの値の表』を使うときには,計算時に『表の並べ替え』をする必要があるのがわかる。

(← 前のページへ // 次のページへ →)


MIDI Lab へようこそTOPページ
//
<研究室の書庫>
/
『離散値フーリエ変換の計算』の
もくじ