とりあえず今日 出来た所まで
まず、ビット反転ルーチン 今回は必要無いかと思ったんですが
実数2つのFFT上で掛算をする時に必要だったので
procedure MkBitRevTbl(n:integer;var tbl:array of integer);
var i,j,k,mh,m:integer;
begin
m :=1 shl n;
mh:=m div 2; //mh=msbのみ1のデータ
i:=0; // 1単位に増えるアドレス
j:=0; // ビット反転アドレス
while true do
begin
tbl[i]:=j;
inc(i);if i>=m then break;
k:=mh; //mh=msbのみ1のデータ
while k<=j do begin //上のビットが立っていたら
j:= j and (not k); //それを落としてゆく i-kでも良い筈
k:=k div 2;
end;
j:= j or k;
end;
end;