Подробное объяснение «на пальцах»: зачем нужна лекция, что она решает, откуда берутся формулы и что означают картинки. Материал рассчитан и на подготовку преподавателя, и на самостоятельное чтение студентом: от первых понятий до практических рецептов и разбора ошибок.
lecture04.ipynb.log₂N уровней.Δf = 1/T и почему zero-padding не улучшает разрешение.Зачем каждый пункт на практике:
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;|X[k]| — амплитуда (насколько «громко» звучит частота).arg X[k] — фаза (с каким сдвигом присутствует).|X[k]|² — мощность составляющей.+f и −f.rfft).+f.симметричны положительным.
f_k = k·f_д/N, где f_д — частота дискретизации.Δf = f_д/N.fftfreq (двусторонняя) и rfftfreq (односторонняя).f_д = 8000 Гц, N = 8 → Δf = 1000 Гц; бины 0, 1000, …, 7000 Гц.X[k] — это N произведений и сложений.N → итого N² операций (квадратичная сложность O(N²)).N = 44 100, N² ≈ 1.9·10⁹.N ещё больше. 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 и становится астрономическим.O(N²) — время растёт как квадрат длины: удвоили N — время вчетверо.O(N·log₂N) — почти линейно: удвоили N — время чуть больше, чем вдвое.N разница между кривыми определяет, «успеем или нет».O(N·log₂N) вместо O(N²).N чётно.x[0], x[2], x[4], …;x[1], x[3], x[5], ….E[k] — спектр чётных;O[k] — спектр нечётных;W.
(W_N² = W_(N/2)).
log₂N; отсюда множитель log₂N.T(N) = 2·T(N/2) + O(N).O(N·log₂N).W^(k+N/2) = −W^k;W^(2k) = W_(N/2)^k.X[k] = E[k] + W·O[k];X[k + N/2] = E[k] − W·O[k].W·O[k] прибавляется и вычитается.x = [x0, x1, x2, x3].[x0, x2], нечётные [x1, x3].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).W.N = 8 экономия ещё заметнее.0,2,4,6) и нечётные (1,3,5,7).1 = 001₂ → 100₂ = 4.N = 8: 0, 4, 2, 6, 1, 5, 3, 7.X[0..7].X[0..7] в обычном порядке.N = 2^m.N.N — смешанные алгоритмы или округление до степени двойки.rfft, вдвое дешевле.N степенью двойки.T секунд.sinc).−13 дБ) — плохо для слабых сигналов.f_д = 8000 Гц, N = 256 → Δf = 31.25 Гц.| Окно | Главный лепесток | Боковые лепестки | Когда брать |
|---|---|---|---|
Прямоугольное (boxcar) | 2 бина | −13 дБ | максимальная резкость, чистые тона |
| Hann | 4 бина | −31 дБ | «рабочая лошадка», общий анализ |
| Hamming | 4 бина | −43 дБ | чуть больше динамического диапазона |
| Blackman–Harris | 8 бинов | −92 дБ | слабая линия рядом с сильной |
| flat-top | 10 бинов | −93 дБ | точная амплитуда (калибровка) |
scipy.signal.welch учитывает их автоматически.Δf = f_д / N, а так как T = N / f_д, то Δf = 1 / T.Δf — минимальное расстояние, различимое по построению.f_д/2, частота Найквиста).Δf.f_д → шире диапазон, но разрешение (при том же T) не улучшится.различаем».
f_д / 2.Δf.≈ 2Δf.N = 128 → Δf = 62.5 Гц → сливаются.N = 1024 → Δf ≈ 7.8 Гц → два пика.T (главное). Длительность T | Δf = 1/T |
|---|---|
| 0.1 с | 10 Гц |
| 0.5 с | 2 Гц |
| 1 с | 1 Гц |
| 10 с | 0.1 Гц |
N ≥ N_a + N_b − 1.|X|² неустойчива; разброс не падает с ростом N.|·|².√K (K — число сегментов).nperseg (длина сегмента):noverlap (перекрытие): обычно 50% (nperseg // 2).nperseg — желательно степень двойки.f_д / nperseg должно быть достаточно мелким.K = 1 → как одна периодограмма (шумно).K = 10 → заметно глаже.K = 100 → устойчивая кривая.1/√K: чтобы улучшить в 2 раза, нужно в 4 раза больше сегментов.Δf.welch.scaling='density' → «мощность²/Гц» (для шумов и широкополосных сигналов).scaling='spectrum' → «мощность² в бине» (для дискретных линий).PSD = |W|² / (f_д · ENBW).welch это уже учтено.[f1, f2] ≈ сумма PSD по этой полосе, умноженная на шаг Δf.10·log10(PSD).| Отношение мощностей | В дБ |
|---|---|
| ×2 | +3 |
| ×10 | +10 |
| ×100 | +20 |
| ×1000 | +30 |
| ×10⁶ | +60 |
density и spectrum на одном графике.Δf при переходе к мощности в полосе.Δf; истина может быть между бинами.δ (от −0.5 до +0.5 бина).f₀ ≈ (k + δ)·Δf.| Термин | Что означает |
|---|---|
| ДПФ | N чисел → N чисел спектра |
| БПФ | быстрый алгоритм того же ДПФ, O(N log N) |
| Бабочка | операция соединения двух половин спектра |
| Бит-реверс | перестановка входа БПФ |
| Окно | плавное обрезание записи |
| Утечка | размазывание линии из-за конечности записи |
| Главный лепесток | ширина пика → разрешение |
| Боковые лепестки | «хвосты», мешают видеть слабые линии |
| Coherent gain | поправка на амплитуду |
| ENBW | поправка на шум (эквивалентная шумовая полоса) |
| Разрешение | Δf = 1/T |
| Zero-padding | интерполяция, а не разрешение |
| Периодограмма | квадрат модуля БПФ одной записи |
| Метод Уэлча | усреднение периодограмм по сегментам |
| PSD | мощность на герц |
| Спектрограмма | спектр во времени (STFT) |
| Бин | узел частотной сетки ДПФ |
| Найквист | верхняя частота f_д/2 |
f_д — улучшу разрешение» → нет, разрешение задаёт T.welch.fs в герцах, а частоты трактовали как бины (или наоборот).fft вместо rfft для вещественного сигнала (лишняя работа).fftshift там, где нужен «центрированный» спектр.nperseg больше длины сигнала.spectrum и density без пересчёта.noverlap в отсчётах и в процентах.scaling, а потом удивлялись уровню.nperseg 1024–4096, Hann, перекрытие 50%;nperseg 1024–8192, Hann;nperseg небольшой (0.5–2 с) для нестационарности;N = 128 и N = 1024 (два близких тона).numpy.fft.periodogram и welch, сравнить «мохнатость».density и spectrum, объяснить разницу.O(N²).Δf = 1/T; два тона; миф про zero-padding.density vs spectrum.scipy.signal, задание №4.Δf = 1/T, а не связано с f_д?density отличается от spectrum?O(N²).O(N·log N).Δf = 1/T; zero-padding — только интерполяция.scipy.signal (get_window, rfft, welch, spectrogram).созвездия, комплексная огибающая (I/Q).
e^(−j·2π·k·n/N) — это «пробная» синусоида, повёрнутая на комплекснойплоскости.
которая при суммировании накапливается.
e^(jθ) = cosθ + j·sinθ.θ.j — поворот на 90°.e^(−j·2π·k·n/N) — это дискретные повороты на равные углы.N точек получается N равномерно расставленных «стрелок» — базис ДПФ.z = x · w.X и W.f_д.fftshift) и смотреть отрицательные частоты.f_д/2 накладываются.N·Σw²/(Σw)² — отношение энергии квадрата окна к квадрату суммы.K независимых оценок уменьшает разброс как √K.1/K.k соответствует частоте f_k = k·f_д/N.Δf = f_д/N = 1/T.N для комплексного сигнала;N/2 + 1 для вещественного.Оно переиспользует одни и те же множители за счёт деления задачи пополам;
число операций становится ''N·log₂N'' вместо ''N²''.
Нет. Отличия только из-за машинного округления; математически результат тот же.
N?
Для N = 2^m проще всего (radix-2). Для других N есть mixed-radix и
специальные алгоритмы; часто проще добить нулями до степени двойки.
Использовать окно (Hann/Blackman–Harris) и/или интерполировать пик.
Это следствие «резкого» обрыва записи; спектр такого окна — медленно затухающий
''sinc''.
Hann: хороший компромисс между разрешением и динамическим диапазоном.
Blackman–Harris (или Hann) + усреднение; при необходимости — вычитание сильной
линии.
Потому что это интерполяция; новых данных нет.
Это компромисс: длинный сегмент — лучше разрешение, короткий — меньше шума.
Чем больше, тем лучше; ориентир — десятки-сотни сегментов для гладкой PSD.
Средний уровень PSD шума; реальные линии — пики над полкой.
density отличается от spectrum?
density — мощность на герц (для шума); spectrum — мощность в бине (для
линий).
Динамический диапазон спектра огромен; дБ «сжимает» масштаб для глаза.
Интерполяция пика (парабола по логарифму), фазовый метод, Прони/MUSIC.
Спектр во времени: STFT в скользящем окне.
Принцип неопределённости: короткое окно — время, длинное — частота.
Да, постоянная составляющая (нулевая частота) иначе «давит» масштаб.
Ставить антиалиасинговый фильтр до дискретизации и следить за f_д/2.
Можно, но он «смешает» режимы; лучше спектрограмма.
В сквозном проекте: диагностика по вибрации, акустика, радио (RFID), речь.
np.fft.fft.N.N = 128 и N = 1024.density против spectrum.ограничения.
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.[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]) даёт те же числа.f_д ≥ 2·верхняя частота).Δf и отсюда длительность T.nperseg/noverlap.| Английский | Русский |
|---|---|
| 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) | децибел |
N степень двойки удобно? Radix-2 требует N = 2^m, и БПФ работаетбез «хвостов» и специальных случаев.
N простое? Прямое radix-2 не ляжет; нужны смешанныеалгоритмы или паддинг.
N/2 + 1.rfft? Вдвое меньше вычислений и памяти для вещественного сигнала.fftshift: нулевая частота вцентре.
nperseg? Под нужное разрешение; обычно степень двойки.noverlap? Чтобы не терять данные на границах сегментов.Δf = 1/T;rfft, welch, spectrogram);nperseg 1024–8192, PSD;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) → суть выигрыша БПФ.f_д/2, которую можно корректнооцифровать без алиасинга.
период (один — «вверх», один — «вниз»).
f_д/2? Частота «заворачивается» и притворяется низкой —это алиасинг.
f_д и «улучшить» всё? Шире диапазон — да; разрешение при
том же T — нет.
T = N/f_д.необратим.
T и число периодов? Чем больше периодов в записи, тем «резче»линия на спектре.
f_д до десятков кГц;f_д 16 или 48 кГц;nperseg 1024–4096, спектрограмма для событий.f_д 1–10 кГц;fftfreq/rfftfreq, fs, fftshift);f_д/2).nperseg).density/spectrum;|X|/N или 2|X|/N.T (не f_д);scaling и перевод в дБ;N степенью двойки;rfft для вещественного сигнала;O(N²) → O(N log N);Δf = 1/T;1/√K у метода Уэлча.N, fs, nperseg — записывать в отчёт.Δf, точность амплитуды, число усреднений.