Python小波變換去噪的原理解析
一.小波去噪的原理
信號產(chǎn)生的小波系數(shù)含有信號的重要信息,將信號經(jīng)小波分解后小波系數(shù)較大,噪聲的小波系數(shù)較小,并且噪聲的小波系數(shù)要小于信號的小波系數(shù),通過選取一個(gè)合適的閥值,大于閥值的小波系數(shù)被認(rèn)為是有信號產(chǎn)生的,應(yīng)予以保留,小于閥值的則認(rèn)為是噪聲產(chǎn)生的,置為零從而達(dá)到去噪的目的。
小波閥值去噪的基本問題包括三個(gè)方面:小波基的選擇,閥值的選擇,閥值函數(shù)的選擇。
(1) 小波基的選擇:通常我們希望所選取的小波滿足以下條件:正交性、高消失矩、緊支性、對稱性或反對稱性。但事實(shí)上具有上述性質(zhì)的小波是不可能存在的,因?yàn)樾〔ㄊ菍ΨQ或反對稱的只有Haar小波,并且高消失矩與緊支性是一對矛盾,所以在應(yīng)用的時(shí)候一般選取具有緊支的小波以及根據(jù)信號的特征來選取較為合適的小波。
(2) 閥值的選擇:直接影響去噪效果的一個(gè)重要因素就是閥值的選取,不同的閥值選取將有不同的去噪效果。目前主要有通用閥值(VisuShrink)、SureShrink閥值、Minimax閥值、BayesShrink閥值等。
(3) 閥值函數(shù)的選擇:閥值函數(shù)是修正小波系數(shù)的規(guī)則,不同的反之函數(shù)體現(xiàn)了不同的處理小波系數(shù)的策略。最常用的閥值函數(shù)有兩種:一種是硬閥值函數(shù),另一種是軟閥值函數(shù)。還有一種介于軟、硬閥值函數(shù)之間的Garrote函數(shù)。
另外,對于去噪效果好壞的評價(jià),常用信號的信噪比(SNR)與估計(jì)信號同原始信號的均方根誤差(RMSE)來判斷。
二,在python中使用小波分析進(jìn)行閾值去噪聲,使用pywt.threshold函數(shù)
#coding=gbk #使用小波分析進(jìn)行閾值去噪聲,使用pywt.threshold import pywt import numpy as np import pandas as pd import matplotlib.pyplot as plt import math data = np.linspace(1, 10, 10) print(data) # [ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.] # pywt.threshold(data, value, mode, substitute) mode 模式有4種,soft, hard, greater, less; substitute是替換值可以點(diǎn)進(jìn)函數(shù)里看,data/np.abs(data) * np.maximum(np.abs(data) - value, 0) data_soft = pywt.threshold(data=data, value=6, mode='soft', substitute=12) print(data_soft) # [12. 12. 12. 12. 12. 0. 1. 2. 3. 4.] 將小于6 的值設(shè)置為12, 大于等于6 的值全部減去6 data_hard = pywt.threshold(data=data, value=6, mode='hard', substitute=12) print(data_hard) # [12. 12. 12. 12. 12. 6. 7. 8. 9. 10.] 將小于6 的值設(shè)置為12, 其余的值不變 data_greater = pywt.threshold(data, 6, 'greater', 12) print(data_greater) # [12. 12. 12. 12. 12. 6. 7. 8. 9. 10.] 將小于6 的值設(shè)置為12,大于等于閾值的值不變化 data_less = pywt.threshold(data, 6, 'less', 12) print(data_less) # [ 1. 2. 3. 4. 5. 6. 12. 12. 12. 12.] 將大于6 的值設(shè)置為12, 小于等于閾值的值不變
三,在python中使用ecg心電信號進(jìn)行小波去噪實(shí)驗(yàn)
#-*-coding:utf-8-*- import matplotlib.pyplot as plt import pywt import math import numpy as np #get Data ecg=pywt.data.ecg() #生成心電信號 index=[] data=[] coffs=[] for i in range(len(ecg)-1): X=float(i) Y=float(ecg[i]) index.append(X) data.append(Y) #create wavelet object and define parameters w=pywt.Wavelet('db8')#選用Daubechies8小波 maxlev=pywt.dwt_max_level(len(data),w.dec_len) print("maximum level is"+str(maxlev)) threshold=0 #Threshold for filtering #Decompose into wavelet components,to the level selected: coffs=pywt.wavedec(data,'db8',level=maxlev) #將信號進(jìn)行小波分解 for i in range(1,len(coffs)): coffs[i]=pywt.threshold(coffs[i],threshold*max(coeffs[i])) datarec=pywt.waverec(coffs,'db8')#將信號進(jìn)行小波重構(gòu) mintime=0 maxtime=mintime+len(data) print(mintime,maxtime) plt.figure() plt.subplot(3,1,1) plt.plot(index[mintime:maxtime], data[mintime:maxtime]) plt.xlabel('time (s)') plt.ylabel('microvolts (uV)') plt.title("Raw signal") plt.subplot(3, 1, 2) plt.plot(index[mintime:maxtime], datarec[mintime:maxtime]) plt.xlabel('time (s)') plt.ylabel('microvolts (uV)') plt.title("De-noised signal using wavelet techniques") plt.subplot(3, 1, 3) plt.plot(index[mintime:maxtime],data[mintime:maxtime]-datarec[mintime:maxtime]) plt.xlabel('time (s)') plt.ylabel('error (uV)') plt.tight_layout() plt.show()
到此這篇關(guān)于Python小波變換去噪的文章就介紹到這了,更多相關(guān)Python小波去噪內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python二進(jìn)制串轉(zhuǎn)換為通用字符串的方法
今天小編就為大家分享一篇Python二進(jìn)制串轉(zhuǎn)換為通用字符串的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07Python控制瀏覽器自動(dòng)下載歌詞評論并生成詞云圖
本文主要介紹了如何利用Python控制瀏覽器自動(dòng)把歌詞評論下載下來,并做成好看的詞云圖。文中的示例代碼講解詳細(xì),感興趣的可以試一試2022-01-01pycharm創(chuàng)建scrapy項(xiàng)目教程及遇到的坑解析
這篇文章主要介紹了pycharm創(chuàng)建scrapy項(xiàng)目教程及遇到的坑解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08Python全面解析json數(shù)據(jù)并保存為csv文件
這篇文章主要介紹了Python全面解析json數(shù)據(jù)并保存為csv文件,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-0768行Python代碼實(shí)現(xiàn)帶難度升級的貪吃蛇
本文主要介紹了Python代碼實(shí)現(xiàn)帶難度升級的貪吃蛇,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01jmeter執(zhí)行python腳本的實(shí)現(xiàn)示例
本文主要介紹了jmeter執(zhí)行python腳本的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05