實驗一: Python 程式語言初見面

用滑鼠點選以下程式碼,並按下"Play"鈕執行看看結果

若想要在家中電腦執行以下程式,請前往 https://store.continuum.io/cshop/anaconda/ 下載Anaconda Python 軟體

實驗開始步驟:

(1)點右上角按鈕下載此份文件"ipython notebook"

(2)將 SandS_lab1.ipynb 存放至"我的文件"

(3)按下開始工具列->附屬應用程式->命令提示字元 來開啟命令列視窗

(4)於命令列鍵入 ipython notebook 指令來開啟 Jupyter 視窗

(5)開啟SandS_lab1.ipynb 開始以下實驗作答

In [1]:
#coding: utf-8
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

x=np.array([0,0,0,0,1,1,1,1,0,0,0,0])
plt.plot(x,'ro-')
Out[1]:
[<matplotlib.lines.Line2D at 0x2a802706b38>]

問題一

(1)按加號新增一個"Markdown"區塊,描述你看到了什麼。
(2)再按加號新增一個"code"區塊,嘗試畫出 "三個帽子"的波形
(按加號後,點選 'Cell Toolbar' 左方是下拉式選單,選擇 CODE)


實驗二: Python 之資料顯示以及np 陣列

用滑鼠點選以下程式碼,並按下"Play"鈕執行看看結果

In [5]:
#coding: utf-8
import numpy as np

t=np.arange(0,1,0.1)
print(t)
print("這是 np.arange(0,1,0.1)的結果:" + str(t))
print("加上一些換行字元\n\n\n" + "換行的結果是這樣\n")
t=np.arange(0,1,0.01)
print("這是 np.arange(0,1,0.01)的結果:")
print(t)
sumt=sum(np.arange(0,10,1))
print("\n\n\n這是 sum(np.arange(0,10,1))的結果:" +str(sumt))
[ 0.   0.1  0.2  0.3  0.4  0.5  0.6  0.7  0.8  0.9]
這是 np.arange(0,1,0.1)的結果:[ 0.   0.1  0.2  0.3  0.4  0.5  0.6  0.7  0.8  0.9]
加上一些換行字元


換行的結果是這樣

這是 np.arange(0,1,0.01)的結果:
[ 0.    0.01  0.02  0.03  0.04  0.05  0.06  0.07  0.08  0.09  0.1   0.11
  0.12  0.13  0.14  0.15  0.16  0.17  0.18  0.19  0.2   0.21  0.22  0.23
  0.24  0.25  0.26  0.27  0.28  0.29  0.3   0.31  0.32  0.33  0.34  0.35
  0.36  0.37  0.38  0.39  0.4   0.41  0.42  0.43  0.44  0.45  0.46  0.47
  0.48  0.49  0.5   0.51  0.52  0.53  0.54  0.55  0.56  0.57  0.58  0.59
  0.6   0.61  0.62  0.63  0.64  0.65  0.66  0.67  0.68  0.69  0.7   0.71
  0.72  0.73  0.74  0.75  0.76  0.77  0.78  0.79  0.8   0.81  0.82  0.83
  0.84  0.85  0.86  0.87  0.88  0.89  0.9   0.91  0.92  0.93  0.94  0.95
  0.96  0.97  0.98  0.99]



這是 sum(np.arange(0,10,1))的結果:45

問題二

新增一個"Markdown"區塊,將以下問題之答案寫下來。
(1)請推論 np.arange 這個函數的用處,以及三個輸入值的意義。
(2)新增一個"code"區塊,利用python 程式碼,計算100以下偶數之總合。


實驗三 : 弦波的頻率以及繪圖

用滑鼠點選以下程式碼,並按下"Play"鈕執行看看結果

In [6]:
#coding: utf-8
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

t=np.arange(0,1,0.01)
pi=np.pi
curve=np.sin(2*pi*10*t);
curve2=np.sin(2*pi*5*t);
plt.plot(t,curve,'b',t,curve2,'r');

問題三

