数字信号处理作为 信息与计算科学专业与电子信息科学专业的基础课, 可以说尤为重要, 而且覆盖面广. 对数学分析功底的要求较为深刻.
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()
领取专属 10元无门槛券
私享最新 技术干货