Математика

Теорема Котельникова

Начнём с архипростого примера, а именно: представим себе синусоиду, задаваемую формулой

y\displaystyle y =Asin(2πft)\displaystyle {} = A \cdot \sin(2 \pi f t)
(1)

где AA — амплитуда, ff — частота, а независимая переменная tt пробегает отрезок [0;1][0;\, 1]. На графике такая синусоида выглядит ещё более тривиально.

Один период синусоиды с отмеченными пересечениями оси времени и двумя произвольными точками t₁ и t₂
Рис. 1 — один период синусоиды y = A·sin(2πft).

Любую синусоиду, которая задаётся формулой (1), можно эффективно хранить в виде двух чисел — частоты и амплитуды, а значит, чтобы «сжать» синусоиду, надо по графику на одном периоде определить эти числа. Делается такое с помощью решения системы уравнений

y1\displaystyle y_1 =Asin(2πft1)\displaystyle {} = A \cdot \sin(2 \pi f t_1)y2\displaystyle y_2 =Asin(2πft2)\displaystyle {} = A \cdot \sin(2 \pi f t_2)
(2)

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

Тут напрашивается возражение: а как вычислять частоту, если для этого нужны две точки внутри периода, а самого периода мы ещё не знаем? Вопрос резонный, но ответ простой: я меряю с той частотой, которую умеет прибор, — пусть это fsf_s отсчётов в секунду, — беру два соседних отсчёта, решаю систему (2) и получаю ff. Если вычисленная частота оказалась хотя бы вдвое меньше частоты измерения, то есть fffs/2{} \le f_s / 2, то шаг измерения и правда уложился внутрь периода дважды — значит, всё посчитано корректно.

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

Сначала немного слов о ряде Фурье: нас интересует переход из временной области в частотную и возврат обратно. Итак, пусть сигнал y(t)y(t) периодичен с периодом TT, а частоту nn-й гармоники обозначим fnf_n=n/T{} = n / T. Соответствующая круговая частота — ωn\omega_n=2πfn{} = 2 \pi f_n. Переход в область частот — это два набора коэффициентов, и каждый считается своим интегралом

an\displaystyle a_n =2T0Ty(t)cos(ωnt)dt\displaystyle {} = \frac{2}{T} \int_0^T y(t)\, \cos(\omega_n t)\, dtbn\displaystyle b_n =2T0Ty(t)sin(ωnt)dt\displaystyle {} = \frac{2}{T} \int_0^T y(t)\, \sin(\omega_n t)\, dtAn\displaystyle A_n =an2+bn2\displaystyle {} = \sqrt{a_n^2 + b_n^2}
(3)

а обратно сигнал собирается суммированием всех этих гармоник

y(t)\displaystyle y(t) =a02\displaystyle {} = \frac{a_0}{2}+n=1[ancos(ωnt)+bnsin(ωnt)]\displaystyle {} + \sum_{n=1}^{\infty} \big[ a_n \cos(\omega_n t) + b_n \sin(\omega_n t) \big]
(4)

Свободный член a0/2a_0 / 2 — среднее значение сигнала. Частоты ωn\omega_n стоят на решётке с шагом 2π/T2 \pi / T, так что спектр периодического сигнала — это просто список амплитуд A1,A2,A3,A_1, A_2, A_3, \ldots.

Рис. 2 — частичная сумма ряда (4) для прямоугольного сигнала.

Как можно видеть, чем больше гармоник — тем ближе сигнал к исходному (про явление Гиббса сознательно умолчим, так как это не тема нашей статьи). Получается, что при оцифровке сигнала всегда теряется некоторая часть его спектра. Иногда это даже хорошо — так убирают высокочастотный шум и сглаживают, — но я опять же не про это. Я про то, что сигнал с ограниченным спектром полностью определяется своими значениями, взятыми с круговой частотой дискретизации ωs\omega_s=2πfs{} = 2 \pi f_s2ωmax{} \ge 2 \omega_{\max}, где ωmax\omega_{\max} — верхняя граница его спектра. То, что я сформулировал выше, было давным-давно сформулировано В. А. Котельниковым аж в 1933 году. Независимо от него ту же теорему получили и другие: границу вдвое выше верхней частоты сигнала указал Гарри Найквист ещё в 1928 году, а Клод Шеннон в 1949 году опубликовал своё доказательство и встроил её в фундамент теории информации — поэтому в западной литературе теорему чаще называют теоремой Найквиста—Шеннона.

