Написать программу линейной свертки двух сигналов - Pascal ABC
Формулировка задачи:
Доброго времени суток я новичок в деле программирования и нужна помощь в написании программы для свертки двух сигналов. Помогите пожалуйста люди добрые. Нужен код в паскале а я пока не могу понять как его написать
Решение задачи: «Написать программу линейной свертки двух сигналов»
textual
Листинг программы
const n = 99; type arr = array [0..2*n] of double; procedure rd(s: string; var z: integer; var a: arr); var i: integer; begin repeat write('Количество отсчётов сигнала ', s, ' в диапазоне [1..', n + 1, ']: '); readln(z) until z in [1..n+1]; dec(z); writeln('Введите отсчёты сигнала:'); for i := 0 to z do begin write(s, '[', i:2, '] = '); readln(a[i]) end; for i := z + 1 to 2 * n do a[i] := 0 end; var n1, n2, m, k: integer; x, h, y: arr; begin rd('x', n1, x); rd('h', n2, h); writeln('Линейная дискретная свёртка:'); for k := 0 to n1 + n2 do begin y[k] := 0; for m := 0 to k do y[k] := y[k] + x[m] * h[k - m]; writeln('y[', k:3, '] = ', y[k]) end end.
Объяснение кода листинга программы
- Переменная
n
инициализируется значением 99. - Создается тип
arr
, который представляет собой массив из 2*n элементов типаdouble
. - Создается процедура
rd
, которая считывает от пользователя количество отсчетов сигнала и их значения. Затем она запрашивает ввод отсчетов сигнала для каждого из диапазонов [1..n+1]. После этого она уменьшает значение переменнойz
на единицу и выводит запрос на ввод отсчетов сигнала. - В основной части программы вызывается процедура
rd
для ввода значений сигналовx
иh
. - Выводится сообщение о линейной дискретной свертке и затем происходит цикл по всем элементам массива
y
. На каждом шаге цикла значениеy[k]
инициализируется нулем, а затем суммируется с произведением значенийx[m]
иh[k-m]
. - Выводится значение
y[k]
для каждой парыk
иm
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д