Программа 12.6

3000 'БПФ ДЛЯ ДЕЙСТВИТЕЛЬНЫХ СИГНАЛОВ

3010 'Порядок ДПФ – N% и массив действительных компонент REX[ ] заполняются до

3020 'входа в подпрограмму. Содержимое массива и IMX[ ]игнорируется. Выходные

3030 'данные размещаются в REX[ ] и IMX[ ]. Индексация в массивах: 0…(N%-1).

3040 '

3050 NH% = N%/2-1         'Разделение чётных и нечётных отсчётов

3060 FOR I% = 0 TO NH%

3070 REX(I%) = REX(2*I%)

3080 IMX(I%) = REX(2*I%+1)

3090 NEXT I%

3100 '

3110 N% = N%/2            'Вычисление БПФ порядка N%/2

3120 GOSUB 1000           '(GOSUB 1000 – переход к Программе 12.3)

3130 N% = N%*2

3140 '

3150 NM1% = N%-1          'Разложение на чётные и нечётные элементы

3160 ND2% = N%/2          'в частотной области

3170 N4% = N%/4-1

3180 FOR I% = 1 TO N4%

3190 IM% = ND2%-I%

3200 IP2% = I%+ND2%

3210 IPM% = IM%+ND2%

3220 REX(IP2%) = (IMX(I%) + IMX(IM%))/2

3230 REX(IPM%) = REX(IP2%)

3240 IMX(IP2%) = -(REX(I%) - REX(IM%))/2

3250 IMX(IPM%) = -IMX(IP2%)

3260 REX(I%) = (REX(I%) + REX(IM%))/2

3270 REX(IM%) = REX(I%)

3280 IMX(I%) = (IMX(I%) - IMX(IM%))/2

3290 IMX(IM%) = -IMX(I%)

3300 NEXT I%

3310 REX(N%*3/4) = IMX(N%/4)

3320 REX(ND2%) = IMX(0)

3330 IMX(N%*3/4) = 0

3340 IMX(ND2%) = 0

3350 IMX(N%/4) = 0

3360 IMX(0) = 0

3370 '

3380 PI = 3.14159265                 'Завершение последнего этапа БПФ

3390 L% = CINT(LOG(N%)/LOG(2))

3400 LE% = CINT(2^L%)

3410 LE2% = LE%/2

3420 UR = 1

3430 UI = 0

3440 SR = COS(PI/LE2%)

3450 SI = -SIN(PI/LE2%)

3460 FOR J% = 1 TO LE2%

3470 JM1% = J%-1

3480 FOR I% = JM1% TO NM1% STEP LE%

3490 IP% = I%+LE2%

3500 TR = REX[IP%]*UR - IMX[IP%]*UI

3510 TI = REX[IP%]*UI + IMX[IP%]*UR

3520 REX[IP%] = REX[I%]-TR

3530 IMX[IP%] = IMX[I%]-TI

3540 REX[I%] = REX[I%]+TR

3550 IMX[I%] = IMX[I%]+TI

3560 NEXT I%

3570 TR = UR

3580 UR = TR*SR - UI*SI

3590 UI = TR*SI + UI*SR

3600 NEXT J%

3610 RETURN