Написать программу линейной свертки двух сигналов - 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.