User Tools

Site Tools


sp:lec4

This is an old revision of the document!


Лекция 4. БПФ и практический спектральный анализ

Короткое объяснение «на пальцах»: зачем нужна лекция, что она решает и что означают картинки. Без вывода формул — только смысл.


Цели лекции (что должен уметь студент)

  1. Объяснить, что такое БПФ: это не новое преобразование, а быстрый алгоритм

для ДПФ.

  1. Показать идею «разделяй и властвуй»: одно большое ДПФ → два маленьких.
  2. Понять «бабочку» и бит-реверс.
  3. Объяснить, откуда берётся утечка (конечная запись сигнала).
  4. Выбирать окно под задачу.
  5. Понимать Δf = 1/T и почему zero-padding не улучшает разрешение.
  6. Пользоваться методом Уэлча и читать PSD.
  7. Строить спектрограмму.
  8. Сделать всё это в Python.

Одной фразой: лекция 3 — «как посчитать спектр?», лекция 4 — «как посчитать быстро и не обмануть себя?».


1. Напоминание: что такое спектр

  • Спектр — это «радуга» сигнала: из чего он состоит.
  • Аналогия: белый свет → призма → цвета. Только «призма» здесь из арифметики.
  • ДПФ: из N отсчётов делает N значений спектра.
  • f_k = k · fд / N — частоты, на которых ДПФ «смотрит».
  • |X[k]| — амплитуда (громкость), arg X[k] — фаза (сдвиг).

2. Проблема №1: дорого

  • Прямое ДПФ требует N² операций.
  • Для N = 1 000 000 это 10¹² — триллион.
  • Долго; в реальном времени невозможно.

3. БПФ: что это и как устроено

3.1 Главная мысль

  • БПФ даёт тот же ответ, что ДПФ.
  • Это просто более умный способ считать.
  • Сложность: N log₂N вместо N².
  • Для миллиона точек — быстрее в десятки тысяч раз.

3.2 Три идеи

  1. Разделяй и властвуй.
    • Делим отсчёты на чётные и нечётные.
    • Одно ДПФ длины N → два ДПФ длины N/2.
    • Повторяем рекурсивно → log₂N уровней.
  2. Бабочка.
    • Способ снова соединить две половины.
    • X[k] = E[k] + W·O[k].
    • X[k + N/2] = E[k] − W·O[k].
    • Одно умножение и два сложения дают сразу две точки спектра.
  3. Бит-реверс.
    • Плата за деление: на входе отсчёты стоят не по порядку.
    • Порядок для N = 8: 0, 4, 2, 6, 1, 5, 3, 7.
    • Правило: номер в двоичном виде читается справа налево.

3.3 Что запомнить

  • Схема БПФ — регулярные «стадии» из бабочек.
  • Поэтому N удобно брать степенью двойки.
  • На практике БПФ не пишут сами: берут np.fft.fft (NumPy/SciPy), FFTW, MKL, cuFFT.

4. Проблема №2: конечная запись → утечка

4.1 Почему появляется утечка

  • Мы всегда берём кусок сигнала длиной T, а не весь сигнал.
  • Формально это умножение на прямоугольное окно.
  • Правило: умножение во времени = свёртка в спектре.
  • Спектр прямоугольного окна — «холмик с хвостами» (sinc).
  • Поэтому чистый тон превращается в холмик, а не в одну палочку.
  • Это не ошибка — следствие конечности записи.

4.2 Окна: лекарство от утечки

  • Идея: обрезать сигнал мягко, а не резко.
  • Умножаем сигнал на плавную функцию (в центре 1, к краям → 0).
  • Лечит боковые лепестки, но расширяет главный — это неустранимый компромисс.

4.3 Популярные окна

Окно Главный лепесток Боковые лепестки Когда брать
Прямоугольное (boxcar) 2 бина −13 дБ максимальная резкость
Hann 4 бина −31 дБ «рабочая лошадка»
Hamming 4 бина −43 дБ чуть больше динамики
Blackman–Harris 8 бинов −92 дБ слабая линия рядом с сильной
flat-top 10 бинов −93 дБ точная амплитуда

4.4 «Паспорт» окна — два числа

  • coherent gain — поправка на амплитуду.
    • Hann ≈ 0.5, Hamming ≈ 0.54, flat-top ≈ 0.22.
  • ENBW — поправка на шум (эквивалентная шумовая полоса).
    • Прямоугольное 1.0, Hann 1.5, flat-top 3.77.
  • scipy.signal.welch учитывает это сам, но знать нужно — иначе спектры нельзя

сравнивать.


5. Разрешение по частоте

  • Формула: Δf = fд / N = 1 / T.
  • Разрешение задаёт длительность записи T, а не частота дискретизации.
  • Чтобы различить два близких тона — надо дольше смотреть.
  • Критерий Рэлея: различимы, если расстояние > Δf.
  • Для Hann практически нужно ≈ 2Δf.
  • Пример: тона 1000 и 1040 Гц.
    • N = 128 → сливаются.
    • N = 1024 → видны два пика.

6. Миф: zero-padding

  • Что делают: дополняют сигнал нулями до большой длины.
  • Что получают: гладкий спектр с плотной сеткой.
  • В чём ошибка: думают, что улучшили разрешение.
  • На самом деле: это интерполяция той же кривой.
  • Вывод: разрешение улучшает только удлинение реальной записи.

