離散數據希爾伯特-黃變換

前言

希爾伯特變換中我們已經知道淤齐,直接對"解析信號"做3瞬屬性的分析時,"瞬時頻率"會出現很多負頻率袜匿,是無意義的更啄!因此為解決這個問題并對非穩(wěn)態(tài)信號做時頻分析,才有了"希爾伯特-黃變換"沉帮!

思路:在對原始信號進行希爾伯特變換之前锈死,要先把信號分解成瞬時頻率具有意義的各個分量/函數!把信號進行分解的方法穆壕,在希爾伯特-黃變換理論中稱為"經驗模態(tài)分解"待牵;分解出來的各個分量,其實是一類函數喇勋,稱為"固有模態(tài)函數"缨该,利用這類函數的局部特性,可以使得函數在任意一點的瞬時頻率都有意義川背。

求瞬時頻率(無意義)
\downarrow
經驗模態(tài)分解贰拿,得到一類固有模態(tài)函數
\downarrow
對固有模態(tài)函數做希爾伯特變換蛤袒,求瞬時頻率(有意義)

所以,對希爾伯特-黃變換做簡要總結(其實一點都不復雜):
目標:求原信號的"有物理意義"的瞬時頻率膨更;
步驟:1. 經驗模態(tài)分解妙真;2. 希爾伯特變換/譜分析

下面對2大步進行詳細的說明荚守,并給出對應的matlab手寫程序珍德。

經驗模態(tài)分解

  1. 為什么希爾伯特-黃變換那么好?
    個人認為它的關鍵就在于"經驗模態(tài)分解"這一步矗漾。因為這種信號的分解锈候,完全是"方法適應于數據"的,即不同的數據敞贡,方法會根據數據的情況做變換和調整泵琳,而不是始終用固定的那幾種基函數(小波變換、短時傅里葉變換)誊役。
    這種自適應思想下的工具获列,一定是非常優(yōu)越的!

  2. 什么是固有模態(tài)函數势木?
    經驗模態(tài)分解的目標就是將原始信號分解成一類固有模態(tài)函數蛛倦,
    固有模態(tài)函數其實只是滿足下面兩個條件的函數而已歌懒,沒啥復雜的:

  • 函數極值點的數目零點的數目必須相等啦桌,或最多相差1;
  • 極大值和極小值形成的包絡及皂,包絡的均值為0甫男;

其中均值為0的條件對應離散數據不好實現,一般平均值趨近于0(一般和0做差<0.1)即可验烧。

  1. 經驗模態(tài)分解何時結束板驳?
    經驗模態(tài)分解就是為了分解出一系列的固有模態(tài)函數,所以當剩余數據已經無法再分出來固有模態(tài)函數時碍拆,經驗模態(tài)分解這一步就徹底結束了若治。
    如何判斷剩余數據無法再分解了?
    剩余數據極大值或極小值點數目有一個為0時(均值條件沒法滿足了)感混,或剩余數據已經是單調時(沒法做包絡線了)端幼,就可以結束了。

分解的流程

設原始信號為x(t)弧满,分解步驟如下:

  • 步1:提取輸入信號的所有極大值和極小值點婆跑,并用三次樣條曲線連接出上、下包絡線庭呜,設包絡線均值為m(t)滑进,用輸入信號減去均值可得h(t)

h(t) = x(t) - m(t)

  • 步2:判斷步1得到的h(t)是否滿足固有模態(tài)函數的2個條件犀忱,若不滿足把h(t)當作輸入回到步1;若滿足則得到一個固有模態(tài)函數扶关,進入步3:阴汇;

  • 步3:設得到的第k個固有模態(tài)函數為h_{k}(t),將其賦值給c_{k}(t)

c_{k}(t) = h_{k}(t)

c_{k}(t)剩余原始序列中分離出來节槐,得到新的剩余項:

r_{k}(t) = x_{k}(t) - c_{k}(t)

  • 步4:判斷新的剩余項是否滿足經驗模態(tài)分解的結束條件鲫寄,不滿足將剩余項帶回到步1;滿足則結束經驗模態(tài)分解疯淫。

分解完畢后地来,原始信號可以用n個固有模態(tài)函數 + 1個剩余項的形式表示:

x(t) = \sum_{i=1}^{n}c_{i} + r_{n}


下面給出各步的matlab程序:

功能函數:

% 非主函數: 求極值點個數
% 注意: 若要極大值點數直接輸入x,若要極小值則輸入-x
function n = peaks(x)

[value,local] = findpeaks(x);

n = length(local);  % 只要極值點個數
% 非主函數: 獲得數據的極大值熙掺、極小值包絡線(三次樣條插值后的數據)
function s = getspline(x,t)

N = length(x);

[value,local] = findpeaks(x);

% 原始插值點: 極值點
t1 = t(local);
x1 = x(local);

s = spline(t1,x1,t);
% 非主函數: 判斷當前函數是否為imf —— 零點個數與極值點個數對比
function u = isimf(x)

N = length(x);
u1 = sum( x(1:N-1).*x(2:N) < 0 );  % 零點個數
u2 = peaks(x) + peaks(-x);  % 極大值 + 極小值總點數

if abs(u2-u1) > 1
    u = 0;  % 不是imf函數
else
    u = 1;  % 是imf函數
end
% 非主函數: 剩余信號的單調性判斷(是否整個程序結束)
function u = ismono(x)

u1 = peaks(x)*peaks(-x);  

if u1 ~= 0
    u = 0;  % 非單調: 不存在極大值點或極小值點
else
    u = 1;  % 單調:有一個極值不是0未斑,就不是單調的
end

