Программа 8

Программа 8.1.

100 'ОБРАТНОЕ ДИСКРЕТНОЕ ПРЕОБРАЗОВАНИЕ ФУРЬЕ

110 'Сигнал во временной области, записываемый в массив XX[ ], рассчитывается на

120 'основе частотного представления, размещённого в массивах REX[ ] и IMX[ ].

130 '

140 DIM XX[511] 'XX[ ] - Сигнал, представленный во временной области

150 DIM REX[256] 'REX[ ] - Действительная часть частотного представления сигнала

160 DIM IMX[256] 'IMX[ ] - Мнимая часть частотного представления сигнала

170 '

180 PI = 3.14159265 'Число пи

190 N% = 512 'N% - количество элементов в массиве XX[ ]

200 '

210 GOSUB XXXX 'Подпрограмма загрузки данных в массивы REX[ ] и IMX[ ]

220 '

230

240 'Вычисление амплитуд синусных и косинусных сигналов по формуле 8-3

250 FOR K% = 0 TO 256

260 REX[K%] = REX[K%] / (N%/2)

270 IMX[K%] = -IMX[K%] / (N%/2)

280 NEXT K%

290 '

300 REX[0] = REX[0] / 2

310 REX[256] = REX[256] / 2

320 '

330 '

340 FOR I% = 0 TO 511 'Обнуление массива XX[ ], используемого для накопления

350 XX[I%] = 0

360 NEXT I%

370 '

380 ' Формула 8-2. СИНТЕЗ. СПОСОБ 1. Цикл по номеру частоты в каждой своей итерации

390 ' рассчитывает пару синусного и косинусного сигналов на всей их длине, которые

400 ' затем накапливаются в аккумуляторе ХХ [ ]

410 '

420 FOR K% = 0 TO 256 'K% - индекс, пробегающий по всем элементам REX[ ] и IMX[ ]

430 FOR I% = 0 TO 511 'I% - индекс, пробегающий по всем элементам XX[ ]

440 '

450 XX[I%] = XX[I%] + REX[K%] * COS(2*PI*K%*I%/N%)

460 XX[I%] = XX[I%] + IMX[K%] * SIN(2*PI*K%*I%/N%)

470 '

480 NEXT I%

490 NEXT K%

500 '

510 END

Другая версия кода в строках 380…510

380 ' Формула 8-2. СИНТЕЗ. СПОСОБ 2. В каждой итерации цикла рассчитывается

390 ' один отсчёт сигнала во временной области путём суммирования соответствующих

400 ' отсчётов синусных и косинусных сигналов

410 '

420 FOR I% = 0 TO 511 'I% - индекс, пробегающий по всем элементам массива XX[ ]

430 FOR K% = 0 TO 256 'K% - индекс, пробегающий по всем элементам REX[] и IMX[]

440 '

450 XX[I%] = XX[I%] + REX[K%] * COS(2*PI*K%*I%/N%)

460 XX[I%] = XX[I%] + IMX[K%] * SIN(2*PI*K%*I%/N%)

470 '

480 NEXT K%

490 NEXT I%

500 '

510 END