2009年3月18日 星期三

HHT – Hilbert Huang Transform

Key words : Hilbert-Huang transform, Hilbert spectrum, Hilbert transform

這個演算法,是利用Empirical Mode Decomposition(EMD)將原訊號拆解成數個Intrinsic Mode Functions (IMF)。今天我整理一下以音高為D4的小提琴為輸入所做的實驗結果。



整個 Hilbert Analysis流程如下圖所示(謝志敏, 2007)。

image

image image

一開始先做 EMD,先找出整段訊號的 local maxima & minima,然後用 cubic spline line分別造出envolope,最後再將這兩個envelope取平均,即為第一個分量;依此類推,直到這個平均後的值趨近於水平線時,該訊號即為第一個 IMF。收斂條件依定義為一名為 SD 的式子,不過實驗的程式是執行 10 次 iterations。

小提琴做完的結果如下圖所示。由上至下依次為原音(當作是IMF 1)、IMF 2, 3, 4, 5, 6。音檔在這裡,可直接下載。

image

聽過音檔後,大家應該不難發現,IMF 2 的頻率較高,IMF 5 聽起來像是心跳聲,噗通一下就沒了。其實依傳統EMD作法,解出來的 IMF 順序,其瞬時頻率是由高往低的,有點類似像 band pass filter。由圖可知,IMF 4的頻率是最接近原音音高的地方,所以能量最大,而 IMF 5只剩起頭音的部份有聲音。

小結:

IMF 5 只有起頭音跟後面一小段(?)有訊號,可能會是我要做 noise modeling 時所需要的元素。而年前老師要我改變 maxima & minima envelope的擷取方式,希望能先抓出較完整的 sine wave,目前做出來效果並不理想,一來是envelope要抓得很完美不好做,二來是 IMF 依舊有從高頻先被取出來的特性。

投影片:下載

2009/02/20 Progressive Report

目前的實驗是先將頻率考慮進去,求得週期後,先從任意為起點,往後的 1 週期內找 local maximum,此點即為 peak value。下個起點,則由目前的 peak value 位置往後移動 2/3 週期,不直接移動一整個週期是怕有誤差,一直重複上列動作就可以找出所有 peak value;同理,也可以找出所有 valley value,最後結果如下。

1

上圖的藍色 envelope 是原訊號,紅色 envelope 則是有 peak & valley 為點作 spline function 而成的結果。將藍色減掉紅色,就是下圖的藍色。

從上圖來看,紅色 envelope 還滿貼近原訊號的,本以為扣掉後剩下的訊號會變很少,但事與願違。原因是出在 spline function 造出來後雖然很貼近,但仍有些區域是差得較遠的,紅直線跟青直線分別是原本的 peak & valley 所對照下來的位置,這兩個位置扣掉後都是 0 ,但其他位置卻有相差到 +1 / –1 的大小。

接下來,我將試著將半週期內所有的 peak & valley,套用 monotonic increasing/decreasing 的條件後再看看結果。

0225-Memo:

  • 觀察這個失敗的實驗,看看是否做無限迴圈後能擷取出f0。
  • 找論文看有沒有人用HHT做修改來分析聲音。

2009/03/03 Progressive Report

我先給大家看一下上次提到的「半週期內所有的 peak & valley,套用 monotonic increasing/decreasing 的條件」的結果。

1

這個訊號的週期約在148-150個sample左右,f0差不多在297-300。大家可觀察到無論是紅點(peak)還是黑點(valley),從最大值開始算半個週期內皆呈現 monotonic decreasing,下個半週期則呈現 monotonic increasing。粉紅色線為紅點及黑點所建連線的平均線。

不過,藍線減掉紅線的結果如下圖。

2

很明顯的,300hz 的波形還是有留一些能量,原因是因為粉紅色線的極值沒有緊緊貼在原訊號的極值上,導致減掉後仍留有能量,相較於其他波形的能量甚至還滿大的。

隔天,我試著將原訊號的極值同時加到peak/valley兩邊的陣列資料中,這樣照 spline function 時至少在極值的地方會重疊。結果如下圖。

image

原訊號的頻譜:                             平均線的頻譜:

image image

原訊號 - 平均線

image

已知問題及解法:

做完第一次後,剩下的訊號其300Hz, 600Hz, 900Hz 的能量明顯掉了許多,因此第二次再做時,不能再以原本的週期來作為 monotonic inc/dec 的判斷,否則造出來的spline function會有爆走問題,如下圖。解法: 先用簡單的pitch detection算出目前能量較大的週期後再做第二次實驗。

