User Tools

Site Tools


sp:lec4

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

sp:lec4 [2026/10/08 17:09] – created - external edit 127.0.0.1sp:lec4 [2026/10/08 17:27] (current) – external edit 127.0.0.1
Line 1: Line 1:
 ====== Лекция 4. БПФ и практический спектральный анализ ====== ====== Лекция 4. БПФ и практический спектральный анализ ======
  
-Короткое объяснение «на пальцах»: зачем нужна лекция, что она решает и что означают +Подробное объяснение «на пальцах»: зачем нужна лекция, что она решает, откуда 
-картинки. Без вывода формул — только смысл.+берутся формулы и что означают картинки. Материал рассчитан и на подготовку 
 +преподавателя, и на самостоятельное чтение студентом: от первых понятий до 
 +практических рецептов и разбора ошибок. 
 + 
 +---- 
 + 
 +===== О чём этот текст и как им пользоваться ===== 
 + 
 +  * Это **подробный конспект** лекции 4: смысл без «тяжёлого» вывода формул. 
 +  * Кому полезен: 
 +    * студенту — чтобы понять, а не заучить; 
 +    * преподавателю — чтобы было чем наполнить рассказ; 
 +    * практику — чтобы знать, какие ручки крутить. 
 +  * Структура: 
 +    * разделы 1–2 — что такое спектр и почему считать «в лоб» дорого; 
 +    * раздел 3 — как устроено БПФ; 
 +    * разделы 4–6 — конечная запись, окна, разрешение, миф про zero-padding; 
 +    * разделы 7–11 — практика: Уэлч, PSD, точная частота, спектрограмма, пример; 
 +    * разделы 12–21 — шпаргалка, ошибки, код, рецепты, задания, план. 
 +  * Формат — списки: так удобнее готовиться, повторять и объяснять. 
 +  * Числовые примеры взяты из ноутбука ''lecture04.ipynb''.
  
 ---- ----
Line 8: Line 28:
 ===== Цели лекции (что должен уметь студент) ===== ===== Цели лекции (что должен уметь студент) =====
  
-  - Объяснить, что такое БПФ: это **не новое преобразование**, а быстрый алгоритм +  - Объяснить, что такое **БПФ**: 
-   для ДПФ. +    * это не новое преобразование, а **быстрый алгоритм** для ДПФ; 
-  - Показать идею «разделяй и властвуй»: одно большое ДПФ → два маленьких. +    * результат точно совпадает с ДПФ; 
-  - Понять «бабочку» и бит-реверс. +    * выигрыш — в тысячи и десятки тысяч раз. 
-  - Объяснить, откуда берётся **утечка** (конечная запись сигнала). +  - Показать идею **«разделяй и властвуй»**: 
-  - Выбирать **окно** под задачу.+    * одно большое ДПФ → два маленьких; 
 +    * рекурсия → ''log₂N'' уровней. 
 +  - Понять **«бабочку»** и **бит-реверс**. 
 +  - Объяснить, откуда берётся **утечка**. 
 +  - Осознанно выбирать **окно** под задачу.
   - Понимать ''Δf = 1/T'' и почему **zero-padding не улучшает разрешение**.   - Понимать ''Δf = 1/T'' и почему **zero-padding не улучшает разрешение**.
   - Пользоваться **методом Уэлча** и читать **PSD**.   - Пользоваться **методом Уэлча** и читать **PSD**.
   - Строить **спектрограмму**.   - Строить **спектрограмму**.
-  - Сделать всё это в Python.+  - Сделать всё это в **Python**.
  
-**Одной фразой:** лекция 3 — «как посчитать спектр?», лекция 4 — «как посчитать +**Зачем каждый пункт на практике:** 
-**быстро** и не обмануть себя?».+ 
 +  * БПФ — чтобы считать спектр в реальном времени. 
 +  * Разрешение — чтобы различать близкие частоты (дефект vs помеха). 
 +  * Окна — чтобы видеть слабые линии рядом с сильными. 
 +  * Уэлч и PSD — чтобы измерять шум, а не «мохнатый» шумный спектр. 
 +  * Спектрограмма — чтобы работать с меняющимися сигналами.
  
 ---- ----
  
-===== 1. Напоминание: что такое спектр =====+===== 1. Напоминание: что такое спектр и зачем он нужен ===== 
 + 
 +==== 1.1 Сигнал и его «радуга» ==== 
 + 
 +  * **Сигнал** — величина, меняющаяся во времени: 
 +    * напряжение на датчике; 
 +    * вибрация подшипника; 
 +    * звук микрофона; 
 +    * ток двигателя. 
 +  * Во времени сигнал — извилистая кривая, где «всё перемешано». 
 +  * **Спектр** — разложение сигнала на простые синусоиды с их амплитудами и фазами. 
 +  * Аналогия: белый свет через **призму** → цвета; спектр — «радуга сигнала». 
 +  * «Призма» здесь — арифметика: пробуем синусоиды и смотрим, какие совпали. 
 +  * Практический смысл: 
 +    * превратить «непонятную кривую» в несколько чисел; 
 +    * найти дефект, невидимый глазом; 
 +    * принять решение: проблема есть/нет, на какой частоте, растёт ли она. 
 + 
 +==== 1.2 Формула ДПФ словами ==== 
 + 
 +  * Есть ''N'' отсчётов: ''x[0], x[1], …, x[N−1]''. 
 +  * ДПФ даёт ''N'' комплексных чисел ''X[0], X[1], …, X[N−1]''. 
 +  * Смысл ''X[k] = Σ x[n]·e^(−j·2π·k·n/N)'': 
 +    * берём пробную синусоиду частоты номер ''k''; 
 +    * умножаем сигнал на неё и складываем; 
 +    * совпали частоты → слагаемые складываются в большое число; 
 +    * не совпали → гасят друг друга, почти ноль. 
 +  * ДПФ — это **корреляция** сигнала с набором синусоид. 
 +  * Пик появляется там, где произошло совпадение. 
 + 
 +==== 1.3 Амплитуда, фаза, мощность ==== 
 + 
 +  * ''|X[k]|'' — **амплитуда** (насколько «громко» звучит частота). 
 +  * ''arg X[k]'' — **фаза** (с каким сдвигом присутствует). 
 +  * ''|X[k]|²'' — **мощность** составляющей. 
 +  * Для анализа чаще смотрят амплитуду или мощность. 
 +  * Фаза нужна для: 
 +    * измерения задержек и дальности; 
 +    * фазовой локализации (RFID, радар); 
 +    * когерентного накопления и синхронизации. 
 + 
 +==== 1.4 Вещественный и комплексный сигнал ==== 
 + 
 +  * **Вещественный** сигнал (напряжение, звук) даёт **две** сопряжённые линии: ''+f'' и ''−f''. 
 +  * Поэтому для вещественного сигнала достаточно **половины** спектра (''rfft''). 
 +  * **Комплексный (аналитический)** сигнал даёт **одну** линию на ''+f''. 
 +  * Аналитический сигнал удобен в связи (I/Q). 
 +  * Отрицательные частоты — удобство математики; для вещественного сигнала они 
 +  симметричны положительным. 
 + 
 +==== 1.5 Ось частот и бины ==== 
 + 
 +  * Реальная частота: ''f_k = k·f_д/N'', где ''f_д'' — частота дискретизации. 
 +  * Сетка этих частот — **бины**; шаг сетки ''Δf = f_д/N''. 
 +  * Между бинами спектр не определён «напрямую» — там интерполяция. 
 +  * Ось строят функциями ''fftfreq'' (двусторонняя) и ''rfftfreq'' (односторонняя). 
 + 
 +==== 1.6 Маленький пример ==== 
 + 
 +  * ''f_д = 8000'' Гц, ''N = 8'' → ''Δf = 1000'' Гц; бины ''0, 1000, …, 7000'' Гц. 
 +  * Косинус ровно 1000 Гц → попадёт в бин, две чёткие линии ±1000 Гц. 
 +  * Косинус 1250 Гц → **между** бинами, «размазанный» холмик (утечка). 
 + 
 +==== 1.7 Как выглядит спектр типичных сигналов ==== 
 + 
 +  * **Чистый тон**: одна-две узкие линии. 
 +  * **Периодический сигнал** (меандр, треугольник): набор гармоник кратных основной. 
 +  * **Шум**: размазанная «полка» по всем частотам. 
 +  * **Вибрация**: несколько линий (вращение, дефекты) плюс шум. 
 +  * **Речь/музыка**: множество линий, меняющихся во времени. 
 +  * **Радиосигнал**: несущая и боковые полосы (зависит от модуляции). 
 +  * Понимание «типового вида» помогает сразу заметить аномалию. 
 + 
 +==== 1.8 Краткая история БПФ ====
  
-  * Спектр — это «радуга» сигнала: из чего он состоит. +  * Идею деления на чётные/нечётные знал ещё **Гаусс** (начало XIX века). 
-  * Аналогия: белый свет → призма → цвета. Только «призма» здесь из арифметики. +  * Широко известной она стала в 1965 году — статья **Cooley–Tukey**. 
-  * ДПФ: из ''N'' отсчётов делает ''N'' значений спектра. +  * Причина популярности — компьютеры и потребность в быстрой обработке. 
-  * ''f_k = k · fд / N'' — частоты, на которых ДПФ «смотрит». +  * Сегодня БПФ — в основе аудио, связи, изображений, радаров, МРТ, сейсмики.
-  * ''|X[k]|'' — амплитуда (громкость), ''arg X[k]'' — фаза (сдвиг).+
  
 ---- ----
  
-===== 2. Проблема №1: дорого =====+===== 2. Проблема №1: считать спектр «в лоб» дорого =====
  
