Лабораторная работа 1.8

Спектральное представление сигналов. Разложение по гармоническим функциям. Дискретные преобразования.

Дисциплина: Основы теории сигналов и систем
Раздел: 1 — Временное и частотное представление сигналов
Компетенция: ПК-2.5-В1
Время: 8 часов
Ресурс: Э3 (электронный ресурс 3 из РПД)


Цели лабораторной работы

  1. Освоить спектральный анализ сигналов методами ДПФ/БПФ в MATLAB
  2. Наблюдать разложение сигнала по гармоническим функциям (ряд Фурье)
  3. Понять влияние оконных функций на качество спектрального анализа
  4. Сравнить ДПФ, непрерывное ПФ и ряд Фурье на практических примерах

Необходимое программное обеспечение

  • MATLAB R2020b или новее
  • Toolbox: Signal Processing Toolbox (для spectrogram, pwelch)

Теоретические основы

1.1 Ряд Фурье для периодического сигнала

Любой периодический сигнал x(t) с периодом T раскладывается в ряд Фурье:

x(t) = a₀/2 + ∑ [aₙ·cos(n·ω₀·t) + bₙ·sin(n·ω₀·t)] (сумма от n=1 до ∞)

где ω₀ = 2π/T — основная частота, коэффициенты:

aₙ = (2/T) · ∫ x(t)·cos(n·ω₀·t) dt (от 0 до T) bₙ = (2/T) · ∫ x(t)·sin(n·ω₀·t) dt (от 0 до T)

1.2 Дискретное преобразование Фурье (ДПФ)

X[k] = ∑ x[n] · e^(-j·2π·k·n / N) (для n от 0 до N-1)

Обратное ДПФ:

x[n] = (1/N) · ∑ X[k] · e^(j·2π·k·n / N) (для k от 0 до N-1)

1.3 Оконные функции

Для уменьшения утечки спектра применяются оконные функции:

  • Прямоугольное окно (без обработки) — максимальное разрешение, сильная утечка
  • Окно Ханна: w(n) = 0.5(1 - cos(2πn/(N-1)))
  • Окно Хэмминга: w(n) = 0.54 - 0.46cos(2πn/(N-1))
  • Окно Блэкмана: наилучшее подавление утечки, худшее разрешение

Задание

Раздел 1: Разложение в ряд Фурье (2 ч)

Задание 1.1: Синтез прямоугольного сигнала

  1. Задать прямоугольный сигнал через ряд Фурье с N = 1, 3, 7, 15, 31 гармониками
  2. Построить приближение на одном графике — наблюдать явление Гиббса
  3. Вычислить среднеквадратичную погрешность для каждого N

Формула: для прямоугольного сигнала амплитудой A и периодом T: x_N(t) = (4A / π) · ∑ (1/k) · sin(2π·k·t / T) (для k=1, 3, 5… N)

Выходные переменные: x_fourier_N (матрица 5×length(t)), rmse_fourier (вектор 5×1)

Задание 1.2: Спектр прямоугольного и треугольного сигналов

  1. Сгенерировать прямоугольный (square()) и треугольный (sawtooth(., 0.5)) сигналы
  2. Вычислить ДПФ обоих через fft()
  3. Построить двусторонние амплитудные спектры (ось: Гц)
  4. Сравнить скорость убывания гармоник (1/n vs 1/n²)

Раздел 2: Оконный анализ и утечка спектра (2 ч)

Задание 2.1: Демонстрация утечки

  1. Сгенерировать синус с частотой, не кратной частоте дискретизации/N
  2. Применить 4 оконные функции через rectwin, hann, hamming, blackman
  3. Для каждого окна построить АЧХ в логарифмическом масштабе
  4. Таблица сравнения: максимальная утечка (дБ), ширина главного лепестка

Выходные переменные: spectra_windows (матрица 4×N/2)

Задание 2.2: Оценка мощностного спектра (Welch)

  1. Сгенерировать зашумлённый сигнал с двумя компонентами
  2. Оценить спектр через pwelch() с перекрытием 50%
  3. Сравнить с обычным FFT — показать сглаживание

Раздел 3: ДПФ и ОДПФ (2 ч)

Задание 3.1: Восстановление сигнала через ОДПФ

  1. Взять произвольный сигнал x[n], вычислить X = fft(x)
  2. Зануление части спектра (полосовая фильтрация в частотной области)
  3. Восстановить через ifft(), сравнить с оригиналом

Выходные переменные: x_restored (вектор), snr_db (число)

Задание 3.2: Спектрограмма

  1. Сгенерировать частотно-модулированный чирп сигнал (chirp())
  2. Построить спектрограмму через spectrogram()
  3. Объяснить в отчёте: что показывает спектрограмма и как выбрать параметры окна

Раздел 4: Итоговое задание — Анализ реального сигнала АСУТП (2 ч)

Сценарий: датчик температуры регистрирует сигнал с помехами. Необходимо:

  1. Загрузить данные из файла sensor_data.mat (генерируется функцией lab1_8_generate_data.m)
  2. Построить временной сигнал и оценить визуально частотный состав
  3. Применить Welch PSD для нахождения доминирующих частот помех
  4. Спроектировать и применить цифровой полосовой режекторный фильтр (butter)
  5. Сравнить сигнал до и после фильтрации
  6. Написать вывод (3-5 предложений): какие частоты были помехой, как фильтр улучшил сигнал

Выходные переменные для проверки: freq_noise (вектор найденных частот помех), snr_before, snr_after


Требования к отчёту

Отчёт сдаётся в виде .m скрипта (или .mlx Live Script) содержащего:

  • Код всех заданий
  • Графики (вставленные в mlx или сохранённые как .png)
  • Развёрнутые комментарии к каждому шагу
  • Выводы по каждому разделу

Система оценивания

Раздел Максимум
1: Ряд Фурье (1.1 + 1.2) 25
2: Оконный анализ (2.1 + 2.2) 25
3: ДПФ/ОДПФ и спектрограмма 25
4: Итоговое задание АСУТП 25
ИТОГО 100

Перевод: 86–100 → отлично, 71–85 → хорошо, 55–70 → удовл.


Вспомогательные файлы

  • lab1_8_template.m — шаблон для заполнения
  • lab1_8_generate_data.m — генерация тестового сигнала датчика
  • lab1_8_validator.m — автоматическая проверка ключевых переменных

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