; obliczanie widma na liczbach zespolonych dla 1024 pr. ; (c) copyright 1995 by: LECH BALCERZAK vel WILLIAM MOBIUS ; Procedury tu umieszczone mogâ byê stosowane wyîâcznie ; do wîasnych potrzeb. Wykorzystanie ich do dziaîalnoôci ; zarobkowej wymaga zgody autora. x_adr dc.l 0 jx_adr dc.l 0 start movem.l d0-a6,-(sp) move.l x_adr(PC),a4 move.l jx_adr(PC),a5 move.w #512*4,a2 move.w #4095,d5 move.w #-25,d6 bsr.w fft_computing move.w #256*4,a2 move.w #4095,d5 move.w #-50,d6 bsr.b fft_computing move.w #128*4,a2 move.w #4094,d5 move.w #-100,d6 bsr.b fft_computing move.w #64*4,a2 move.w #4091,d5 move.w #-200,d6 bsr.b fft_computing move.w #32*4,a2 move.w #4076,d5 move.w #-401,d6 bsr.b fft_computing move.w #16*4,a2 move.w #4017,d5 move.w #-799,d6 bsr.b fft_computing move.w #8*4,a2 move.w #3784,d5 move.w #-1567,d6 bsr.b fft_computing move.w #4*4,a2 move.w #2896,d5 move.w #-2896,d6 bsr.b fft_computing move.w #2*4,a2 move.w #0,d5 move.w #-4096,d6 bsr.b fft_computing move.w #1*4,a2 move.w #-4096,d5 move.w #0,d6 bsr.b fft_computing bsr.w fft_sort bsr.w fft_skal movem.l (sp)+,d0-a6 rts fft_computing move.w #4096,d0 move.w #0,d1 move.w #1,a3 next_j move.w a3,d3 subq.w #1,d3 next_i move.w d3,d4 add.w a2,d4 move.w 2(a4,d3.w),d2 add.w 2(a4,d4.w),d2 move.w d2,a6 move.w 2(a5,d3.w),d2 add.w 2(a5,d4.w),d2 move.w d2,a1 move.w 2(a4,d3.w),d2 sub.w 2(a4,d4.w),d2 move.w d2,a0 muls d0,d2 asr.l #8,d2 asr.l #4,d2 move.w 2(a5,d3.w),d7 sub.w 2(a5,d4.w),d7 muls d1,d7 asr.l #8,d7 asr.l #4,d7 sub.w d7,d2 move.w d2,2(a4,d4.w) move.w 2(a5,d3.w),d2 sub.w 2(a5,d4.w),d2 muls d0,d2 asr.l #8,d2 asr.l #4,d2 move.w a0,d7 muls d1,d7 asr.l #8,d7 asr.l #4,d7 add.w d7,d2 move.w d2,2(a5,d4.w) move.w a6,2(a4,d3.w) move.w a1,2(a5,d3.w) add.w a2,d3 add.w a2,d3 cmp.w #1024*4,d3 bcs.b next_i move.w d0,d2 muls d5,d2 asr.l #8,d2 asr.l #4,d2 move.w d1,d7 muls d6,d7 asr.l #8,d7 asr.l #4,d7 sub.w d7,d2 move.w d2,a0 move.w d1,d2 muls d5,d2 asr.l #8,d2 asr.l #4,d2 move.w d0,d7 muls d6,d7 asr.l #8,d7 asr.l #4,d7 add.w d7,d2 move.w d2,d1 move.w a0,d0 addq.w #4,a3 move.w a3,d7 cmp.w a2,d7 bls.w next_j rts fft_sort lea sort_tab(PC),a3 next_double move.w (a3)+,d0 bmi.b end_sort move.w (a3)+,d1 move.w 2(a4,d0.w),d2 move.w 2(a4,d1.w),2(a4,d0.w) move.w d2,2(a4,d1.w) move.w 2(a5,d0.w),d2 move.w 2(a5,d1.w),2(a5,d0.w) move.w d2,2(a5,d1.w) bra.b next_double end_sort rts fft_skal moveq.l #0,d0 next_skal move.w 2(a4,d0.w),d1 asr.w #5,d1 ext.l d1 move.l d1,(a4,d0.w) move.w 2(a5,d0.w),d1 asr.w #5,d1 ext.l d1 move.l d1,(a5,d0.w) add.w #4,d0 cmp.w #513*4,d0 bcs.b next_skal rts sort_tab dc.w 4,2048,8,1024,12,3072,16,512,20,2560,24,1536,28,3584 dc.w 32,256,36,2304,40,1280,44,3328,48,768,52,2816,56,1792 dc.w 60,3840,64,128,68,2176,72,1152,76,3200,80,640,84,2688 dc.w 88,1664,92,3712,96,384,100,2432,104,1408,108,3456,112,896 dc.w 116,2944,120,1920,124,3968,132,2112,136,1088,140,3136 dc.w 144,576,148,2624,152,1600,156,3648,160,320,164,2368 dc.w 168,1344,172,3392,176,832,180,2880,184,1856,188,3904 dc.w 196,2240,200,1216,204,3264,208,704,212,2752,216,1728 dc.w 220,3776,224,448,228,2496,232,1472,236,3520,240,960 dc.w 244,3008,248,1984,252,4032,260,2080,264,1056,268,3104 dc.w 272,544,276,2592,280,1568,284,3616,292,2336,296,1312 dc.w 300,3360,304,800,308,2848,312,1824,316,3872,324,2208 dc.w 328,1184,332,3232,336,672,340,2720,344,1696,348,3744 dc.w 352,416,356,2464,360,1440,364,3488,368,928,372,2976 dc.w 376,1952,380,4000,388,2144,392,1120,396,3168,400,608 dc.w 404,2656,408,1632,412,3680,420,2400,424,1376,428,3424 dc.w 432,864,436,2912,440,1888,444,3936,452,2272,456,1248 dc.w 460,3296,464,736,468,2784,472,1760,476,3808,484,2528 dc.w 488,1504,492,3552,496,992,500,3040,504,2016,508,4064 dc.w 516,2064,520,1040,524,3088,532,2576,536,1552,540,3600 dc.w 548,2320,552,1296,556,3344,560,784,564,2832,568,1808 dc.w 572,3856,580,2192,584,1168,588,3216,592,656,596,2704 dc.w 600,1680,604,3728,612,2448,616,1424,620,3472,624,912 dc.w 628,2960,632,1936,636,3984,644,2128,648,1104,652,3152 dc.w 660,2640,664,1616,668,3664,676,2384,680,1360,684,3408 dc.w 688,848,692,2896,696,1872,700,3920,708,2256,712,1232 dc.w 716,3280,724,2768,728,1744,732,3792,740,2512,744,1488 dc.w 748,3536,752,976,756,3024,760,2000,764,4048,772,2096 dc.w 776,1072,780,3120,788,2608,792,1584,796,3632,804,2352 dc.w 808,1328,812,3376,820,2864,824,1840,828,3888,836,2224 dc.w 840,1200,844,3248,852,2736,856,1712,860,3760,868,2480 dc.w 872,1456,876,3504,880,944,884,2992,888,1968,892,4016 dc.w 900,2160,904,1136,908,3184,916,2672,920,1648,924,3696 dc.w 932,2416,936,1392,940,3440,948,2928,952,1904,956,3952 dc.w 964,2288,968,1264,972,3312,980,2800,984,1776,988,3824 dc.w 996,2544,1000,1520,1004,3568,1012,3056,1016,2032 dc.w 1020,4080,1028,2056,1036,3080,1044,2568,1048,1544 dc.w 1052,3592,1060,2312,1064,1288,1068,3336,1076,2824 dc.w 1080,1800,1084,3848,1092,2184,1096,1160,1100,3208 dc.w 1108,2696,1112,1672,1116,3720,1124,2440,1128,1416 dc.w 1132,3464,1140,2952,1144,1928,1148,3976,1156,2120 dc.w 1164,3144,1172,2632,1176,1608,1180,3656,1188,2376 dc.w 1192,1352,1196,3400,1204,2888,1208,1864,1212,3912 dc.w 1220,2248,1228,3272,1236,2760,1240,1736,1244,3784 dc.w 1252,2504,1256,1480,1260,3528,1268,3016,1272,1992 dc.w 1276,4040,1284,2088,1292,3112,1300,2600,1304,1576 dc.w 1308,3624,1316,2344,1324,3368,1332,2856,1336,1832 dc.w 1340,3880,1348,2216,1356,3240,1364,2728,1368,1704 dc.w 1372,3752,1380,2472,1384,1448,1388,3496,1396,2984 dc.w 1400,1960,1404,4008,1412,2152,1420,3176,1428,2664 dc.w 1432,1640,1436,3688,1444,2408,1452,3432,1460,2920 dc.w 1464,1896,1468,3944,1476,2280,1484,3304,1492,2792 dc.w 1496,1768,1500,3816,1508,2536,1516,3560,1524,3048 dc.w 1528,2024,1532,4072,1540,2072,1548,3096,1556,2584 dc.w 1564,3608,1572,2328,1580,3352,1588,2840,1592,1816 dc.w 1596,3864,1604,2200,1612,3224,1620,2712,1624,1688 dc.w 1628,3736,1636,2456,1644,3480,1652,2968,1656,1944 dc.w 1660,3992,1668,2136,1676,3160,1684,2648,1692,3672 dc.w 1700,2392,1708,3416,1716,2904,1720,1880,1724,3928 dc.w 1732,2264,1740,3288,1748,2776,1756,3800,1764,2520 dc.w 1772,3544,1780,3032,1784,2008,1788,4056,1796,2104 dc.w 1804,3128,1812,2616,1820,3640,1828,2360,1836,3384 dc.w 1844,2872,1852,3896,1860,2232,1868,3256,1876,2744 dc.w 1884,3768,1892,2488,1900,3512,1908,3000,1912,1976 dc.w 1916,4024,1924,2168,1932,3192,1940,2680,1948,3704 dc.w 1956,2424,1964,3448,1972,2936,1980,3960,1988,2296 dc.w 1996,3320,2004,2808,2012,3832,2020,2552,2028,3576 dc.w 2036,3064,2044,4088,-1