計算機網絡課程講到物理層,布置作業的第一題是求f(t)=t (0≤t≤1)的傅里葉系數。
我們知道任何一個周期函數都可以被傅里葉級數逼近。如果是實值函數,則可以用正弦分量,余弦分量,直流分量來近似。公式如下:$$f(x)=\frac{a_0}{2}+\sum_{n=1}^{\infty}(a_n cosnx+b_n sinnx)$$
利用正余弦函數的正交性反變換可得到f(x)的系數。本題中認為函數周期是1,進行延拓可以看成是無數個f(t)沿着x軸平移。
簡單計算得$a_0=1$, $a_n=0$, $b_n=-\frac{1}{\pi n}$ 至此題目結束。
但是我想練習一下最近自己剛剛接觸到的numpy和matplotlib,於是動手寫了一個python小程序想看看擬合的效果是什么樣的。效果圖和代碼如下。
import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 1, 100) y_ = np.zeros_like(x) y = x y_ = y_ + 0.5 for n in range(1, 11): y_ = y_ - 1/np.pi/n * np.sin(2*np.pi*x*n) plt.plot(x, y, label='y=x') plt.plot(x, y_, label='approximation') plt.xlabel('x') plt.ylabel('y') plt.title("CFS") plt.legend() plt.show()
代碼一直擬合到十階分量。可看到效果還是不錯的,增加x采樣點可以增加圖像平滑