Python曲線平滑的實(shí)現(xiàn)示例
在編寫測(cè)試程序的時(shí)候,由于數(shù)據(jù)幀數(shù)多的原因,導(dǎo)致生成的曲線圖比較難看,如下圖:
由于高頻某些點(diǎn)的波動(dòng)導(dǎo)致高頻曲線非常難看,因此需要對(duì)曲線做平滑處理,讓曲線過渡更平滑。對(duì)曲線進(jìn)行平滑處理,這里推薦使用Savitzky-Golay
濾波器,可以在scipy
庫(kù)里直接調(diào)用,不需要再定義函數(shù)。
Python中 Savitzky-Golay 濾波器調(diào)用如下:
tmp_smooth = scipy.signal.savgol_filter(tmp,53,3)
scipy函數(shù)解釋:
scipy.signal.savgol_filter(x, window_length, polyorder, deriv=0, delta=1.0, axis=-1, mode=‘interp’, cval=0.0)[source]
Apply a Savitzky-Golay filter to an array.
This is a 1-d filter. If x has dimension greater than 1, axis determines the axis along which the filter is applied.
在scipy函數(shù)解釋中,x為原始數(shù)據(jù),即上面代碼中的tmp數(shù)據(jù)。window_length是窗口長(zhǎng)度,該值需為正奇整數(shù)。polyorder為對(duì)窗口內(nèi)的數(shù)據(jù)點(diǎn)進(jìn)行k階多項(xiàng)式擬合,k的值需要小于window_length。
現(xiàn)在看一下window_length和k這兩個(gè)值對(duì)曲線的影響。
(1) 首先是window_length
對(duì)曲線的平滑作用,代碼如下:
tmp_smooth1 = scipy.signal.savgol_filter(tmp,21,3) tmp_smooth2 = scipy.signal.savgol_filter(tmp,53,3) plt.semilogx(f,tmp*0.5,label = 'mic'+str(num+1)) plt.semilogx(f,tmp_smooth1*0.5,label = 'mic'+str(num+1)+'擬合曲線-21',color = 'red') plt.semilogx(f,tmp_smooth2*0.5,label = 'mic'+str(num+1)+'擬合曲線-53',color = 'green')
可以看到,window_length的值越小,曲線越貼近真實(shí)曲線;window_length值越大,平滑效果越厲害。
(2) 再看k
值對(duì)曲線的影響,代碼如下:
tmp_smooth1 = scipy.signal.savgol_filter(tmp,21,3) tmp_smooth2 = scipy.signal.savgol_filter(tmp,53,3) plt.semilogx(f,tmp*0.5,label = 'mic'+str(num+1)) plt.semilogx(f,tmp_smooth1*0.5,label = 'mic'+str(num+1)+'擬合曲線-21',color = 'red') plt.semilogx(f,tmp_smooth2*0.5,label = 'mic'+str(num+1)+'擬合曲線-53',color = 'green')
生成曲線圖如下:
可以看到,k值越大,曲線越貼近真實(shí)曲線;k值越小,曲線平滑越厲害。另外,當(dāng)k值較大時(shí),受窗口長(zhǎng)度限制,擬合會(huì)出現(xiàn)問題,高頻曲線會(huì)變成直線,如下圖所示:
參考資源
[1] python 平滑_Python 生成曲線進(jìn)行快速平滑處理
[2] Savitzky-Golay平滑濾波的python實(shí)現(xiàn)
到此這篇關(guān)于Python曲線平滑的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Python曲線平滑內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python網(wǎng)絡(luò)爬蟲與信息提取(實(shí)例講解)
下面小編就為大家?guī)硪黄狿ython網(wǎng)絡(luò)爬蟲與信息提取(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08關(guān)于生產(chǎn)消費(fèi)者模型中task_done()的具體作用
這篇文章主要介紹了關(guān)于生產(chǎn)消費(fèi)者模型中task_done()的具體作用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02python按修改時(shí)間順序排列文件的實(shí)例代碼
這篇文章主要介紹了python按修改時(shí)間順序排列文件的實(shí)例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-07-07Python實(shí)現(xiàn)一元一次與一元二次方程求解
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)一元一次與一元二次方程的求解,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-06-06Python批量添加水印的優(yōu)雅實(shí)現(xiàn)與進(jìn)階
在日常圖像處理中,為圖片添加水印是一項(xiàng)常見任務(wù),有多種方法和工具可供選擇,本文將專注于使用Python語言結(jié)合PIL庫(kù)批量添加水印,感興趣的可以了解下2023-12-12Python如何操作office實(shí)現(xiàn)自動(dòng)化及win32com.client的運(yùn)用
這篇文章主要介紹了Python如何操作office實(shí)現(xiàn)自動(dòng)化及win32com.client的運(yùn)用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04在python中使用pyspark讀寫Hive數(shù)據(jù)操作
這篇文章主要介紹了在python中使用pyspark讀寫Hive數(shù)據(jù)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-06-06