【scipy 基礎】--信號處理

来源:https://www.cnblogs.com/wang_yb/archive/2023/11/21/17845521.html
-Advertisement-
Play Games

scipy.signal模塊主要用於處理和分析信號。它提供了大量的函數和方法,用於濾波、捲積、傅里葉變換、雜訊生成、周期檢測、譜分析等信號處理任務。 此模塊的主要作用是提供一套完整的信號處理工具,從而幫助用戶對各種連續或者離散的時間序列數據、音頻信號、電信號或其他物理信號進行操作和分析。它支持許多標 ...


scipy.signal模塊主要用於處理和分析信號。
它提供了大量的函數和方法,用於濾波、捲積、傅里葉變換、雜訊生成、周期檢測、譜分析等信號處理任務。

此模塊的主要作用是提供一套完整的信號處理工具,從而幫助用戶對各種連續或者離散的時間序列數據、音頻信號、電信號或其他物理信號進行操作和分析。
它支持許多標準的和常用的信號處理技術,例如傅立葉變換(用於頻譜分析和頻域濾波)、IIR和FIR濾波器設計、捲積、及相關性計算等。

1. 主要功能

信號處理模塊包含的函數非常豐富。

類別 說明
捲積相關函數 各類一維,二維數組的捲積計算,包含約9個函數
B-樣條相關函數 n階B-樣條基函數的高斯*似,*滑樣條(立方體)濾波等等,包含約10多個函數
濾波函數相關 對 N 維數組執行中值濾波器,維納濾波器等等,包含約20個函數
過濾器設計相關 使用雙線性變換從模擬濾波器返回數字IIR濾波器,使用最小二乘誤差最小化的FIR濾波器設計,使用視窗法進行FIR濾波器設計,包含約30個函數
連續時間線性系統 連續時間的,狀態空間形式的等各類線性時不變系統,計算其階躍響應,頻率響應等,包含約10個函數
離散時間線性系統 離散時間的,狀態空間形式的等各類線性時不變系統,計算其階躍響應,頻率響應等,包含約10個函數
LTI(線性非時變)表示 用於求解LTI系統的函數和方法,包括從輸入到輸出的傳遞函數的計算、系統穩定性的分析、系統響應的求解等,包含約10個函數
窗函數相關 用於濾波和譜估計的一套窗函數,包含約30個函數
小波相關函數 處理小波變換,濾波等,包含約7個函數
信號峰值計算函數 計算信號的極大,極小值,峰值的突出程度等,包含約7個函數
光譜分析相關函數 用於分析連續和離散的時間信號、實數和複數的信號等。分析信號的頻譜分佈、頻率響應、譜密度等屬性等,包含約11個函數
線性調頻 Z 變換和變焦 FFT 是兩種特殊的信號處理方法,用於在頻域對信號進行變換和縮放,包含約5個函數

與其他子模塊相比,明顯可以看出scipy.signal子模塊的函數數量非常多。

這是因為信號處理涉及的領域和應用場景非常廣,
包括通信、電腦應用、物理、化學、生物學、軍事、經濟等領域;
以及聲音處理、圖像處理、信號分析、信號檢測、頻譜分析、雷達、無線通信、音頻處理、視頻處理、遙感、生物醫學信號處理、控制系統、信號壓縮、模式識別等各種場景。

2. 功能示例

scipy.signal子模塊的功能太多,下麵演示其中幾個函數拋磚引玉。

2.1. 濾波器示例

既然是信號處理模塊,肯定離不開對波的處理。

我們首先構造兩個正弦波,一個10HZ,一個30HZ

import numpy as np
import matplotlib.pyplot as plt
from scipy import signal

sig1 = np.sin(2 * np.pi * 10 * t)
sig2 = np.sin(2 * np.pi * 30 * t)
fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True, figsize=[6, 4])
ax1.plot(t, sig1)
ax1.set_title("10 Hz 正弦波")
ax1.axis([0, 1, -2, 2])

ax2.plot(t, sig2)
ax2.set_title("30 Hz 正弦波")
ax2.axis([0, 1, -2, 2])

plt.show()

image.png

然後將2個正弦波混合起來,同一個20HZ的濾波器進行高通低通濾波。

t = np.linspace(0, 1, 1000, False)  # 1 second
sig = np.sin(2 * np.pi * 10 * t) + np.sin(2 * np.pi * 30 * t)
fig, (ax1, ax2, ax3) = plt.subplots(3, 1, sharex=True, figsize=[6,6])
ax1.plot(t, sig)
ax1.set_title("10 Hz 和 30 Hz 混合")
ax1.axis([0, 1, -2, 2])

# 用20HZ的頻率 高通濾波
sos_high = signal.butter(10, 20, 'hp', fs=1000, output='sos')
# 用20HZ的頻率 低通濾波
sos_low = signal.butter(10, 20, 'lp', fs=1000, output='sos')

# 沿著一維過濾數據
filtered_high = signal.sosfilt(sos_high, sig)
filtered_low = signal.sosfilt(sos_low, sig)