Для полного раскрытия вопроса надо бы рассмотреть, каким образом сигнал из спектра восстанавливается обратно. Но сперва чуть-чуть подстелем соломки — напишем всем известные тригонометрические формулы.

sinα\displaystyle \sin \alphasinβ\displaystyle {} - \sin \beta=2cosα+β2sinαβ2\displaystyle {} = 2 \cos\frac{\alpha+\beta}{2} \cdot \sin\frac{\alpha-\beta}{2}cosβ\displaystyle \cos \betacosα\displaystyle {} - \cos \alpha=2sinα+β2sinαβ2\displaystyle {} = 2 \sin\frac{\alpha+\beta}{2} \cdot \sin\frac{\alpha-\beta}{2}cosαcosβ\displaystyle \cos \alpha \cdot \cos \beta+sinαsinβ\displaystyle {} + \sin \alpha \cdot \sin \beta=cos(αβ)\displaystyle {} = \cos(\alpha - \beta)
(5)

Дальше нам жизненно необходимо ядро Дирихле — замкнутая формула для суммы вида 12\frac{1}{2}+n=1Mcos(nx){} + \sum_{n=1}^{M} \cos(n x), поэтому выведем его сразу. Умножим эту сумму на 2sin(x/2)2 \sin(x/2) и раскроем каждое слагаемое первой формулой из (5) — в ней α\alpha=(n+1/2)x{} = (n + 1/2) x, β\beta=(n1/2)x{} = (n - 1/2) x

2sinx2[12+n=1Mcos(nx)]\displaystyle 2 \sin\frac{x}{2} \cdot \left[ \frac{1}{2} + \sum_{n=1}^{M} \cos(n x) \right] =sinx2\displaystyle {} = \sin\frac{x}{2}+n=1M[sin((n+12)x)\displaystyle {} + \sum_{n=1}^{M} \biggl[ \sin\Big(\big(n + \tfrac{1}{2}\big) x\Big)sin((n12)x)]\displaystyle {} - \sin\Big(\big(n - \tfrac{1}{2}\big) x\Big) \biggr]=sin((M+12)x)\displaystyle {} = \sin\Big(\big(M + \tfrac{1}{2}\big) x\Big)

сумма телескопическая: внутренние слагаемые попарно уничтожаются, крайние — сокращаются с sin(x/2)\sin(x/2) слева. Осталось поделить обе части на 2sin(x/2)2 \sin(x/2) — это и есть ядро Дирихле

12\displaystyle \frac{1}{2}+n=1Mcos(nx)\displaystyle {} + \sum_{n=1}^{M} \cos(n x)=sin((M+1/2)x)2sin(x/2)\displaystyle {} = \frac{\sin\big((M + 1/2) x\big)}{2 \sin(x/2)}
(6)

Соломка постелена. Теперь рассмотрим произвольный сигнал и его оцифрованную версию: значения снимаются в моменты времени kΔtk \Delta t с равным шагом Δt\Delta t.

Непрерывный сигнал и его отсчёты, взятые с равным шагом, отмеченные точками на кривой
Рис. 3 — непрерывный сигнал y(t) измеряется в моменты времени kΔt.

Измеренный сигнал — это просто набор чисел y(kΔt)y(k \Delta t), и записать его можно через функции Хевисайда θ(t)\theta(t) — ступеньки, равные нулю при tt<0{} < 0 и единице при tt0{} \ge 0: каждый отсчёт держит своё значение до следующего, и вся лестница оказывается линейной комбинацией сдвинутых ступенек

ys(t)\displaystyle y_s(t) =k=0N1y(kΔt)[θ(tkΔt)θ(t(k+1)Δt)]\displaystyle {} = \sum_{k=0}^{N-1} y(k \Delta t)\, \big[ \theta(t - k \Delta t) - \theta\big(t - (k+1) \Delta t\big) \big]
(7)

Теперь перенесём нашу лестницу в спектральную область, для чего вычислим коэффициенты по формуле (3). Возьмём косинусный коэффициент; внутри периода лежат NN=T/Δt{} = T / \Delta t ступенек — нумеруем их с нуля, от kk=0{} = 0 до kk=N{} = N1{} - 1, — и интеграл по периоду распадается на NN интегралов по шагам, в каждом из которых значение сигнала постоянно и выносится за знак интеграла

