章節
scipy.signal模塊專門用於信號處理。
重新采樣
scipy.signal.resample()
函數使用FFT將信號重采樣成n個點。
示例
import numpy as np
t = np.linspace(0, 5, 100)
x = np.sin(t)
from scipy import signal
x_resampled = signal.resample(x, 25)
import matplotlib.pyplot as plt
plt.plot(t, x)
plt.plot(t[::4], x_resampled, 'ko')
# plt.savefig('./sig1-1.png') # 保存要顯示的圖片
plt.show()
輸出
去除趨勢
scipy.signal.detrend()
函數從信號中去除線性趨勢。
示例
import numpy as np
t = np.linspace(0, 5, 100)
x = t + np.random.normal(size=100)
from scipy import signal
x_detrended = signal.detrend(x)
import matplotlib.pyplot as plt
plt.plot(t, x)
plt.plot(t, x_detrended)
# plt.savefig('./sig2-1.png') # 保存要顯示的圖片
plt.show()
輸出
濾波
對於非線性濾波,scipy.signal模塊中提供了中值濾波scipy.signal.medfilt()
, 維納濾波scipy.signal.wiener()
。濾波的使用,可參考圖像處理章節,不再贅述。
頻譜分析
scipy.signal.spectrogram()
計算連續時間窗上的頻譜圖scipy.signal.welch()
計算功率譜密度(PSD)