-  * Прямое ДПФ требует ''N²'' операций. +==== 2.1 Сколько это операций ==== 
-  * Для ''N = 1 000 000'' это ''10¹²'' — триллион. + 
-  * Долго; в реальном времени невозможно.+  * Один коэффициент ''X[k]'' — это ''N'' произведений и сложений. 
 +  * Коэффициентов ''N'' → итого ''N²'' операций (квадратичная сложность ''O(N²)''). 
 + 
 +==== 2.2 Почему это критично ==== 
 + 
 +  * Секунда аудио при 44.1 кГц: ''N = 44 100'', ''N² ≈ 1.9·10⁹''. 
 +  * Реальное время: пересчитывать десятки раз в секунду. 
 +  * Длинные записи и изображения: ''N'' ещё больше. 
 +  * Время растёт как квадрат длины записи — быстро «упирается». 
 + 
 +==== 2.3 Сравнение в числах ==== 
 + 
 +^ ''N'' ^ Прямое ДПФ ''N²'' ^ БПФ ''N·log₂N'' ^ Во сколько раз меньше ^ 
 +| 64 | ~4·10³ | ~4·10² | ~16 | 
 +| 1024 | ~10⁶ | ~10⁴ | ~100 | 
 +| 65 536 | ~4·10⁹ | ~10⁶ | ~4000 | 
 +| 10⁶ | ~10¹² | ~2·10⁷ | ~50 000 | 
 + 
 +  * Вывод: выигрыш растёт с ''N'' и становится **астрономическим**. 
 +  * Поэтому БПФ — один из важнейших алгоритмов XX века. 
 + 
 +==== 2.4 Что такое «сложность O(·)» на пальцах ==== 
 + 
 +  * ''O(N²)'' — время растёт как квадрат длины: удвоили ''N'' — время вчетверо. 
 +  * ''O(N·log₂N)'' — почти линейно: удвоили ''N'' — время чуть больше, чем вдвое. 
 +  * На больших ''N'' разница между кривыми определяет, «успеем или нет». 
 +  * В реальном времени это разница между «работает» и «не работает». 
 + 
 +==== 2.5 Как ускоряли до БПФ (интуиция) ==== 
 + 
 +  * Заметили, что одни и те же множители встречаются много раз. 
 +  * Их можно переиспользовать, а не считать заново. 
 +  * Отсюда идея делить задачу пополам и переиспользовать результаты.
  
 ---- ----
  
-===== 3. БПФ: что это и как устроено =====+===== 3. БПФ: быстрое преобразование Фурье =====
  
 ==== 3.1 Главная мысль ==== ==== 3.1 Главная мысль ====
  
-  * БПФ даёт **тот же ответ**, что ДПФ. +  * **БПФ** — не приближение и не другое преобразование. 
-  * Это просто более умный способ считать. +  * Оно считает **тот же** ДПФ, но быстрее: ''O(N·log₂N)'' вместо ''O(N²)''. 
-  * Сложность: ''N log₂N'' вместо ''N²''. +  * Результат совпадает с точностью машинной арифметики. 
-  * Для миллиона точек — быстрее в **десятки тысяч раз**.+  * «Быстрое» относится к скорости вычислений, а не к упрощению результата.
  
-==== 3.2 Три идеи ====+==== 3.2 «Разделяй и властвуй» ====
  
-  - **Разделяй и властвуй.** +  * Пусть ''N'' чётно. 
-    * Делим отсчёты на чётные и нечётные. +  * Делим отсчёты на **чётные** и **нечётные**: 
-    * Одно ДПФ длины ''N'' → два ДПФ длины ''N/2''. +    * чётные: ''x[0], x[2], x[4], …''; 
-    * Повторяем рекурсивно → ''log₂N'' уровней. +    * нечётные: ''x[1], x[3], x[5], …''. 
-  - **Бабочка.** +  * Спектр всего сигнала выражается через два спектра половинной длины: 
-    * Способ снова соединить две половины. +    * ''E[k]'' — спектр чётных; 
-    * ''X[k] = E[k] + W·O[k]''.+    * ''O[k]'' — спектр нечётных; 
 +    * и поворотный множитель ''W''. 
 +  * Причина: частота в показателе «пересчитывается» для половинной длины 
 +  (''W_N² = W_(N/2)''). 
 +  * Далее — **рекурсия**: каждую половину снова делим пополам. 
 +  * Пока не останутся ДПФ длины 1–2. 
 +  * Глубина дерева — ''log₂N''; отсюда множитель ''log₂N''. 
 +  * Уравнение сложности: ''T(N) = 2·T(N/2) + O(N)''. 
 +  * Его решение — ''O(N·log₂N)''. 
 + 
 +==== 3.3 Почему деление «работает» ==== 
 + 
 +  * Поворотные множители обладают симметрией: 
 +    * ''W^(k+N/2) = −W^k''; 
 +    * ''W^(2k) = W_(N/2)^k''. 
 +  * Именно эта симметрия позволяет соединять половины «почти бесплатно». 
 +  * Без неё деление не давало бы выигрыша. 
 + 
 +==== 3.4 «Бабочка» ==== 
 + 
 +  * Две половины соединяются **«бабочкой»**: 
 +    * ''X[k] = E[k] + W·O[k]'';
     * ''X[k + N/2] = E[k] − W·O[k]''.     * ''X[k + N/2] = E[k] − W·O[k]''.
-    * Одно умножение и два сложения дают сразу две точки спектра. +  * Одно и то же ''W·O[k]'' **прибавляется и вычитается**. 
-  - **Бит-реверс.** +  * За одну операцию — сразу **две** точки спектра. 
-    * Плата за деление: на входе отсчёты стоят не по порядку. +  * Стоимость: одно комплексное умножение и два сложения. 
-    * Порядок для ''N = 8'': ''0, 4, 2, 6, 1, 5, 3, 7''. +  * Название — из-за формы схемы (два входа, два выхода, перекрестье). 
-    * Правило: номер в двоичном виде читается справа налево.+ 
 +==== 3.5 Ручной пример для ''N = 4'' ==== 
 + 
 +  * Вход ''x = [x0, x1, x2, x3]''. 
 +  * Разделяем: чётные ''[x0, x2]'', нечётные ''[x1, x3]''. 
 +  * ДПФ длины 2: 
 +    * ''E[0] = x0 + x2'', ''E[1] = x0 − x2''; 
 +    * ''O[0] = x1 + x3'', ''O[1] = x1 − x3''. 
 +  * Точки спектра: 
 +    * ''X[0] = E[0] + W⁰·O[0]''; 
 +    * ''X[2] = E[0] − W⁰·O[0]''; 
 +    * ''X[1] = E[1] + W¹·O[1]''; 
 +    * ''X[3] = E[1] − W¹·O[1]''. 
 +  * Здесь ''W = e^(−j·2π/4)''. 
 +  * Вместо 16 умножений (в лоб) — два умножения на ''W''. 
 +  * Для ''N = 8'' экономия ещё заметнее. 
 + 
 +==== 3.6 Ручной пример для ''N = 8'' (идея) ==== 
 + 
 +  * Делим на чётные (''0,2,4,6'') и нечётные (''1,3,5,7''). 
 +  * Каждую четвёрку — снова на чётные/нечётные. 
 +  * Получаем четыре ДПФ длины 2. 
 +  * Соединяем «бабочками» в три стадии. 
 +  * Число «дорогих» умножений резко падает. 
 + 
 +==== 3.7 Бит-реверс ==== 
 + 
 +  * Плата за деление: входные отсчёты идут в **бит-реверсивном** порядке. 
 +  * Правило: номер в двоичном виде читается **справа налево**. 
 +  * Пример: ''1 = 001₂'' → ''100₂ = 4''. 
 +  * Для ''N = 8'': ''0, 4, 2, 6, 1, 5, 3, 7''. 
 +  * На выходе порядок естественный: ''X[0..7]''. 
 +  * В коде — одна перестановка массива перед БПФ. 
 + 
 +==== 3.8 Как выглядит граф 8-точечного БПФ ==== 
 + 
 +  * Три вертикальные **стадии**. 
 +  * На каждой — четыре **бабочки**. 
 +  * Слева — вход в бит-реверсивном порядке. 
 +  * Справа — спектр ''X[0..7]'' в обычном порядке. 
 +  * Структура регулярная → удобно для процессора и железа (FPGA, ASIC). 
 + 
 +==== 3.9 Итеративный и рекурсивный варианты ==== 
 + 
 +  * **Рекурсивный** БПФ — ближе к определению, но с накладными расходами. 
 +  * **Итеративный** — по стадиям, «на месте» (in-place); так делают библиотеки. 
 +  * In-place экономит память: результат пишется поверх входа. 
 +  * Порядок стадий обеспечивает бит-реверс заранее. 
 + 
 +==== 3.10 Варианты алгоритма и практика ==== 
 + 
 +  * **radix-2** — деление пополам; требует ''N = 2^m''. 
 +  * **radix-4** — меньше операций. 
 +  * **split-radix** — ещё быстрее. 
 +  * **mixed-radix** — для составных ''N''. 
 +  * **Простое большое ''N''** — смешанные алгоритмы или округление до степени двойки. 
 +  * **Вещественный сигнал** — ''rfft'', вдвое дешевле. 
 +  * **Библиотеки**: FFTW, pocketfft (NumPy/SciPy), MKL, cuFFT (GPU). 
 +  * Правило: по возможности брать ''N'' **степенью двойки**.
  
-==== 3.3 Что запомнить ====+==== 3.11 Где БПФ применяется ====
  
-  * Схема БПФ — регулярные «стадии» из бабочек. +  * Аудио: сжатие, эквалайзеры, распознавание речи. 
-  * Поэтому ''N'' удобно брать степенью двойки. +  * Связь: OFDM (Wi-Fi, LTE, DVB), фильтрация. 
-  * На практике БПФ не пишут сами: берут ''np.fft.fft'' (NumPy/SciPy), FFTW, MKL, cuFFT.+  * Медицина: МРТ, ЭЭГ, ЭКГ. 
 +  * Техника: вибродиагностика, радары, сейсмика, астрономия.
  
 ---- ----
  
-===== 4. Проблема №2: конечная запись → утечка =====+===== 4. Проблема №2: конечная запись и утечка =====
  
-==== 4.1 Почему появляется утечка ====+==== 4.1 Что мы на самом деле считаем ====
  
-  * Мы всегда берём **кусок** сигнала длиной ''T'', а не весь сигнал. +  * Записываем **кусок** сигнала длиной ''T'' секунд. 
-  * Формально это умножение на прямоугольное окно.+  * Формально это умножение на **прямоугольное окно** (1 внутри записи, 0 снаружи).
   * Правило: **умножение во времени = свёртка в спектре**.   * Правило: **умножение во времени = свёртка в спектре**.
   * Спектр прямоугольного окна — «холмик с хвостами» (''sinc'').   * Спектр прямоугольного окна — «холмик с хвостами» (''sinc'').