(1)假設橫軸時間單位為秒,請問curve及curve2各為幾Hz弦波(也就是在一秒內走了幾個週期)?
(新增一個"Markdown"區塊,回答此問題)

(2)又我們如何改變指令,畫出一個 3 Hz的Cosine波呢?
(新增一個"CODE"區塊,回答此問題)


實驗四 : 影像運算

用滑鼠點選以下程式碼,並按下"Play"鈕執行看看結果

In [1]:
#coding: utf-8
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

x=np.array([0,0,0,1,1,1,1,0,0,0])
y=np.array([x,x,x,x,x,x,x,x,x,x])
print(y)
print(y.shape)
plt.figure(1)
plt.imshow(y,cmap='gray',interpolation='nearest')
y=np.array([x/5.,x/4.,x/3.,x/2.,x/1.,x,x,x,x,x])
plt.figure(2)
plt.imshow(y,cmap='gray',interpolation='nearest')
[[0 0 0 1 1 1 1 0 0 0]
 [0 0 0 1 1 1 1 0 0 0]
 [0 0 0 1 1 1 1 0 0 0]
 [0 0 0 1 1 1 1 0 0 0]
 [0 0 0 1 1 1 1 0 0 0]
 [0 0 0 1 1 1 1 0 0 0]
 [0 0 0 1 1 1 1 0 0 0]
 [0 0 0 1 1 1 1 0 0 0]
 [0 0 0 1 1 1 1 0 0 0]
 [0 0 0 1 1 1 1 0 0 0]]
(10, 10)
Out[1]:
<matplotlib.image.AxesImage at 0x1e282fb39e8>

問題四

  • (1)請問y 矩陣的大小為何?
  • (2)試完成一個10x10的矩陣,顯示一個白色十字。
  • (新增一個"CODE"區塊,回答此問題)

實驗五 FIR三點平均 濾波器

用滑鼠點選以下程式碼,並按下"Play"鈕執行看看結果

In [16]:
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
n=np.arange(100)
w_hat=0.5
x_n=np.exp(1.0j*w_hat*n)
x_n_1=np.exp(1j*w_hat*(n-1))
x_n_2=np.exp(1j*w_hat*(n-2))
y=(x_n+x_n_1+x_n_2)/3

plt.figure(figsize=(15,5), dpi=300)
plt.plot(np.real(x_n),'r*-')
plt.plot(np.real(x_n_1),'g*-')
plt.plot(np.real(x_n_2),'b*-')

params = {'backend': 'ps',
          'xtick.labelsize': 24,
          'ytick.labelsize': 24,}
plt.rcParams.update(params)

plt.figure(figsize=(15,5), dpi=300)
plt.plot(np.real(x_n_2),'r*-')
plt.plot(np.real(y),'b*-')
print ("Amplitude: %f" % np.abs(y)[0])

params = {'backend': 'ps',
          'xtick.labelsize': 24,
          'ytick.labelsize': 24,}
plt.rcParams.update(params)
Amplitude: 0.918388
In [11]:
ii=0
for w_hat in np.arange(-np.pi,np.pi,0.1):
    x_n=np.exp(1j*w_hat*n)
    x_n_1=np.exp(1j*w_hat*(n-1))
    x_n_2=np.exp(1j*w_hat*(n-2))
    y=(x_n*1/3+x_n_1*1/3+x_n_2*1/3)

    if ii==0:
        w_hat_all=np.array(w_hat)
        y_abs=np.array(np.abs(y)[0])
    else:
        w_hat_all=np.append(w_hat_all,w_hat)
        y_abs=np.append(y_abs,np.abs(y)[0])
 
    ii+=1
  
plt.plot(w_hat_all,y_abs)
Out[11]:
[<matplotlib.lines.Line2D at 0x2a803306978>]

問題五

(1) 三點平均濾波器是何種濾波器?

(2) 嘗試將頻率測試範圍由-pi~pi 改成-3pi~3pi 結果為何?

(3) 嘗試畫出y[n]=x[n]-x[n-1]之頻率響應