ax2.plot(t, filtered_high)
ax2.set_title('20 Hz 高通濾波')
ax2.axis([0, 1, -2, 2])

ax3.plot(t, filtered_low)
ax3.set_title('20 Hz 低通濾波')
ax3.axis([0, 1, -2, 2])
ax3.set_xlabel('Time [seconds]')
plt.tight_layout()

plt.show()

image.png
從圖中可以看出,高通濾波之後的結果接* 30HZ 的波;
低通濾波之後的結果接* 10HZ 的波。

2.2. 圖片模糊度示例

圖片中的像素也可以看做是二維的信號,所以也可以用濾波器來調整圖片的模糊度。

from scipy import signal
import cv2

# 網路上隨便找的python logo 圖片
fp = "d:/share/python.png"
image = plt.imread(fp)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = np.asarray(gray, np.float64)

fig, ax = plt.subplots(2, 2, sharex=True, sharey=True, figsize=(4, 5))

# 高斯視窗
w1 = signal.windows.gaussian(101, 2.0)
w2 = signal.windows.gaussian(101, 6.0)
# 捲積與二維可分離FIR濾波器
image_new1 = signal.sepfir2d(gray, w1, w1)
image_new2 = signal.sepfir2d(gray, w2, w2)

ax[0][0].imshow(image)
ax[0][0].set_title("原始圖片")
ax[0][1].imshow(gray, cmap="gray")
ax[0][1].set_title("灰度圖片")

ax[1][0].imshow(image_new1)
ax[1][0].set_title("模糊度較低的圖片")
ax[1][1].imshow(image_new2)
ax[1][1].set_title("模糊度較高的圖片")

plt.show()

image.png

3. 總結

總的來說,scipy.signal模塊的意義在於它提供了一個統一、強大且靈活的介面,使得對信號進行處理和分析變得相對簡單。

它不僅支持基本的信號處理操作,還提供了一些更高級的功能,例如使用不同的視窗函數進行傅立葉變換、使用不同的方法進行濾波等。
此外,它還與NumPy緊密集成,使得用戶可以方便地在數組上執行各種操作。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、讀取寫入視頻文件 1 import cv2 2 3 # 創建一個視屏捕獲對象 4 videoCapture = cv2.VideoCapture('AVI.avi') 5 6 # 獲取視頻的屬性值,cv2.CAP_PROP_FPS獲取視頻幀率 7 fps = videoCapture.get(c ...
  • 題目: 給你兩個按 非遞減順序 排列的整數數組 nums1 和 nums2,另有兩個整數 m 和 n ,分別表示 nums1 和 nums2 中的元素數目。 請你 合併 nums2 到 nums1 中,使合併後的數組同樣按 非遞減順序 排列。 註意:最終,合併後數組不應由函數返回,而是存儲在數組 n ...
  • AcWing 演算法基礎課week 1 總結 總結點 1:快速排序(分治思想) 題1:從小到大排序 主體思路:定義一個數x屬於數組s,利用雙指針,將數組分為大於等於x和小於等於x的兩部分,然後遞歸處理。(具體步驟如下) 1. 如上圖所示,我們定義一個數組s用來儲存n個數據,然後定義兩個指針i j,分別 ...
  • Assistants介紹 隨著OpenAI將Assistants助手API對外發佈,我們搭建個人知識庫變的如此簡單。開發者將自己的應用通過Assistants API與OpenAI對接,就可以讓每一位客戶擁有不一般體驗的個人知識庫。由於Assistants相關API有30+,本文只列舉完成一個最小功 ...
  • 事務是保證業務操作完整性的一種資料庫機制,具有原子性、一致性、隔離性和持久性(ACID)的特點。 在Java中,可以通過JDBC和MyBatis來控制事務,底層都是通過Connection對象完成的。 Spring使用AOP的方式進行事務開發,通過將事務的額外功能封裝在DataSourceTrans... ...
  • 事件緣起我在Linux伺服器(CentOS 7.8)安裝Python3.10,並替換python軟鏈接為python3之後,yum命令不可用。特此記錄一下。 完整安裝步驟如下: Python3.10安裝 1.使用yum程式提前安裝Python依賴。 yum install wget zlib-dev ...
  • 作者:FishBones 鏈接:https://juejin.cn/post/7185479136599769125 背景 公司的一個ToB系統,因為客戶使用的也不多,沒啥併發要求,就一直沒有經過壓測。這兩天來了一個“大客戶”,對併發量提出了要求:核心介面與幾個重點使用場景單節點吞吐量要滿足最低50 ...
  • 在本篇文章中,我們總結了Python中的異常捕獲的重要性以及如何進行優化。異常捕獲是一種處理程式在執行過程中出現錯誤的機制,對於程式的穩定性和可靠性至關重要。我們詳細學習了Python中的基本異常捕獲語法,包括try、except、else和finally塊,並舉例了常見的異常類型,總之,閱讀本文只... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...