-  * Поэтому чистый тон превращается в холмик, а не в одну палочку. +  * Значит, чистый тон **размазывается**. 
-  * Это не ошибка — следствие конечности записи.+  * Это и есть **утечка** — следствие конечности записи, а не ошибка.
  
-==== 4.2 Окна: лекарство от утечки ====+==== 4.2 Свёртка «на пальцах» ====
  
-  * Идея: обрезать сигнал **мягко**, а не резко. +  * Свёртка — «размазывание» одной функции другой. 
-  * Умножаем сигнал на плавную функцию (в центре 1, к краям → 0). +  * Аналогия: резкий звук в комнате с эхом «размазывается» во времени. 
-  * Лечит боковые лепестки, но **расширяет главный** — это неустранимый компромисс.+  * Здесь по частоте: резкую линию «размазывает» хвост окна. 
 +  * Чем «чище» спектр окна, тем меньше размазывание.
  
-==== 4.3 Популярные окна ====+==== 4.3 Откуда боковые лепестки (''sinc'') ==== 
 + 
 +  * Спектр прямоугольного окна: 
 +    * **главный лепесток** — центральный пик; 
 +    * **боковые лепестки** — затухающие «волны» по бокам. 
 +  * Главный лепесток → **разрешение** (шире — хуже). 
 +  * Боковые лепестки → **маскировка** слабых линий. 
 +  * У прямоугольного окна боковые высокие (''−13 дБ'') — плохо для слабых сигналов. 
 + 
 +==== 4.4 Численный пример утечки ==== 
 + 
 +  * ''f_д = 8000'' Гц, ''N = 256'' → ''Δf = 31.25'' Гц. 
 +  * Тон ровно в бине (например, 1000 Гц) → одна чёткая линия. 
 +  * Тон на полбина (1015.6 Гц) → энергия растекается по соседним бинам. 
 +  * С прямоугольным окном боковые падают медленно. 
 +  * С окном Hann — падают быстро. 
 + 
 +==== 4.5 Окна: лекарство от утечки ==== 
 + 
 +  * Обрезаем сигнал **мягко**: окно равно 1 в центре и плавно идёт к 0 у краёв. 
 +  * Аналогия: мягкая диафрагма фотоаппарата даёт меньше «звёздочек». 
 +  * Эффект: боковые лепестки падают. 
 +  * Цена: главный лепесток **расширяется** — разрешение чуть хуже. 
 +  * Это **неустранимый компромисс**. 
 + 
 +==== 4.6 Популярные окна ====
  
 ^ Окно ^ Главный лепесток ^ Боковые лепестки ^ Когда брать ^ ^ Окно ^ Главный лепесток ^ Боковые лепестки ^ Когда брать ^
-| Прямоугольное (''boxcar'') | 2 бина | −13 дБ | максимальная резкость | +| Прямоугольное (''boxcar'') | 2 бина | −13 дБ | максимальная резкость, чистые тона | 
-| Hann | 4 бина | −31 дБ | «рабочая лошадка» | +| Hann | 4 бина | −31 дБ | «рабочая лошадка», общий анализ | 
-| Hamming | 4 бина | −43 дБ | чуть больше динамики |+| Hamming | 4 бина | −43 дБ | чуть больше динамического диапазона |
 | Blackman–Harris | 8 бинов | −92 дБ | слабая линия рядом с сильной | | Blackman–Harris | 8 бинов | −92 дБ | слабая линия рядом с сильной |
-| flat-top | 10 бинов | −93 дБ | точная **амплитуда** |+| flat-top | 10 бинов | −93 дБ | точная **амплитуда** (калибровка) |
  
-==== 4.4 «Паспорт» окна — два числа ====+  * **Прямоугольное**: ничего не меняем; хорошо, если частоты точно в бинах. 
 +  * **Hann**: плавный «колокол»; выбор по умолчанию. 
 +  * **Hamming**: похоже на Hann, но не доходит до нуля; чуть ниже боковые. 
 +  * **Blackman–Harris**: очень низкие боковые; шире главный лепесток. 
 +  * **flat-top**: широкий плоский верх; точная амплитуда, плохое разрешение.
  
-  * **coherent gain** — поправка на амплитуду.+==== 4.7 «Паспорт» окна: coherent gain и ENBW ==== 
 + 
 +  * **Coherent gain** — среднее значение окна: 
 +    * поправка на амплитуду линии;
     * Hann ≈ 0.5, Hamming ≈ 0.54, flat-top ≈ 0.22.     * Hann ≈ 0.5, Hamming ≈ 0.54, flat-top ≈ 0.22.
-  * **ENBW** — поправка на шум (эквивалентная шумовая полоса). +  * **ENBW** — эквивалентная шумовая полоса: 
-    * Прямоугольное 1.0, Hann 1.5, flat-top 3.77. +    * поправка на шум и PSD; 
-  * ''scipy.signal.welch'' учитывает это сам, но знать нужно — иначе спектры нельзя +    * прямоугольное 1.0, Hann 1.5, Hamming 1.36, flat-top 3.77. 
-  сравнивать.+  * Без учёта этих коэффициентов нельзя сравнивать спектры с разными окнами. 
 +  * ''scipy.signal.welch'' учитывает их автоматически. 
 + 
 +==== 4.8 Как выбрать окно ==== 
 + 
 +  * Разделённые тона, важна резкость → **прямоугольное** или **Hann**. 
 +  * Слабая линия рядом с сильной → **Hann** или **Blackman–Harris**. 
 +  * Точная амплитуда → **flat-top**. 
 +  * Не знаете что взять → **Hann**. 
 + 
 +==== 4.9 Частые вопросы про окна ==== 
 + 
 +  * «Окно убирает шум?» — нет, окно против утечки; шум убирает усреднение. 
 +  * «Окно искажает сигнал?» — ослабляет края; при нормировке амплитуда верна. 
 +  * «Можно без окна?» — да, если частоты точно в бинах и сигнал чистый. 
 +  * «Почему пик ниже?» — это coherent gain. 
 +  * «Почему пик шире?» — расширенный главный лепесток.
  
 ---- ----
Line 114: Line 376:
 ===== 5. Разрешение по частоте ===== ===== 5. Разрешение по частоте =====
  
-  * Формула: ''Δf = fд / N = 1 / T''. +==== 5.1 Главная формула ==== 
-  * Разрешение задаёт **длительность записи ''T''**, а не частота дискретизации. + 
-  * Чтобы различить два близких тона — надо **дольше смотреть**. +  * ''Δf = f_д / N'', а так как ''T = N / f_д'', то ''Δf = 1 / T''. 
-  * Критерий Рэлея: различимы, если расстояние ''> Δf''. +  * Чем **дольше** запись, тем **тоньше** разрешение. 
-  * Для Hann практически нужно ''≈ 2Δf''. +  * ''Δf'' — минимальное расстояние, различимое по построению. 
-  * Пример: тона 1000 и 1040 Гц. + 
-    * ''N = 128'' → сливаются. +==== 5.2 Диапазон и разрешение — разные вещи ==== 
-    * ''N = 1024'' → видны два пика.+ 
 +  * **Частота дискретизации** задаёт **диапазон** (до ''f_д/2'', частота Найквиста). 
 +  * **Длительность записи** задаёт **разрешение** ''Δf''. 
 +  * Поднять ''f_д'' → шире диапазон, но разрешение (при том же ''T'') не улучшится. 
 +  * Аналогия: диапазон — «какие ноты слышим»; разрешение — «какие близкие ноты 
 +  различаем». 
 + 
 +==== 5.3 Число Найквиста ==== 
 + 
 +  * Верхняя частота: ''f_д / 2''. 
 +  * Всё выше — «заворачивается» (алиасинг), если нет антиалиасингового фильтра. 
 +  * Поэтому перед дискретизацией ставят фильтр. 
 + 
 +==== 5.4 Критерий Рэлея ==== 
 + 
 +  * Тона различимы, если расстояние между ними **больше ''Δf''**. 
 +  * Для Hann нужно примерно ''≈ 2Δf''. 
 +  * То есть окно немного «съедает» разрешение, но даёт динамику. 
 + 
 +==== 5.5 Опыт с двумя тонами ==== 
 + 
 +  * Тона 1000 и 1040 Гц. 
 +  * ''N = 128'' → ''Δf = 62.5'' Гц → сливаются. 
 +  * ''N = 1024'' → ''Δf ≈ 7.8'' Гц → два пика. 
 +  * Вывод: «раздвинуть» близкие частоты можно **удлинением записи**. 
 + 
 +==== 5.6 От чего ещё зависит разрешение ==== 
 + 
 +  * Длительность записи ''T'' (главное). 
 +  * Форма/ширина окна. 
 +  * Отношение сигнал/шум. 
 +  * Наличие мешающих линий (боковые лепестки). 
 + 
 +==== 5.7 Примеры ''Δf'' для разных ''T'' ==== 
 + 
 +^ Длительность ''T'' ^ ''Δf = 1/T'' ^ 
 +| 0.1 с | 10 Гц | 
 +| 0.5 с | 2 Гц | 
 +| 1 с | 1 Гц | 
 +| 10 с | 0.1 Гц | 
 + 
 +  * Хотите различить тона в 1 Гц — нужна запись около секунды и больше.
  
 ---- ----
Line 127: Line 430:
 ===== 6. Миф: zero-padding ===== ===== 6. Миф: zero-padding =====
  
