Alterna · учебный материал
11.4 Те же данные через частоты
Разложим сигнал на колебательные составляющие. Частоты не добавляют новые измерения, а дают другой способ описать прежние.
Что в этом материале
- Та же операция в другом представлении
Содержание и основные понятия
На предыдущей странице: что меняется без переворота окна.
Разложим сигнал на колебательные составляющие. Частоты не добавляют новые измерения, а дают другой способ описать прежние.
Маленькое окно проходит по сигналу или изображению. Каждый выход складывается из чисел окна и общих коэффициентов. Частотная запись описывает те же данные иначе.
Для изменения рисунка включитеJavaScript; расчёт и теория доступны далее.
Та же операция в другом представлении
DFT преобразуетNотсчётов вNкомплексных коэффициентов:
X
[
k
]
=
∑
n
=
0
N
−
1
x
[
n
]
e
−
2
π
i
k
n
/
N
.
X[k]=\sum_{n=0}^{N-1}x[n]e^{-2\pi i kn/N}.
X
[
k
]
=
n
=
0
∑
N
−
1
x
[
n
]
e
−
2
πikn
/
N
.
В прямом преобразовании этой главы нет множителя1/N; он используется в обратном. Для отображения magnitude мы отдельно показываем |X[k]|/N. H08 фиксирует знак, нормировку и порядок положительных/отрицательных frequency bins. Прямой алгоритм лаборатории O(N²) — это
DFT, не FFT
.
Для x=[1,0,−1,0] коэффициенты равны[0,2,0,2]. При периоде4 основная ненулевая пара соответствует частотам±1/4цикла на отсчёт. Число2 в спектре не означает амплитуду2 исходного косинуса: положительная и отрицательная части делят вклад.
Для linear convolution верноY=XH, если обе последовательности дополнить нулями хотя бы доN+K−1. Без достаточного дополнения произведение DFT описывает circular convolution, где хвост заворачивается. Лаборатория вычисляет обе стороны тождества независимо и показывает residual.
Эксперимент.
Для h=[.5,.5] частотный отклик H(ω)=.5+.5e^-iω: приω0он1, приωπон0. Это объясняет подавление чередующегося сигнала. Конечное окно наблюдения и непопадание частоты вbin могут создавать leakage; маленькие ненулевые численные остатки также не следует путать с новой физической частотой.
from cmath import exp
from math import pi
x=[1,0,-1,0]
X=[sum(v*exp(-2j*pi*k*n/4) for n,v in enumerate(x)) for k in range(4)]
assert max(abs(a-b) for a,b in zip(X,[0,2,0,2]))<1e-12
Код повторяет только что разобранные операции.
Полный проверяемыйPython-пример главы
доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.
Без L≥N+K−1 получается circular convolution с заворачиванием.
Двумерное окно изображения. Как этот вопрос продолжает полученный результат?
Python-примеры главы 11
Академическая база →