Программа 18.1
100 'БЫСТРАЯ СВЁРТКА
105 'Данная программа позволяет выполнить свёртку 10 000 000 отсчётов
входного
110 'сигнала с 400 отсчётами импульсной характеристики. Входной сигнал
115 'разбивается на 16 000 сегментов по 625 отсчётов. Порядок БПФ равен
1024.
120 '
130 ' 'ИНИЦИАЛИЗАЦИЯ МАССИВОВ
140 DIM XX[1023] 'Массив отсчётов сигнала (для БПФ)
150 DIM REX[512] 'Массив действительных частей отсчётов (для БПФ)
160 DIM IMX[512] 'Массив мнимых частей отсчётов (для БПФ)
170 DIM REFR[512] 'Массив действительных компонент частотной
характеристики
180 DIM IMFR[512] 'Массив мнимых компонент частотной характеристики
190 DIM OLAP[398] 'Массив временного хранения перекрывающихся отсчётов
200 '
210 FOR I% = 0 TO 398 'Обнуление массива перекрывающихся отсчётов
220 OLAP[I%] = 0
230 NEXT I%
240 '
250 ' 'ВЫЧИСЛЕНИЕ И СОХРАНЕНИЕ ЧАСТОТНОЙ ХАРАКТЕРИСТИКИ
260 GOSUB XXXX 'Подпрограмма,
сохраняющая импульсную характеристику в XX[]
270 GOSUB XXXX 'Подпрограмма вычисления БПФ: XX[] --> REX[] и IMX[]
280 FOR F% = 0 TO 512 'Сохранение частотной характеристики в REFR[] и IMFR[]
290 REFR[F%] = REX[F%]
300 IMFR[F%] = IMX[F%]
310 NEXT F%
320 '
330 ' 'ПООЧЕРЁДНАЯ ОБРАБОТКА 16 000 СЕГМЕНТОВ
340 FOR SEGMENT% = 0 TO 15999
350 '
360 GOSUB XXXX 'Подпрограмма, загружающая очередной сегмент в XX[]
370 GOSUB XXXX 'Подпрограмма вычисления БПФ: XX[] --> REX[] и IMX[]
380 '
390 FOR F% = 0 TO 512 'Умножение спектра сигнала на частотную характеристику
400 TEMP = REX[F%]*REFR[F%] - IMX[F%]*IMFR[F%]
410 IMX[F%] = REX[F%]*IMFR[F%] + IMX[F%]*REFR[F%]
420 REX[F%] = TEMP
430 NEXT F%
440 '
450 GOSUB XXXX 'Подпрограмма вычисления ОБПФ: REX[] и IMX[] --> XX[]
460 '
470 FOR I% = 0 TO 624 'Сложение с отсчётами предыдущего сегмента
480 XX[I%] = XX[I%] + OLAP[I%]
490 NEXT I%
500 '
510 FOR I% = 625 TO 1023 'Сохранение отсчётов, образующих перекрытие
520 OLAP[I%-625] = XX[I%]
530 NEXT I%
540 '
550 GOSUB XXXX 'Подпрограмма вывода 625 отсчётов выходного сигнала,
560 ' 'хранящихся в ячейках XX[0]…XX[624]
570 '
580 NEXT SEGMENT%
590 '
600 GOSUB XXXX 'Подпрограмма вывода 399 отсчётов массива OLAP[]
610 END