-  * **Что делают:** дополняют сигнал нулями до большой длины. +==== 6.1 Что делают ==== 
-  * **Что получают:** гладкий спектр с плотной сеткой. + 
-  * **В чём ошибка:** думают, что улучшили разрешение. +  * Дополняют сигнал **нулями** до большей длины перед ДПФ. 
-  * **На самом деле:** это **интерполяция** той же кривой. +  * Получают «гладкий» спектр с плотной сеткой частот. 
-  * **Вывод:** разрешение улучшает только **удлинение реальной записи**.+ 
 +==== 6.2 Почему это не улучшает разрешение ==== 
 + 
 +  * Новых данных не появляется — мы не смотрели дольше. 
 +  * Это **интерполяция** той же спектральной кривой. 
 +  * Слипшиеся тона сольются и на плотной сетке. 
 + 
 +==== 6.3 Когда zero-padding полезен ==== 
 + 
 +  * Красивый гладкий график. 
 +  * Точное положение пика (для интерполяции). 
 +  * Приведение длины к степени двойки. 
 +  * Линейная свёртка: дополнение до ''N ≥ N_a + N_b − 1''. 
 +  * Итог: удобство, а не разрешение. 
 + 
 +==== 6.4 Как не спутать ==== 
 + 
 +  * Если пики стали «чаще» — это интерполяция, а не новое разрешение. 
 +  * Если пики стали «уже и раздельнее» — это уже удлинение записи.
  
 ---- ----
Line 139: Line 460:
 ==== 7.1 Почему один спектр «мохнатый» ==== ==== 7.1 Почему один спектр «мохнатый» ====
  
-  * Одна периодограмма ''|X|²'' статистически неустойчива. +  * Одна периодограмма ''|X|²'' **неустойчива**; разброс не падает с ростом ''N''. 
-  * Её разброс **не уменьшается** с ростом ''N''. +  * Причина: одна «реализация» случайного процесса. 
-  * Аналогия: одно измерение шума случайно, сто усреднённых — устойчивы.+  * Аналогия: одно измерение шума случайно; сто усреднённых — устойчивы.
  
 ==== 7.2 Идея по шагам ==== ==== 7.2 Идея по шагам ====
  
-  - Режем запись на сегменты (можно с перекрытием). +  - Резать запись на **сегменты**. 
-  - К каждому сегменту применяем окно. +  - Брать их с **перекрытием**. 
-  - Считаем БПФ и квадрат модуля. +  - Применять **окно**. 
-  - Усредняем по сегментам.+  - Считать **БПФ** и ''|·|²''. 
 +  - **Усреднять** по сегментам.
  
 ==== 7.3 Что получаем и чем платим ==== ==== 7.3 Что получаем и чем платим ====
  