第二次                                       第三次

image image

Bug: 找出在做第一次時16000-21000, 25000-33000 區域的振幅大小有一點小爆走的原因。(而且還只有下方有爆走)

image

2009/03/06

上面的Bug 解決了,原因出在有些區域的「最小極」沒有被列入spline function points,導致造出來的波形在某些情況下會有點誤差。

雖然問題解了,可是出來的結果還是跟上圖差不多,為了方便解釋一下原因請看下圖。

image

圖中有兩個紅圈圈,紅點跟黑點有全部找到,可是左紅圈內的結果卻比右紅圈內的結果較好,why? 其實這就是訊號的特性,左紅圈內的黑點較集中,所以 spline function 造出來的envelope較貼近原訊號,但右紅圈內的黑點較分散,所以會有波形振幅不一的情況。

這個「現象」目前我不將它當成「問題」,之前之所以成為「問題」的原因是在16000-18000這段的頻譜,在經過三、四次loop後高頻的能量不減反增,但現今已經沒這問題。這裡補一下圖:

0303版,第四個loop後剩下的波形,及27825點該frame的頻譜:

image image

0306版的:

image image

我將繼續往下做,讓週期是 adaptive 的,再看看結果如何。

2009/03/10

老師在3/7的留言中提出一個疑問: 「經過第一次decomposition後, peaks降低了, 可是noise floor也變大了. 這是甚麼原因呢?」

我紀錄一下大家的看法。

老師:

Spline function 是採用 non-uniform sampling 的作法,跟 Fourier Transform 觀念背道而馳,因而可能造成這種現象。(ps. 這邊不太懂 non-uniform sampling 可能造成哪些結果)

Spline function本身main lobe不夠尖,side lobe也不夠小,換成 sinc function 可能會比較好。

DNA:

有時候別太相信 Cooledit …,它的db scale不知道到底對象是誰。

Showmin:

我翻了下課本,發現兩個訊號點對點相加時,能量本來就有可能會大於在頻率上的點對點相加,只要兩者 FFT 出來的實部係數or虛部係數異號。

|x1| + |x2| >= |x1+x2|

小結: 這種現象會不會影響結果還不知道,先紀錄一下。

最後貼一張圖,我在範圍介於 +-10 之間造一個 sinc(x),而且只取15點。然後,用這15點座標來分別造出新的 sinc 跟 spline,出來的結果如上圖,spline function較平緩。下圖則是上圖做 abs(fft(x)) 的結果。

sinc spline

2009/03/17

1. ACF用來判斷pitch period不適用於我們的實驗,因為我們無法將某一pitch的能量完全扣除乾淨。

2. 接著我讓pitch period隨著loop數減少,前兩圈的結果如下。

image image

即使我將起始點位移的距離改小,還是有一些點沒有找到。

image

是的,這是bug,解決方法很簡單:在找一個週期內的極值時,順手將這個值加到 set 中。之前是只有在判斷 monotonic increasing/decreasing 時才會加進去。當然,在這種情況下極值可能會被加到不只一次,但不影響程式執行的。最新結果如下:

image

3. spline function effect

這個問題前面就有提過,就是兩個點距離如果有點遠,但值卻差不多大,則spline function會凸出來。上面的結果雖是正常,但只要換到其他時間點來觀察,依然有問題。

image

這個圖的點其實都有找對了,但卻因 spline function 的特性造成有凸出來的 effect。

 

 

投影片下載:這裡

DNA:

何不試著在原訊號後面較穩定的地方找一段完整週期訊號,以此為 template,然後將原訊號拿來減掉這個template,template的能量可隨著該frame而調整。

2009/03/18

由上面第3點的結果我們可以發現,在訊號的能量都差不多時(noise-like),用新方法是滿容易因spline function爆走的,所以老師提供一個實驗方式,要我第一圈先用新方法,第二圈用EMD,看看做完EMD後能否再讓訊號「有起伏」。這個答案是肯定的,請看圖。

第1圈用新方法求得的平均線。

image

第二圈改用EMD,下圖為EMD做10次後的結果。

image

做完EMD後,用原訊號扣除上圖即為下圖。很明顯下圖的波形「有起伏」,那理論上再回頭用新方法來找應該很棒,可是為何平均線會找得沒有第一次好呢?這是因為第三圈的週期只剩 150/3 = 50,點的距離較寬而無法將最大值納入 min set,反之亦然,也無法將最小值納入 min set,所以平均線雖然沒有爆走,但卻沒那麼貼。