an\displaystyle a_n =2Tk=0N1y(kΔt)kΔt(k+1)Δtcos(ωnt)dt\displaystyle {} = \frac{2}{T} \sum_{k=0}^{N-1} y(k \Delta t) \int_{k \Delta t}^{(k+1) \Delta t} \cos(\omega_n t)\, dt
an\displaystyle a_n =2ωnTk=0N1y(kΔt)[sin(ωn(k+1)Δt)sin(ωnkΔt)]\displaystyle {} = \frac{2}{\omega_n T} \sum_{k=0}^{N-1} y(k \Delta t) \Big[ \sin\big(\omega_n (k+1) \Delta t\big) - \sin(\omega_n k \Delta t) \Big]
(8)

по аналогии для синусного коэффициента получаем

bn\displaystyle b_n =2ωnTk=0N1y(kΔt)[cos(ωnkΔt)cos(ωn(k+1)Δt)]\displaystyle {} = \frac{2}{\omega_n T} \sum_{k=0}^{N-1} y(k \Delta t) \Big[ \cos(\omega_n k \Delta t) - \cos\big(\omega_n (k+1) \Delta t\big) \Big]
(9)

свернём разности в (8) и (9) первыми двумя формулами из (5): полусумма аргументов здесь — середина шага, а полуразность одна и та же для всех kk; обозначим

tk\displaystyle t_k =(k+12)Δt,\displaystyle {} = \left(k + \frac{1}{2}\right) \Delta t,Λn\displaystyle \Lambda_n=sin(ωnΔt/2)ωnΔt/2\displaystyle {} = \frac{\sin(\omega_n \Delta t / 2)}{\omega_n \Delta t / 2}
an\displaystyle a_n =2ΔtTΛnk=0N1y(kΔt)cos(ωntk)\displaystyle {} = \frac{2 \Delta t}{T}\, \Lambda_n \sum_{k=0}^{N-1} y(k \Delta t)\, \cos(\omega_n t_k)bn\displaystyle b_n =2ΔtTΛnk=0N1y(kΔt)sin(ωntk)\displaystyle {} = \frac{2 \Delta t}{T}\, \Lambda_n \sum_{k=0}^{N-1} y(k \Delta t)\, \sin(\omega_n t_k)a0\displaystyle a_0 =2ΔtTk=0N1y(kΔt)\displaystyle {} = \frac{2 \Delta t}{T} \sum_{k=0}^{N-1} y(k \Delta t)b0\displaystyle b_0 =0\displaystyle {} = 0
(10)

Обратите внимание на Λn\Lambda_n — это плата за дискретизацию. По первому замечательному пределу, чем ниже частота сигнала или чем меньше интервал Δt\Delta t, тем ближе Λn\Lambda_n к единице. Из (10) видно, что лестница даёт нужные нам суммы по отсчётам, умноженные на Λn\Lambda_n, — значит, чтобы получить сами суммы, (10) надо на Λn\Lambda_n поделить. А теперь пора возвращаться из частотной области во временну́ю.

У сигнала с ограниченным спектром гармоник выше ωmax\omega_{\max} нет, поэтому сумма (4) обрывается: последняя гармоника — та, у которой ωn\omega_n=ωmax{} = \omega_{\max}, то есть nn=M{} = M=ωmaxT/(2π){} = \omega_{\max} T / (2 \pi)

y(t)\displaystyle y(t) =a02\displaystyle {} = \frac{a_0}{2}+n=1M[ancos(ωnt)+bnsin(ωnt)]\displaystyle {} + \sum_{n=1}^{M} \big[ a_n \cos(\omega_n t) + b_n \sin(\omega_n t) \big]
(11)

подставим сюда (10), поделённое на Λn\Lambda_n, и поменяем порядок суммирования — сначала по отсчётам, потом по гармоникам

y(t)\displaystyle y(t) =2ΔtTk=0N1y(kΔt)(12\displaystyle {} = \frac{2 \Delta t}{T} \sum_{k=0}^{N-1} y(k \Delta t) \Biggl( \frac{1}{2}+n=1M[cos(ωntk)cos(ωnt)+sin(ωntk)sin(ωnt)])\displaystyle {} + \sum_{n=1}^{M} \big[ \cos(\omega_n t_k) \cdot \cos(\omega_n t) + \sin(\omega_n t_k) \cdot \sin(\omega_n t) \big] \Biggr) y(t)\displaystyle y(t) =2ΔtTk=0N1y(kΔt)(12+n=1Mcos(ωn(ttk)))\displaystyle {} = \frac{2 \Delta t}{T} \sum_{k=0}^{N-1} y(k \Delta t) \left( \frac{1}{2} + \sum_{n=1}^{M} \cos\big(\omega_n (t - t_k)\big) \right)