主調用函數:固有模態(tài)函數用二維矩陣記錄

% 主函數: 經驗模態(tài)分解

clear; clc;

x = xlsread('shuju.xlsx');
x = x(1001:1001+1023)';  % 有效數據長必須是2^n,所以我取1024币绩,最后10幾個點是0
N = length(x);
fs = 100;          % 采樣頻率 = 1/采樣間隔
t = (0:N-1)/fs;   % 時間刻度

imf = [];

num = 1;  % 計數器
xx = x;   % 代替原始數據被操作而已
while ~ismono(xx)
    x1 = xx;
    sd = inf;  % 用sd代替包絡均值為0(<0.01)的條件
    % 當sd不滿足<0.01蜡秽,或x1不是imf函數時,進入while內層循環(huán)
    while (sd > 0.01) || ~isimf(x1)
        s1 = getspline(x1,t);    % 極大值包絡插值結果
        s2 = -getspline(-x1,t);  % 極小值包絡插值結果
        x2 = x1 - (s1+s2)/2;
        
        sd = sum( (x1-x2).^2 )/sum(x1.^2);
        x1 = x2;
    end
    
    imf(num,:) = x1;
    xx = xx - x1;
    num = num + 1;
end

imf(num,:) = xx;  % 最后一個余項也放進去


% 經驗模態(tài)分解出的函數(最后一個是余項)
figure(1);
merge = 0;
[row,col] = size(imf);
for n = 1:row
    % 把經驗分解的內容再加起來 
    merge = merge + imf(n,:);
    % 每一個畫圖
    subplot(row,1,n)
    plot(t,imf(n,:));
    axis([min(t) max(t) -inf inf]);
end
suptitle('經驗模態(tài)分解函數');

經驗模態(tài)分解效果:

圖1:經驗模態(tài)分解得到的固有模態(tài)函數

希爾伯特變換/譜分析

對經驗模態(tài)分解得到的固有模態(tài)函數依次進行希爾伯特變換缆镣,并求它們的3瞬屬性即可芽突。注意:一般這里就不要第一步保留的剩余項了。

每一個固有模態(tài)函數c_{i}(t)可以表示為:

c_{i}(t) = a_{i}(t)cos\varphi_{i}(t)

我們把采樣點時間董瞻、瞬時頻率寞蚌、瞬時振幅放在3維空間里:

H(\omega,t) = Re \left\{\sum_{i=1}^{n}a_{i}(t)e^{j \int {\omega_{i}(t)dt}} \right\} = \sum_{i=1}^{n}a_{i}(t)cos\left(\int {\omega_{i}(t)dt}\right)

注意:最后面一項是根據歐拉公式得到的。

可以看出:時間钠糊、瞬時頻率挟秤、瞬時振幅3者之間是有聯系的!
此時我們就可以做時頻譜分析了抄伍!也就是得到"希爾伯特譜H(\omega,t)"艘刚。

為了方便起見,做譜分析這一步就用世界通用的兩個函數來直接完成截珍!一個是hhtspectrum.m和toimage.m函數攀甚。

emd經驗模態(tài)分解效果:

圖2:emd分解的希爾伯特-換變換時頻譜

ceemdan分解效果:

圖2:ceemdan分解的希爾伯特-黃變換時頻譜

說明:希爾伯特-黃變換最初的理論是采用emd的經驗模態(tài)分解,目前已經改進到采用ceemdan的模態(tài)分解方式岗喉,可以看到改進的方法精度進一步提高了秋度!

后記

參考文獻如下:

  1. 屈梁生, 張西寧, 沈玉娣. 機械故障診斷理論與方法[M]. 西安交通大學出版社, 2009.
  2. 薛雅娟. 地震信號時頻分析及其在儲層含氣性檢測中的應用研究[D]. 成都理工大學, 2014.

參考博客:希爾伯特-黃變換理論介紹

本文所有程序下載地址:希爾伯特-黃變換沈堡。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末静陈,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌鲸拥,老刑警劉巖拐格,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異刑赶,居然都是意外死亡捏浊,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門撞叨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來金踪,“玉大人,你說我怎么就攤上這事牵敷『恚” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵枷餐,是天一觀的道長靶瘸。 經常有香客問我,道長毛肋,這世上最難降的妖魔是什么怨咪? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮润匙,結果婚禮上诗眨,老公的妹妹穿的比我還像新娘。我一直安慰自己孕讳,他們只是感情好匠楚,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著卫病,像睡著了一般油啤。 火紅的嫁衣襯著肌膚如雪典徘。 梳的紋絲不亂的頭發(fā)上蟀苛,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音逮诲,去河邊找鬼帜平。 笑死,一個胖子當著我的面吹牛梅鹦,可吹牛的內容都是我干的裆甩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼齐唆,長吁一口氣:“原來是場噩夢啊……” “哼嗤栓!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤茉帅,失蹤者是張志新(化名)和其女友劉穎叨叙,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體堪澎,經...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡擂错,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了樱蛤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钮呀。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖昨凡,靈堂內的尸體忽然破棺而出爽醋,到底是詐尸還是另有隱情,我是刑警寧澤便脊,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布子房,位于F島的核電站,受9級特大地震影響就轧,放射性物質發(fā)生泄漏证杭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一妒御、第九天 我趴在偏房一處隱蔽的房頂上張望解愤。 院中可真熱鬧,春花似錦乎莉、人聲如沸送讲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哼鬓。三九已至,卻和暖如春边灭,著一層夾襖步出監(jiān)牢的瞬間异希,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工绒瘦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留称簿,地道東北人。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓惰帽,卻偏偏與公主長得像憨降,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子该酗,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355