image

如果週期維持在150的話就會好多了,當然一樣會有spline function effect,而且點距離越寬越明顯。

image

第四圈,再做 EMD。

image

第五圈,再回頭用新方法。此時可以發現用新方法或用 EMD 效果都差不多了。

image

目前有些疑問,再找時間跟老師討論。

30 則留言:

匿名 提到...

我要將我要你做的方法取名H3T = Harmonic HHT.

我奇怪的是假如你照我說的做, 應該會取出不錯的接近sine的訊號. 我的假設是第一次取出的是接近fundamental的頻率的訊號. 我們可以繼續將此一訊號做HHT or H3T以取得非fundamental的部份.

而原訊息去掉第一次取出的訊號後, 再設法取出2nd partial. 然後依此類推.

你是這樣做的嗎? 我推論這樣做會有效的原因是因為已知訊號的pitch了呀!

我明天下午約4:30可以跟你談一下嗎?

87showmin 提到...

如果用spline的方式來造envelope,那要產生出純 sine wave 是不太可能做到的,用Sinusoidal Modeling應該較容易。下午4:30我會在,屆時再討論好了。

匿名 提到...

我的用意並不在得到pure sine, 這意義不大, 因為訊號本來就是會變的, 要不然simusoidal modeling就夠了.

以我們對HHT的用途來說, 我想我們要的是去除掉"穩定"的訊號, 一個接近sine但不是sine的就應該夠了.

我們下午再聊

匿名 提到...

看來任何工具要好好地照我们的希望分析音樂訊號都不是那麼容易. Sinusoidal Modeling如此, HHT也一樣.

不過sinusoidal modleing在理論上的限制比較大, 對於這類dynamic signals而言, 還是會有一些問題, 畢竟沒有live signals是真正接近periodic的.

我建議HHT在取點時採用peak/valley的中線, 但是加入monotonically increasing與monotonically decreasing的原因是在第一次的EMD時, 設法去除每一週期裡因為higher partial能量過高而造成的上上下下. 原則上, 用一般的LPF也可以達到同樣的效果, 不過這樣的filter一樣要試驗才找得到好用的, 不過我猜測應該不會太好找出與上述的方法效果類似的LPF. 我建議showmin過一陣子, 等現在的實驗告一段落後來試一下. 你可以想一下為什麼用一般的LPF會難以得到類似的效果嗎? 提醒你, 我說的不一定對, 你要自己試過才會變成你自己的經驗喔!

而要用上述方式主要是因為這樣才會跟原本的HHT的EMD方式精神上契合. 這其實像是一般EMD的第一次取出的訊號的變形. 有興趣的人可以想一想為什麼.

showmin, 請加油!

87showmin 提到...

謝謝老師所下的註解,確實在實作的過程式讓我們知道,單純取 peak/valley 來造 envelope 雖然波形較單純,但跟原訊號相減後卻不如預期;而原本 EMD 的作法能確保相減後的值會越來越接近 0,但造出來的波形卻又包含太多 partial 的能量。

接下來的結果如能像預期般,我會再觀察跟LFP的差異。

SCREAMLab 提到...

我們昨天下午後來又談了很多, 你可以回一下我們講了哪些嗎?

sorry, 我開始不相信我的記性了.

87showmin 提到...

我的印象是,那個下午談的是這實驗成功後的後續動作,例如我們的方法如能找到很準的f0及其partials,便可進一步apply在各種訊號的分析上。我們並沒有討論到其他的實驗方法,因此現階段以趕實驗為優先,能平行做的就是找論文這部份。

匿名 提到...

請補充針對Harmonic signal的可能的decomposition的方法簡述一下.

另外那個做到一半出來的bug請你解釋一下.

還有, 有bug你要看出來, 也要說出來, 要不是我去你那邊看結果, 只看你在meeting裡show的, 還以為ok了. 你這樣, 以後會出大麻煩的.

也就是不能只show好的部分.

匿名 提到...

你是說用同樣的undamental來持續decompose下去, 能量不會再增加嗎?

87showmin 提到...

是的,我已將之前與現在的結果補上去了。

匿名 提到...

我看了這波形, 有壹點疑問.

