emd实现信息隐藏_EMD算法原理与实现
歡迎關注我們,選擇加"星標"或“置頂”
更多技術,第一時間送達
SSVEP信號中含有自發腦電和大量外界干擾信號,屬于典型的非線性非平穩信號。傳統的濾波方法通常不滿足對非線性非平穩分析的條件,1998年黃鄂提出希爾伯特黃變換(HHT)方法,其中包含經驗模式分解(EMD)和希爾伯特變換(HT)兩部分。EMD可以將原始信號分解成為一系列固有模態函數(IMF) [1],IMF分量是具有時變頻率的震蕩函數,能夠反映出非平穩信號的局部特征,用它對非線性非平穩的SSVEP信號進行分解比較合適。
EMD算法原理:
步驟1:
尋找信號全部極值點,通過三次樣條曲線將局部極大值點連成上包絡線,將局部極小值點連成下包絡線。上、下包絡線包含所有的數據點。
步驟2:
由上包絡和下包絡線的平均值?,得出
若滿足IMF的條件,則可認為是的第一個IMF分量。
步驟3:
若不符合IMF條件,則將作為原始數據,重復步驟1、步驟2,得到上、下包絡的均值,通過計算是否適合IMF分量的必備條件,若不滿足,重復如上兩步次,直到滿足前提下得到。第1個IMF表示如下:
步驟4:
將從信號中分離得到:
將作為原始信號重復上述三個步驟,循環次,得到第二個IMF分量直到第個IMF分量 ,則會得出:
步驟5:
當變成單調函數后,剩余的成為殘余分量。所有IMF分量和殘余分量之和為原始信號:
用EMD進行濾波的基本思想是將原信號進行EMD分解后,只選取與特征信號相關的部分對信號進行重構。如下圖中a部分為原始信號,b部分為將原始信號進行EMD分解獲得的6個IMF分量和1個殘余分量,c部分為將分解獲得的6個IMF分量和1個殘余分量進行重構后的信號,可以看出SSVEP信號用EMD分解后,基本上包含了原有信號的全部信息。
圖片來源于[1]
python實現EMD案例
# 導入工具庫import?numpy?as?npfrom PyEMD import EMD, Visualisation構建信號
時間t: 為0到1s,采樣頻率為100Hz,S為合成信號
#?構建信號t?=?np.arange(0,1,?0.01)S?=?2*np.sin(2*np.pi*15*t)?+4*np.sin(2*np.pi*10*t)*np.sin(2*np.pi*t*0.1)+np.sin(2*np.pi*5*t)# 提取imfs和剩余信號resemd = EMD()emd.emd(S)imfs, res = emd.get_imfs_and_residue()# 繪制 IMFvis = Visualisation()vis.plot_imfs(imfs=imfs, residue=res, t=t, include_residue=True)# 繪制并顯示所有提供的IMF的瞬時頻率vis.plot_instant_freq(t, imfs=imfs)vis.show()參考
[1] 基于穩態視覺誘發電位的腦-機接口系統研究
往期精彩
Python-EEG工具庫MNE-Python詳細安裝與使用
MNE中文教程(1)-MNE中數據結構Raw及其用法簡介
Python-EEG工具庫MNE中文教程(2)-MNE中數據結構Epoch及其創建方法
Python-EEG工具庫MNE中文教程(3)-MNE中數據結構Epoch及其用法簡介
Python-EEG工具庫MNE中文教程(4)-MNE中數據結構Evoked及其對象創建
Python-EEG工具庫MNE中文教程(5)-機器學習算法隨機森林判斷睡眠類型
Python-EEG工具庫MNE中文教程(6)-讀取.set文件和.locs文件
穩態視覺誘發電位 SSVEP 簡介
Nilearn中的基本操作和查看
腦電信號濾波-代碼實現
腦機接口BCI學習交流群:QQ群:903290195
微信群請掃碼添加,Rose拉你進群
(請務必填寫備注,eg. 腦機接口或BCI)
長按加群
長按關注我們
總結
以上是生活随笔為你收集整理的emd实现信息隐藏_EMD算法原理与实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 漫画:程序员的社会地位
- 下一篇: (视频+图文)机器学习入门系列-第10章