7. Усреднение: метод Уэлча

7.1 Почему один спектр «мохнатый»

  • Одна периодограмма |X|² статистически неустойчива.
  • Её разброс не уменьшается с ростом N.
  • Аналогия: одно измерение шума случайно, сто усреднённых — устойчивы.

7.2 Идея по шагам

  1. Режем запись на сегменты (можно с перекрытием).
  2. К каждому сегменту применяем окно.
  3. Считаем БПФ и квадрат модуля.
  4. Усредняем по сегментам.

7.3 Что получаем и чем платим

  • Получаем: несмещённую оценку с меньшим разбросом (падение в √K раз).
  • Платим: разрешение определяется длиной сегмента, а не всей записи.
  • Настройки: nperseg (длина сегмента), noverlap (перекрытие).

8. PSD: плотность мощности

  • Когда сигнал шумовой, «амплитуда на частоте» бессмысленна.
  • Правильная мера — мощность на герц (PSD).
  • Площадь под кривой PSD = полная мощность сигнала.
  • Две нормировки в scipy.signal:
    • scaling='density' → «мощность/Гц» — для шумов;
    • scaling='spectrum' → «мощность в бине» — для линий.
  • Практика: для диагностики бери density и доверь welch.

9. Точная частота (сверх сетки)

  • Сетка даёт частоту с шагом Δf.
  • Хотим точнее — используем параболическую интерполяцию по трём точкам вокруг

пика.

  • Пример из лекции: истина 100.4 Гц, оценка 100.34 Гц при сетке 3.9 Гц.

10. Спектрограмма: сигнал меняется во времени

  • Обычный спектр предполагает, что сигнал всё время одинаков.
  • STFT: считаем спектр в скользящем окне.
  • Результат — спектрограмма: время по горизонтали, частота по вертикали,

яркость = мощность.

  • Видно чирп (наклонная линия) и короткие всплески (пятна).

Компромисс «время — частота»

  • Короткое окно: хорошо «когда», плохо «какая частота».
  • Длинное окно: хорошо «какая частота», плохо «когда».
  • Это принцип неопределённости, а не недоработка метода.

11. Реальный пример: вибрация

  • В сигнале: база 50 Гц, дефект 120 Гц, слабая гармоника 240 Гц, шум.
  • Одна периодограмма: слабая линия тонет в шуме.
  • Welch + окно Hann: шум сглаживается, линия 240 Гц видна.
  • Итог: спектр — это основа для решения, а не картинка.

12. Шпаргалка (словарь)

Термин Что означает
ДПФ N чисел → N чисел спектра
БПФ быстрый алгоритм того же ДПФ, O(N log N)
Бабочка операция соединения двух половин спектра
Бит-реверс перестановка входа БПФ
Окно плавное обрезание записи
Утечка размазывание линии из-за конечности записи
Главный лепесток ширина пика → разрешение
Боковые лепестки «хвосты», мешают видеть слабые линии
Coherent gain поправка на амплитуду
ENBW поправка на шум
Разрешение Δf = 1/T
Zero-padding интерполяция, а не разрешение
Периодограмма ` БПФ ²` одной записи
Метод Уэлча усреднение периодограмм
PSD мощность на герц
Спектрограмма спектр во времени (STFT)

13. Частые ошибки

  • «Подниму частоту дискретизации — улучшу разрешение».
    • Нет: разрешение задаёт время записи T.
  • «Дополню нулями — увижу больше деталей».
    • Нет: это интерполяция той же кривой.
  • «Окно Hann убирает шум».
    • Нет: окно борется с утечкой, шум убирает усреднение.
  • «БПФ — приближённый метод».
    • Нет: результат точно совпадает с ДПФ.
  • «Спектры с разными окнами можно сравнивать по высоте пиков».
    • Только с учётом coherent gain.

14. План рассказа на 2 академических часа

  1. 5 мин. Напомнить ДПФ и его цену O(N²).
  2. 15 мин. Идея БПФ, бабочка, бит-реверс, граф, сложность.
  3. 15 мин. Конечная запись → утечка; окна; компромисс лепестков.
  4. 15 мин. Разрешение Δf = 1/T; два тона; миф про zero-padding.
  5. 15 мин. Уэлч и PSD: зачем усреднять.
  6. 15 мин. Спектрограмма, компромисс время–частота, точная частота.
  7. 10 мин. Реальный кейс (вибрация), рецепт scipy.signal, задание №4.

Приём для аудитории: сначала показать плохую картинку («в лоб»), потом — что делает каждый приём. Тогда инструмент запоминается как лекарство от конкретной боли.


15. Главная мысль

  • Спектр — это не картинка, а измерение.
  • Чтобы ему верить, мало уметь считать быстро (БПФ).
  • Нужно понимать, как его искажают конечная запись и окно.
  • Нужно уметь отделять реальные линии от артефактов (окна, усреднение, PSD).

Дальше: лекция 5 — спектры радиосигналов и модуляция (АМ/ЧМ/ФМ), комплексная огибающая (I/Q).

Материалы

sp/lec4.1791450550.txt.gz · Last modified: by 127.0.0.1