? ? ? ? 之前參加課題組相關(guān)信號(hào)處理的課題的學(xué)習(xí)筆記。
????????變分模態(tài)分解(variational mode decomposition)VMD是2014年提出的一種非遞歸信號(hào)處理方法,通過將時(shí)間序列數(shù)據(jù)分解為一系列具有有限帶寬的本征模態(tài)函數(shù)(IMF),迭代搜尋變分模態(tài)的最優(yōu)解。VMD可以自適應(yīng)更新各IMF的最優(yōu)中心頻率和帶寬。
? ? ? ? 相較于EMD,VMD具有更強(qiáng)大的性能:在進(jìn)行EMD分解時(shí),我們需要利用信號(hào)的極大值和極小值來計(jì)算包絡(luò),而信號(hào)的極值很有可能收到噪聲干擾,因此EMD對(duì)噪聲比較敏感;EMD還存在端點(diǎn)效應(yīng)的問題,即在信號(hào)的端點(diǎn)處由于沒有前后幀的信息,求得的包絡(luò)面可能不準(zhǔn)確,在后期分解的過程中,可能會(huì)得到不準(zhǔn)確的IMF分量。而VMD不存在這方面問題,其具有較好抗噪能力,能解決頻率混疊問題。
VMD原理
????????VMD實(shí)際上是將分解過程轉(zhuǎn)化為了優(yōu)化過程,其過程是變分問題的求解過程,該算法可分為變分問題的構(gòu)造和求解。
變分問題構(gòu)造:
變分問題求解:
引入二次懲罰因子α和拉格朗日乘法算子λ(t),將約束性變分問題變?yōu)榉羌s束性變分問題:
采用了乘法算子交替方向法(alternate direction method of multipliers)ADMM 解決以上變分問題,通過交替更新計(jì)算,求擴(kuò)展拉格朗日表達(dá)式的‘鞍點(diǎn)’:
總體整合如下:
VMD使用
在python中可以裝載vmdpy,從中調(diào)用VMD函數(shù):
from vmdpy import VMD
u, u_hat, omega = VMD(signal, alpha, tau, K, DC, init, tol)
在 VMD 分解函數(shù)中,signal即為轉(zhuǎn)化為一維的待分解信號(hào),
以下為參數(shù),可以調(diào)整以獲得更好的分解效果:
alpha:這是帶寬約束參數(shù)。增加 alpha 值會(huì)使分解的模態(tài)更加平滑,但也可能導(dǎo)致過度平滑和模態(tài)混合。減小 alpha 值會(huì)使分解的模態(tài)更加銳利,但也可能導(dǎo)致噪聲增強(qiáng)和虛假模態(tài)出現(xiàn)。
tau:這是噪聲容忍度參數(shù)。增加 tau 值會(huì)使算法對(duì)噪聲更加容忍,從而減少虛假模態(tài)的出現(xiàn)。但是,過大的 tau 值也可能導(dǎo)致真實(shí)模態(tài)被忽略。
K:這是模態(tài)數(shù)量參數(shù)。選擇合適的 K 值非常重要,因?yàn)樗鼪Q定了分解結(jié)果中包含多少個(gè)模態(tài)。如果 K 值過小,則可能導(dǎo)致多個(gè)真實(shí)模態(tài)被混合在一起;如果 K 值過大,則可能導(dǎo)致虛假模態(tài)的出現(xiàn)。
DC:這是直流分量參數(shù)。如果信號(hào)中包含直流分量,則應(yīng)將此參數(shù)設(shè)置為 1;否則應(yīng)將其設(shè)置為 0。
init:這是初始頻率估計(jì)方法參數(shù)??梢赃x擇均勻初始化(init=1)或隨機(jī)初始化(init=2)。
tol: 這是收斂容差參數(shù)。減小此值可以使算法收斂到更精確的結(jié)果,但也會(huì)增加計(jì)算時(shí)間。
調(diào)整這些參數(shù)需要根據(jù)具體信號(hào)特點(diǎn)和分析需求進(jìn)行試驗(yàn)和比較
返回值中:
?u: 分解后的模態(tài)信號(hào),二維 numpy 數(shù)組,每行為一個(gè)模態(tài)信號(hào)。
u_hat:?不同模態(tài)的頻譜
?omega: 模態(tài)中心頻率隨時(shí)間變化的軌跡,二維 numpy 數(shù)組,每行為一個(gè)模態(tài)中心頻率軌跡。
?可以進(jìn)一步封裝此函數(shù),寫一個(gè)簡(jiǎn)單的腳本:
from typing import Tuple
import numpy as np
from vmdpy import VMD
def vmd_decomposition(signal: np.ndarray, K: int) -> Tuple[np.ndarray, np.ndarray]:
# 設(shè)置 VMD 參數(shù)
alpha = 2000 # moderate bandwidth constraint
tau = 0. # noise-tolerance (no strict fidelity enforcement)
DC = 0 # no DC part imposed
init = 1 # initialize omegas uniformly
tol = 1e-7 # convergence tolerance
# 進(jìn)行 VMD 分解
u, u_hat, omega = VMD(signal, alpha, tau, K, DC, init, tol)
return u, omega
如果要依據(jù)VMD進(jìn)行重構(gòu),即為將每個(gè)預(yù)測(cè)的IMF信號(hào)直接進(jìn)行疊加。
改進(jìn)VMD算法
?在之前閱讀的論文中,有兩篇使用了改進(jìn)VMD:
DetectDUI: An In-Car Detection System for Drink Driving and BACs
作者認(rèn)為VMD雖然通過非遞歸解決了EMD易被噪音干擾的問題,然而,分解模式的數(shù)量影響每個(gè)模式的中心頻率和窄帶寬,導(dǎo)致呼吸和心跳的檢測(cè)精度降低。因此,作者提出了自適應(yīng)變分模態(tài)分解,來自適應(yīng)地確定分解模式的數(shù)量:
首先,AVMD將時(shí)間序列信號(hào)B(t)分解為K個(gè)子信號(hào),(模式)通過固有模式函數(shù)(IMF),其中uk(t)是第k個(gè)模式
與傳統(tǒng)的VMD算法類似,AVMD需要三個(gè)步驟來估計(jì)每個(gè)IMF的帶寬。首先,計(jì)算每個(gè)模式的分析信號(hào)。然后,將這些模式與指數(shù)相混合,以將它們的頻率轉(zhuǎn)移到基帶。最后,通過梯度的平方L2范數(shù)來估計(jì)每個(gè)模式的帶寬。約束變分問題可以表示為?:
?= -1 ,wk是模式uk(t)的中心頻率。
整體算法如下:
第3行和第4行更新模式及其中心頻率。在方程(7)中,ξb(ω)是濾波信號(hào)的頻域表示。λ是二次罰項(xiàng)[34]。α是白噪聲的方差。在第5行中計(jì)算u?k的希爾伯特變換,在此基礎(chǔ)上,在第6行中計(jì)算瞬時(shí)頻率uif(k),在第7行中計(jì)算平均瞬時(shí)頻率mif(k)。根據(jù)第8行中的mif(k)導(dǎo)出曲率IC。處罰期限,λ在第11行中基于更新率β進(jìn)行更新,收斂條件在第12行中給出。
?文章給出的效果展示:
V2 iFi: in-Vehicle Vital Sign Monitoring via Compact RF Sensing
作者基于前人的工作,認(rèn)為攝像機(jī)會(huì)侵犯?jìng)€(gè)人隱私、聲信號(hào)對(duì)寵物與嬰兒不友好且易于被背景影響、wifi信號(hào)在狹小多人環(huán)境下很難提取出每個(gè)人的信號(hào),因此選取了RF射頻信號(hào)作為監(jiān)控駕駛疲勞的信號(hào)。
文中,在通過峰值等方法實(shí)現(xiàn)了不同乘車人信號(hào)的區(qū)分后,即面臨對(duì)于信號(hào)分離方面的問題。文中認(rèn)為此時(shí)信號(hào)為駕駛員心跳、呼吸、車輛震動(dòng)、駕駛員動(dòng)作的混合信號(hào),對(duì)于這種情況的信號(hào)分離工作,VMD再合適不過。然而,VMD只支持單一信號(hào)序列,而單一信號(hào)不足以提取生命體征。因此,作者改進(jìn)該算法,提出了一種多序列VMD算法:MS-VMD算法(如下圖)。
?
?分解效果:藍(lán)線即為所求文章來源:http://www.zghlxwxcb.cn/news/detail-725104.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-725104.html
到了這里,關(guān)于變分模態(tài)分解(VMD)與其改進(jìn)算法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!