日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python模块(7)-SciPy 简易使用教程

發布時間:2023/12/13 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 為一個周期內的采樣點數
濾波器的階數: 物理上理解,有幾個濾波器串聯。

from scipy import signal b, a = signal.butter(8, 0.8, 'lowpass') #8 為濾波器的階數 filtedData = signal.filtfilt(b, a, data) #data為要過濾的信號b, a = signal.butter(8, 0.2, 'highpass') #高通 b, a = signal.butter(8, [0.2,0.8], 'bandpass') #帶通 b, a = signal.butter(8, [0.2,0.8], 'bandstop') #帶阻

疑問:濾波器的數字實現、頻率濾波器和均值濾波器的關系。

參考文檔: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 简易使用教程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。