-  * Получаем: несмещённую оценку с меньшим разбросом (падение в ''√K'' раз). +  * Получаем: несмещённую оценку с меньшим разбросом. 
-  * Платим: разрешение определяется длиной **сегмента**, а не всей записи. +  * Разброс падает как ''√K'' (''K'' — число сегментов). 
-  * Настройки: ''nperseg'' (длина сегмента), ''noverlap'' (перекрытие).+  * Платим: разрешение определяется длиной **сегмента**. 
 + 
 +==== 7.4 Как выбирать параметры ==== 
 + 
 +  * ''nperseg'' (длина сегмента): 
 +    * больше → лучше разрешение, больше разброс; 
 +    * меньше → меньше шум, хуже разрешение. 
 +  * ''noverlap'' (перекрытие): обычно 50% (''nperseg // 2''). 
 +  * ''nperseg'' — желательно степень двойки. 
 +  * Разрешение: ''f_д / nperseg'' должно быть достаточно мелким. 
 +  * Больше сегментов → глаже кривая, но больше вычислений. 
 + 
 +==== 7.5 Сколько нужно усреднений ==== 
 + 
 +  * ''K = 1'' → как одна периодограмма (шумно). 
 +  * ''K = 10'' → заметно глаже. 
 +  * ''K = 100'' → устойчивая кривая. 
 +  * Разброс ≈ ''1/√K'': чтобы улучшить в 2 раза, нужно в 4 раза больше сегментов. 
 + 
 +==== 7.6 Родственники метода ==== 
 + 
 +  * **Периодограмма** — один сегмент (шумная). 
 +  * **Бартлетт** — сегменты без перекрытия. 
 +  * **Уэлч** — перекрытие + окно (стандарт). 
 +  * **Медианное усреднение** — устойчиво к выбросам. 
 +  * **Мультитейпер** — несколько ортогональных окон. 
 + 
 +==== 7.7 Порядок действий ==== 
 + 
 +  - Определить нужное ''Δf''. 
 +  - По нему выбрать длину сегмента. 
 +  - Взять окно (Hann). 
 +  - Перекрытие 50%. 
 +  - Посчитать ''welch''. 
 +  - Убедиться: линии на месте, шум «успокоился».
  
 ---- ----
  
-===== 8. PSD: плотность мощности =====+===== 8. PSD: спектральная плотность мощности =====
  
-  * Когда сигнал шумовой, «амплитуда на частоте» бессмысленна.+==== 8.1 Что это ==== 
 + 
 +  * Для шума «амплитуда на частоте» бессмысленна.
   * Правильная мера — **мощность на герц** (PSD).   * Правильная мера — **мощность на герц** (PSD).
-  * Площадь под кривой PSD = полная мощность сигнала. +  * **Площадь под PSD = полная мощность** сигнала. 
-  * Две нормировки в ''scipy.signal'': + 
-    * ''scaling='density''' → «мощность/Гц» — для шумов; +==== 8.2 Две нормировки ==== 
-    * ''scaling='spectrum''' → «мощность в бине» — для линий. + 
-  * Практика: для диагностики бери ''density'' и доверь ''welch''.+  * ''scaling='density''' → «мощность²/Гц» (для шумов и широкополосных сигналов). 
 +  * ''scaling='spectrum''' → «мощность² в бине» (для дискретных линий). 
 + 
 +==== 8.3 Формула с ENBW ==== 
 + 
 +  * ''PSD = |W|² / (f_д · ENBW)''. 
 +  * Благодаря ENBW уровень шумовой полки не зависит от окна. 
 +  * В ''welch'' это уже учтено. 
 + 
 +==== 8.4 Мощность в полосе ==== 
 + 
 +  * Мощность в полосе ''[f1, f2]'' ≈ сумма PSD по этой полосе, умноженная на шаг ''Δf''. 
 +  * Отсюда: чем шире полоса, тем больше «собранная» мощность. 
 + 
 +==== 8.5 Зачем децибелы ==== 
 + 
 +  * Динамический диапазон спектра огромен. 
 +  * В дБ он «сжимается» и читается глазом: ''10·log10(PSD)''. 
 +  * Таблица для ориентира: 
 + 
 +^ Отношение мощностей ^ В дБ ^ 
 +| ×2 | +3 | 
 +| ×10 | +10 | 
 +| ×100 | +20 | 
 +| ×1000 | +30 | 
 +| ×10⁶ | +60 | 
 + 
 +  * Минус дБ: мощности нельзя складывать «на глаз». 
 + 
 +==== 8.6 Типичные ошибки с PSD ==== 
 + 
 +  * Смешивать ''density'' и ''spectrum'' на одном графике. 
 +  * Сравнивать разные окна без нормировки. 
 +  * Забывать про ''Δf'' при переходе к мощности в полосе. 
 +  * Считать уровень шума не зависящим от разрешения (он зависит от полосы).
  
 ---- ----
  
-===== 9. Точная частота (сверх сетки) =====+===== 9. Точная оценка частоты =====
  
-  * Сетка даёт частоту с шагом ''Δf''. +  * Сетка даёт частоту с шагом ''Δf''; истина может быть между бинами. 
-  * Хотим точнее — используем **параболическую интерполяцию** по трём точкам вокруг +  * Приём: **параболическая интерполяция** по трём точкам вокруг пика. 
-  пика. +  * Берём три значения логарифма спектра (левое, центр, правое). 
-  * Пример из лекции: истина 100.4 Гц, оценка 100.34 Гц при сетке 3.9 Гц.+  * Формула даёт поправку ''δ'' (от −0.5 до +0.5 бина). 
 +  * Уточнённая частота: ''f₀ ≈ (k + δ)·Δf''. 
 +  * Пример из ноутбука: истина 100.4 Гц, сетка ≈ 3.9 Гц, оценка — 100.34 Гц. 
 +  * Более точные методы: 
 +    * интерполяция по двум окнам; 
 +    * оценка по фазе; 
 +    * Прони, MUSIC — для близких тонов. 
 +  * Для вибрации и радиосигналов обычно достаточно интерполяции.
  
 ---- ----
  
-===== 10. Спектрограмма: сигнал меняется во времени =====+===== 10. Спектрограмма: сигнал во времени и по частоте ===== 
 + 
 +==== 10.1 Что такое STFT ====
  
   * Обычный спектр предполагает, что сигнал всё время одинаков.   * Обычный спектр предполагает, что сигнал всё время одинаков.
-  * **STFT:** считаем спектр в скользящем окне. +  * **STFT**: спектр в **скользящем окне**. 
-  * Результат — **спектрограмма**: время по горизонтали, частота по вертикали, +  * Результат — **спектрограмма**: время (X), частота (Y), мощность (цвет).
-  яркость = мощность. +
-  * Видно чирп (наклонная линия) и короткие всплески (пятна).+
  
-==== Компромисс «время — частота» ====+==== 10.2 Что видно на спектрограмме ====
  
-  * Короткое окно: хорошо «когда», плохо «какая частота». +  * **Чирп** (частота растёт) — наклонная линия. 
-  * Длинное окно: хорошо «какая частота», плохо «когда».+  * **Короткий всплеск** — вертикальное пятно. 
 +  * **Долгий тон** — горизонтальная линия. 
 +  * **Дрейф частоты** — изгиб линии. 
 +  * Одним обычным спектром этого не увидеть. 
 + 
 +==== 10.3 Компромисс время–частота ==== 
 + 
 +  * **Короткое окно** → хорошо «когда», плохо «какая частота». 
 +  * **Длинное окно** → точно по частоте, но размыто по времени.
   * Это принцип неопределённости, а не недоработка метода.   * Это принцип неопределённости, а не недоработка метода.
 +
 +==== 10.4 Когда спектрограмма нужна ====
 +
 +  * Нестационарные сигналы (речь, музыка, разгон).
 +  * Поиск коротких событий (щелчки, удары, разряды).
 +  * Отслеживание изменения частоты.
 +  * Когда обычный спектр «смешивает» разные режимы.
 +
 +==== 10.5 Родственные инструменты ====
 +
 +  * **Вейвлет-преобразование** — адаптивное окно; лучше для широкополосных всплесков.
 +  * **Спектрограмма** — простой и наглядный инструмент на каждый день.
 +  * **Мультитейперная спектрограмма** — сглаженнее.
  
 ---- ----
  
-===== 11. Реальный пример: вибрация =====+===== 11. Реальный пример: вибрация, шаг за шагом =====
  
-  * В сигнале: база 50 Гц, дефект 120 Гц, слабая гармоника 240 Гц, шум. +  * Данные: вибрация агрегата. 
-  * Одна периодограмма: слабая линия тонет в шуме. +  * Составляющие: база 50 Гц, дефект 120 Гц, слабая гармоника 240 Гц, шум. 
-  * Welch + окно Hann: шум сглаживается, линия 240 Гц видна. +  * Шаг 1. Одна периодограмма: шум «мохнатый», линия 240 Гц тонет. 
-  * Итог: спектр — это **основа для решения**, а не картинка.+  * Шаг 2. Окно Hann + Уэлч: шум сглажен, линия 240 Гц различима. 
 +  * Шаг 3. PSD в дБ: удобный масштаб, видно превышение над полкой. 
 +  * Шаг 4. Уточнение частот интерполяцией. 
 +  * Итог: не «картинка», а **основа для решения**.
  
 ---- ----
  
-===== 12. Шпаргалка (словарь) =====+===== 12. Шпаргалка (словарь терминов) =====
  
 ^ Термин ^ Что означает ^ ^ Термин ^ Что означает ^
Line 216: Line 639:
 | Боковые лепестки | «хвосты», мешают видеть слабые линии | | Боковые лепестки | «хвосты», мешают видеть слабые линии |
 | Coherent gain | поправка на амплитуду | | Coherent gain | поправка на амплитуду |
-| ENBW | поправка на шум |+| ENBW | поправка на шум (эквивалентная шумовая полоса) |
 | Разрешение | ''Δf = 1/T'' | | Разрешение | ''Δf = 1/T'' |
 | Zero-padding | интерполяция, а не разрешение | | Zero-padding | интерполяция, а не разрешение |
-| Периодограмма | ` | БПФ | ²` одной записи | +| Периодограмма | квадрат модуля БПФ одной записи | 
-| Метод Уэлча | усреднение периодограмм |+| Метод Уэлча | усреднение периодограмм по сегментам |
 | PSD | мощность на герц | | PSD | мощность на герц |
 | Спектрограмма | спектр во времени (STFT) | | Спектрограмма | спектр во времени (STFT) |
 +| Бин | узел частотной сетки ДПФ |
 +| Найквист | верхняя частота ''f_д/2'' |
  
 ---- ----
  
-===== 13. Частые ошибки =====+===== 13. Частые ошибки и заблуждения =====
  
-  * «Подниму частоту дискретизации — улучшу разрешение». +  * «Подниму ''f_д'' — улучшу разрешение» → нет, разрешение задаёт ''T''. 
-    * Нет: разрешение задаёт время записи ''T''. +  * «Дополню нулями — увижу детали» → это интерполяция. 
-  * «Дополню нулями — увижу больше деталей». +  * «Окно убирает шум» → окно против утечки, шум убирает усреднение. 
-    * Нет: это интерполяция той же кривой. +  * «БПФ приближённое» → результат точно совпадает с ДПФ. 
-  * «Окно Hann убирает шум». +  * «Разные окна сравнимы по высоте пиков» → только с coherent gain. 
-    * Нет: окно борется с утечкой, шум убирает усреднение. +  * «Больше точек всегда лучше» → разрешение = время, устойчивость = усреднение. 
-  * «БПФ — приближённый метод». +  * «Утечка — баг» → закономерность конечной записи. 
-    * Нет: результат точно совпадает с ДПФ. +  * «Спектрограмма = спектр» → спектрограмма добавляет ось времени.
-  * «Спектры с разными окнами можно сравнивать по высоте пиков». +
-    * Только с учётом coherent gain.+
  
 ---- ----
  
-===== 14. План рассказа на 2 академических часа =====+===== 14. Типичные ошибки в коде (''scipy'') =====
  
-  - **5 мин.** Напомнить ДПФ и его цену ''O(N²)''. +  * Применили окно **дважды**: сначала вручную, потом внутри ''welch''. 
-  - **15 мин.** Идея БПФ, бабочка, бит-реверс, граф, сложность.+  * Передали ''fs'' в герцах, а частоты трактовали как бины (или наоборот). 
 +  * Использовали ''fft'' вместо ''rfft'' для вещественного сигнала (лишняя работа). 
 +  * Забыли ''fftshift'' там, где нужен «центрированный» спектр. 
 +  * Взяли ''nperseg'' больше длины сигнала. 
 +  * Сравнили ''spectrum'' и ''density'' без пересчёта. 
 +  * Не учли coherent gain при измерении амплитуды вручную. 
 +  * Путали ''noverlap'' в отсчётах и в процентах. 
 +  * Строили спектрограмму без ''scaling'', а потом удивлялись уровню. 
 +  * Смотрели амплитуду сигнала до вычета среднего (постоянная составляющая). 
 + 
 +---- 
 + 
 +===== 15. Практические рецепты по задачам ===== 
 + 
 +  * **Аудио (речь, музыка)**: 
 +    * ''nperseg'' 1024–4096, Hann, перекрытие 50%; 
 +    * спектрограмма с окном 512–2048 для событий. 
 +  * **Вибрация / диагностика**: 
 +    * ''nperseg'' 1024–8192, Hann; 
 +    * ищем гармоники и боковые полосы дефектов. 
 +  * **Радио / связь**: 
 +    * окно Hann или Blackman–Harris для слабых сигналов; 
 +    * I/Q, аналитический сигнал. 
 +  * **ЭКГ / биосигналы**: 
 +    * ''nperseg'' небольшой (0.5–2 с) для нестационарности; 
 +    * окно Hann; вычитать постоянную составляющую. 
 +  * **Измерение частоты**: 
 +    * интерполяция пика; при возможности — фазовый метод. 
 + 
 +---- 
 + 
 +===== 16. Мини-лаборатория (что сделать в ноутбуке руками) ===== 
 + 
 +  - Сгенерировать чистый тон ровно в бине и посмотреть ДПФ. 
 +  - Сдвинуть частоту на полбина и увидеть утечку. 
 +  - Применить окно Hann и сравнить боковые лепестки в дБ. 
 +  - Сравнить спектры при ''N = 128'' и ''N = 1024'' (два близких тона). 
 +  - Дополнить нулями и убедиться, что разрешение не улучшилось. 
 +  - Реализовать простой БПФ radix-2 и сверить с ''numpy.fft''. 
 +  - Посчитать ''periodogram'' и ''welch'', сравнить «мохнатость». 
 +  - Построить PSD в ''density'' и ''spectrum'', объяснить разницу. 
 +  - Сделать спектрограмму чирпа и короткого всплеска. 
 +  - Оценить частоту параболической интерполяцией. 
 + 
 +---- 
 + 
 +===== 17. План рассказа на 2 академических часа ===== 
 + 
 +  - **5 мин.** ДПФ и его цена ''O(N²)''. 
 +  - **15 мин.** БПФ: разделяй и властвуй, бабочка, бит-реверс, сложность.
   - **15 мин.** Конечная запись → утечка; окна; компромисс лепестков.   - **15 мин.** Конечная запись → утечка; окна; компромисс лепестков.
   - **15 мин.** Разрешение ''Δf = 1/T''; два тона; миф про zero-padding.   - **15 мин.** Разрешение ''Δf = 1/T''; два тона; миф про zero-padding.
-  - **15 мин.** Уэлч и PSD: зачем усреднять. +  - **15 мин.** Уэлч и PSD: зачем усреднять; ''density'' vs ''spectrum''. 
-  - **15 мин.** Спектрограмма, компромисс время–частота, точная частота.+  - **15 мин.** Спектрограмма; компромисс время–частота; точная частота.
   - **10 мин.** Реальный кейс (вибрация), рецепт ''scipy.signal'', задание №4.   - **10 мин.** Реальный кейс (вибрация), рецепт ''scipy.signal'', задание №4.
  
-**Приём для аудитории:** сначала показать плохую картинку («в лоб»), потом — что +  * **Приём:** сначала плохая картинка, потом — что делает приём. 
-делает каждый приём. Тогда инструмент запоминается как лекарство от конкретной боли.+  * Давать «до/после»: утечка → окно, шум → Уэлч, короткая запись → длинная.
  
 ---- ----
  
-===== 15. Главная мысль =====+===== 18. Вопросы для самопроверки =====
  
-  * Спектр — это не картинка, а **измерение**.+  - Чем БПФ отличается от ДПФ по результату и стоимости? 
 +  - Зачем на входе БПФ бит-реверс? 
 +  - Что физически означает утечка? 
 +  - Почему окно расширяет главный лепесток? 
 +  - Как выбрать окно для слабой линии рядом с сильной? 
 +  - Почему ''Δf = 1/T'', а не связано с ''f_д''? 
 +  - Почему zero-padding не улучшает разрешение? 
 +  - Зачем перекрытие сегментов в Уэлче? 
 +  - Чем ''density'' отличается от ''spectrum''? 
 +  - В чём компромисс время–частота? 
 + 
 +---- 
 + 
 +===== 19. Связь с другими темами курса ===== 
 + 
 +  * **Лекция 2** — непрерывное преобразование Фурье и спектры (идея). 
 +  * **Лекция 3** — ДПФ (что считаем). 
 +  * **Лекция 4** — БПФ и практический спектральный анализ (как считать). 
 +  * **Лекция 5** — модуляция и I/Q (радиосигналы). 
 +  * **Лекции 6+** — фильтры, Z-преобразование, многомерная обработка. 
 + 
 +---- 
 + 
 +===== 20. Итог одной страницей ===== 
 + 
 +  * ДПФ — точный спектр, но ''O(N²)''. 
 +  * БПФ — тот же результат за ''O(N·log N)''. 
 +  * Вход БПФ — бит-реверс; соединение — «бабочки». 
 +  * Конечная запись → утечка; окна → компромисс «разрешение/динамика». 
 +  * Разрешение ''Δf = 1/T''; zero-padding — только интерполяция. 
 +  * Уэлч → устойчивая PSD; спектрограмма → время–частота. 
 +  * Практика — ''scipy.signal'' (''get_window'', ''rfft'', ''welch'', ''spectrogram''). 
 + 
 +---- 
 + 
 +===== 21. Главная мысль и что дальше ===== 
 + 
 +  * Спектр — не картинка, а **измерение**.
   * Чтобы ему верить, мало уметь считать быстро (БПФ).   * Чтобы ему верить, мало уметь считать быстро (БПФ).
-  * Нужно понимать, как его искажают конечная запись и окно. +  * Нужно понимать искажения: 
-  * Нужно уметь отделять реальные линии от артефактов (окна, усреднение, PSD).+    * конечная запись (утечка); 
 +    * выбор окна (разрешение против динамики); 
 +    * шум (дисперсия оценки). 
 +  * И уметь отделять реальные линии от артефактов: 
 +    * окна; 
 +    * усреднение (Уэлч); 
 +    * нормировка PSD. 
 +  * **Дальше (лекция 5):** спектры радиосигналов и модуляция — АМ/ЧМ/ФМ, цифровые 
 +  созвездия, комплексная огибающая (I/Q). 
 + 
 +---- 
 + 
 +====== Приложения ====== 
 + 
 +===== 22. Математика за формулами — словами ===== 
 + 
 +==== 22.1 Почему формула ДПФ именно такая ==== 
 + 
 +  * Ядро ''e^(−j·2π·k·n/N)'' — это «пробная» синусоида, повёрнутая на комплексной 
 +  плоскости. 
 +  * Умножение и суммирование — это мера похожести сигнала на эту синусоиду. 
 +  * Если сигнал содержит эту частоту, произведение даёт постоянную составляющую, 
 +  которая при суммировании накапливается. 
 +  * Если не содержит — произведение колеблется и в сумме даёт почти ноль. 
 +  * Поэтому ДПФ — это корреляция; она «выпячивает» присутствующие частоты. 
 + 
 +==== 22.2 Формула Эйлера — словами ==== 
 + 
 +  * ''e^(jθ) = cosθ + j·sinθ''. 
 +  * Геометрический смысл: точка на **единичной окружности** под углом ''θ''. 
 +  * Мнимая единица ''j'' — поворот на 90°. 
 +  * Отсюда комплексная экспонента — удобный способ «крутить» фазу. 
 +  * Множитель ''e^(−j·2π·k·n/N)'' — это дискретные повороты на равные углы. 
 +  * Для ''N'' точек получается ''N'' равномерно расставленных «стрелок» — базис ДПФ. 
 + 
 +==== 22.3 Умножение во времени = свёртка в спектре ==== 
 + 
 +  * Возьмём произведение двух сигналов: ''z = x · w''. 
 +  * Его спектр равен **свёртке** спектров ''X'' и ''W''. 
 +  * Именно поэтому конечная запись (умножение на окно) «размазывает» спектр. 
 +  * Чем уже спектр окна, тем меньше размазывание. 
 +  * У прямоугольного окна спектр широкий — потому утечка велика. 
 + 
 +==== 22.4 Откуда берётся «заворачивание» и периодичность ==== 
 + 
 +  * Дискретизация во времени делает спектр **периодическим** по частоте. 
 +  * Период повторения — ''f_д''. 
 +  * Поэтому ДПФ можно «центрировать» (''fftshift'') и смотреть отрицательные частоты. 
 +  * Это же свойство объясняет алиасинг: частоты выше ''f_д/2'' накладываются. 
 + 
 +==== 22.5 Откуда ENBW ==== 
 + 
 +  * ENBW показывает, во сколько «бинов» окно собирает шум. 
 +  * Формула ''N·Σw²/(Σw)²'' — отношение энергии квадрата окна к квадрату суммы. 
 +  * Прямоугольное окно «собирает» ровно один бин (ENBW = 1). 
 +  * Более гладкие окна шире — ENBW > 1. 
 +  * Через ENBW нормируют шумовую полку, чтобы она не зависела от окна. 
 + 
 +==== 22.6 Почему разброс Уэлча падает как ''1/√K'' ==== 
 + 
 +  * Каждый сегмент даёт независимую оценку периодограммы. 
 +  * Усреднение ''K'' независимых оценок уменьшает разброс как ''√K''. 
 +  * Поэтому дисперсия падает как ''1/K''. 
 +  * Отсюда правило: чтобы улучшить гладкость вдвое, нужно вчетверо больше сегментов. 
 +  * Расплата — разрешение определяется длиной сегмента, а не всей записи. 
 + 
 +==== 22.7 Равенство Парсеваля ==== 
 + 
 +  * Энергия сигнала во времени равна энергии в спектре (с нормировкой). 
 +  * Практический смысл: вычисления «не теряют» энергию. 
 +  * Полезно для проверки корректности ДПФ/БПФ. 
 + 
 +==== 22.8 Частоты и бины ==== 
 + 
 +  * Бин ''k'' соответствует частоте ''f_k = k·f_д/N''. 
 +  * Шаг сетки ''Δf = f_д/N = 1/T''. 
 +  * Число уникальных бинов: 
 +    * ''N'' для комплексного сигнала; 
 +    * ''N/2 + 1'' для вещественного. 
 + 
 +---- 
 + 
 +===== 23. Вопросы и развёрнутые ответы ===== 
 + 
 +  - **Почему БПФ быстрее, если считает то же самое?** 
 +   Оно переиспользует одни и те же множители за счёт деления задачи пополам; 
 +   число операций становится ''N·log₂N'' вместо ''N²''. 
 + 
 +  - **БПФ даёт другой результат?** 
 +   Нет. Отличия только из-за машинного округления; математически результат тот же. 
 + 
 +  - **Можно ли считать БПФ для любого ''N''?** 
 +   Для ''N = 2^m'' проще всего (radix-2). Для других ''N'' есть mixed-radix и 
 +   специальные алгоритмы; часто проще добить нулями до степени двойки. 
 + 
 +  - **Что делать, если частоты точно не в бинах?** 
 +   Использовать окно (Hann/Blackman–Harris) и/или интерполировать пик. 
 + 
 +  - **Почему у прямоугольного окна боковые только −13 дБ?** 
 +   Это следствие «резкого» обрыва записи; спектр такого окна — медленно затухающий 
 +   ''sinc''. 
 + 
 +  - **Какое окно универсальное?** 
 +   Hann: хороший компромисс между разрешением и динамическим диапазоном. 
 + 
 +  - **Как увидеть слабую линию рядом с сильной?** 
 +   Blackman–Harris (или Hann) + усреднение; при необходимости — вычитание сильной 
 +   линии. 
 + 
 +  - **Почему после zero-padding график гладкий, но пики не разделились?** 
 +   Потому что это интерполяция; новых данных нет. 
 + 
 +  - **Что выбрать: разрешение или меньше шума?** 
 +   Это компромисс: длинный сегмент — лучше разрешение, короткий — меньше шума. 
 + 
 +  - **Сколько нужно данных для устойчивого спектра?** 
 +    Чем больше, тем лучше; ориентир — десятки-сотни сегментов для гладкой PSD. 
 + 
 +  - **Что такое «шумовая полка»?** 
 +    Средний уровень PSD шума; реальные линии — пики над полкой. 
 + 
 +  - **Чем ''density'' отличается от ''spectrum''?** 
 +    ''density'' — мощность на герц (для шума); ''spectrum'' — мощность в бине (для 
 +    линий). 
 + 
 +  - **Почему в дБ?** 
 +    Динамический диапазон спектра огромен; дБ «сжимает» масштаб для глаза. 
 + 
 +  - **Как точно измерить частоту?** 
 +    Интерполяция пика (парабола по логарифму), фазовый метод, Прони/MUSIC. 
 + 
 +  - **Что такое спектрограмма?** 
 +    Спектр во времени: STFT в скользящем окне. 
 + 
 +  - **Почему на спектрограмме нельзя быть точным и по времени, и по частоте?** 
 +    Принцип неопределённости: короткое окно — время, длинное — частота. 
 + 
 +  - **Нужно ли вычитать среднее?** 
 +    Да, постоянная составляющая (нулевая частота) иначе «давит» масштаб. 
 + 
 +  - **Что делать с алиасингом?** 
 +    Ставить антиалиасинговый фильтр до дискретизации и следить за ''f_д/2''. 
 + 
 +  - **Можно ли анализировать нестационарный сигнал одним спектром?** 
 +    Можно, но он «смешает» режимы; лучше спектрограмма. 
 + 
 +  - **Где это применяется в курсе?** 
 +    В сквозном проекте: диагностика по вибрации, акустика, радио (RFID), речь. 
 + 
 +---- 
 + 
 +===== 24. Как читать ноутбук лекции (по шагам) ===== 
 + 
 +  * **Ячейка «стоимость ДПФ/БПФ»**: измеряет время прямого ДПФ и ''np.fft.fft''. 
 +    * Вывод: разрыв растёт с ''N''. 
 +  * **Ячейка «дерево DIT»**: показывает разбиение 8 отсчётов. 
 +  * **Ячейка «бабочка»**: схема соединения двух половин. 
 +  * **Ячейка «граф БПФ»**: три стадии по четыре бабочки. 
 +  * **Ячейка «бит-реверс»**: таблица перестановки индексов. 
 +  * **Ячейка «окна во времени»**: формы окон. 
 +  * **Ячейка «спектры окон»**: главный и боковые лепестки в дБ. 
 +  * **Ячейка «компромисс окна»**: ширина против боковых. 
 +  * **Ячейка «утечка»**: тон между бинами; rect против Hann. 
 +  * **Ячейка «разрешение»**: два тона при ''N = 128'' и ''N = 1024''. 
 +  * **Ячейка «zero-padding»**: гладко, но без нового разрешения. 
 +  * **Ячейка «Уэлч»**: одна периодограмма против усреднённой. 
 +  * **Ячейка «PSD»**: ''density'' против ''spectrum''. 
 +  * **Ячейка «спектрограмма»**: чирп и всплески. 
 +  * **Ячейка «вибрация»**: слабая гармоника 240 Гц. 
 +  * **Ячейка «точная частота»**: параболическая интерполяция. 
 + 
 +---- 
 + 
 +===== 25. Другие инструменты спектрального анализа ===== 
 + 
 +  * **Вейвлеты**: 
 +    * адаптивное окно (широкое на низких частотах, узкое на высоких); 
 +    * хороши для всплесков и нестационарных сигналов. 
 +  * **Банки фильтров**: 
 +    * набор полосовых фильтров; 
 +    * основа аудиокодеков и слуховых моделей. 
 +  * **Параметрические методы (Прони, MUSIC, ESPRIT)**: 
 +    * дают сверхвысокое разрешение для близких тонов; 
 +    * чувствительны к модели и шуму. 
 +  * **Спектральное оценивание через модели** (AR/ARMA): 
 +    * короткие записи, гладкие спектры. 
 +  * **Машинное обучение**: 
 +    * спектрограмма как «картинка» для нейросети; 
 +    * классификация состояний (дефект/норма); 
 +    * важно помнить о физике сигнала. 
 + 
 +---- 
 + 
 +===== 26. Историческая и практическая справка ===== 
 + 
 +  * Идея быстрого ДПФ — фактически у **Гаусса** (около 1805). 
 +  * Широкая известность — **Cooley–Tukey**, 1965. 
 +  * Появление FFTW (1997) сделало БПФ «заводским» стандартом. 
 +  * Сегодня БПФ встроено в процессоры, GPU, DSP и даже микроконтроллеры. 
 +  * В курсе БПФ — рабочий инструмент: от вибродиагностики до радиоприёма. 
 +  * Практический вывод: не изобретать БПФ, а уметь им пользоваться и понимать 
 +  ограничения. 
 + 
 +---- 
 + 
 +===== 27. Полный числовой пример БПФ (N = 4, вручную) ===== 
 + 
 +  * Возьмём ''x = [1, 2, 3, 4]''. 
 +  * **Прямое ДПФ** (для проверки): 
 +    * ''X[0] = 1 + 2 + 3 + 4 = 10''; 
 +    * ''X[1] = 1 + 2·(−j) + 3·(−1) + 4·(j) = −2 + 2j''; 
 +    * ''X[2] = 1 − 2 + 3 − 4 = −2''; 
 +    * ''X[3] = 1 + 2·(j) + 3·(−1) + 4·(−j) = −2 − 2j''. 
 +  * **Через БПФ (radix-2)**: 
 +    * чётные ''[1, 3]'', нечётные ''[2, 4]''; 
 +    * ''E[0] = 1 + 3 = 4'', ''E[1] = 1 − 3 = −2''; 
 +    * ''O[0] = 2 + 4 = 6'', ''O[1] = 2 − 4 = −2''; 
 +    * множитель ''W = e^(−j·π/2) = −j''. 
 +  * Соединяем «бабочками»: 
 +    * ''X[0] = E[0] + O[0] = 10''; 
 +    * ''X[2] = E[0] − O[0] = −2''; 
 +    * ''X[1] = E[1] + W·O[1] = −2 + 2j''; 
 +    * ''X[3] = E[1] − W·O[1] = −2 − 2j''. 
 +  * Результаты **совпали** с прямым ДПФ. 
 +  * Вывод: БПФ — это организация вычислений, а не приближение. 
 +  * Проверить себя: ''np.fft.fft([1,2,3,4])'' даёт те же числа. 
 + 
 +---- 
 + 
 +===== 28. Чек-лист практика: как анализировать спектр ===== 
 + 
 +  - Определить **диапазон** частот, который интересует. 
 +  - Выбрать **частоту дискретизации** (''f_д'' ≥ 2·верхняя частота). 
 +  - Определить нужное **разрешение** ''Δf'' и отсюда длительность ''T''. 
 +  - Решить, **стационарный** ли сигнал (нужна ли спектрограмма). 
 +  - Выбрать **окно** (по умолчанию Hann). 
 +  - Для шумного сигнала — **усреднить** (Уэлч), подобрать ''nperseg''/''noverlap''. 
 +  - Проверить **нормировку** (density/spectrum, coherent gain). 
 +  - Построить спектр в **дБ** и отметить ожидаемые линии. 
 +  - **Уточнить** частоты пиков интерполяцией. 
 +  - Сравнить с **физикой** процесса и сделать вывод. 
 + 
 +---- 
 + 
 +===== 29. Англо-русский глоссарий ===== 
 + 
 +^ Английский ^ Русский ^ 
 +| DFT | ДПФ | 
 +| FFT | БПФ | 
 +| bin | бин, узел сетки | 
 +| window | окно | 
 +| leakage | утечка | 
 +| main lobe | главный лепесток | 
 +| side lobe | боковой лепесток | 
 +| coherent gain | когерентное усиление | 
 +| ENBW | эквивалентная шумовая полоса | 
 +| zero padding | дополнение нулями | 
 +| periodogram | периодограмма | 
 +| Welch method | метод Уэлча | 
 +| PSD | спектральная плотность мощности | 
 +| spectrogram | спектрограмма | 
 +| resolution | разрешение | 
 +| alias / aliasing | наложение / алиасинг | 
 +| bit reversal | бит-реверс | 
 +| radix-2 | основание 2 | 
 +| Nyquist | Найквист | 
 +| decibel (dB) | децибел | 
 + 
 +---- 
 + 
 +===== 30. Ещё вопросы (продолжение) ===== 
 + 
 +  - **Почему ''N'' степень двойки удобно?** Radix-2 требует ''N = 2^m'', и БПФ работает 
 +   без «хвостов» и специальных случаев. 
 +  - **Что будет, если ''N'' простое?** Прямое radix-2 не ляжет; нужны смешанные 
 +   алгоритмы или паддинг. 
 +  - **Влияет ли форма окна на измерение амплитуды?** Да; учитывайте coherent gain. 
 +  - **Сколько бинов у вещественного сигнала?** ''N/2 + 1''. 
 +  - **Зачем ''rfft''?** Вдвое меньше вычислений и памяти для вещественного сигнала. 
 +  - **Что такое «центрированный» спектр?** После ''fftshift'': нулевая частота в 
 +   центре. 
 +  - **Что делать с постоянной составляющей?** Вычесть среднее перед анализом. 
 +  - **Как выбрать ''nperseg''?** Под нужное разрешение; обычно степень двойки. 
 +  - **Что если сигнал не стационарный?** Спектрограмма/вейвлеты. 
 +  - **Как сравнивать два спектра?** Одинаковые окно, длина, нормировка. 
 +  - **Что такое утечка «на практике»?** Кажущиеся линии рядом с реальной. 
 +  - **Почему шум «мохнатый»?** Оценка по одной реализации; нужна статистика. 
 +  - **Как измерить уровень шума?** По шумовой полке PSD. 
 +  - **Зачем нужен ''noverlap''?** Чтобы не терять данные на границах сегментов. 
 +  - **Что читать дальше?** Оппенгейм/Шафер, Сергиенко; статьи Harris и Welch. 
 + 
 +---- 
 + 
 +===== 31. Что студент должен уметь «на выходе» ===== 
 + 
 +  * **Понимание**: 
 +    * объяснить БПФ и его отличие от ДПФ; 
 +    * объяснить утечку и роль окна; 
 +    * объяснить ''Δf = 1/T''; 
 +    * объяснить смысл PSD и Уэлча. 
 +  * **Навыки**: 
 +    * считать спектр в Python (''rfft'', ''welch'', ''spectrogram''); 
 +    * правильно строить ось частот; 
 +    * выбирать окно и параметры усреднения; 
 +    * измерять частоты и амплитуды; 
 +    * отделять реальные линии от артефактов. 
 +  * **Отношение**: 
 +    * спектр — это измерение, а не «картинка для отчёта»; 
 +    * любые выводы проверять на устойчивость (окна, длина, усреднение). 
 + 
 +---- 
 + 
 +===== 32. Разбор по кейсам сквозного проекта ===== 
 + 
 +  * **Диагностика насосного агрегата (вибрация)**: 
 +    * сигнал: ускорение/скорость, десятки-сотни Гц; 
 +    * что искать: оборотная частота, гармоники, боковые полосы дефектов; 
 +    * окно Hann, ''nperseg'' 1024–8192, PSD; 
 +    * вывод: наличие и рост дефекта. 
 +  * **Акустический контроль сварных швов**: 
 +    * сигнал: ультразвук, короткие импульсы; 
 +    * что искать: время прихода, амплитуда, затухание; 
 +    * важно: широкополосность, огибающая, время-частотный анализ. 
 +  * **Мониторинг зоны (RFID + LiDAR)**: 
 +    * RFID: RSSI и фаза, обратное рассеяние; 
 +    * LiDAR: дальность и угол; 
 +    * что искать: присутствие, перемещение, идентичность; 
 +    * далее: слияние сенсоров (фильтр Калмана). 
 +  * **Речевой интерфейс оператора**: 
 +    * сигнал: 16 кГц, речь; 
 +    * что искать: речь/паузы, команды, шум; 
 +    * спектрограмма, мел-признаки, детектор активности (VAD). 
 +  * **Качество электроэнергии (THD)**: 
 +    * сигнал: 50 Гц и гармоники; 
 +    * что искать: коэффициенты гармоник, отклонения; 
 +    * окно и точная синхронизация с периодом сети. 
 +  * **Сейсмоакустический мониторинг**: 
 +    * сигнал: низкие частоты, длинная запись; 
 +    * что искать: события, частотный состав; 
 +    * спектрограмма и усреднение. 
 + 
 +---- 
 + 
 +===== 33. Методические заметки для преподавателя ===== 
 + 
 +  * **Начинать с «боли»**: показать плохой спектр и спросить, что не так. 
 +  * **Демонстрировать «до/после»**: 
 +    * утечка → окно; 
 +    * шум → Уэлч; 
 +    * короткая запись → длинная. 
 +  * **Давать руками**: пусть студент сам поменяет окно и увидит разницу. 
 +  * **Типичные ошибки студентов**: 
 +    * путают диапазон и разрешение; 
 +    * верят zero-padding; 
 +    * сравнивают спектры с разными окнами; 
 +    * забывают о нормировке; 
 +    * не вычитают постоянную составляющую. 
 +  * **Как проверять понимание**: 
 +    * попросить объяснить, почему пик стал шире/ниже; 
 +    * попросить выбрать окно под задачу и обосновать; 
 +    * попросить отличить реальную линию от артефакта. 
 +  * **Связь с практикой**: каждый приём привязать к реальной задаче проекта. 
 +  * **Оценивание**: ноутбук с графиками + один слайд-вывод с обоснованием выбора. 
 + 
 +---- 
 + 
 +===== 34. «Формула → смысл» — короткая шпаргалка ===== 
 + 
 +  * ''X[k] = Σ x[n]·e^(−j2πkn/N)'' → корреляция с синусоидой частоты ''k''. 
 +  * ''f_k = k·f_д/N'' → реальная частота бина ''k''. 
 +  * ''Δf = f_д/N = 1/T'' → разрешение задаёт время записи. 
 +  * ''W_N = e^(−j2π/N)'' → «шаг» поворота на комплексной плоскости. 
 +  * ''X[k] = E[k] + W·O[k]'' → «бабочка» соединения половин. 
 +  * ''cosθ = (e^(jθ)+e^(−jθ))/2'' → у вещественного тона две линии ±f. 
 +  * ''y = x * h'' (свёртка) → умножение спектров (и наоборот). 
 +  * ''PSD = |W|²/(f_д·ENBW)'' → нормировка мощности на герц. 
 +  * ''δ = ½·(y₋₁ − y₊₁)/(y₋₁ − 2y₀ + y₊₁)'' → поправка частоты пика. 
 +  * ''O(N²)'' → ''O(N·log₂N)'' → суть выигрыша БПФ. 
 + 
 +---- 
 + 
 +===== 35. Аналогии и метафоры (чтобы объяснить любому) ===== 
 + 
 +  * **Спектр** — призма/радуга: разложение сложного на простое. 
 +  * **ДПФ** — «подбор частоты»: угадываем, какие ноты спрятаны в аккорде. 
 +  * **БПФ** — тот же подбор, но умнее: не перебираем, а делим пополам. 
 +  * **Бабочка** — «развилка»: одно число идёт вверх и вниз. 
 +  * **Бит-реверс** — «перепутанные карточки», которые раскладывают заранее. 
 +  * **Утечка** — «размазывание»: фильтр с крутыми краями плодит «звёздочки». 
 +  * **Окно** — мягкая диафрагма: убирает «звёздочки», но чуть размывает. 
 +  * **Главный лепесток** — толщина «карандаша», которым рисуем линию. 
 +  * **Боковые лепестки** — «эхо» карандаша по бокам. 
 +  * **Zero-padding** — «лупа на той же картинке»: больше точек, но не больше деталей. 
 +  * **Разрешение** — «бинокль и время»: близкое различает наблюдение, а не увеличение. 
 +  * **Уэлч** — «усреднить сто измерений», чтобы успокоить случайность. 
 +  * **PSD** — «мощность на герц»: сколько энергии в каждой «щели» спектра. 
 +  * **Спектрограмма** — «партитура во времени»: видно, когда какая нота звучит. 
 +  * **Порог Найквиста** — «скорость съёмки»: слишком быстрое движение «заворачивается». 
 + 
 +---- 
 + 
 +===== 36. Частые вопросы о дискретизации и Найквисте ===== 
 + 
 +  * **Что такое частота Найквиста?** Верхняя частота ''f_д/2'', которую можно корректно 
 +  оцифровать без алиасинга. 
 +  * **Почему именно половина?** Чтобы описать синусоиду, нужно минимум два отсчёта на 
 +  период (один — «вверх», один — «вниз»). 
 +  * **Что происходит выше ''f_д/2''?** Частота «заворачивается» и притворяется низкой — 
 +  это алиасинг. 
 +  * **Как с ним бороться?** Антиалиасинговый фильтр **до** АЦП. 
 +  * **Можно ли поднять ''f_д'' и «улучшить» всё?** Шире диапазон — да; разрешение при 
 +  том же ''T'' — нет. 
 +  * **Сколько отсчётов нужно?** Столько, сколько даёт нужную длительность ''T = N/f_д''. 
 +  * **Зачем anti-alias, если можно фильтровать цифрового?** Уже поздно: алиасинг 
 +  необратим. 
 +  * **Как связано ''T'' и число периодов?** Чем больше периодов в записи, тем «резче» 
 +  линия на спектре. 
 + 
 +---- 
 + 
 +===== 37. Практические значения параметров для железа курса ===== 
 + 
 +  * **ESP32-C3, АЦП 12 бит**: 
 +    * ''f_д'' до десятков кГц; 
 +    * квантование даёт шум; полезно усреднять. 
 +  * **Микрофон I2S (звук)**: 
 +    * ''f_д'' 16 или 48 кГц; 
 +    * Hann, ''nperseg'' 1024–4096, спектрограмма для событий. 
 +  * **LiDAR (сканы)**: 
 +    * по сути «сигнал» в пространстве (дальность/угол); 
 +    * фильтрация выбросов, а не частотный анализ в первом приближении. 
 +  * **RFID 800 МГц**: 
 +    * RSSI и фаза во времени; 
 +    * фильтрация и сглаживание, спектр для периодических помех. 
 +  * **Вибрация (акселерометр)**: 
 +    * ''f_д'' 1–10 кГц; 
 +    * Hann, PSD, усреднение; ищем гармоники. 
 +  * **Питающая сеть (THD)**: 
 +    * синхронизация с 50 Гц, окно на целое число периодов. 
 +  * Общее правило: **сначала понять сигнал и частоты**, потом выбирать параметры. 
 + 
 +---- 
 + 
 +===== 38. Что делать, если «не получается» (траблшутинг) ===== 
 + 
 +  * **Пик не на ожидаемой частоте**: 
 +    * проверьте ось частот (''fftfreq''/''rfftfreq'', ''fs'', ''fftshift''); 
 +    * не перепутаны ли бины и герцы; 
 +    * нет ли алиасинга (частота выше ''f_д/2''). 
 +  * **Спектр «слишком мохнатый»**: 
 +    * это одна периодограмма; примените Уэлч; 
 +    * увеличьте число сегментов (меньше ''nperseg''). 
 +  * **Слабые линии не видны**: 
 +    * возьмите окно с низкими боковыми (Hann/Blackman–Harris); 
 +    * усредните; уменьшите постоянную составляющую; 
 +    * проверьте, не «тонут» ли линии в боковых лепестках сильной. 
 +  * **Амплитуда «неправильная»**: 
 +    * учтите coherent gain; 
 +    * правильно выберите ''density''/''spectrum''; 
 +    * проверьте нормировку ''|X|/N'' или ''2|X|/N''. 
 +  * **Две близкие частоты сливаются**: 
 +    * увеличьте длительность записи ''T'' (не ''f_д''); 
 +    * используйте окно с узким главным лепестком; 
 +    * при необходимости — параметрические методы. 
 +  * **Спектрограмма «пустая» или «шумная»**: 
 +    * проверьте ''scaling'' и перевод в дБ; 
 +    * подберите длину окна (компромисс время–частота). 
 +  * **Результаты не повторяются от запуска к запуску**: 
 +    * так и должно быть для шума; усредняйте; 
 +    * фиксируйте генератор случайных чисел для воспроизводимости. 
 +  * **БПФ «медленное»**: 
 +    * берите ''N'' степенью двойки; 
 +    * используйте ''rfft'' для вещественного сигнала; 
 +    * не считайте БПФ в цикле Python без необходимости. 
 + 
 +---- 
 + 
 +===== 39. Итог ===== 
 + 
 +  * Лекция отвечает на два вопроса: «как считать **быстро**» (БПФ) и «как считать 
 +  **правильно**» (окна, разрешение, усреднение). 
 +  * Ключевые опоры: 
 +    * ''O(N²) → O(N log N)''; 
 +    * ''Δf = 1/T''; 
 +    * компромисс «главный/боковые лепестки»; 
 +    * ''1/√K'' у метода Уэлча. 
 +  * Всё это — рабочие инструменты спектрального анализа, а не абстракция. 
 +  * Дальше: лекция 5 — модуляция и I/Q; лекции 6+ — фильтры и системы. 
 + 
 +---- 
 + 
 +===== 40. Как строить выводы (научная добросовестность) =====
  
-**Дальше:** лекция 5 — спектры радиосигналов и модуляция (АМ/ЧМ/ФМ), комплексная +  * **Не верить одной картинке**: повторите с другим окном, длиной, усреднением. 
-огибающая (I/Q).+  * **Фиксировать параметры**: окно, ''N'', ''fs'', ''nperseg'' — записывать в отчёт. 
 +  * **Проверять устойчивость**: реальная линия не должна «прыгать» при смене окна. 
 +  * **Отличать артефакт от сигнала**: 
 +    * гармоники кратных частот — вероятно, реальны; 
 +    * «частокол» вокруг сильной линии — вероятно, боковые лепестки. 
 +  * **Проверять физику**: измеренная частота должна объясняться процессом. 
 +  * **Указывать погрешность**: ''Δf'', точность амплитуды, число усреднений. 
 +  * **Не подгонять вывод**: если данных мало — сказать, что данных мало. 
 +  * **Помнить о цели**: спектр нужен для **решения**, а не для красоты. 
 +  * **Связь с проектом**: каждый вывод — это шаг к рекомендации для человека.
  
 ===== Материалы ===== ===== Материалы =====
Line 272: Line 1281:
   * {{sp:lecture04_lecture.pdf|Текст лекции 4 (PDF)}}   * {{sp:lecture04_lecture.pdf|Текст лекции 4 (PDF)}}
   * {{sp:lecture04_essence.pdf|Конспект «Суть лекции 4» (PDF)}}   * {{sp:lecture04_essence.pdf|Конспект «Суть лекции 4» (PDF)}}
 +  * {{sp:sig-prog-lecture04-2026-10-08.zip|Раздаточный архив (ZIP, все исходники)}}
  
sp/lec4.txt · Last modified: by 127.0.0.1