Задание 4: Свёртка двух сигналов — conv() и вручную

Раздел: 1. Временное и частотное представление сигналов
Тема: 1.5 Свёртка (конволюция). Интеграл Дюамеля
Тип: MATLAB Script
Срок выполнения: 2 ч СРС
Максимальный балл: 2.5


Цель работы

Вычислить линейную свёртку двух сигналов двумя способами: с помощью встроенной функции conv() и вручную через цикл. Убедиться в совпадении результатов.


Теоретическая справка

Непрерывная свёртка:

\[y(t) = x_1(t) * x_2(t) = \int_{-\infty}^{\infty} x_1(\tau)\, x_2(t - \tau)\, d\tau\]

Дискретная свёртка (для реализации в MATLAB):

\[y[n] = \sum_{k=0}^{N_1-1} x_1[k] \cdot x_2[n - k]\]

Длина результата: если len(x1) = N1, len(x2) = N2, то len(y) = N1 + N2 - 1.

В MATLAB: y = conv(x1, x2) — встроенная реализация (оптимальная через FFT).

Нормировка к непрерывной: после conv() делить на fs — аппроксимация интеграла методом прямоугольников.


Задание

Параметры

fs = 1000 Гц,  T = 0.1 с,  t = 0:1/fs:T-1/fs

Исходные сигналы

x1 = sin(2*pi*20*t) .* (t < 0.05)    % Синус 20 Гц, обрезан в 0.05 с
x2 = exp(-50*t) .* double(t >= 0)     % Экспоненциальный спад

Что нужно сделать

Часть А — через conv():

y_conv = conv(x1, x2) / fs

Часть Б — вручную через двойной цикл:

for n = 1 : N_out
    for k = 1 : N1
        m = n - k + 1
        if (m >= 1) && (m <= N2)
            y_manual(n) = y_manual(n) + x1(k) * x2(m)
        end
    end
end
y_manual = y_manual / fs

Часть В: Проверить совпадение: max(abs(y_conv - y_manual)) должно быть < 1e-9.

Графики: 3 подграфика — исходные сигналы, оба результата свёртки, разность.


Файлы задания

Файл Назначение
task04_template.m Шаблон — заполнить ???
task04_grader.m Автопроверка

Ожидаемые результаты

Переменная Ожидание
y_conv Вектор длиной 2*N-1 = 199
y_manual Вектор той же длины
max_diff < 1e-9

Контрольные вопросы

  1. Какова физическая интерпретация свёртки входного сигнала с импульсной характеристикой системы?
  2. Чему равна длина результата свёртки двух векторов длиной N₁ и N₂?
  3. Почему при численном вычислении свёртки нужно делить на fs?

Критерии оценки

Балл Критерий
2.0 y_conv и y_manual верны, расхождение < 1e-9, grader ≥ 9/10
1.5 y_conv верна, y_manual с небольшой ошибкой
1.0 Один из способов реализован
+0.5 Комментарии, описывающие каждый шаг цикла

This site uses Just the Docs, a documentation theme for Jekyll.