當decomposition多次以後, noise floor變高很多, 3/3那天的結果的noise floor比較低, 可是當你做得看起來比較對時, 也就是3/6的, noise floor異常地變大了.

我記得original signal是一根一根很sharp的peaks, noise floor很低, 可是經過第一次decomposition後, peaks降低了, 可是noise floor也變大了. 這是甚麼原因呢?

SCREAMLab 提到...

喔喔!

基本上, Fourier transform的某些特性, 即使是Non-uniform sampling的資料, 還是必須尊守, 只是因為公式推導起來會不一樣, 所以一些特性需要修正, 而且很複雜, 我還是在研究生的時代才看過, 但是現在沒人用了.

請你做兩件事. 一是用不同周期繼續下去分解, 看會怎樣. 二是修改interpolation function.

我又再想, 也許這是因為我們的取點方式所造成的也不一定. 總之要一步一步探討下去.

好想永遠這樣 提到...

這是個有趣的topic,我手癢試著用我之前在頻率上找peak的方法,找出peak/valley/peak/...,再加上三次方程interpolation,單純看重建波形似乎還不錯,不過頻譜分析就很糟了,跑出不存在的頻率,interpolation的方法還是蠻關鍵的。
我觀察了一下,Harmonic components在時域的一個周期間似乎是會產生某種peak-valley-peak關係的。

我把測試音檔跟結果上傳到ftp上,不過不知道怎麼加link,sorry。

SCREAMLab 提到...

維城:

我去看了一下server, 沒發現你的上傳資料. 我本來要幫你post一下的.

So Far, showmin的結果是取點的關係很重要, 而interpolation假如採用現在showmin的做法, 還OK, 只是如我們所說, noise floor變高了. 有沒影響還要觀察.

至於原來的EMD實在是太Empirical了, 要直接分出對我們有用的訊號實在有點給他不可能. 假如showmin的方法可行, 那麼polyphonic pitch detection也許會有另外的天地.

My question is: 這想法這麼單純, 難道沒人試過? 要不然就是根本行不通. 所以我請showmin趕快去找論文, 但願這幾天會有結果.

87showmin 提到...

維城:

那天騎車載你去吃尾牙的路上,你提供的方法我已經有試過加入到程式中,估且稱之為 2-order peak extraction ? 這樣做確實可以不去care中間那些小peak,而找到概觀上的大peak。不過,後來因為有加入了週期的條件,在一個週期內只有一組peak/valley的前提下,我便暫時將這個方法註解掉囉。還是謝謝你的意見。:D

老師:

從去年兩次AES convention paper list中,我發現有許多以sinusoids為基礎而發展的paper,是否代表最近大家才開始回頭去思考 time-domain analysis/synthesis 的可行性呢? anyway我會盡快找出類似的paper。

好想永遠這樣 提到...

我都是用peak of peak來稱呼我用的方法,也許可以稱peak extraction of order-N (同時也可以找valley of valley,所以也叫PV analysis/decomposition?),基本上,之前在頻譜上使用是想建立一個hierarchical structure(HST?),所以是可以一直找到"THE ONE PEAK/VALLEY",有點扯遠了。
話歸原題,我目前試作程序,是在peak/valley extraction of order-2後,做了一次掃描,讓peak跟valley是交替的,然後再做interpolation。
我感覺找到peak/valley之後的"解釋"會大大地影響decomposition的結果,因為依照這個解釋去做interpolation就可能增加了新的訊號(noise?);我提到的一點觀察,可以使用cooledit來產生,由single F0開始,加上2nd harmonic,再加上3rd harmonic,二個peak間的valley會由中間往後一個peak靠近,peak跟valley間的距離與harmonic個數會有個關係,當然是在蠻嚴格的假設下...

ps:我把檔案放到backup目錄了20090312-PVdecomposition test 1-[Audio][Analysis][Synthesis]-bff.tar。

SCREAMLab 提到...

呼應showmin的話, sinusoidal analysis/synthesis在最近確實多了起來, 前一兩年, 我們就看過用sinusoidal 來做壓縮了, 雖然時間要很久, 可是效果很棒, 去年看Hannover大學用Hybrid方法做coding, 其中也有sinusoidal在內. 加上Serra在西班牙的那幫, 期觀念也漸漸備用在codec, 差別只是time or frequency domain而已.

我就說過, 當computing power大到一定的地步, Time domain sinusoidal會是一個powerful的tool, 就像Nvidia的人說, 當有了GPU, frequency domain convolution becomes unnecessary.

