home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1997 #3 / amigamamagazinepolishissue03-1 / ma_1995 / 08 / ami036b.txt < prev    next >
Text File  |  1997-04-07  |  7KB  |  454 lines

  1. <l>
  2. ; obliczanie widma na liczbach zespolonych dla 1024 pr.
  3.  
  4. ; (c) copyright 1995 by: LECH BALCERZAK vel WILLIAM MOBIUS
  5.  
  6. ; Procedury tu umieszczone mogâ byê stosowane wyîâcznie
  7.  
  8. ; do wîasnych potrzeb. Wykorzystanie ich do dziaîalnoôci
  9.  
  10. ; zarobkowej wymaga zgody autora. 
  11.  
  12. x_adr    dc.l 0
  13.  
  14. jx_adr    dc.l 0
  15.  
  16. start
  17.  
  18.     movem.l    d0-a6,-(sp)
  19.  
  20.     move.l    x_adr(PC),a4
  21.  
  22.     move.l    jx_adr(PC),a5
  23.  
  24.     move.w    #512*4,a2
  25.  
  26.     move.w    #4095,d5
  27.  
  28.     move.w    #-25,d6
  29.  
  30.     bsr.w    fft_computing
  31.  
  32.     move.w    #256*4,a2
  33.  
  34.     move.w    #4095,d5
  35.  
  36.     move.w    #-50,d6
  37.  
  38.     bsr.b    fft_computing
  39.  
  40.     move.w    #128*4,a2
  41.  
  42.     move.w    #4094,d5
  43.  
  44.     move.w    #-100,d6
  45.  
  46.     bsr.b    fft_computing
  47.  
  48.     move.w    #64*4,a2
  49.  
  50.     move.w    #4091,d5
  51.  
  52.     move.w    #-200,d6
  53.  
  54.     bsr.b    fft_computing
  55.  
  56.     move.w    #32*4,a2
  57.  
  58.     move.w    #4076,d5
  59.  
  60.     move.w    #-401,d6
  61.  
  62.     bsr.b    fft_computing
  63.  
  64.     move.w    #16*4,a2
  65.  
  66.     move.w    #4017,d5
  67.  
  68.     move.w    #-799,d6
  69.  
  70.     bsr.b    fft_computing
  71.  
  72.     move.w    #8*4,a2
  73.  
  74.     move.w    #3784,d5
  75.  
  76.     move.w    #-1567,d6
  77.  
  78.     bsr.b    fft_computing
  79.  
  80.     move.w    #4*4,a2
  81.  
  82.     move.w    #2896,d5
  83.  
  84.     move.w    #-2896,d6
  85.  
  86.     bsr.b    fft_computing
  87.  
  88.     move.w    #2*4,a2
  89.  
  90.     move.w    #0,d5
  91.  
  92.     move.w    #-4096,d6
  93.  
  94.     bsr.b    fft_computing
  95.  
  96.     move.w    #1*4,a2
  97.  
  98.     move.w    #-4096,d5
  99.  
  100.     move.w    #0,d6
  101.  
  102.     bsr.b    fft_computing
  103.  
  104.     bsr.w    fft_sort
  105.  
  106.     bsr.w    fft_skal
  107.  
  108.     movem.l    (sp)+,d0-a6
  109.  
  110.     rts
  111.  
  112. fft_computing  
  113.  
  114.     move.w    #4096,d0
  115.  
  116.     move.w    #0,d1
  117.  
  118.     move.w    #1,a3
  119.  
  120. next_j
  121.  
  122.     move.w    a3,d3
  123.  
  124.     subq.w    #1,d3
  125.  
  126. next_i
  127.  
  128.     move.w    d3,d4
  129.  
  130.     add.w    a2,d4
  131.  
  132.     move.w    2(a4,d3.w),d2   
  133.  
  134.     add.w    2(a4,d4.w),d2
  135.  
  136.     move.w    d2,a6
  137.  
  138.     move.w    2(a5,d3.w),d2   
  139.  
  140.     add.w    2(a5,d4.w),d2
  141.  
  142.     move.w    d2,a1
  143.  
  144.     move.w    2(a4,d3.w),d2
  145.  
  146.     sub.w    2(a4,d4.w),d2
  147.  
  148.     move.w    d2,a0
  149.  
  150.     muls    d0,d2
  151.  
  152.     asr.l    #8,d2
  153.  
  154.     asr.l    #4,d2
  155.  
  156.     move.w    2(a5,d3.w),d7
  157.  
  158.     sub.w    2(a5,d4.w),d7
  159.  
  160.     muls    d1,d7
  161.  
  162.     asr.l    #8,d7
  163.  
  164.     asr.l    #4,d7
  165.  
  166.     sub.w    d7,d2
  167.  
  168.     move.w    d2,2(a4,d4.w)
  169.  
  170.     move.w    2(a5,d3.w),d2
  171.  
  172.     sub.w    2(a5,d4.w),d2
  173.  
  174.     muls    d0,d2
  175.  
  176.     asr.l    #8,d2
  177.  
  178.     asr.l    #4,d2
  179.  
  180.     move.w    a0,d7
  181.  
  182.     muls    d1,d7
  183.  
  184.     asr.l    #8,d7
  185.  
  186.     asr.l    #4,d7
  187.  
  188.     add.w    d7,d2
  189.  
  190.     move.w    d2,2(a5,d4.w)
  191.  
  192.     move.w    a6,2(a4,d3.w)
  193.  
  194.     move.w    a1,2(a5,d3.w)
  195.  
  196.     add.w    a2,d3
  197.  
  198.     add.w    a2,d3
  199.  
  200.     cmp.w    #1024*4,d3
  201.  
  202.     bcs.b    next_i
  203.  
  204.     move.w    d0,d2
  205.  
  206.     muls    d5,d2
  207.  
  208.     asr.l    #8,d2
  209.  
  210.     asr.l    #4,d2
  211.  
  212.     move.w    d1,d7
  213.  
  214.     muls    d6,d7
  215.  
  216.     asr.l    #8,d7
  217.  
  218.     asr.l    #4,d7
  219.  
  220.     sub.w    d7,d2
  221.  
  222.     move.w    d2,a0
  223.  
  224.     move.w    d1,d2
  225.  
  226.     muls    d5,d2
  227.  
  228.     asr.l    #8,d2
  229.  
  230.     asr.l    #4,d2
  231.  
  232.     move.w    d0,d7
  233.  
  234.     muls    d6,d7
  235.  
  236.     asr.l    #8,d7
  237.  
  238.     asr.l    #4,d7
  239.  
  240.     add.w    d7,d2
  241.  
  242.     move.w    d2,d1
  243.  
  244.     move.w    a0,d0
  245.  
  246.     addq.w    #4,a3
  247.  
  248.     move.w    a3,d7
  249.  
  250.     cmp.w    a2,d7
  251.  
  252.     bls.w    next_j
  253.  
  254.     rts
  255.  
  256. fft_sort
  257.  
  258.     lea     sort_tab(PC),a3
  259.  
  260. next_double
  261.  
  262.     move.w    (a3)+,d0
  263.  
  264.     bmi.b    end_sort
  265.  
  266.     move.w    (a3)+,d1
  267.  
  268.     move.w    2(a4,d0.w),d2
  269.  
  270.     move.w    2(a4,d1.w),2(a4,d0.w)
  271.  
  272.     move.w    d2,2(a4,d1.w)
  273.  
  274.     move.w    2(a5,d0.w),d2
  275.  
  276.     move.w    2(a5,d1.w),2(a5,d0.w)
  277.  
  278.     move.w    d2,2(a5,d1.w)
  279.  
  280.     bra.b    next_double
  281.  
  282. end_sort
  283.  
  284.     rts
  285.  
  286. fft_skal
  287.  
  288.     moveq.l    #0,d0
  289.  
  290. next_skal
  291.  
  292.     move.w    2(a4,d0.w),d1
  293.  
  294.     asr.w    #5,d1
  295.  
  296.     ext.l    d1
  297.  
  298.     move.l    d1,(a4,d0.w)
  299.  
  300.     move.w    2(a5,d0.w),d1
  301.  
  302.     asr.w    #5,d1
  303.  
  304.     ext.l    d1
  305.  
  306.     move.l    d1,(a5,d0.w)
  307.  
  308.     add.w    #4,d0
  309.  
  310.     cmp.w    #513*4,d0
  311.  
  312.     bcs.b    next_skal
  313.  
  314.     rts
  315.  
  316. sort_tab
  317.  
  318. dc.w 4,2048,8,1024,12,3072,16,512,20,2560,24,1536,28,3584
  319.  
  320. dc.w 32,256,36,2304,40,1280,44,3328,48,768,52,2816,56,1792
  321.  
  322. dc.w 60,3840,64,128,68,2176,72,1152,76,3200,80,640,84,2688
  323.  
  324. dc.w 88,1664,92,3712,96,384,100,2432,104,1408,108,3456,112,896
  325.  
  326. dc.w 116,2944,120,1920,124,3968,132,2112,136,1088,140,3136
  327.  
  328. dc.w 144,576,148,2624,152,1600,156,3648,160,320,164,2368
  329.  
  330. dc.w 168,1344,172,3392,176,832,180,2880,184,1856,188,3904
  331.  
  332. dc.w 196,2240,200,1216,204,3264,208,704,212,2752,216,1728
  333.  
  334. dc.w 220,3776,224,448,228,2496,232,1472,236,3520,240,960
  335.  
  336. dc.w 244,3008,248,1984,252,4032,260,2080,264,1056,268,3104
  337.  
  338. dc.w 272,544,276,2592,280,1568,284,3616,292,2336,296,1312
  339.  
  340. dc.w 300,3360,304,800,308,2848,312,1824,316,3872,324,2208
  341.  
  342. dc.w 328,1184,332,3232,336,672,340,2720,344,1696,348,3744
  343.  
  344. dc.w 352,416,356,2464,360,1440,364,3488,368,928,372,2976
  345.  
  346. dc.w 376,1952,380,4000,388,2144,392,1120,396,3168,400,608
  347.  
  348. dc.w 404,2656,408,1632,412,3680,420,2400,424,1376,428,3424
  349.  
  350. dc.w 432,864,436,2912,440,1888,444,3936,452,2272,456,1248
  351.  
  352. dc.w 460,3296,464,736,468,2784,472,1760,476,3808,484,2528
  353.  
  354. dc.w 488,1504,492,3552,496,992,500,3040,504,2016,508,4064
  355.  
  356. dc.w 516,2064,520,1040,524,3088,532,2576,536,1552,540,3600
  357.  
  358. dc.w 548,2320,552,1296,556,3344,560,784,564,2832,568,1808
  359.  
  360. dc.w 572,3856,580,2192,584,1168,588,3216,592,656,596,2704
  361.  
  362. dc.w 600,1680,604,3728,612,2448,616,1424,620,3472,624,912
  363.  
  364. dc.w 628,2960,632,1936,636,3984,644,2128,648,1104,652,3152
  365.  
  366. dc.w 660,2640,664,1616,668,3664,676,2384,680,1360,684,3408
  367.  
  368. dc.w 688,848,692,2896,696,1872,700,3920,708,2256,712,1232
  369.  
  370. dc.w 716,3280,724,2768,728,1744,732,3792,740,2512,744,1488
  371.  
  372. dc.w 748,3536,752,976,756,3024,760,2000,764,4048,772,2096
  373.  
  374. dc.w 776,1072,780,3120,788,2608,792,1584,796,3632,804,2352
  375.  
  376. dc.w 808,1328,812,3376,820,2864,824,1840,828,3888,836,2224
  377.  
  378. dc.w 840,1200,844,3248,852,2736,856,1712,860,3760,868,2480
  379.  
  380. dc.w 872,1456,876,3504,880,944,884,2992,888,1968,892,4016
  381.  
  382. dc.w 900,2160,904,1136,908,3184,916,2672,920,1648,924,3696
  383.  
  384. dc.w 932,2416,936,1392,940,3440,948,2928,952,1904,956,3952
  385.  
  386. dc.w 964,2288,968,1264,972,3312,980,2800,984,1776,988,3824
  387.  
  388. dc.w 996,2544,1000,1520,1004,3568,1012,3056,1016,2032
  389.  
  390. dc.w 1020,4080,1028,2056,1036,3080,1044,2568,1048,1544
  391.  
  392. dc.w 1052,3592,1060,2312,1064,1288,1068,3336,1076,2824
  393.  
  394. dc.w 1080,1800,1084,3848,1092,2184,1096,1160,1100,3208
  395.  
  396. dc.w 1108,2696,1112,1672,1116,3720,1124,2440,1128,1416
  397.  
  398. dc.w 1132,3464,1140,2952,1144,1928,1148,3976,1156,2120
  399.  
  400. dc.w 1164,3144,1172,2632,1176,1608,1180,3656,1188,2376
  401.  
  402. dc.w 1192,1352,1196,3400,1204,2888,1208,1864,1212,3912
  403.  
  404. dc.w 1220,2248,1228,3272,1236,2760,1240,1736,1244,3784
  405.  
  406. dc.w 1252,2504,1256,1480,1260,3528,1268,3016,1272,1992
  407.  
  408. dc.w 1276,4040,1284,2088,1292,3112,1300,2600,1304,1576
  409.  
  410. dc.w 1308,3624,1316,2344,1324,3368,1332,2856,1336,1832
  411.  
  412. dc.w 1340,3880,1348,2216,1356,3240,1364,2728,1368,1704
  413.  
  414. dc.w 1372,3752,1380,2472,1384,1448,1388,3496,1396,2984
  415.  
  416. dc.w 1400,1960,1404,4008,1412,2152,1420,3176,1428,2664
  417.  
  418. dc.w 1432,1640,1436,3688,1444,2408,1452,3432,1460,2920
  419.  
  420. dc.w 1464,1896,1468,3944,1476,2280,1484,3304,1492,2792
  421.  
  422. dc.w 1496,1768,1500,3816,1508,2536,1516,3560,1524,3048
  423.  
  424. dc.w 1528,2024,1532,4072,1540,2072,1548,3096,1556,2584
  425.  
  426. dc.w 1564,3608,1572,2328,1580,3352,1588,2840,1592,1816
  427.  
  428. dc.w 1596,3864,1604,2200,1612,3224,1620,2712,1624,1688
  429.  
  430. dc.w 1628,3736,1636,2456,1644,3480,1652,2968,1656,1944
  431.  
  432. dc.w 1660,3992,1668,2136,1676,3160,1684,2648,1692,3672
  433.  
  434. dc.w 1700,2392,1708,3416,1716,2904,1720,1880,1724,3928
  435.  
  436. dc.w 1732,2264,1740,3288,1748,2776,1756,3800,1764,2520
  437.  
  438. dc.w 1772,3544,1780,3032,1784,2008,1788,4056,1796,2104
  439.  
  440. dc.w 1804,3128,1812,2616,1820,3640,1828,2360,1836,3384
  441.  
  442. dc.w 1844,2872,1852,3896,1860,2232,1868,3256,1876,2744
  443.  
  444. dc.w 1884,3768,1892,2488,1900,3512,1908,3000,1912,1976
  445.  
  446. dc.w 1916,4024,1924,2168,1932,3192,1940,2680,1948,3704
  447.  
  448. dc.w 1956,2424,1964,3448,1972,2936,1980,3960,1988,2296
  449.  
  450. dc.w 1996,3320,2004,2808,2012,3832,2020,2552,2028,3576
  451.  
  452. dc.w 2036,3064,2044,4088,-1
  453.  
  454.