この記事で行うこと
サンプリング定理をpythonで実際に書いてみました。サンプリング定理は
サンプリング定理は$ |\omega| \geq W $で$ F(\omega) = 0 $のとき(これを信号$ f(t) $は帯域幅$ W $に帯域制限されているという)サンプリング間隔$ \tau = \frac{\pi}{W}$のサンプル点$ {t_k} $でのサンプル値$ {f_k} $のみから$ f(t) $を再現できる。 $$ f(t) = \sum_{k = -\infty}^{\infty} f_ksinc \frac{t - t_k}{\tau} $$実験
``` import numpy as np import matplotlib.pyplot as plt import cmath ``` ライブラリのインポートx = np.arange(-10 * cmath.pi, 10 * cmath.pi, 0.05)
y1 = np.sin(x)
y2 = 2 * np.sin(2 * x + cmath.pi)
y3 = 2 * np.sin(2 * cmath.pi * x + cmath.pi)
y = y1 + y2 + y3 #合成波
今回は三つの簡単な波の合成を使用する
y_1 = sin(x)\\
y_2 = 2sin(2x + \pi)\\
y_3 = 2sin(2\pi x + \pi)
これが合成波グラフです。
t = 0.4 #サンプリング周期
n = len(x)
Y = []
for i in range(n):
y_tmp = 0
for j in range(n):
y_tmp += y[j] * np.sinc((x[i] - x[j]) / t)
Y.append(y_tmp)
波が完全に復元できていることが分かります。
t = 5 #サンプリング周期
n = len(x)
Y = []
for i in range(n):
y_tmp = 0
for j in range(n):
y_tmp += y[j] * np.sinc((x[i] - x[j]) / t)
Y.append(y_tmp)
サンプリング周期は$ 0.5 $より小さくないと(0.5はダメ)復元することはできません。