scipy.signal 信號-卷積
數字信號處理作為 信息與計算科學專業與電子信息科學專業的基礎課, 可以說尤為重要, 而且覆蓋面廣. 對數學分析功底的要求較為深刻.
scipy.signal 將其分為如下小塊
Convolution卷積
B-splinesB 樣條
Filter Design濾波設計
Continuous-Time Linear Systems連續時間線性系統
Discrete-Time Linear Systems離散時間線性系統
LTI RepresentationsLTI 表示
Wavelets小波分析
Peak finding峰值點
Spectral Analysis譜分析
以及電腦系統的彈窗包 Windows
# 卷積:
#一維卷積signal.convolve(in1, in2, mode="full", method="auto")
參數介紹
in1第一信號
in2第二信號
mode輸出模式
``full`` 輸出為滿離散線性卷積
``valid`` 與 in1或in2 相同維度,輸出不依賴於 小波零填充
``same``與in1維度相同
method 卷積方法
"fft" 快速傅立葉法
""direct"" 定義法
"auto" 自動選擇fft或者direct法
from scipy import signal
import numpy as np
import matplotlib.pyplot as plt
t=np.arange(-1,1,0.1)
n=t.size
in1=1-t**2
in2=np.zeros(n)
for i in range(n):
in2[i]=1-abs(round(t[i]))
filtered=signal.convolve(in1, in2, mode="same")/sum(in2)
plt.plot(filtered)
plt.plot(in1,"o-")
plt.plot(in2,"o-")
plt.show()
# 二維卷積 convolve2d(in1, in2, mode="full", boundary="fill", fillvalue=0) 通常用於圖像處理
from scipy import misc
ascent = misc.ascent()
scharr = np.array([[ 1, 3, 1],[3, 10, 3],[1,3,1]]) # Gx + j*Gy
grad = signal.convolve2d(ascent, scharr, boundary="symm", mode="same")
fig, (ax_orig, ax_mag, ax_ang) = plt.subplots(1, 3, figsize=(12, 30))
ax_orig.imshow(ascent, cmap="gray")
ax_ang.imshow(, cmap="gray")
plt.show()
調用自己的圖像請參照鏈接:scipy.misc 圖像處理包
fftconvolve與convolve用法類似, 但是只能使用傅立葉卷積
一維互相關correlate(in1, in2, mode="full", method="auto")
調用參數基本與convolve類似
二維互相關 correlate2d(in1, in2, mode="full", boundary="fill", fillvalue=0)
調用參數基本與convolve2d類似
#sepfir2d()可分卷積變換
from scipy import signal
from scipy import misc
import numpy as np
import matplotlib.pyplot as plt
ascent = misc.ascent()
hrol=np.sin(np.linspace(0,np.pi*2,64))
hcol=np.cos(np.linspace(0,np.pi*2,64))
g=signal.sepfir2d(ascent,hrol,hcol)
plt.subplot(1,2,1)
plt.imshow(g)
plt.title("sepfir2d")
plt.subplot(1,2,2)
plt.imshow(ascent)
plt.title("origin")
plt.show()


TAG:shuxueyun |