我記得1994年, Julius說過, 未來audio compression會是做synthesis的人的天下, 15年過去了, AAC還雄霸天下, 但是, 我們似乎稍微看到Julius所說的事可能會實現了.

我的看法是, 用傳統的coding方式, source還是原source, 但試用synthesis的觀點, compressed bit stream can be anything you want it to be.

唉!Julius真是仙貝中的仙貝, 還好他現在懶了, 要不然我還有得混嗎?

SCREAMLab 提到...

維城好:

我會請showmin把你的結果post 上來.

我依稀記得那時你這樣做是為了在coding上下功夫, 可以在幫我回意一下當初你要這麼做的動機嗎?

Indeed, "找到peak/valley之後的"解釋"會大大地影響decomposition的結果".

and

"可以使用cooledit來產生,由single F0開始,加上2nd harmonic,再加上3rd harmonic,二個peak間的valley會由中間往後一個peak靠近,peak跟valley間的距離與harmonic個數會有個關係"

這個說法與我現在請showmin試的觀念很接近. 我們的終極目標是提出一套decomposition 的方法 for Harmonic or Near-Harmonic signals, 而不再是Empirical的方式.

進一步用HT找到pitches, 然後for Polyphonic musical signals. 以及source separation.

我期許, 要是這樣的decomposition可以找到數學上的解釋, 那會是Musical Signal Analysis這一, 二十年來最大的貢獻之一.

唉! 我想太多了.

SCREAMLab 提到...

per 3/18 showmin's demo.

That's woderful!! Keep going! I lookd forward seeing new results.

匿名 提到...

你好:
我是中央大學的一個博士生,最近也在做HHT的研究,我想提供些意見,你是否有用過eemd來作分解,原理是加入微小白噪音(scale可能要自己試過)再用emd分析然後多加幾次再看看imf數目是否以達一定數目,最近分析結果很爛所以到處逛逛,希望有一起對這方面激盪的同好。(老實說做得很灰心)
我的msn:drogancheung@msn.com
有興趣可以多交流交流

SCREAMLab 提到...

Hi:

我想這是一個不容易的問題. HHT有許多好用之處, 但是並非不修改其架構就可以取得好結果, 我們還在試驗當中, 您說的狀況當然也是我們要試驗的其中之一, 如有具體的成果, 我們會在這裡公佈的. 也請您不吝發表您做過的實驗與看法.

87showmin 提到...

我比較想知道你是拿什麼訊號來做分析呢?所謂結果不好是指?我們在做實驗的過程中雖然也是下載中央大學數據中心的matlab code來用,但參數 Std = 0, NE = 1,也就是純用原本的EMD。

匿名 提到...

中大有提供 EEMD,透過 white noise 的協助,可以減少資料極值的麻煩。不過 white noise 會按照能量分配到每一層 imf,因此必須進行可能要數十次的 emd來平均以消去殘留的 white noise。

另外要做 emd,是要使用 Hilbert Transform 進行調適性的瞬時頻率分析。若是僅是用在聲音(vibration)的分解,或許使用 FFT進行頻譜分解,或是 wavelet進行瞬時頻譜應該都不會太差。

匿名 提到...

what computer programme did u use to do the HHT anaylsis ?

87showmin 提到...

Did you mean "which programming language"? I used Matlab to do it.

匿名 提到...

Can you explain the following three conditions for the IMF please... i don't understand it. Please Please help.... 3Q

R(t)-m1(t)=h1(t)
The resulting component h1(t) is an IMF if it satisfies the conditions: (i) h1(t) is free of riding waves. (ii) It displays symmetry of the upper and lower envelopes with respect to zero.
(iii) The numbers of zero crossing
and extremes are the same, or only differ by 1.

Unknown 提到...

hey mate, do you still have that mathlab codes ? if so, can you send it to yatkit@gmail.com. cheers

87showmin 提到...

As it was described in the paper, all these conditions was applied for consistency and stableness of h1(t) which formed the IMFs. The EMD process was proposedto verify these conditions iteratively to make sure that the IMFs are nearly orthorgonal. Maybe you can try another conditions to do this.

Unknown 提到...

hi again,

is there any good books or articles to read for the HHT method ? i don't really understand it ...

87showmin 提到...

Dear Thomas,

You can easily find the matlab code by google with the key word "EEMD" or "中央大學數據分析中心". There are also some HHT papers you can search by google scholar.