最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實現(xiàn)數(shù)據(jù)濾波的示例詳解

 更新時間:2024年03月18日 11:34:25   作者:微小冷  
這篇文章主要為大家詳細(xì)介紹了Python實現(xiàn)數(shù)據(jù)濾波的相關(guān)知識,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下

維納濾波

信號經(jīng)過系統(tǒng)之后,相當(dāng)于進(jìn)行了卷積操作,若想讓其復(fù)原,只需再用系統(tǒng)進(jìn)行反卷積即可。如果沒有信號,系統(tǒng)卻有了響應(yīng),那么這種噪聲可以理解為系統(tǒng)的噪聲。如果系統(tǒng)的數(shù)學(xué)形式是已知的,這種噪聲就很容易濾掉,如果未知,那就需要進(jìn)行估計,這就是維納做的工作。

一個有限脈沖響應(yīng)(finite impulse response, FIR),其離散形式可通過卷積表示為

x=sin(1.5πt(1−t)+2.1)+0.1sin(2.5πt+1)+0.18cos(7.6πt)

其濾波效果如下

實現(xiàn)代碼如下

import numpy as np
import scipy.signal as ss

t = np.linspace(-1, 1, 201)
PI = 2*np.pi
x = (np.sin(PI*0.75*t*(1-t) + 2.1) +
     0.1*np.sin(PI*1.25*t + 1) +
     0.18*np.cos(PI*3.85*t))

# 原始數(shù)據(jù)添加噪聲
np.random.seed(42)
xn = x + np.random.rand(len(t))

w = ss.wiener(xn, 9) # 維納濾波

plt.scatter(t, xn, marker='.', label="original")
plt.plot(t, w, c = 'r', label="wiener")
plt.legend()
plt.show()

【wiener】是signal模塊中的濾波函數(shù),其輸入?yún)?shù)分別是待濾波數(shù)據(jù)和濾波模板,此外還有一個noise,表示系統(tǒng)噪聲,默認(rèn)為None,表示自行估計噪聲。

巴特沃斯濾波器

FIR的特點是無反饋,yn 完全由xn決定,如果響應(yīng)受到反饋的影響,便是無限脈沖響應(yīng)(infinite impulse response, IIR),其離散形式變?yōu)?/p>

濾波器設(shè)計,就是對ak,bk具體形式的求解,signal模塊中提供了一些函數(shù),對這兩種信號進(jìn)行濾波。仍以函數(shù)x為例,在添加噪聲之后,進(jìn)行濾波,對于不同的濾波函數(shù),其效果如下

代碼為

import scipy.signal as ss
import matplotlib.pyplot as plt

b, a = ss.butter(3, 0.05)
z = ss.lfilter(b, a, xn)
z2 = ss.lfilter(b, a, z)
z3 = ss.filtfilt(b, a, xn)

# 下面為繪圖代碼
plt.plot(t, z, 'r--', label="lfilter, once")
plt.plot(t, z2, 'g--', label="lfilter, twice")
plt.plot(t, z3, 'b', label="filtfilt")
plt.scatter(t, xn, marker='.', alpha=0.75)

plt.grid()
plt.legend()
plt.show()

其中,

【butter】函數(shù)生成3階巴特沃斯濾波器對應(yīng)的 a aa和b bb值

【lfilter】是最基礎(chǔ)的脈沖響應(yīng)濾波器,從左側(cè)開始進(jìn)行濾波,故而會產(chǎn)生相位差

【filtfilt】從正反兩個方向濾波,可消除了lfilter產(chǎn)生的相位差

中值濾波

中值濾波,就是挑選出將個濾波模板范圍內(nèi)數(shù)據(jù)的中位數(shù),例如[1,3,2,4]這個數(shù)組,給定一個長度為3的濾波窗口,那么元素3所在位置的濾波范圍就是1,3,2,其中位數(shù)是2,所以要把3更改為2。

import numpy as np
import scipy.signal as ss
x = [1,3,2,4]
ss.medfilt(x,3) # [1, 2, 3, 2]

二維的中值濾波在圖像處理中非常常見,對椒鹽噪聲有著非常霸道的濾除效果。所謂椒鹽噪聲,如下方左圖所示,就是圖像中隨機產(chǎn)生的黑色和白色的斑點。在使用二維的中值濾波之后,整張圖片都變得清澈了。

繪圖代碼如下。

from scipy.misc import ascent
import matplotlib.pyplot as plt

img = ascent()
img = img[:256, :256]
r = np.random.rand(*img.shape)
img[r>0.96] = 255
img[r<0.04] = 0

plt.subplot(121)
plt.imshow(img, cmap='gray')
plt.axis('off')

plt.subplot(122)
imFilt = ss.medfilt2d(img, [3,3])
plt.imshow(imFilt, cmap='gray')
plt.axis('off')

plt.show()

排序濾波

