Період 2\pi
- Фур'є
- Припустімо, що f(t) має період 2\pi, тоді \begin{equation} f(t) = \frac{a_0}{2} + \sum_{n=1}^{\infty}\left(a_n\cos(nt) + b_n \sin(nt)\right)\label{eq:FourierPi} \end{equation} де коефіцієнти a_0, a_1, \dots, b_1, \dots обчислюються так: \begin{align} a_n &= \frac{1}{\pi}\int_{-\pi}^{\pi}f(t)\cos(nt)dt\label{eq:anpi}\\ b_n &= \frac{1}{\pi}\int_{-\pi}^{\pi}f(t)\sin(nt)dt\label{eq:bnpi}\\ \end{align} Знак рівності може не виконуватись в місцях розривів функції.
- Означення
- В \eqref{eq:FourierPi} частота n=1 називається фундаментальною, частоти з n > 1 називаються гармоніками.
Ортогональність базису
\int_{-\pi}^{\pi}\cos(nt)\cos(nt)dt = \frac{1}{2} \int_{-\pi}^{\pi}\cos^2(nt)+\sin^2(nt)dt = \frac{1}{2}n2\frac{\pi}{n}=\pi Через це \pi ми і ділимо в \eqref{eq:anpi} і \eqref{eq:bnpi} на \pi.Тепер розглянемо з n\neq m: \begin{align} \int_{-\pi}^{\pi}\cos(nt)\cos(mt)dt &= \frac{1}{2}\int_{-\pi}^{\pi}\left(\cos((n+m)t) + \cos((n-m)t)\right)dt &= 0\\ \int_{-\pi}^{\pi}\sin(nt)\cos(mt)dt &= \frac{1}{2}\int_{-\pi}^{\pi}\left(\sin((n+m)t) + \sin((n-m)t)\right)dt &= 0\\ \end{align}
Період 2L
- Фур'є
- Тепер припустимо, що f(t) має період P = 2L. Тоді ряд Фур'є набуває вигляду \begin{equation} f(t) = \frac{a_0}{2} + \sum_{n=1}^{\infty}\left(a_n\cos(n\frac{\pi}{L}t) + b_n\sin(n\frac{\pi}{L}t)\right). \end{equation} А коефіцієнти такого: \begin{align} a_n &= \frac{L}{\pi}\int_{-L}^{L}f(t)\cos(n\frac{\pi}{L}t)dt\\ b_n &= \frac{L}{\pi}\int_{-L}^{L}f(t)\sin(n\frac{\pi}{L}t)dt\\ \end{align}
Дискретне перетворення Фур'є (ДПФ)
Базис в \mathbb{C}^N
Розглянемо вектори \mathbf{w}^{(k)} = [\dots, e^{j\frac{2\pi}{N}ik}, \dots]'. Фундаментальною частотою тут буде \frac{2\pi}{N}k. Можна побачити, що складові вектора \mathbf{w}^{(1)} роблять один оборот навколо одиничного кола. Найшвидше ми рухаємось по колу коли k = N/2 далі, зі збільшенням k швидкість падає, а ознакою того що фундаметальна частота перетнула \pi буде протилежний знак уявної частини.- Базис в \mathbb{C}^N
- N сигналів \mathbf{w}^{(k)}_n = e^{j\frac{2\pi}{N}nk}, де n,k \in [0, N) - це ортогональний базис в \mathbb{C}^N.
Частоти базису
Якщо розглянути як складові базисних векторів рухаються уздовж одиничного кола, то помітно, що спочатку зі сростанням індексу базисного вектора маркер, що позначає складову, рухається все швидше, досягаючі найбільшої швидкості коли k = N/2 - 1 і k = N/2 для парного N. Після цього ми спостерігаємо ефект колеса з фільмів, тобто коли колесо крутиться в зворотній бік, це пов'язано з частотою кадрів. Так і тут, коли маркер робить більше ніж півоберта за крок, то нам здається, що він обертається в зворотньому напрямку з меншою швидкістю.Python-код генерації анімації.
import numpy as np import matplotlib.pylab as plt from matplotlib.animation import FuncAnimation N = 32 t1 = np.linspace(0,N-1,N) t10 = np.linspace(0,N-1,N*10) fig, (ax1, ax2) = plt.subplots(2,1) fig.set_tight_layout(True) ax1.set_xlim(-1,N) ax2.set_xlim(-1,N) def update(k): ax1.cla() ax2.cla() ax1.set_ylabel("Re") ax2.set_ylabel("Im") if (k < N): if k < N/2: ax1.plot(t10, np.cos(2*np.pi/N*(k)*t10)) ax2.plot(t10, np.sin(2*np.pi/N*(k)*t10)) else: ax1.plot(t10, np.cos(2*np.pi/N*(N - k)*t10)) ax2.plot(t10, -np.sin(2*np.pi/N*(N - k)*t10)) ax1.set_title('Базисний вектор #' + str(k) + ' в С^' + str(N)) markerline, stemlines, baseline = ax1.stem(t1, np.cos(2*np.pi/N*k*t1)) plt.setp(baseline, color='black', linewidth=2) plt.setp(markerline, color='orange') plt.setp(stemlines, color='orange', linewidth=2) markerline, stemlines, baseline = ax2.stem(t1, np.sin(2*np.pi/N*k*t1), 'violet') plt.setp(baseline, color='black', linewidth=2) plt.setp(markerline, color='orange') plt.setp(stemlines, color='orange', linewidth=2) anim = FuncAnimation(fig, update, frames=np.arange(0, N-1 + 5), interval=1000) plt.show()
До коефіцієнтів і назад
\begin{equation} X_k = \langle\mathbf{w}^{(k)},\mathbf{x}\rangle\label{eq:analysis}. \end{equation} \begin{equation} \mathbf{x} = \frac{1}{N}\sum_{k=0}^{N-1}X_k\mathbf{w}^{(k)}\label{eq:synthesis}. \end{equation}Зміна базису в матричній формі
Ми можемо записати зміну базису в матричній формі. Якщо позначити W=e^{-j\frac{2\pi}{N}}, то \begin{equation} \mathbf{W} = \begin{bmatrix} 1 & 1 & 1 & \dots & 1\\ 1 & W & W^2 & \dots & W^{N-1}\\ 1 & W^2 & W^4 & \dots & W^{2(N-1)}\\ \vdots & \vdots & \vdots & \ddots & \vdots\\ 1 & W^{N-1} & W^{2(N-1)} & \dots & W^{(N-1)^2}\\ \end{bmatrix} \end{equation} Фактично, в кожному рядку маємо спряжений до базового вектора. Тепер формули \eqref{eq:analysis} і \eqref{eq:synthesis} можна записати в матричній формі: \begin{equation} \mathbf{X} = \mathbf{W}\mathbf{x}. \end{equation} \begin{equation} \mathbf{x} = \frac{1}{N}\mathbf{W}^H\mathbf{X}. \end{equation}Перетворення Фур'є дискретного часу (ПФДЧ)
Якщо збільшувати кількість точок зростає, то фундаментальна частота 2\pi/N стає дуже малою і, чисто інтуїтивно, ми можемо казати, що \lim_{N\to\infty}(2\pi/N)k = \omega.- Формально
-
- x[n] \in l_2(\mathbb{Z}) (сумовна з квадратом послідовність)
- означимо функцію \begin{equation} F(\omega) = \sum_{n=-\infty}^{\infty}x[n]e^{-j\omega n}\label{eq:dtft} \end{equation}
- обернена (коли F(\omega) існує): \begin{equation} x[n] = \frac{1}{2\pi}\int_{-\pi}^{\pi}F(\omega)e^{j\omega n}d\omega,\quad n\in\mathbb{Z}\label{eq:idtft} \end{equation}
Властивості
- лінійність: \begin{equation}\mbox{ПФДЧ}\{\alpha x[n] + \beta y[n]\} = \alpha X(e^{j\omega})+\beta Y(e^{j\omega})\end{equation}
- часовий зсув: \begin{equation}\mbox{ПФДЧ}\{x[n-M]\} = e^{-j\omega M}X(e^{j\omega})\label{eq:dtft_timeshift}\end{equation}
- модуляція: \begin{equation}\mbox{ПФДЧ}\{e^{j\omega_0 n} x[n]\} = X(e^{j(\omega - \omega_0)})\label{eq:dtft_modulation}\end{equation}
- зворотній час: \begin{equation}\mbox{ПФДЧ}\{x[-n]\} = X(e^{-j\omega})\end{equation}
- спряження: \begin{equation}\mbox{ПФДЧ}\{x^*[n]\} = X^*(e^{-j\omega})\end{equation}
ПФДЧ одиниці
Очевидно, що стала 1 несумовна з квадратом. Але \mbox{ДПФ}\{1\} = N\delta[n]. Було б добре могти обчислити її ПФДЧ. Для цього нам знадобиться дельта-функція Дірака. В ній нас цікавить така властивість: \begin{equation} (\delta; f) = \int_{-\infty}^{+\infty}\delta(x-a)f(x)dx = f(a), \end{equation} де f(x) - це будь-яка неперервна функція. Таким чином ми можемо видобути значення функції в будь-якій точці.Нам потрібно застосовувати дельта-функцію Дірака в просторі 2\pi-періодичних функцій, тому нам потрібна така послідовність імпульсів:
\begin{equation} \tilde{\delta}(\omega) = 2\pi\sum_{k=-\infty}^{\infty}\delta(\omega-2\pi k) \end{equation}Python-код генерації зображення
import matplotlib.pyplot as plt import numpy as np import matplotlib.ticker as tckr f,(ax,ax2)=plt.subplots(2,1) ax2.axis('off') x=np.linspace(-4*np.pi,4*np.pi,5) y=[1,1,1,1,1] ax.stem(x/np.pi,y, markerfmt='^') ax.xaxis.set_major_formatter(tckr.FormatStrFormatter('%g $\pi$')) ax.xaxis.set_major_locator(tckr.MultipleLocator(base=1.0)) plt.show()
Python-код для відображення частинних сум
import matplotlib.pyplot as plt import numpy as np from matplotlib.animation import FuncAnimation fig, ax = plt.subplots(1,1) N = 500 x = np.linspace(-np.pi, np.pi, N) def update(k): re = np.zeros(N) im = np.zeros(N) for n in range(-k, k+1): re += np.cos(x*n) im += np.sin(x*n) y = np.multiply(re, re) + np.multiply(im, im) y = np.sqrt(y) ax.cla() ax.set_title('Частинні суми k = ' + str(k)) ax.set_xlim(-np.pi, np.pi) ax.set_ylim(0,100) ax.plot(x, y); anim = FuncAnimation(fig, update, frames=np.arange(0, 50), interval=100) plt.show()
Вбудовування сигналу скінченної довжини
Природне спектральне представлення сигналу скінченної довжини це ДПФ (X[k]). Існує два способи вбудувати такий сигнал в нескіченну послідовність:- періодичне продовження: \tilde{x}[n] = n[n\mod N]
- продовження зі скінченним носієм: \bar{x}[n] = \begin{cases} x[n] & 0\le n \le N-1\\ 0 & \mbox{інакше}\\ \end{cases}
Зараз ми розглянемо зв'язок між ДПФ скінченного сигналу X[n] і ПФДЧ продовженого сигналу \tilde{X}(e^{j\omega}).
Немає коментарів:
Дописати коментар