1
unit LUX.DiscreteTrans.D1;
3
interface //#################################################################### ■
7
type //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【型】
9
TDiscreteTrans = class;
11
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
13
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
15
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TDiscreteTrans
17
TDiscreteTrans = class
20
///// initializing routines
23
procedure makect( var c:array of Double );
29
procedure bitrv216neg;
32
procedure bitrv208neg;
34
procedure cftf1st( var w:array of Double );
35
procedure cftb1st( var w:array of Double );
37
procedure cftmdl1( const n:Integer; var a:array of Double; var w:array of Double );
38
procedure cftmdl2( const n:Integer; var a:array of Double; var w:array of Double );
40
function cfttree( const n,j,k:Integer ) :Integer;
42
procedure cftf161( var a:array of Double; var w:array of Double );
43
procedure cftf162( var a:array of Double; var w:array of Double );
45
procedure cftf081( var a:array of Double; var w:array of Double );
46
procedure cftf082( var a:array of Double; var w:array of Double );
48
procedure cftleaf( const n,isplt:Integer; var a:array of Double );
59
_TEMP :array of Double;
61
_IP :array of Integer;
66
_Count :Integer; upCount :Boolean;
68
procedure SetCount( const Count_:Integer ); virtual;
72
procedure rftfsub( var c:array of Double );
73
procedure rftbsub( var c:array of Double );
81
destructor Destroy; override;
83
property Count :Integer read _Count write SetCount;
85
procedure TransWF; virtual; abstract;
86
procedure TransFW; virtual; abstract;
89
//const //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【定数】
91
//var //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【変数】
93
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
95
implementation //################################################################################### ■
99
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
101
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
103
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TDiscreteTrans
105
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
107
////////////////////////////////////////////////////////////////////////////// initializing routines
109
procedure TDiscreteTrans.makeipt;
111
j, l, m, m2, p, q :Integer;
123
for j := m to m2 - 1 do
128
_IP[ m2 + j ] := p + q;
136
procedure TDiscreteTrans.makewt;
138
j, nwh, nw0, nw1 :Integer;
139
delta, wn4r, wk1r, wk1i, wk3r, wk3i :Double;
147
delta := ArcTan( 1 ) / nwh;
148
wn4r := Cos( delta * nwh );
155
_W[ 2 ] := Cos( delta * 2 );
156
_W[ 3 ] := Sin( delta * 2 );
163
_W[ 2 ] := 0.5 / Cos( delta * 2 );
164
_W[ 3 ] := 0.5 / Cos( delta * 6 );
169
_W[ j ] := +Cos( delta * j );
170
_W[ j + 1 ] := +Sin( delta * j );
171
_W[ j + 2 ] := +Cos( 3 * delta * j );
172
_W[ j + 3 ] := -Sin( 3 * delta * j );
185
_W[ nw1 + 1 ] := wn4r;
189
wk1r := _W[ nw0 + 4 ];
190
wk1i := _W[ nw0 + 5 ];
192
_W[ nw1 + 2 ] := wk1r;
193
_W[ nw1 + 3 ] := wk1i;
198
wk1r := _W[ nw0 + 4 ];
199
wk3r := _W[ nw0 + 6 ];
201
_W[ nw1 + 2 ] := 0.5 / wk1r;
202
_W[ nw1 + 3 ] := 0.5 / wk3r;
207
wk1r := _W[ nw0 + 2 * j ];
208
wk1i := _W[ nw0 + 2 * j + 1 ];
209
wk3r := _W[ nw0 + 2 * j + 2 ];
210
wk3i := _W[ nw0 + 2 * j + 3 ];
212
_W[ nw1 + j ] := wk1r;
213
_W[ nw1 + j + 1 ] := wk1i;
214
_W[ nw1 + j + 2 ] := wk3r;
215
_W[ nw1 + j + 3 ] := wk3i;
226
procedure TDiscreteTrans.makect( var c:array of Double );
236
delta := ArcTan( 1 ) / nch;
238
c[ 0 ] := Cos( delta * nch );
239
c[ nch ] := 0.5 * c[ 0 ];
241
for j := 1 to nch - 1do
243
c[ j ] := 0.5 * Cos( delta * j );
244
c[ _NC - j ] := 0.5 * Sin( delta * j );
249
////////////////////////////////////////////////////////////////////////////////////////////////////
251
procedure TDiscreteTrans.bitrv2;
253
j, j1, k, k1, l, m, nh, nm :Integer;
254
xr, xi, yr, yi :Double;
268
for k := 0 to m - 1 do
270
for j := 0 to k - 1 do
272
j1 := 4 * j + 2 * _IP[ m + k ];
273
k1 := 4 * k + 2 * _IP[ m + j ];
275
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
276
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
277
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
278
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
282
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
283
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
284
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
285
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
289
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
290
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
291
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
292
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
296
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
297
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
298
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
299
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
303
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
304
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
305
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
306
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
310
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
311
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
312
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
313
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
317
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
318
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
319
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
320
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
324
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
325
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
326
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
327
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
331
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
332
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
333
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
334
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
338
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
339
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
340
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
341
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
345
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
346
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
347
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
348
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
352
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
353
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
354
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
355
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
359
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
360
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
361
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
362
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
366
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
367
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
368
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
369
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
373
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
374
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
375
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
376
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
380
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
381
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
382
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
383
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
386
k1 := 4 * k + 2 * _IP[ m + k ];
389
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
390
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
391
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
392
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
396
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
397
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
398
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
399
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
403
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
404
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
405
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
406
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
410
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
411
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
412
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
413
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
417
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
418
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
419
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
420
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
423
Inc( k1, 2 * nm - 2 );
424
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
425
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
426
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
427
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
432
for k := 0 to m - 1 do
434
for j := 0 to k - 1 do
436
j1 := 4 * j + _IP[ m + k ];
437
k1 := 4 * k + _IP[ m + j ];
438
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
439
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
440
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
441
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
445
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
446
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
447
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
448
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
452
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
453
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
454
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
455
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
459
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
460
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
461
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
462
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
466
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
467
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
468
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
469
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
473
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
474
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
475
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
476
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
480
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
481
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
482
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
483
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
487
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
488
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
489
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
490
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
493
k1 := 4 * k + _IP[ m + k ];
496
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
497
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
498
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
499
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
503
xr := _TEMP[ j1 ]; xi := _TEMP[ j1 + 1 ];
504
yr := _TEMP[ k1 ]; yi := _TEMP[ k1 + 1 ];
505
_TEMP[ j1 ] := yr; _TEMP[ j1 + 1 ] := yi;
506
_TEMP[ k1 ] := xr; _TEMP[ k1 + 1 ] := xi;
511
procedure TDiscreteTrans.bitrv2conj;
513
j, j1, k, k1, l, m, nh, nm :Integer;
514
xr, xi, yr, yi :Double;
528
for k := 0 to m - 1 do
530
for j := 0 to k - 1 do
532
j1 := 4 * j + 2 * _IP[ m + k ];
533
k1 := 4 * k + 2 * _IP[ m + j ];
535
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
536
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
538
_TEMP[ j1 + 1 ] := yi;
540
_TEMP[ k1 + 1 ] := xi;
544
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
545
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
547
_TEMP[ j1 + 1 ] := yi;
549
_TEMP[ k1 + 1 ] := xi;
553
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
554
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
556
_TEMP[ j1 + 1 ] := yi;
558
_TEMP[ k1 + 1 ] := xi;
562
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
563
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
565
_TEMP[ j1 + 1 ] := yi;
567
_TEMP[ k1 + 1 ] := xi;
571
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
572
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
574
_TEMP[ j1 + 1 ] := yi;
576
_TEMP[ k1 + 1 ] := xi;
580
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
581
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
583
_TEMP[ j1 + 1 ] := yi;
585
_TEMP[ k1 + 1 ] := xi;
589
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
590
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
592
_TEMP[ j1 + 1 ] := yi;
594
_TEMP[ k1 + 1 ] := xi;
598
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
599
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
601
_TEMP[ j1 + 1 ] := yi;
603
_TEMP[ k1 + 1 ] := xi;
607
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
608
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
610
_TEMP[ j1 + 1 ] := yi;
612
_TEMP[ k1 + 1 ] := xi;
616
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
617
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
619
_TEMP[ j1 + 1 ] := yi;
621
_TEMP[ k1 + 1 ] := xi;
625
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
626
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
628
_TEMP[ j1 + 1 ] := yi;
630
_TEMP[ k1 + 1 ] := xi;
634
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
635
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
637
_TEMP[ j1 + 1 ] := yi;
639
_TEMP[ k1 + 1 ] := xi;
643
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
644
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
646
_TEMP[ j1 + 1 ] := yi;
648
_TEMP[ k1 + 1 ] := xi;
652
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
653
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
655
_TEMP[ j1 + 1 ] := yi;
657
_TEMP[ k1 + 1 ] := xi;
661
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
662
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
664
_TEMP[ j1 + 1 ] := yi;
666
_TEMP[ k1 + 1 ] := xi;
670
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
671
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
673
_TEMP[ j1 + 1 ] := yi;
675
_TEMP[ k1 + 1 ] := xi;
678
k1 := 4 * k + 2 * _IP[ m + k ];
682
_TEMP[ j1 - 1 ] := -_TEMP[ j1 - 1 ];
683
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
684
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
686
_TEMP[ j1 + 1 ] := yi;
688
_TEMP[ k1 + 1 ] := xi;
689
_TEMP[ k1 + 3 ] := -_TEMP[ k1 + 3 ];
693
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
694
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
696
_TEMP[ j1 + 1 ] := yi;
698
_TEMP[ k1 + 1 ] := xi;
702
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
703
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
705
_TEMP[ j1 + 1 ] := yi;
707
_TEMP[ k1 + 1 ] := xi;
711
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
712
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
714
_TEMP[ j1 + 1 ] := yi;
716
_TEMP[ k1 + 1 ] := xi;
720
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
721
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
723
_TEMP[ j1 + 1 ] := yi;
725
_TEMP[ k1 + 1 ] := xi;
728
Inc( k1, 2 * nm - 2 );
729
_TEMP[ j1 - 1 ] := -_TEMP[ j1 - 1 ];
730
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
731
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
733
_TEMP[ j1 + 1 ] := yi;
735
_TEMP[ k1 + 1 ] := xi;
736
_TEMP[ k1 + 3 ] := -_TEMP[ k1 + 3 ];
741
for k := 0 to m - 1 do
743
for j := 0 to k - 1 do
745
j1 := 4 * j + _IP[ m + k ];
746
k1 := 4 * k + _IP[ m + j ];
748
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
749
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
751
_TEMP[ j1 + 1 ] := yi;
753
_TEMP[ k1 + 1 ] := xi;
757
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
758
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
760
_TEMP[ j1 + 1 ] := yi;
762
_TEMP[ k1 + 1 ] := xi;
766
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
767
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
769
_TEMP[ j1 + 1 ] := yi;
771
_TEMP[ k1 + 1 ] := xi;
775
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
776
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
778
_TEMP[ j1 + 1 ] := yi;
780
_TEMP[ k1 + 1 ] := xi;
784
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
785
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
787
_TEMP[ j1 + 1 ] := yi;
789
_TEMP[ k1 + 1 ] := xi;
793
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
794
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
796
_TEMP[ j1 + 1 ] := yi;
798
_TEMP[ k1 + 1 ] := xi;
802
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
803
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
805
_TEMP[ j1 + 1 ] := yi;
807
_TEMP[ k1 + 1 ] := xi;
811
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
812
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
814
_TEMP[ j1 + 1 ] := yi;
816
_TEMP[ k1 + 1 ] := xi;
819
k1 := 4 * k + _IP[ m + k ];
822
_TEMP[ j1 - 1 ] := -_TEMP[ j1 - 1 ];
823
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
824
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
826
_TEMP[ j1 + 1 ] := yi;
828
_TEMP[ k1 + 1 ] := xi;
829
_TEMP[ k1 + 3 ] := -_TEMP[ k1 + 3 ];
833
_TEMP[ j1 - 1 ] := -_TEMP[ j1 - 1 ];
834
xr := +_TEMP[ j1 ]; xi := -_TEMP[ j1 + 1 ];
835
yr := +_TEMP[ k1 ]; yi := -_TEMP[ k1 + 1 ];
837
_TEMP[ j1 + 1 ] := yi;
839
_TEMP[ k1 + 1 ] := xi;
840
_TEMP[ k1 + 3 ] := -_TEMP[ k1 + 3 ];
845
////////////////////////////////////////////////////////////////////////////////////////////////////
847
procedure TDiscreteTrans.bitrv216;
865
x01r := _TEMP[ 02 ]; x01i := _TEMP[ 03 ];
866
x02r := _TEMP[ 04 ]; x02i := _TEMP[ 05 ];
867
x03r := _TEMP[ 06 ]; x03i := _TEMP[ 07 ];
868
x04r := _TEMP[ 08 ]; x04i := _TEMP[ 09 ];
869
x05r := _TEMP[ 10 ]; x05i := _TEMP[ 11 ];
870
{-----------------} {-----------------}
871
x07r := _TEMP[ 14 ]; x07i := _TEMP[ 15 ];
872
x08r := _TEMP[ 16 ]; x08i := _TEMP[ 17 ];
873
{-----------------} {-----------------}
874
x10r := _TEMP[ 20 ]; x10i := _TEMP[ 21 ];
875
x11r := _TEMP[ 22 ]; x11i := _TEMP[ 23 ];
876
x12r := _TEMP[ 24 ]; x12i := _TEMP[ 25 ];
877
x13r := _TEMP[ 26 ]; x13i := _TEMP[ 27 ];
878
x14r := _TEMP[ 28 ]; x14i := _TEMP[ 29 ];
879
{-----------------} {-----------------}
881
_TEMP[ 02 ] := x08r; _TEMP[ 03 ] := x08i;
882
_TEMP[ 04 ] := x04r; _TEMP[ 05 ] := x04i;
883
_TEMP[ 06 ] := x12r; _TEMP[ 07 ] := x12i;
884
_TEMP[ 08 ] := x02r; _TEMP[ 09 ] := x02i;
885
_TEMP[ 10 ] := x10r; _TEMP[ 11 ] := x10i;
886
{-----------------} {-----------------}
887
_TEMP[ 14 ] := x14r; _TEMP[ 15 ] := x14i;
888
_TEMP[ 16 ] := x01r; _TEMP[ 17 ] := x01i;
889
{-----------------} {-----------------}
890
_TEMP[ 20 ] := x05r; _TEMP[ 21 ] := x05i;
891
_TEMP[ 22 ] := x13r; _TEMP[ 23 ] := x13i;
892
_TEMP[ 24 ] := x03r; _TEMP[ 25 ] := x03i;
893
_TEMP[ 26 ] := x11r; _TEMP[ 27 ] := x11i;
894
_TEMP[ 28 ] := x07r; _TEMP[ 29 ] := x07i;
895
{-----------------} {-----------------}
899
procedure TDiscreteTrans.bitrv216neg;
917
x01r := _TEMP[ 02 ]; x01i := _TEMP[ 03 ];
918
x02r := _TEMP[ 04 ]; x02i := _TEMP[ 05 ];
919
x03r := _TEMP[ 06 ]; x03i := _TEMP[ 07 ];
920
x04r := _TEMP[ 08 ]; x04i := _TEMP[ 09 ];
921
x05r := _TEMP[ 10 ]; x05i := _TEMP[ 11 ];
922
x06r := _TEMP[ 12 ]; x06i := _TEMP[ 13 ];
923
x07r := _TEMP[ 14 ]; x07i := _TEMP[ 15 ];
924
x08r := _TEMP[ 16 ]; x08i := _TEMP[ 17 ];
925
x09r := _TEMP[ 18 ]; x09i := _TEMP[ 19 ];
926
x10r := _TEMP[ 20 ]; x10i := _TEMP[ 21 ];
927
x11r := _TEMP[ 22 ]; x11i := _TEMP[ 23 ];
928
x12r := _TEMP[ 24 ]; x12i := _TEMP[ 25 ];
929
x13r := _TEMP[ 26 ]; x13i := _TEMP[ 27 ];
930
x14r := _TEMP[ 28 ]; x14i := _TEMP[ 29 ];
931
x15r := _TEMP[ 30 ]; x15i := _TEMP[ 31 ];
933
_TEMP[ 02 ] := x15r; _TEMP[ 03 ] := x15i;
934
_TEMP[ 04 ] := x07r; _TEMP[ 05 ] := x07i;
935
_TEMP[ 06 ] := x11r; _TEMP[ 07 ] := x11i;
936
_TEMP[ 08 ] := x03r; _TEMP[ 09 ] := x03i;
937
_TEMP[ 10 ] := x13r; _TEMP[ 11 ] := x13i;
938
_TEMP[ 12 ] := x05r; _TEMP[ 13 ] := x05i;
939
_TEMP[ 14 ] := x09r; _TEMP[ 15 ] := x09i;
940
_TEMP[ 16 ] := x01r; _TEMP[ 17 ] := x01i;
941
_TEMP[ 18 ] := x14r; _TEMP[ 19 ] := x14i;
942
_TEMP[ 20 ] := x06r; _TEMP[ 21 ] := x06i;
943
_TEMP[ 22 ] := x10r; _TEMP[ 23 ] := x10i;
944
_TEMP[ 24 ] := x02r; _TEMP[ 25 ] := x02i;
945
_TEMP[ 26 ] := x12r; _TEMP[ 27 ] := x12i;
946
_TEMP[ 28 ] := x04r; _TEMP[ 29 ] := x04i;
947
_TEMP[ 30 ] := x08r; _TEMP[ 31 ] := x08i;
950
////////////////////////////////////////////////////////////////////////////////////////////////////
952
procedure TDiscreteTrans.bitrv208;
961
x1r := _TEMP[ 02 ]; x1i := _TEMP[ 03 ];
962
{----------------} {----------------}
963
x3r := _TEMP[ 06 ]; x3i := _TEMP[ 07 ];
964
x4r := _TEMP[ 08 ]; x4i := _TEMP[ 09 ];
965
{----------------} {----------------}
966
x6r := _TEMP[ 12 ]; x6i := _TEMP[ 13 ];
968
_TEMP[ 02 ] := x4r; _TEMP[ 03 ] := x4i;
969
{----------------} {----------------}
970
_TEMP[ 06 ] := x6r; _TEMP[ 07 ] := x6i;
971
_TEMP[ 08 ] := x1r; _TEMP[ 09 ] := x1i;
972
{----------------} {----------------}
973
_TEMP[ 12 ] := x3r; _TEMP[ 13 ] := x3i;
976
procedure TDiscreteTrans.bitrv208neg;
986
x1r := _TEMP[ 02 ]; x1i := _TEMP[ 03 ];
987
x2r := _TEMP[ 04 ]; x2i := _TEMP[ 05 ];
988
x3r := _TEMP[ 06 ]; x3i := _TEMP[ 07 ];
989
x4r := _TEMP[ 08 ]; x4i := _TEMP[ 09 ];
990
x5r := _TEMP[ 10 ]; x5i := _TEMP[ 11 ];
991
x6r := _TEMP[ 12 ]; x6i := _TEMP[ 13 ];
992
x7r := _TEMP[ 14 ]; x7i := _TEMP[ 15 ];
994
_TEMP[ 02 ] := x7r; _TEMP[ 03 ] := x7i;
995
_TEMP[ 04 ] := x3r; _TEMP[ 05 ] := x3i;
996
_TEMP[ 06 ] := x5r; _TEMP[ 07 ] := x5i;
997
_TEMP[ 08 ] := x1r; _TEMP[ 09 ] := x1i;
998
_TEMP[ 10 ] := x6r; _TEMP[ 11 ] := x6i;
999
_TEMP[ 12 ] := x2r; _TEMP[ 13 ] := x2i;
1000
_TEMP[ 14 ] := x4r; _TEMP[ 15 ] := x4i;
1003
////////////////////////////////////////////////////////////////////////////////////////////////////
1005
procedure TDiscreteTrans.cftf1st( var w:array of Double );
1007
j, j0, j1, j2, j3, k, m, mh :Integer;
1008
wn4r, csc1, csc3, wk1r, wk1i, wk3r, wk3i,
1009
wd1r, wd1i, wd3r, wd3i,
1010
x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i,
1011
y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i :Double;
1020
x0r := _TEMP[ 0 ] + _TEMP[ j2 ]; x0i := _TEMP[ 1 ] + _TEMP[ j2 + 1 ];
1021
x1r := _TEMP[ 0 ] - _TEMP[ j2 ]; x1i := _TEMP[ 1 ] - _TEMP[ j2 + 1 ];
1022
x2r := _TEMP[ j1 ] + _TEMP[ j3 ]; x2i := _TEMP[ j1 + 1 ] + _TEMP[ j3 + 1 ];
1023
x3r := _TEMP[ j1 ] - _TEMP[ j3 ]; x3i := _TEMP[ j1 + 1 ] - _TEMP[ j3 + 1 ];
1024
_TEMP[ 0 ] := x0r + x2r;
1025
_TEMP[ 1 ] := x0i + x2i;
1026
_TEMP[ j1 ] := x0r - x2r;
1027
_TEMP[ j1 + 1 ] := x0i - x2i;
1028
_TEMP[ j2 ] := x1r - x3i;
1029
_TEMP[ j2 + 1 ] := x1i + x3r;
1030
_TEMP[ j3 ] := x1r + x3i;
1031
_TEMP[ j3 + 1 ] := x1i - x3r;
1046
wk1r := csc1 * ( wd1r + w[ k ] ); wk1i := csc1 * ( wd1i + w[ k + 1 ] );
1047
wk3r := csc3 * ( wd3r + w[ k + 2 ] ); wk3i := csc3 * ( wd3i + w[ k + 3 ] );
1049
wd1r := w[ k ]; wd1i := w[ k + 1 ];
1050
wd3r := w[ k + 2 ]; wd3i := w[ k + 3 ];
1056
x0r := _TEMP[ j ] + _TEMP[ j2 ]; x0i := _TEMP[ j + 1 ] + _TEMP[ j2 + 1 ];
1057
x1r := _TEMP[ j ] - _TEMP[ j2 ]; x1i := _TEMP[ j + 1 ] - _TEMP[ j2 + 1 ];
1058
y0r := _TEMP[ j + 2 ] + _TEMP[ j2 + 2 ]; y0i := _TEMP[ j + 3 ] + _TEMP[ j2 + 3 ];
1059
y1r := _TEMP[ j + 2 ] - _TEMP[ j2 + 2 ]; y1i := _TEMP[ j + 3 ] - _TEMP[ j2 + 3 ];
1060
x2r := _TEMP[ j1 ] + _TEMP[ j3 ]; x2i := _TEMP[ j1 + 1 ] + _TEMP[ j3 + 1 ];
1061
x3r := _TEMP[ j1 ] - _TEMP[ j3 ]; x3i := _TEMP[ j1 + 1 ] - _TEMP[ j3 + 1 ];
1062
y2r := _TEMP[ j1 + 2 ] + _TEMP[ j3 + 2 ]; y2i := _TEMP[ j1 + 3 ] + _TEMP[ j3 + 3 ];
1063
y3r := _TEMP[ j1 + 2 ] - _TEMP[ j3 + 2 ]; y3i := _TEMP[ j1 + 3 ] - _TEMP[ j3 + 3 ];
1064
_TEMP[ j ] := x0r + x2r;
1065
_TEMP[ j + 1 ] := x0i + x2i;
1066
_TEMP[ j + 2 ] := y0r + y2r;
1067
_TEMP[ j + 3 ] := y0i + y2i;
1068
_TEMP[ j1 ] := x0r - x2r;
1069
_TEMP[ j1 + 1 ] := x0i - x2i;
1070
_TEMP[ j1 + 2 ] := y0r - y2r;
1071
_TEMP[ j1 + 3 ] := y0i - y2i;
1073
x0r := x1r - x3i; x0i := x1i + x3r;
1074
_TEMP[ j2 ] := wk1r * x0r - wk1i * x0i;
1075
_TEMP[ j2 + 1 ] := wk1r * x0i + wk1i * x0r;
1077
x0r := y1r - y3i; x0i := y1i + y3r;
1078
_TEMP[ j2 + 2 ] := wd1r * x0r - wd1i * x0i;
1079
_TEMP[ j2 + 3 ] := wd1r * x0i + wd1i * x0r;
1081
x0r := x1r + x3i; x0i := x1i - x3r;
1082
_TEMP[ j3 ] := wk3r * x0r + wk3i * x0i;
1083
_TEMP[ j3 + 1 ] := wk3r * x0i - wk3i * x0r;
1085
x0r := y1r + y3i; x0i := y1i - y3r;
1086
_TEMP[ j3 + 2 ] := wd3r * x0r + wd3i * x0i;
1087
_TEMP[ j3 + 3 ] := wd3r * x0i - wd3i * x0r;
1094
x0r := _TEMP[ j0 ] + _TEMP[ j2 ]; x0i := _TEMP[ j0 + 1 ] + _TEMP[ j2 + 1 ];
1095
x1r := _TEMP[ j0 ] - _TEMP[ j2 ]; x1i := _TEMP[ j0 + 1 ] - _TEMP[ j2 + 1 ];
1096
y0r := _TEMP[ j0 - 2 ] + _TEMP[ j2 - 2 ]; y0i := _TEMP[ j0 - 1 ] + _TEMP[ j2 - 1 ];
1097
y1r := _TEMP[ j0 - 2 ] - _TEMP[ j2 - 2 ]; y1i := _TEMP[ j0 - 1 ] - _TEMP[ j2 - 1 ];
1098
x2r := _TEMP[ j1 ] + _TEMP[ j3 ]; x2i := _TEMP[ j1 + 1 ] + _TEMP[ j3 + 1 ];
1099
x3r := _TEMP[ j1 ] - _TEMP[ j3 ]; x3i := _TEMP[ j1 + 1 ] - _TEMP[ j3 + 1 ];
1100
y2r := _TEMP[ j1 - 2 ] + _TEMP[ j3 - 2 ]; y2i := _TEMP[ j1 - 1 ] + _TEMP[ j3 - 1 ];
1101
y3r := _TEMP[ j1 - 2 ] - _TEMP[ j3 - 2 ]; y3i := _TEMP[ j1 - 1 ] - _TEMP[ j3 - 1 ];
1102
_TEMP[ j0 ] := x0r + x2r;
1103
_TEMP[ j0 + 1 ] := x0i + x2i;
1104
_TEMP[ j0 - 2 ] := y0r + y2r;
1105
_TEMP[ j0 - 1 ] := y0i + y2i;
1106
_TEMP[ j1 ] := x0r - x2r;
1107
_TEMP[ j1 + 1 ] := x0i - x2i;
1108
_TEMP[ j1 - 2 ] := y0r - y2r;
1109
_TEMP[ j1 - 1 ] := y0i - y2i;
1111
x0r := x1r - x3i; x0i := x1i + x3r;
1112
_TEMP[ j2 ] := wk1i * x0r - wk1r * x0i;
1113
_TEMP[ j2 + 1 ] := wk1i * x0i + wk1r * x0r;
1115
x0r := y1r - y3i; x0i := y1i + y3r;
1116
_TEMP[ j2 - 2 ] := wd1i * x0r - wd1r * x0i;
1117
_TEMP[ j2 - 1 ] := wd1i * x0i + wd1r * x0r;
1119
x0r := x1r + x3i; x0i := x1i - x3r;
1120
_TEMP[ j3 ] := wk3i * x0r + wk3r * x0i;
1121
_TEMP[ j3 + 1 ] := wk3i * x0i - wk3r * x0r;
1123
x0r := y1r + y3i; x0i := y1i - y3r;
1124
_TEMP[ j3 - 2 ] := wd3i * x0r + wd3r * x0i;
1125
_TEMP[ j3 - 1 ] := wd3i * x0i - wd3r * x0r;
1130
wk1r := csc1 * ( wd1r + wn4r );
1131
wk1i := csc1 * ( wd1i + wn4r );
1132
wk3r := csc3 * ( wd3r - wn4r );
1133
wk3i := csc3 * ( wd3i - wn4r );
1140
x0r := _TEMP[ j0 - 2 ] + _TEMP[ j2 - 2 ]; x0i := _TEMP[ j0 - 1 ] + _TEMP[ j2 - 1 ];
1141
x1r := _TEMP[ j0 - 2 ] - _TEMP[ j2 - 2 ]; x1i := _TEMP[ j0 - 1 ] - _TEMP[ j2 - 1 ];
1142
x2r := _TEMP[ j1 - 2 ] + _TEMP[ j3 - 2 ]; x2i := _TEMP[ j1 - 1 ] + _TEMP[ j3 - 1 ];
1143
x3r := _TEMP[ j1 - 2 ] - _TEMP[ j3 - 2 ]; x3i := _TEMP[ j1 - 1 ] - _TEMP[ j3 - 1 ];
1144
_TEMP[ j0 - 2 ] := x0r + x2r;
1145
_TEMP[ j0 - 1 ] := x0i + x2i;
1146
_TEMP[ j1 - 2 ] := x0r - x2r;
1147
_TEMP[ j1 - 1 ] := x0i - x2i;
1149
x0r := x1r - x3i; x0i := x1i + x3r;
1150
_TEMP[ j2 - 2 ] := wk1r * x0r - wk1i * x0i;
1151
_TEMP[ j2 - 1 ] := wk1r * x0i + wk1i * x0r;
1153
x0r := x1r + x3i; x0i := x1i - x3r;
1154
_TEMP[ j3 - 2 ] := wk3r * x0r + wk3i * x0i;
1155
_TEMP[ j3 - 1 ] := wk3r * x0i - wk3i * x0r;
1157
x0r := _TEMP[ j0 ] + _TEMP[ j2 ]; x0i := _TEMP[ j0 + 1 ] + _TEMP[ j2 + 1 ];
1158
x1r := _TEMP[ j0 ] - _TEMP[ j2 ]; x1i := _TEMP[ j0 + 1 ] - _TEMP[ j2 + 1 ];
1159
x2r := _TEMP[ j1 ] + _TEMP[ j3 ]; x2i := _TEMP[ j1 + 1 ] + _TEMP[ j3 + 1 ];
1160
x3r := _TEMP[ j1 ] - _TEMP[ j3 ]; x3i := _TEMP[ j1 + 1 ] - _TEMP[ j3 + 1 ];
1161
_TEMP[ j0 ] := x0r + x2r;
1162
_TEMP[ j0 + 1 ] := x0i + x2i;
1163
_TEMP[ j1 ] := x0r - x2r;
1164
_TEMP[ j1 + 1 ] := x0i - x2i;
1166
x0r := x1r - x3i; x0i := x1i + x3r;
1167
_TEMP[ j2 ] := wn4r * ( x0r - x0i );
1168
_TEMP[ j2 + 1 ] := wn4r * ( x0i + x0r );
1170
x0r := x1r + x3i; x0i := x1i - x3r;
1171
_TEMP[ j3 ] := -wn4r * ( x0r + x0i );
1172
_TEMP[ j3 + 1 ] := -wn4r * ( x0i - x0r );
1174
x0r := _TEMP[ j0 + 2 ] + _TEMP[ j2 + 2 ]; x0i := _TEMP[ j0 + 3 ] + _TEMP[ j2 + 3 ];
1175
x1r := _TEMP[ j0 + 2 ] - _TEMP[ j2 + 2 ]; x1i := _TEMP[ j0 + 3 ] - _TEMP[ j2 + 3 ];
1176
x2r := _TEMP[ j1 + 2 ] + _TEMP[ j3 + 2 ]; x2i := _TEMP[ j1 + 3 ] + _TEMP[ j3 + 3 ];
1177
x3r := _TEMP[ j1 + 2 ] - _TEMP[ j3 + 2 ]; x3i := _TEMP[ j1 + 3 ] - _TEMP[ j3 + 3 ];
1178
_TEMP[ j0 + 2 ] := x0r + x2r;
1179
_TEMP[ j0 + 3 ] := x0i + x2i;
1180
_TEMP[ j1 + 2 ] := x0r - x2r;
1181
_TEMP[ j1 + 3 ] := x0i - x2i;
1183
x0r := x1r - x3i; x0i := x1i + x3r;
1184
_TEMP[ j2 + 2 ] := wk1i * x0r - wk1r * x0i;
1185
_TEMP[ j2 + 3 ] := wk1i * x0i + wk1r * x0r;
1187
x0r := x1r + x3i; x0i := x1i - x3r;
1188
_TEMP[ j3 + 2 ] := wk3i * x0r + wk3r * x0i;
1189
_TEMP[ j3 + 3 ] := wk3i * x0i - wk3r * x0r;
1192
procedure TDiscreteTrans.cftb1st( var w:array of Double );
1194
j, j0, j1, j2, j3, k, m, mh :Integer;
1195
wn4r, csc1, csc3, wk1r, wk1i, wk3r, wk3i,
1196
wd1r, wd1i, wd3r, wd3i,
1197
x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i,
1198
y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i :Double;
1207
x0r := _TEMP[ 0 ] + _TEMP[ j2 ]; x0i := -_TEMP[ 1 ] - _TEMP[ j2 + 1 ];
1208
x1r := _TEMP[ 0 ] - _TEMP[ j2 ]; x1i := -_TEMP[ 1 ] + _TEMP[ j2 + 1 ];
1209
x2r := _TEMP[ j1 ] + _TEMP[ j3 ]; x2i := _TEMP[ j1 + 1 ] + _TEMP[ j3 + 1 ];
1210
x3r := _TEMP[ j1 ] - _TEMP[ j3 ]; x3i := _TEMP[ j1 + 1 ] - _TEMP[ j3 + 1 ];
1211
_TEMP[ 0 ] := x0r + x2r;
1212
_TEMP[ 1 ] := x0i - x2i;
1213
_TEMP[ j1 ] := x0r - x2r;
1214
_TEMP[ j1 + 1 ] := x0i + x2i;
1215
_TEMP[ j2 ] := x1r + x3i;
1216
_TEMP[ j2 + 1 ] := x1i + x3r;
1217
_TEMP[ j3 ] := x1r - x3i;
1218
_TEMP[ j3 + 1 ] := x1i - x3r;
1233
wk1r := csc1 * ( wd1r + w[ k ] ); wk1i := csc1 * ( wd1i + w[ k + 1 ] );
1234
wk3r := csc3 * ( wd3r + w[ k + 2 ] ); wk3i := csc3 * ( wd3i + w[ k + 3 ] );
1235
wd1r := w[ k ]; wd1i := w[ k + 1 ];
1236
wd3r := w[ k + 2 ]; wd3i := w[ k + 3 ];
1242
x0r := _TEMP[ j ] + _TEMP[ j2 ];
1243
x0i := -_TEMP[ j + 1 ] - _TEMP[ j2 + 1 ];
1244
x1r := _TEMP[ j ] - _TEMP[ j2 ];
1245
x1i := -_TEMP[ j + 1 ] + _TEMP[ j2 + 1 ];
1246
y0r := _TEMP[ j + 2 ] + _TEMP[ j2 + 2 ];
1247
y0i := -_TEMP[ j + 3 ] - _TEMP[ j2 + 3 ];
1248
y1r := _TEMP[ j + 2 ] - _TEMP[ j2 + 2 ];
1249
y1i := -_TEMP[ j + 3 ] + _TEMP[ j2 + 3 ];
1250
x2r := _TEMP[ j1 ] + _TEMP[ j3 ];
1251
x2i := _TEMP[ j1 + 1 ] + _TEMP[ j3 + 1 ];
1252
x3r := _TEMP[ j1 ] - _TEMP[ j3 ];
1253
x3i := _TEMP[ j1 + 1 ] - _TEMP[ j3 + 1 ];
1254
y2r := _TEMP[ j1 + 2 ] + _TEMP[ j3 + 2 ];
1255
y2i := _TEMP[ j1 + 3 ] + _TEMP[ j3 + 3 ];
1256
y3r := _TEMP[ j1 + 2 ] - _TEMP[ j3 + 2 ];
1257
y3i := _TEMP[ j1 + 3 ] - _TEMP[ j3 + 3 ];
1258
_TEMP[ j ] := x0r + x2r;
1259
_TEMP[ j + 1 ] := x0i - x2i;
1260
_TEMP[ j + 2 ] := y0r + y2r;
1261
_TEMP[ j + 3 ] := y0i - y2i;
1262
_TEMP[ j1 ] := x0r - x2r;
1263
_TEMP[ j1 + 1 ] := x0i + x2i;
1264
_TEMP[ j1 + 2 ] := y0r - y2r;
1265
_TEMP[ j1 + 3 ] := y0i + y2i;
1267
x0r := x1r + x3i; x0i := x1i + x3r;
1268
_TEMP[ j2 ] := wk1r * x0r - wk1i * x0i;
1269
_TEMP[ j2 + 1 ] := wk1r * x0i + wk1i * x0r;
1271
x0r := y1r + y3i; x0i := y1i + y3r;
1272
_TEMP[ j2 + 2 ] := wd1r * x0r - wd1i * x0i;
1273
_TEMP[ j2 + 3 ] := wd1r * x0i + wd1i * x0r;
1275
x0r := x1r - x3i; x0i := x1i - x3r;
1276
_TEMP[ j3 ] := wk3r * x0r + wk3i * x0i;
1277
_TEMP[ j3 + 1 ] := wk3r * x0i - wk3i * x0r;
1279
x0r := y1r - y3i; x0i := y1i - y3r;
1280
_TEMP[ j3 + 2 ] := wd3r * x0r + wd3i * x0i;
1281
_TEMP[ j3 + 3 ] := wd3r * x0i - wd3i * x0r;
1288
x0r := _TEMP[ j0 ] + _TEMP[ j2 ]; x0i := -_TEMP[ j0 + 1 ] - _TEMP[ j2 + 1 ];
1289
x1r := _TEMP[ j0 ] - _TEMP[ j2 ]; x1i := -_TEMP[ j0 + 1 ] + _TEMP[ j2 + 1 ];
1290
y0r := _TEMP[ j0 - 2 ] + _TEMP[ j2 - 2 ]; y0i := -_TEMP[ j0 - 1 ] - _TEMP[ j2 - 1 ];
1291
y1r := _TEMP[ j0 - 2 ] - _TEMP[ j2 - 2 ]; y1i := -_TEMP[ j0 - 1 ] + _TEMP[ j2 - 1 ];
1292
x2r := _TEMP[ j1 ] + _TEMP[ j3 ]; x2i := _TEMP[ j1 + 1 ] + _TEMP[ j3 + 1 ];
1293
x3r := _TEMP[ j1 ] - _TEMP[ j3 ]; x3i := _TEMP[ j1 + 1 ] - _TEMP[ j3 + 1 ];
1294
y2r := _TEMP[ j1 - 2 ] + _TEMP[ j3 - 2 ]; y2i := _TEMP[ j1 - 1 ] + _TEMP[ j3 - 1 ];
1295
y3r := _TEMP[ j1 - 2 ] - _TEMP[ j3 - 2 ]; y3i := _TEMP[ j1 - 1 ] - _TEMP[ j3 - 1 ];
1296
_TEMP[ j0 ] := x0r + x2r;
1297
_TEMP[ j0 + 1 ] := x0i - x2i;
1298
_TEMP[ j0 - 2 ] := y0r + y2r;
1299
_TEMP[ j0 - 1 ] := y0i - y2i;
1300
_TEMP[ j1 ] := x0r - x2r;
1301
_TEMP[ j1 + 1 ] := x0i + x2i;
1302
_TEMP[ j1 - 2 ] := y0r - y2r;
1303
_TEMP[ j1 - 1 ] := y0i + y2i;
1305
x0r := x1r + x3i; x0i := x1i + x3r;
1306
_TEMP[ j2 ] := wk1i * x0r - wk1r * x0i;
1307
_TEMP[ j2 + 1 ] := wk1i * x0i + wk1r * x0r;
1309
x0r := y1r + y3i; x0i := y1i + y3r;
1310
_TEMP[ j2 - 2 ] := wd1i * x0r - wd1r * x0i;
1311
_TEMP[ j2 - 1 ] := wd1i * x0i + wd1r * x0r;
1313
x0r := x1r - x3i; x0i := x1i - x3r;
1314
_TEMP[ j3 ] := wk3i * x0r + wk3r * x0i;
1315
_TEMP[ j3 + 1 ] := wk3i * x0i - wk3r * x0r;
1317
x0r := y1r - y3i; x0i := y1i - y3r;
1318
_TEMP[ j3 - 2 ] := wd3i * x0r + wd3r * x0i;
1319
_TEMP[ j3 - 1 ] := wd3i * x0i - wd3r * x0r;
1324
wk1r := csc1 * ( wd1r + wn4r );
1325
wk1i := csc1 * ( wd1i + wn4r );
1326
wk3r := csc3 * ( wd3r - wn4r );
1327
wk3i := csc3 * ( wd3i - wn4r );
1334
x0r := _TEMP[ j0 - 2 ] + _TEMP[ j2 - 2 ]; x0i := -_TEMP[ j0 - 1 ] - _TEMP[ j2 - 1 ];
1335
x1r := _TEMP[ j0 - 2 ] - _TEMP[ j2 - 2 ]; x1i := -_TEMP[ j0 - 1 ] + _TEMP[ j2 - 1 ];
1336
x2r := _TEMP[ j1 - 2 ] + _TEMP[ j3 - 2 ]; x2i := _TEMP[ j1 - 1 ] + _TEMP[ j3 - 1 ];
1337
x3r := _TEMP[ j1 - 2 ] - _TEMP[ j3 - 2 ]; x3i := _TEMP[ j1 - 1 ] - _TEMP[ j3 - 1 ];
1338
_TEMP[ j0 - 2 ] := x0r + x2r;
1339
_TEMP[ j0 - 1 ] := x0i - x2i;
1340
_TEMP[ j1 - 2 ] := x0r - x2r;
1341
_TEMP[ j1 - 1 ] := x0i + x2i;
1343
x0r := x1r + x3i; x0i := x1i + x3r;
1344
_TEMP[ j2 - 2 ] := wk1r * x0r - wk1i * x0i;
1345
_TEMP[ j2 - 1 ] := wk1r * x0i + wk1i * x0r;
1347
x0r := x1r - x3i; x0i := x1i - x3r;
1348
_TEMP[ j3 - 2 ] := wk3r * x0r + wk3i * x0i;
1349
_TEMP[ j3 - 1 ] := wk3r * x0i - wk3i * x0r;
1351
x0r := _TEMP[ j0 ] + _TEMP[ j2 ]; x0i := -_TEMP[ j0 + 1 ] - _TEMP[ j2 + 1 ];
1352
x1r := _TEMP[ j0 ] - _TEMP[ j2 ]; x1i := -_TEMP[ j0 + 1 ] + _TEMP[ j2 + 1 ];
1353
x2r := _TEMP[ j1 ] + _TEMP[ j3 ]; x2i := _TEMP[ j1 + 1 ] + _TEMP[ j3 + 1 ];
1354
x3r := _TEMP[ j1 ] - _TEMP[ j3 ]; x3i := _TEMP[ j1 + 1 ] - _TEMP[ j3 + 1 ];
1355
_TEMP[ j0 ] := x0r + x2r;
1356
_TEMP[ j0 + 1 ] := x0i - x2i;
1357
_TEMP[ j1 ] := x0r - x2r;
1358
_TEMP[ j1 + 1 ] := x0i + x2i;
1360
x0r := x1r + x3i; x0i := x1i + x3r;
1361
_TEMP[ j2 ] := wn4r * ( x0r - x0i );
1362
_TEMP[ j2 + 1 ] := wn4r * ( x0i + x0r );
1364
x0r := x1r - x3i; x0i := x1i - x3r;
1365
_TEMP[ j3 ] := -wn4r * ( x0r + x0i );
1366
_TEMP[ j3 + 1 ] := -wn4r * ( x0i - x0r );
1368
x0r := _TEMP[ j0 + 2 ] + _TEMP[ j2 + 2 ]; x0i := -_TEMP[ j0 + 3 ] - _TEMP[ j2 + 3 ];
1369
x1r := _TEMP[ j0 + 2 ] - _TEMP[ j2 + 2 ]; x1i := -_TEMP[ j0 + 3 ] + _TEMP[ j2 + 3 ];
1370
x2r := _TEMP[ j1 + 2 ] + _TEMP[ j3 + 2 ]; x2i := _TEMP[ j1 + 3 ] + _TEMP[ j3 + 3 ];
1371
x3r := _TEMP[ j1 + 2 ] - _TEMP[ j3 + 2 ]; x3i := _TEMP[ j1 + 3 ] - _TEMP[ j3 + 3 ];
1372
_TEMP[ j0 + 2 ] := x0r + x2r;
1373
_TEMP[ j0 + 3 ] := x0i - x2i;
1374
_TEMP[ j1 + 2 ] := x0r - x2r;
1375
_TEMP[ j1 + 3 ] := x0i + x2i;
1377
x0r := x1r + x3i; x0i := x1i + x3r;
1378
_TEMP[ j2 + 2 ] := wk1i * x0r - wk1r * x0i;
1379
_TEMP[ j2 + 3 ] := wk1i * x0i + wk1r * x0r;
1381
x0r := x1r - x3i; x0i := x1i - x3r;
1382
_TEMP[ j3 + 2 ] := wk3i * x0r + wk3r * x0i;
1383
_TEMP[ j3 + 3 ] := wk3i * x0i - wk3r * x0r;
1386
////////////////////////////////////////////////////////////////////////////////////////////////////
1388
procedure TDiscreteTrans.cftmdl1( const n:Integer; var a:array of Double; var w:array of Double );
1390
j, j0, j1, j2, j3, k, m, mh :Integer;
1391
wn4r, wk1r, wk1i, wk3r, wk3i,
1392
x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i :Double;
1401
x0r := a[ 0 ] + a[ j2 ];
1402
x0i := a[ 1 ] + a[ j2 + 1 ];
1403
x1r := a[ 0 ] - a[ j2 ];
1404
x1i := a[ 1 ] - a[ j2 + 1 ];
1405
x2r := a[ j1 ] + a[ j3 ];
1406
x2i := a[ j1 + 1 ] + a[ j3 + 1 ];
1407
x3r := a[ j1 ] - a[ j3 ];
1408
x3i := a[ j1 + 1 ] - a[ j3 + 1 ];
1409
a[ 0 ] := x0r + x2r;
1410
a[ 1 ] := x0i + x2i;
1411
a[ j1 ] := x0r - x2r;
1412
a[ j1 + 1 ] := x0i - x2i;
1413
a[ j2 ] := x1r - x3i;
1414
a[ j2 + 1 ] := x1i + x3r;
1415
a[ j3 ] := x1r + x3i;
1416
a[ j3 + 1 ] := x1i - x3r;
1434
x0r := a[ j ] + a[ j2 ];
1435
x0i := a[ j + 1 ] + a[ j2 + 1 ];
1436
x1r := a[ j ] - a[ j2 ];
1437
x1i := a[ j + 1 ] - a[ j2 + 1 ];
1438
x2r := a[ j1 ] + a[ j3 ];
1439
x2i := a[ j1 + 1 ] + a[ j3 + 1 ];
1440
x3r := a[ j1 ] - a[ j3 ];
1441
x3i := a[ j1 + 1 ] - a[ j3 + 1 ];
1442
a[ j ] := x0r + x2r;
1443
a[ j + 1 ] := x0i + x2i;
1444
a[ j1 ] := x0r - x2r;
1445
a[ j1 + 1 ] := x0i - x2i;
1449
a[ j2 ] := wk1r * x0r - wk1i * x0i;
1450
a[ j2 + 1 ] := wk1r * x0i + wk1i * x0r;
1454
a[ j3 ] := wk3r * x0r + wk3i * x0i;
1455
a[ j3 + 1 ] := wk3r * x0i - wk3i * x0r;
1462
x0r := a[ j0 ] + a[ j2 ];
1463
x0i := a[ j0 + 1 ] + a[ j2 + 1 ];
1464
x1r := a[ j0 ] - a[ j2 ];
1465
x1i := a[ j0 + 1 ] - a[ j2 + 1 ];
1466
x2r := a[ j1 ] + a[ j3 ];
1467
x2i := a[ j1 + 1 ] + a[ j3 + 1 ];
1468
x3r := a[ j1 ] - a[ j3 ];
1469
x3i := a[ j1 + 1 ] - a[ j3 + 1 ];
1470
a[ j0 ] := x0r + x2r;
1471
a[ j0 + 1 ] := x0i + x2i;
1472
a[ j1 ] := x0r - x2r;
1473
a[ j1 + 1 ] := x0i - x2i;
1477
a[ j2 ] := wk1i * x0r - wk1r * x0i;
1478
a[ j2 + 1 ] := wk1i * x0i + wk1r * x0r;
1482
a[ j3 ] := wk3i * x0r + wk3r * x0i;
1483
a[ j3 + 1 ] := wk3i * x0i - wk3r * x0r;
1493
x0r := a[ j0 ] + a[ j2 ];
1494
x0i := a[ j0 + 1 ] + a[ j2 + 1 ];
1495
x1r := a[ j0 ] - a[ j2 ];
1496
x1i := a[ j0 + 1 ] - a[ j2 + 1 ];
1497
x2r := a[ j1 ] + a[ j3 ];
1498
x2i := a[ j1 + 1 ] + a[ j3 + 1 ];
1499
x3r := a[ j1 ] - a[ j3 ];
1500
x3i := a[ j1 + 1 ] - a[ j3 + 1 ];
1501
a[ j0 ] := x0r + x2r;
1502
a[ j0 + 1 ] := x0i + x2i;
1503
a[ j1 ] := x0r - x2r;
1504
a[ j1 + 1 ] := x0i - x2i;
1508
a[ j2 ] := +wn4r * ( x0r - x0i );
1509
a[ j2 + 1 ] := +wn4r * ( x0i + x0r );
1513
a[ j3 ] := -wn4r * ( x0r + x0i );
1514
a[ j3 + 1 ] := -wn4r * ( x0i - x0r );
1517
procedure TDiscreteTrans.cftmdl2( const n:Integer; var a:array of Double; var w:array of Double );
1519
j, j0, j1, j2, j3, k, kr, m, mh :Integer;
1520
wn4r, wk1r, wk1i, wk3r, wk3i, wd1r, wd1i, wd3r, wd3i,
1521
x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i, y0r, y0i, y2r, y2i :Double;
1532
x0r := a[ 0 ] - a[ j2 + 1 ];
1533
x0i := a[ 1 ] + a[ j2 ];
1534
x1r := a[ 0 ] + a[ j2 + 1 ];
1535
x1i := a[ 1 ] - a[ j2 ];
1536
x2r := a[ j1 ] - a[ j3 + 1 ];
1537
x2i := a[ j1 + 1 ] + a[ j3 ];
1538
x3r := a[ j1 ] + a[ j3 + 1 ];
1539
x3i := a[ j1 + 1 ] - a[ j3 ];
1540
y0r := wn4r * ( x2r - x2i );
1541
y0i := wn4r * ( x2i + x2r );
1542
a[ 0 ] := x0r + y0r;
1543
a[ 1 ] := x0i + y0i;
1544
a[ j1 ] := x0r - y0r;
1545
a[ j1 + 1 ] := x0i - y0i;
1547
y0r := wn4r * ( x3r - x3i );
1548
y0i := wn4r * ( x3i + x3r );
1549
a[ j2 ] := x1r - y0i;
1550
a[ j2 + 1 ] := x1i + y0r;
1551
a[ j3 ] := x1r + y0i;
1552
a[ j3 + 1 ] := x1i - y0r;
1568
wd1r := w[ kr + 1 ];
1569
wd3i := w[ kr + 2 ];
1570
wd3r := w[ kr + 3 ];
1576
x0r := a[ j ] - a[ j2 + 1 ];
1577
x0i := a[ j + 1 ] + a[ j2 ];
1578
x1r := a[ j ] + a[ j2 + 1 ];
1579
x1i := a[ j + 1 ] - a[ j2 ];
1580
x2r := a[ j1 ] - a[ j3 + 1 ];
1581
x2i := a[ j1 + 1 ] + a[ j3 ];
1582
x3r := a[ j1 ] + a[ j3 + 1 ];
1583
x3i := a[ j1 + 1 ] - a[ j3 ];
1585
y0r := wk1r * x0r - wk1i * x0i;
1586
y0i := wk1r * x0i + wk1i * x0r;
1587
y2r := wd1r * x2r - wd1i * x2i;
1588
y2i := wd1r * x2i + wd1i * x2r;
1589
a[ j ] := y0r + y2r;
1590
a[ j + 1 ] := y0i + y2i;
1591
a[ j1 ] := y0r - y2r;
1592
a[ j1 + 1 ] := y0i - y2i;
1594
y0r := wk3r * x1r + wk3i * x1i;
1595
y0i := wk3r * x1i - wk3i * x1r;
1596
y2r := wd3r * x3r + wd3i * x3i;
1597
y2i := wd3r * x3i - wd3i * x3r;
1598
a[ j2 ] := y0r + y2r;
1599
a[ j2 + 1 ] := y0i + y2i;
1600
a[ j3 ] := y0r - y2r;
1601
a[ j3 + 1 ] := y0i - y2i;
1608
x0r := a[ j0 ] - a[ j2 + 1 ];
1609
x0i := a[ j0 + 1 ] + a[ j2 ];
1610
x1r := a[ j0 ] + a[ j2 + 1 ];
1611
x1i := a[ j0 + 1 ] - a[ j2 ];
1612
x2r := a[ j1 ] - a[ j3 + 1 ];
1613
x2i := a[ j1 + 1 ] + a[ j3 ];
1614
x3r := a[ j1 ] + a[ j3 + 1 ];
1615
x3i := a[ j1 + 1 ] - a[ j3 ];
1617
y0r := wd1i * x0r - wd1r * x0i;
1618
y0i := wd1i * x0i + wd1r * x0r;
1619
y2r := wk1i * x2r - wk1r * x2i;
1620
y2i := wk1i * x2i + wk1r * x2r;
1621
a[ j0 ] := y0r + y2r;
1622
a[ j0 + 1 ] := y0i + y2i;
1623
a[ j1 ] := y0r - y2r;
1624
a[ j1 + 1 ] := y0i - y2i;
1626
y0r := wd3i * x1r + wd3r * x1i;
1627
y0i := wd3i * x1i - wd3r * x1r;
1628
y2r := wk3i * x3r + wk3r * x3i;
1629
y2i := wk3i * x3i - wk3r * x3r;
1630
a[ j2 ] := y0r + y2r;
1631
a[ j2 + 1 ] := y0i + y2i;
1632
a[ j3 ] := y0r - y2r;
1633
a[ j3 + 1 ] := y0i - y2i;
1646
x0r := a[ j0 ] - a[ j2 + 1 ];
1647
x0i := a[ j0 + 1 ] + a[ j2 ];
1648
x1r := a[ j0 ] + a[ j2 + 1 ];
1649
x1i := a[ j0 + 1 ] - a[ j2 ];
1650
x2r := a[ j1 ] - a[ j3 + 1 ];
1651
x2i := a[ j1 + 1 ] + a[ j3 ];
1652
x3r := a[ j1 ] + a[ j3 + 1 ];
1653
x3i := a[ j1 + 1 ] - a[ j3 ];
1654
y0r := wk1r * x0r - wk1i * x0i;
1655
y0i := wk1r * x0i + wk1i * x0r;
1656
y2r := wk1i * x2r - wk1r * x2i;
1657
y2i := wk1i * x2i + wk1r * x2r;
1658
a[ j0 ] := y0r + y2r;
1659
a[ j0 + 1 ] := y0i + y2i;
1660
a[ j1 ] := y0r - y2r;
1661
a[ j1 + 1 ] := y0i - y2i;
1663
y0r := wk1i * x1r - wk1r * x1i; y0i := wk1i * x1i + wk1r * x1r;
1664
y2r := wk1r * x3r - wk1i * x3i; y2i := wk1r * x3i + wk1i * x3r;
1665
a[ j2 ] := y0r - y2r;
1666
a[ j2 + 1 ] := y0i - y2i;
1667
a[ j3 ] := y0r + y2r;
1668
a[ j3 + 1 ] := y0i + y2i;
1671
////////////////////////////////////////////////////////////////////////////////////////////////////
1673
function TDiscreteTrans.cfttree( const n,j,k:Integer ) :Integer;
1675
i, isplt, m :Integer;
1677
if k and 3 <> 0 then
1681
if isplt <> 0 then cftmdl1( n, _TEMP[ j - n ], _W[ _NW - ( n shr 1 ) ] )
1682
else cftmdl2( n, _TEMP[ j - n ], _W[ _NW - n ] )
1688
while i and 3 = 0 do
1700
cftmdl1( m, _TEMP[ j - m ], _W[ _NW - ( m shr 1 ) ]);
1709
cftmdl2( m, _TEMP[ j - m ], _W[ _NW - m ] );
1720
////////////////////////////////////////////////////////////////////////////////////////////////////
1722
procedure TDiscreteTrans.cftf161( var a:array of Double; var w:array of Double );
1725
x00r, x00i, x01r, x01i, x02r, x02i, x03r, x03i,
1726
y00r, y00i, y01r, y01i, y02r, y02i, y03r, y03i,
1727
y04r, y04i, y05r, y05i, y06r, y06i, y07r, y07i,
1728
y08r, y08i, y09r, y09i, y10r, y10i, y11r, y11i,
1729
y12r, y12i, y13r, y13i, y14r, y14i, y15r, y15i :Double;
1735
x00r := a[ 00 ] + a[ 16 ]; x00i := a[ 01 ] + a[ 17 ];
1736
x01r := a[ 00 ] - a[ 16 ]; x01i := a[ 01 ] - a[ 17 ];
1737
x02r := a[ 08 ] + a[ 24 ]; x02i := a[ 09 ] + a[ 25 ];
1738
x03r := a[ 08 ] - a[ 24 ]; x03i := a[ 09 ] - a[ 25 ];
1739
y00r := x00r + x02r; y00i := x00i + x02i;
1740
y04r := x00r - x02r; y04i := x00i - x02i;
1741
y08r := x01r - x03i; y08i := x01i + x03r;
1742
y12r := x01r + x03i; y12i := x01i - x03r;
1743
x00r := a[ 02 ] + a[ 18 ];
1744
x00i := a[ 03 ] + a[ 19 ];
1745
x01r := a[ 02 ] - a[ 18 ];
1746
x01i := a[ 03 ] - a[ 19 ];
1747
x02r := a[ 10 ] + a[ 26 ];
1748
x02i := a[ 11 ] + a[ 27 ];
1749
x03r := a[ 10 ] - a[ 26 ];
1750
x03i := a[ 11 ] - a[ 27 ];
1752
y01r := x00r + x02r; y01i := x00i + x02i;
1753
y05r := x00r - x02r; y05i := x00i - x02i;
1754
x00r := x01r - x03i; x00i := x01i + x03r;
1755
y09r := wk1r * x00r - wk1i * x00i; y09i := wk1r * x00i + wk1i * x00r;
1756
x00r := x01r + x03i; x00i := x01i - x03r;
1757
y13r := wk1i * x00r - wk1r * x00i; y13i := wk1i * x00i + wk1r * x00r;
1758
x00r := a[ 4 ] + a[ 20 ];
1759
x00i := a[ 5 ] + a[ 21 ];
1760
x01r := a[ 4 ] - a[ 20 ];
1761
x01i := a[ 5 ] - a[ 21 ];
1762
x02r := a[ 12 ] + a[ 28 ];
1763
x02i := a[ 13 ] + a[ 29 ];
1764
x03r := a[ 12 ] - a[ 28 ];
1765
x03i := a[ 13 ] - a[ 29 ];
1767
y02r := x00r + x02r; y02i := x00i + x02i;
1768
y06r := x00r - x02r; y06i := x00i - x02i;
1769
x00r := x01r - x03i; x00i := x01i + x03r;
1770
y10r := wn4r * ( x00r - x00i ); y10i := wn4r * ( x00i + x00r );
1771
x00r := x01r + x03i; x00i := x01i - x03r;
1772
y14r := wn4r * ( x00r + x00i ); y14i := wn4r * ( x00i - x00r );
1773
x00r := a[ 06 ] + a[ 22 ];
1774
x00i := a[ 07 ] + a[ 23 ];
1775
x01r := a[ 06 ] - a[ 22 ];
1776
x01i := a[ 07 ] - a[ 23 ];
1777
x02r := a[ 14 ] + a[ 30 ];
1778
x02i := a[ 15 ] + a[ 31 ];
1779
x03r := a[ 14 ] - a[ 30 ];
1780
x03i := a[ 15 ] - a[ 31 ];
1782
y03r := x00r + x02r; y03i := x00i + x02i;
1783
y07r := x00r - x02r; y07i := x00i - x02i;
1784
x00r := x01r - x03i; x00i := x01i + x03r;
1785
y11r := wk1i * x00r - wk1r * x00i; y11i := wk1i * x00i + wk1r * x00r;
1786
x00r := x01r + x03i; x00i := x01i - x03r;
1787
y15r := wk1r * x00r - wk1i * x00i; y15i := wk1r * x00i + wk1i * x00r;
1788
x00r := y12r - y14r; x00i := y12i - y14i;
1789
x01r := y12r + y14r; x01i := y12i + y14i;
1790
x02r := y13r - y15r; x02i := y13i - y15i;
1791
x03r := y13r + y15r; x03i := y13i + y15i;
1792
a[ 24 ] := x00r + x02r;
1793
a[ 25 ] := x00i + x02i;
1794
a[ 26 ] := x00r - x02r;
1795
a[ 27 ] := x00i - x02i;
1796
a[ 28 ] := x01r - x03i;
1797
a[ 29 ] := x01i + x03r;
1798
a[ 30 ] := x01r + x03i;
1799
a[ 31 ] := x01i - x03r;
1801
x00r := y08r + y10r; x00i := y08i + y10i;
1802
x01r := y08r - y10r; x01i := y08i - y10i;
1803
x02r := y09r + y11r; x02i := y09i + y11i;
1804
x03r := y09r - y11r; x03i := y09i - y11i;
1805
a[ 16 ] := x00r + x02r;
1806
a[ 17 ] := x00i + x02i;
1807
a[ 18 ] := x00r - x02r;
1808
a[ 19 ] := x00i - x02i;
1809
a[ 20 ] := x01r - x03i;
1810
a[ 21 ] := x01i + x03r;
1811
a[ 22 ] := x01r + x03i;
1812
a[ 23 ] := x01i - x03r;
1814
x00r := y05r - y07i; x00i := y05i + y07r;
1815
x02r := wn4r * ( x00r - x00i ); x02i := wn4r * ( x00i + x00r );
1816
x00r := y05r + y07i; x00i := y05i - y07r;
1817
x03r := wn4r * ( x00r - x00i ); x03i := wn4r * ( x00i + x00r );
1818
x00r := y04r - y06i; x00i := y04i + y06r;
1819
x01r := y04r + y06i; x01i := y04i - y06r;
1820
a[ 08 ] := x00r + x02r;
1821
a[ 09 ] := x00i + x02i;
1822
a[ 10 ] := x00r - x02r;
1823
a[ 11 ] := x00i - x02i;
1824
a[ 12 ] := x01r - x03i;
1825
a[ 13 ] := x01i + x03r;
1826
a[ 14 ] := x01r + x03i;
1827
a[ 15 ] := x01i - x03r;
1829
x00r := y00r + y02r; x00i := y00i + y02i;
1830
x01r := y00r - y02r; x01i := y00i - y02i;
1831
x02r := y01r + y03r; x02i := y01i + y03i;
1832
x03r := y01r - y03r; x03i := y01i - y03i;
1833
a[ 00 ] := x00r + x02r;
1834
a[ 01 ] := x00i + x02i;
1835
a[ 02 ] := x00r - x02r;
1836
a[ 03 ] := x00i - x02i;
1837
a[ 04 ] := x01r - x03i;
1838
a[ 05 ] := x01i + x03r;
1839
a[ 06 ] := x01r + x03i;
1840
a[ 07 ] := x01i - x03r;
1843
procedure TDiscreteTrans.cftf162( var a:array of Double; var w:array of Double );
1845
wn4r, wk1r, wk1i, wk2r, wk2i, wk3r, wk3i,
1846
x0r, x0i, x1r, x1i, x2r, x2i,
1847
y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i,
1848
y4r, y4i, y5r, y5i, y6r, y6i, y7r, y7i,
1849
y8r, y8i, y9r, y9i, y10r, y10i, y11r, y11i,
1850
y12r, y12i, y13r, y13i, y14r, y14i, y15r, y15i :Double;
1860
x1r := a[ 0 ] - a[ 17 ];
1861
x1i := a[ 1 ] + a[ 16 ];
1862
x0r := a[ 8 ] - a[ 25 ];
1863
x0i := a[ 9 ] + a[ 24 ];
1864
x2r := wn4r * ( x0r - x0i );
1865
x2i := wn4r * ( x0i + x0r );
1870
x1r := a[ 0 ] + a[ 17 ];
1871
x1i := a[ 1 ] - a[ 16 ];
1872
x0r := a[ 8 ] + a[ 25 ];
1873
x0i := a[ 9 ] - a[ 24 ];
1874
x2r := wn4r * ( x0r - x0i );
1875
x2i := wn4r * ( x0i + x0r );
1880
x0r := a[ 2 ] - a[ 19 ];
1881
x0i := a[ 3 ] + a[ 18 ];
1882
x1r := wk1r * x0r - wk1i * x0i;
1883
x1i := wk1r * x0i + wk1i * x0r;
1884
x0r := a[ 10 ] - a[ 27 ];
1885
x0i := a[ 11 ] + a[ 26 ];
1886
x2r := wk3i * x0r - wk3r * x0i;
1887
x2i := wk3i * x0i + wk3r * x0r;
1892
x0r := a[ 2 ] + a[ 19 ];
1893
x0i := a[ 3 ] - a[ 18 ];
1894
x1r := wk3r * x0r - wk3i * x0i;
1895
x1i := wk3r * x0i + wk3i * x0r;
1896
x0r := a[ 10 ] + a[ 27 ];
1897
x0i := a[ 11 ] - a[ 26 ];
1898
x2r := wk1r * x0r + wk1i * x0i;
1899
x2i := wk1r * x0i - wk1i * x0r;
1904
x0r := a[ 4 ] - a[ 21 ];
1905
x0i := a[ 5 ] + a[ 20 ];
1906
x1r := wk2r * x0r - wk2i * x0i;
1907
x1i := wk2r * x0i + wk2i * x0r;
1908
x0r := a[ 12 ] - a[ 29 ];
1909
x0i := a[ 13 ] + a[ 28 ];
1910
x2r := wk2i * x0r - wk2r * x0i;
1911
x2i := wk2i * x0i + wk2r * x0r;
1916
x0r := a[ 4 ] + a[ 21 ];
1917
x0i := a[ 5 ] - a[ 20 ];
1918
x1r := wk2i * x0r - wk2r * x0i;
1919
x1i := wk2i * x0i + wk2r * x0r;
1920
x0r := a[ 12 ] + a[ 29 ];
1921
x0i := a[ 13 ] - a[ 28 ];
1922
x2r := wk2r * x0r - wk2i * x0i;
1923
x2i := wk2r * x0i + wk2i * x0r;
1928
x0r := a[ 6 ] - a[ 23 ];
1929
x0i := a[ 7 ] + a[ 22 ];
1930
x1r := wk3r * x0r - wk3i * x0i;
1931
x1i := wk3r * x0i + wk3i * x0r;
1932
x0r := a[ 14 ] - a[ 31 ];
1933
x0i := a[ 15 ] + a[ 30 ];
1934
x2r := wk1i * x0r - wk1r * x0i;
1935
x2i := wk1i * x0i + wk1r * x0r;
1940
x0r := a[ 6 ] + a[ 23 ];
1941
x0i := a[ 7 ] - a[ 22 ];
1942
x1r := wk1i * x0r + wk1r * x0i;
1943
x1i := wk1i * x0i - wk1r * x0r;
1944
x0r := a[ 14 ] + a[ 31 ];
1945
x0i := a[ 15 ] - a[ 30 ];
1946
x2r := wk3i * x0r - wk3r * x0i;
1947
x2i := wk3i * x0i + wk3r * x0r;
1956
a[ 0 ] := x1r + x2r;
1957
a[ 1 ] := x1i + x2i;
1958
a[ 2 ] := x1r - x2r;
1959
a[ 3 ] := x1i - x2i;
1964
a[ 4 ] := x1r - x2i;
1965
a[ 5 ] := x1i + x2r;
1966
a[ 6 ] := x1r + x2i;
1967
a[ 7 ] := x1i - x2r;
1972
x2r := wn4r * ( x0r - x0i );
1973
x2i := wn4r * ( x0i + x0r );
1974
a[ 8 ] := x1r + x2r;
1975
a[ 9 ] := x1i + x2i;
1976
a[ 10 ] := x1r - x2r;
1977
a[ 11 ] := x1i - x2i;
1982
x2r := wn4r * ( x0r - x0i );
1983
x2i := wn4r * ( x0i + x0r );
1984
a[ 12 ] := x1r - x2i;
1985
a[ 13 ] := x1i + x2r;
1986
a[ 14 ] := x1r + x2i;
1987
a[ 15 ] := x1i - x2r;
1992
a[ 16 ] := x1r + x2r;
1993
a[ 17 ] := x1i + x2i;
1994
a[ 18 ] := x1r - x2r;
1995
a[ 19 ] := x1i - x2i;
2000
a[ 20 ] := x1r - x2i;
2001
a[ 21 ] := x1i + x2r;
2002
a[ 22 ] := x1r + x2i;
2003
a[ 23 ] := x1i - x2r;
2008
x2r := wn4r * ( x0r - x0i );
2009
x2i := wn4r * ( x0i + x0r );
2010
a[ 24 ] := x1r + x2r;
2011
a[ 25 ] := x1i + x2i;
2012
a[ 26 ] := x1r - x2r;
2013
a[ 27 ] := x1i - x2i;
2018
x2r := wn4r * ( x0r - x0i );
2019
x2i := wn4r * ( x0i + x0r );
2020
a[ 28 ] := x1r - x2i;
2021
a[ 29 ] := x1i + x2r;
2022
a[ 30 ] := x1r + x2i;
2023
a[ 31 ] := x1i - x2r;
2026
////////////////////////////////////////////////////////////////////////////////////////////////////
2028
procedure TDiscreteTrans.cftf081( var a:array of Double; var w:array of Double );
2030
wn4r, x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i,
2031
y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i,
2032
y4r, y4i, y5r, y5i, y6r, y6i, y7r, y7i :Double;
2036
x0r := a[ 00 ] + a[ 08 ]; x0i := a[ 01 ] + a[ 09 ];
2037
x1r := a[ 00 ] - a[ 08 ]; x1i := a[ 01 ] - a[ 09 ];
2038
x2r := a[ 04 ] + a[ 12 ]; x2i := a[ 05 ] + a[ 13 ];
2039
x3r := a[ 04 ] - a[ 12 ]; x3i := a[ 05 ] - a[ 13 ];
2040
y0r := x0r + x2r; y0i := x0i + x2i;
2041
y2r := x0r - x2r; y2i := x0i - x2i;
2042
y1r := x1r - x3i; y1i := x1i + x3r;
2043
y3r := x1r + x3i; y3i := x1i - x3r;
2044
x0r := a[ 02 ] + a[ 10 ]; x0i := a[ 03 ] + a[ 11 ];
2045
x1r := a[ 02 ] - a[ 10 ]; x1i := a[ 03 ] - a[ 11 ];
2046
x2r := a[ 06 ] + a[ 14 ]; x2i := a[ 07 ] + a[ 15 ];
2047
x3r := a[ 06 ] - a[ 14 ]; x3i := a[ 07 ] - a[ 15 ];
2048
y4r := x0r + x2r; y4i := x0i + x2i;
2049
y6r := x0r - x2r; y6i := x0i - x2i;
2050
x0r := x1r - x3i; x0i := x1i + x3r;
2051
x2r := x1r + x3i; x2i := x1i - x3r;
2052
y5r := wn4r * ( x0r - x0i ); y5i := wn4r * ( x0r + x0i );
2053
y7r := wn4r * ( x2r - x2i ); y7i := wn4r * ( x2r + x2i );
2055
a[ 08 ] := y1r + y5r;
2056
a[ 09 ] := y1i + y5i;
2057
a[ 10 ] := y1r - y5r;
2058
a[ 11 ] := y1i - y5i;
2059
a[ 12 ] := y3r - y7i;
2060
a[ 13 ] := y3i + y7r;
2061
a[ 14 ] := y3r + y7i;
2062
a[ 15 ] := y3i - y7r;
2063
a[ 00 ] := y0r + y4r;
2064
a[ 01 ] := y0i + y4i;
2065
a[ 02 ] := y0r - y4r;
2066
a[ 03 ] := y0i - y4i;
2067
a[ 04 ] := y2r - y6i;
2068
a[ 05 ] := y2i + y6r;
2069
a[ 06 ] := y2r + y6i;
2070
a[ 07 ] := y2i - y6r;
2073
procedure TDiscreteTrans.cftf082( var a:array of Double; var w:array of Double );
2075
wn4r, wk1r, wk1i, x0r, x0i, x1r, x1i,
2076
y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i,
2077
y4r, y4i, y5r, y5i, y6r, y6i, y7r, y7i :Double;
2083
y0r := a[ 00 ] - a[ 09 ]; y0i := a[ 01 ] + a[ 08 ];
2084
y1r := a[ 00 ] + a[ 09 ]; y1i := a[ 01 ] - a[ 08 ];
2085
x0r := a[ 04 ] - a[ 13 ]; x0i := a[ 05 ] + a[ 12 ];
2086
y2r := wn4r * ( x0r - x0i ); y2i := wn4r * ( x0i + x0r );
2087
x0r := a[ 04 ] + a[ 13 ]; x0i := a[ 05 ] - a[ 12 ];
2088
y3r := wn4r * ( x0r - x0i ); y3i := wn4r * ( x0i + x0r );
2089
x0r := a[ 02 ] - a[ 11 ]; x0i := a[ 03 ] + a[ 10 ];
2090
y4r := wk1r * x0r - wk1i * x0i; y4i := wk1r * x0i + wk1i * x0r;
2091
x0r := a[ 02 ] + a[ 11 ]; x0i := a[ 03 ] - a[ 10 ];
2092
y5r := wk1i * x0r - wk1r * x0i; y5i := wk1i * x0i + wk1r * x0r;
2093
x0r := a[ 06 ] - a[ 15 ]; x0i := a[ 07 ] + a[ 14 ];
2094
y6r := wk1i * x0r - wk1r * x0i; y6i := wk1i * x0i + wk1r * x0r;
2095
x0r := a[ 06 ] + a[ 15 ]; x0i := a[ 07 ] - a[ 14 ];
2096
y7r := wk1r * x0r - wk1i * x0i; y7i := wk1r * x0i + wk1i * x0r;
2097
x0r := y0r + y2r; x0i := y0i + y2i;
2098
x1r := y4r + y6r; x1i := y4i + y6i;
2099
a[ 00 ] := x0r + x1r;
2100
a[ 01 ] := x0i + x1i;
2101
a[ 02 ] := x0r - x1r;
2102
a[ 03 ] := x0i - x1i;
2104
x0r := y0r - y2r; x0i := y0i - y2i;
2105
x1r := y4r - y6r; x1i := y4i - y6i;
2106
a[ 04 ] := x0r - x1i;
2107
a[ 05 ] := x0i + x1r;
2108
a[ 06 ] := x0r + x1i;
2109
a[ 07 ] := x0i - x1r;
2111
x0r := y1r - y3i; x0i := y1i + y3r;
2112
x1r := y5r - y7r; x1i := y5i - y7i;
2113
a[ 08 ] := x0r + x1r;
2114
a[ 09 ] := x0i + x1i;
2115
a[ 10 ] := x0r - x1r;
2116
a[ 11 ] := x0i - x1i;
2118
x0r := y1r + y3i; x0i := y1i - y3r;
2119
x1r := y5r + y7r; x1i := y5i + y7i;
2120
a[ 12 ] := x0r - x1i;
2121
a[ 13 ] := x0i + x1r;
2122
a[ 14 ] := x0r + x1i;
2123
a[ 15 ] := x0i - x1r;
2126
////////////////////////////////////////////////////////////////////////////////////////////////////
2128
procedure TDiscreteTrans.cftleaf( const n,isplt:Integer; var a:array of Double );
2132
cftmdl1( 128, a , _W[ _NW - 64 ] );
2133
cftf161( a , _W[ _NW - 8 ] );
2134
cftf162( a[ 32 ], _W[ _NW - 32 ] );
2135
cftf161( a[ 64 ], _W[ _NW - 8 ] );
2136
cftf161( a[ 96 ], _W[ _NW - 8 ] );
2137
cftmdl2( 128, a[ 128 ], _W[ _NW - 128 ] );
2138
cftf161( a[ 128 ], _W[ _NW - 8 ] );
2139
cftf162( a[ 160 ], _W[ _NW - 32 ] );
2140
cftf161( a[ 192 ], _W[ _NW - 8 ] );
2141
cftf162( a[ 224 ], _W[ _NW - 32 ] );
2142
cftmdl1( 128, a[ 256 ], _W[ _NW - 64 ] );
2143
cftf161( a[ 256 ], _W[ _NW - 8 ] );
2144
cftf162( a[ 288 ], _W[ _NW - 32 ] );
2145
cftf161( a[ 320 ], _W[ _NW - 8 ] );
2146
cftf161( a[ 352 ], _W[ _NW - 8 ] );
2150
cftmdl1( 128, a[ 384 ], _W[ _NW - 64 ] );
2151
cftf161( a[ 480 ], _W[ _NW - 8 ] );
2155
cftmdl2( 128, a[ 384 ], _W[ _NW - 128 ] );
2156
cftf162( a[ 480 ], _W[ _NW - 32 ] );
2159
cftf161( a[ 384 ], _W[ _NW - 8 ] );
2160
cftf162( a[ 416 ], _W[ _NW - 32 ] );
2161
cftf161( a[ 448 ], _W[ _NW - 8 ] );
2165
cftmdl1( 64, a , _W[ _NW - 32 ] );
2166
cftf081( a , _W[ _NW - 8 ] );
2167
cftf082( a[ 16 ], _W[ _NW - 8 ] );
2168
cftf081( a[ 32 ], _W[ _NW - 8 ] );
2169
cftf081( a[ 48 ], _W[ _NW - 8 ] );
2170
cftmdl2( 64, a[ 64 ], _W[ _NW - 64 ] );
2171
cftf081( a[ 64 ], _W[ _NW - 8 ] );
2172
cftf082( a[ 80 ], _W[ _NW - 8 ] );
2173
cftf081( a[ 96 ], _W[ _NW - 8 ] );
2174
cftf082( a[ 112 ], _W[ _NW - 8 ] );
2175
cftmdl1( 64, a[ 128 ], _W[ _NW - 32 ] );
2176
cftf081( a[ 128 ], _W[ _NW - 8 ] );
2177
cftf082( a[ 144 ], _W[ _NW - 8 ] );
2178
cftf081( a[ 160 ], _W[ _NW - 8 ] );
2179
cftf081( a[ 176 ], _W[ _NW - 8 ] );
2183
cftmdl1( 64, a[ 192 ], _W[ _NW - 32 ] );
2184
cftf081( a[ 240 ], _W[ _NW - 8 ] );
2188
cftmdl2( 64, a[ 192 ], _W[ _NW - 64 ] );
2189
cftf082( a[ 240 ], _W[ _NW - 8 ] );
2192
cftf081( a[ 192 ], _W[ _NW - 8 ] );
2193
cftf082( a[ 208 ], _W[ _NW - 8 ] );
2194
cftf081( a[ 224 ], _W[ _NW - 8 ] );
2198
////////////////////////////////////////////////////////////////////////////////////////////////////
2200
procedure TDiscreteTrans.cftrec4;
2202
isplt, j, k, m :Integer;
2208
cftmdl1( m, _TEMP[ _TempN - m ], _W[ _NW - ( m shr 1 ) ])
2211
cftleaf( m, 1, _TEMP[ _TempN - m ] );
2219
isplt := cfttree( m, j, k );
2220
cftleaf( m, isplt, _TEMP[ j - m ] );
2226
////////////////////////////////////////////////////////////////////////////////////////////////////
2228
procedure TDiscreteTrans.cftfx41;
2230
if _TempN = 128 then
2232
cftf161( _TEMP , _W[ _NW - 8 ] );
2233
cftf162( _TEMP[ 32 ], _W[ _NW - 32 ] );
2234
cftf161( _TEMP[ 64 ], _W[ _NW - 8 ] );
2235
cftf161( _TEMP[ 96 ], _W[ _NW - 8 ] );
2239
cftf081( _TEMP , _W[ _NW - 8 ] );
2240
cftf082( _TEMP[ 16 ], _W[ _NW - 8 ] );
2241
cftf081( _TEMP[ 32 ], _W[ _NW - 8 ] );
2242
cftf081( _TEMP[ 48 ], _W[ _NW - 8 ] );
2246
////////////////////////////////////////////////////////////////////////////////////////////////////
2248
procedure TDiscreteTrans.cftf040;
2255
x0r := _TEMP[ 0 ] + _TEMP[ 4 ]; x0i := _TEMP[ 1 ] + _TEMP[ 5 ];
2256
x1r := _TEMP[ 0 ] - _TEMP[ 4 ]; x1i := _TEMP[ 1 ] - _TEMP[ 5 ];
2257
x2r := _TEMP[ 2 ] + _TEMP[ 6 ]; x2i := _TEMP[ 3 ] + _TEMP[ 7 ];
2258
x3r := _TEMP[ 2 ] - _TEMP[ 6 ]; x3i := _TEMP[ 3 ] - _TEMP[ 7 ];
2260
_TEMP[ 0 ] := x0r + x2r; _TEMP[ 1 ] := x0i + x2i;
2261
_TEMP[ 2 ] := x1r - x3i; _TEMP[ 3 ] := x1i + x3r;
2262
_TEMP[ 4 ] := x0r - x2r; _TEMP[ 5 ] := x0i - x2i;
2263
_TEMP[ 6 ] := x1r + x3i; _TEMP[ 7 ] := x1i - x3r;
2266
procedure TDiscreteTrans.cftb040;
2273
x0r := _TEMP[ 0 ] + _TEMP[ 4 ]; x0i := _TEMP[ 1 ] + _TEMP[ 5 ];
2274
x1r := _TEMP[ 0 ] - _TEMP[ 4 ]; x1i := _TEMP[ 1 ] - _TEMP[ 5 ];
2275
x2r := _TEMP[ 2 ] + _TEMP[ 6 ]; x2i := _TEMP[ 3 ] + _TEMP[ 7 ];
2276
x3r := _TEMP[ 2 ] - _TEMP[ 6 ]; x3i := _TEMP[ 3 ] - _TEMP[ 7 ];
2278
_TEMP[ 0 ] := x0r + x2r; _TEMP[ 1 ] := x0i + x2i;
2279
_TEMP[ 2 ] := x1r + x3i; _TEMP[ 3 ] := x1i - x3r;
2280
_TEMP[ 4 ] := x0r - x2r; _TEMP[ 5 ] := x0i - x2i;
2281
_TEMP[ 6 ] := x1r - x3i; _TEMP[ 7 ] := x1i + x3r;
2284
////////////////////////////////////////////////////////////////////////////////////////////////////
2286
procedure TDiscreteTrans.cftx020;
2290
x0r := _TEMP[ 0 ] - _TEMP[ 2 ];
2291
x0i := _TEMP[ 1 ] - _TEMP[ 3 ];
2293
_TEMP[ 0 ] := _TEMP[ 0 ] + _TEMP[ 2 ];
2294
_TEMP[ 1 ] := _TEMP[ 1 ] + _TEMP[ 3 ];
2300
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
2302
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX アクセス
2304
procedure TDiscreteTrans.SetCount( const Count_:Integer );
2309
////////////////////////////////////////////////////////////////////////////////////////////////////
2311
procedure TDiscreteTrans.cftfsub;
2317
cftf1st( _W[ _NW - ( _TempN shr 2 ) ] );
2319
if _TempN > 512 then cftrec4
2321
if _TempN > 128 then cftleaf( _TempN, 1, _TEMP )
2329
cftf161( _TEMP, _W[ _NW - 8 ] );
2334
cftf081( _TEMP, _W );
2339
if _TempN = 8 then cftf040
2341
if _TempN = 4 then cftx020
2344
procedure TDiscreteTrans.cftbsub;
2350
cftb1st( _W[ _NW - ( _TempN shr 2 ) ] );
2352
if _TempN > 512 then cftrec4
2354
if _TempN > 128 then cftleaf( _TempN, 1, _TEMP )
2362
cftf161( _TEMP, _W[ _NW - 8 ] );
2368
cftf081( _TEMP, _W );
2374
if _TempN = 8 then cftb040
2376
if _TempN = 4 then cftx020
2379
////////////////////////////////////////////////////////////////////////////////////////////////////
2381
procedure TDiscreteTrans.rftfsub( var c:array of Double );
2383
j, k, kk, ks, m :Integer;
2390
ks := 2 * _NC div m;
2398
wkr := 0.5 - c[ _NC - kk ];
2401
xr := _TEMP[ j ] - _TEMP[ k ];
2402
xi := _TEMP[ j + 1 ] + _TEMP[ k + 1 ];
2404
yr := wkr * xr - wki * xi;
2405
yi := wkr * xi + wki * xr;
2407
_TEMP[ j ] := _TEMP[ j ] - yr;
2408
_TEMP[ j + 1 ] := _TEMP[ j + 1 ] - yi;
2409
_TEMP[ k ] := _TEMP[ k ] + yr;
2410
_TEMP[ k + 1 ] := _TEMP[ k + 1 ] - yi;
2416
procedure TDiscreteTrans.rftbsub( var c:array of Double );
2418
j, k, kk, ks, m :Integer;
2425
ks := 2 * _NC div m;
2433
wkr := 0.5 - c[ _NC - kk ];
2436
xr := _TEMP[ j ] - _TEMP[ k ];
2437
xi := _TEMP[ j + 1 ] + _TEMP[ k + 1 ];
2439
yr := wkr * xr + wki * xi;
2440
yi := wkr * xi - wki * xr;
2442
_TEMP[ j ] := _TEMP[ j ] - yr;
2443
_TEMP[ j + 1 ] := _TEMP[ j + 1 ] - yi;
2444
_TEMP[ k ] := _TEMP[ k ] + yr;
2445
_TEMP[ k + 1 ] := _TEMP[ k + 1 ] - yi;
2451
////////////////////////////////////////////////////////////////////////////////////////////////////
2453
procedure TDiscreteTrans.Normalize;
2459
for N := 1 to _TempN do
2461
P^ := _NormW * P^; Inc( P )
2466
////////////////////////////////////////////////////////////////////////////////////////////////////
2468
procedure TDiscreteTrans.MakeTableW;
2472
if _TempN > _NW shl 2 then
2474
_NW := _TempN shr 2;
2480
procedure TDiscreteTrans.MakeTableC;
2484
if _TempN > _NC shl 2 then
2486
_NC := _TempN shr 2;
2492
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
2494
constructor TDiscreteTrans.Create;
2500
destructor TDiscreteTrans.Destroy;
2507
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
2509
//################################################################################################## □
2511
initialization //############################################################################ 初期化
2513
finalization //############################################################################## 終了化
2515
end. //############################################################################################# ■