Python模块(7)-SciPy 简易使用教程
生活随笔
收集整理的這篇文章主要介紹了
Python模块(7)-SciPy 简易使用教程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
SciPy 簡易使用教程
- 1. 符號計算
- 2. 函數向量化
- 3. 波形處理scipy.signal
- 3.1 濾波器
- 3.2 波峰定位
基于numpy的一個高級模塊,為數學,物理,工程等方面的科學計算提供無可替代的支持。
做重要的思想是:符號計算和函數向量化
1. 符號計算
demo: n次多項式的表示,以及計算
from scipy import poly1dp = poly1d([3, 4, 5]) # p(x) = 3x^2 + 4x + 5 print(p) print(p * p) # p*p = 9x^4 + 24x^3 + 46x^2 + 40x + 25 print(p.integ(k=6)) # 求p(x)的不定積分,指定常數項為6 print(p.deriv()) # 求p(x)的一階導數: 6x + 4 print(p([4, 5])) # 求p(4),p(5)的結果輸出
2 3 x + 4 x + 54 3 2 9 x + 24 x + 46 x + 40 x + 253 2 1 x + 2 x + 5 x + 66 x + 4 [ 69 100]2. 函數向量化
demo: 寫一個支持向量操作函數
def addsubtract(a, b):# 結合scipy的函數實現向量操作if a > b:return a - belse:return a + b vec_addsubtract = np.vectorize(addsubtract) print(vec_addsubtract([0, 3, 6, 9], [1, 3, 5, 7])) vec_poly1d = np.vectorize(p) print(vec_poly1d([4, 5])) # 輸出結果和p([4, 5]) 是一致的3. 波形處理scipy.signal
3.1 濾波器
基本低通、高通、帶通、帶阻濾波器,關鍵點是計算Wn。假設采樣頻率為1000hz,信號本身最大的頻率為500hz,要濾除400hz以上頻率成分,即截止頻率為400hz,則wn=2*400/1000=0.8。Wn=0.8
數字信號Wn=1NT?21W_n =\frac{\frac{1}{N_T} * 2}{1}Wn?=1NT?1??2? 其中 N_T 為一個周期內的采樣點數
濾波器的階數: 物理上理解,有幾個濾波器串聯。
疑問:濾波器的數字實現、頻率濾波器和均值濾波器的關系。
參考文檔:Python實現信號濾波(基于scipy)
3.2 波峰定位
from scipy.signal import find_peaks x = [......] # 波形信號 peaks, _ = find_peaks(x, height=0) # 高度大于0的峰 peaks, _ = find_peaks(x, height=(-border, border)) # 高度范圍 peaks, _ = find_peaks(x, distance=150) # 要求至少距離150個樣本的峰 peaks, properties = find_peaks(x, prominence=(None, 0.6)) # 嘈雜信號的識別,突出基線信號0.6 高度的峰 peaks, properties = find_peaks(x, prominence=1, width=20) # 寬度要求# 配套顯示工作 import matplotlib.pyplot as plt plt.plot(x) plt.plot(peaks, x[peaks], "x")突出程度:峰的突出度衡量一個峰從信號的周圍基線中突出多少,并定義為峰與其最低輪廓線之間的垂直距離,
參考文檔:python scipy signal.find_peaks用法及代碼示例
總結
以上是生活随笔為你收集整理的Python模块(7)-SciPy 简易使用教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++(15)--面向对象编程实践-欢乐
- 下一篇: Python的Pexpect详解 [图片