а эту сумму косинусов мы уже умеем складывать — это ядро Дирихле (6) при xx=2πu/T{} = 2 \pi u / T, где uu=t{} = ttk{} - t_k — расстояние от точки tt до середины шага

12\displaystyle \frac{1}{2}+n=1Mcos(ωnu)\displaystyle {} + \sum_{n=1}^{M} \cos\big(\omega_n u\big)=sin(π(2M+1)u/T)2sin(πu/T)\displaystyle {} = \frac{\sin\big(\pi (2M + 1) u / T\big)}{2 \sin(\pi u / T)}

осталось отпустить период в бесконечность — вместе с ним растут и число гармоник MM, и число отсчётов NN=T/Δt{} = T / \Delta t. В знаменателе sin(πu/T)\sin(\pi u / T)πu/T{} \to \pi u / T, в числителе π(2M+1)u/T\pi (2M + 1) u / T2πMu/T{} \to 2 \pi M u / T=ωmaxu{} = \omega_{\max} u, а множитель 2Δt/T2 \Delta t / T против 2πu/T2 \pi u / T даёт Δt/(πu)\Delta t / (\pi u). При Δt\Delta t=π/ωmax{} = \pi / \omega_{\max} — шаге дискретизации ровно на границе ωs\omega_s=2ωmax{} = 2 \omega_{\max} — всё сходится начисто

2ΔtTsin(π(2M+1)u/T)2sin(πu/T)  \displaystyle \frac{2 \Delta t}{T} \cdot \frac{\sin\big(\pi (2M + 1) u / T\big)}{2 \sin(\pi u / T)} \;   sin(ωmaxu)ωmaxu\displaystyle {} \longrightarrow \; \frac{\sin(\omega_{\max} u)}{\omega_{\max} u}

сумма по отсчётам одного периода в этом пределе становится суммой по всем целым kk, а uu=t{} = ttk{} - t_k раскрывается как ttΔt/2{} - \Delta t / 2kΔt{} - k \Delta t

y(t)\displaystyle y(t) =k=y(kΔt)sin(ωmax(tΔt/2kΔt))ωmax(tΔt/2kΔt)\displaystyle {} = \sum_{k=-\infty}^{\infty} y(k \Delta t)\, \frac{\sin\big(\omega_{\max} (t - \Delta t / 2 - k \Delta t)\big)}{\omega_{\max} (t - \Delta t / 2 - k \Delta t)}

во всех слагаемых аргумент сдвинут на Δt/2\Delta t / 2 — ровно на полшага. Отнесём отсчёт к началу его шага, то есть сдвинем время на Δt/2\Delta t / 2 назад, и сдвиг исчезнет

y(t)\displaystyle y(t) =k=y(kΔt)sin(ωmax(tkΔt))ωmax(tkΔt)\displaystyle {} = \sum_{k=-\infty}^{\infty} y(k \Delta t)\, \frac{\sin\big(\omega_{\max} (t - k \Delta t)\big)}{\omega_{\max} (t - k \Delta t)}
(12)

Это и есть ряд Котельникова — вторая половина теоремы: мало знать, что отсчётов достаточно, нужен явный рецепт, как из отсчётов собрать сигнал в любой момент времени, в том числе между ними. Ряд (12) — такой рецепт и есть.

Присмотримся к sinu/u\sin u / u. Она сдвинута в узел kΔtk \Delta t и растянута так, что её нули попадают во все остальные узлы решётки: в своём узле она равна единице, во всех чужих — нулю (рис. 4). Отсюда видно, зачем ряд устроен именно так: в любом узле tt=mΔt{} = m \Delta t все слагаемые, кроме одного, обращаются в ноль, а единственное выжившее — слагаемое с kk=m{} = m — даёт ровно y(mΔt)y(m \Delta t). Ряд гарантированно проходит через все отсчёты.

График функции sinc: единица в нуле и нули во всех узлах решётки
Рис. 4 — базисная функция ряда Котельникова.

Вот как это выглядит на примере сигнала с рис. 3. Ползунок добавляет слагаемые ряда (12) по одному: каждый отсчёт приносит свою функцию sinu/u\sin u / u, умноженную на значение отсчёта, и сумма этих слагаемых шаг за шагом собирается в исходный сигнал. Отсчётов у нас всего семь, а ряд бесконечный, поэтому у краёв отрезка восстановленная кривая от исходной отходит — это плата за обрыв ряда.

Рис. 5 — исходный сигнал рис. 3 (пунктир) и его восстановление рядом (12).