排序濾波是中值濾波概念的擴充,和中值濾波的區(qū)別是,在對濾波窗口中的數(shù)據(jù)進(jìn)行排序之后,可以指定用以替代當(dāng)前數(shù)據(jù)的數(shù)值序號。下面四個矩陣,展示了以3×3單位矩陣為濾波模板,排序濾波在不同排序參數(shù)下的結(jié)果。

此濾波過程在scipy中的實現(xiàn)方式如下。

x = np.arange(25).reshape(5, 5).astype(float)
I = np.identity(3)

mats = {"original":x}
for i in range(3):
    mats[f"order_filter:{i}"] = ss.order_filter(x, I, i)

【order_filter】即為signal模塊提供的排序濾波函數(shù),以輸入?yún)?shù)(x, I, i)為例,表示從矩陣x中選出單位陣I所覆蓋區(qū)域中第i小的元素。I是一個單位陣,就實際情況來看,其覆蓋的第一個子陣中,以0為中心,則只能覆蓋到2x2的范圍,對角元素0,6,最小值是0,最大值是6。如以6為中心,則可以完全覆蓋3x3的內(nèi)容,最小值為0,最大值為12。

下面是繪圖代碼。

def drawMat(x, ax=None):
    M, N = x.shape
    if not ax:
        ax = plt.subplot()
    arrM, arrN = np.arange(M), np.arange(N)
    plt.yticks(arrM+0.5, arrM)
    plt.xticks(arrN+0.5, arrN)
    ax.pcolormesh(x)
    ax.invert_yaxis()
    for i,j in product(range(M),range(N)):
        ax.text(j+0.2, i+0.6, f"{x[i,j]}")

for i,key in enumerate(mats,1):
    ax = plt.subplot(2,2,i)
    drawMat(mats[key], ax)
    plt.title(key)

plt.show()

到此這篇關(guān)于Python實現(xiàn)數(shù)據(jù)濾波的示例詳解的文章就介紹到這了,更多相關(guān)Python數(shù)據(jù)濾波內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用python將微信image下.dat文件解密為.png的方法

    使用python將微信image下.dat文件解密為.png的方法

    這篇文章主要介紹了使用python將微信image下.dat文件解密為.png的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • jupyter默認(rèn)工作目錄的更改方法

    jupyter默認(rèn)工作目錄的更改方法

    jupyter notebook是一個以網(wǎng)頁形式來使用的python編輯器,很多小伙伴在第一次安裝它的時候選擇的都是默認(rèn)安裝,那么jupyter默認(rèn)工作目錄如何更改,本文就來介紹一下
    2023-08-08
  • python輸出電腦上所有的串口名的方法

    python輸出電腦上所有的串口名的方法

    今天小編就為大家分享一篇python輸出電腦上所有的串口名的方法,具有好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • 使用Python實現(xiàn)文本詞頻分析

    使用Python實現(xiàn)文本詞頻分析

    Python 是一個高層次的結(jié)合了解釋性、編譯性、互動性和面向?qū)ο蟮哪_本語言,本文主要和大家簡單介紹一下如何使用Python進(jìn)行文本詞頻分析,感興趣的小伙伴口可以了解下
    2026-05-05
  • Python 給某個文件名添加時間戳的方法

    Python 給某個文件名添加時間戳的方法

    今天小編就為大家分享一篇Python 給某個文件名添加時間戳的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • 將pycharm配置為matlab或者spyder的用法說明

    將pycharm配置為matlab或者spyder的用法說明

    這篇文章主要介紹了將pycharm配置為matlab或者spyder的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python 中的異步迭代深入解析

    Python 中的異步迭代深入解析

    本文主要介紹了Python的異步迭代的相關(guān)知識,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2026-04-04
  • pip已經(jīng)安裝好第三方庫但pycharm中import時還是標(biāo)紅的解決方案

    pip已經(jīng)安裝好第三方庫但pycharm中import時還是標(biāo)紅的解決方案

    這篇文章主要介紹了python中pip已經(jīng)安裝好第三方庫但pycharm中import時還是標(biāo)紅的問題,本文給大家分享解決方法,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • python操作mysql代碼總結(jié)

    python操作mysql代碼總結(jié)

    本篇文章給大家分享了python操作mysql的步驟以及相關(guān)實例代碼,對此有需要的朋友可以參考學(xué)習(xí)下。
    2018-06-06
  • Django 請求Request的具體使用方法

    Django 請求Request的具體使用方法

    這篇文章主要介紹了Django 請求Request的具體使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11

最新評論

逊克县| 紫金县| 美姑县| 邢台县| 苏尼特右旗| 颍上县| 桂林市| 彩票| 无棣县| 绥阳县| 河西区| 陆丰市| 水城县| 扶绥县| 贵南县| 枣强县| 东城区| 丰镇市| 张北县| 鄯善县| 九寨沟县| 开阳县| 甘南县| 凌海市| 黄大仙区| 东乡族自治县| 偏关县| 工布江达县| 包头市| 庆城县| 连州市| 舞钢市| 同江市| 凤山市| 渝中区| 阜阳市| 文昌市| 怀宁县| 庄河市| 易门县| 新乡市|