2013-09-01 35 views
0

我正在運行小波變換(cmor)來估計信號中存在的阻尼和頻率.cmor有兩個參數,我可以更改它們以獲得更準確的結果。中心頻率(Fc)和帶寬頻率(Fb)。如果我構造一個頻率很低,阻尼很小的信號,那麼我可以測量我的估計誤差(圖2)。但在實際情況下,我有一個信號,我不知道它的頻率和阻尼,所以我不能測量這個錯誤。所以這裏的一個朋友建議我重建信號並通過測量原始和重建之間的差異來發現錯誤信號e(t)= | x(t)-x ^(t)|。 所以我的問題是:
有沒有人知道更好的函數來找到重建和原始信號之間的誤差,而不是e(t)= | x(t)-x ^(t)|。
我可以使用GA來搜索Fb和Fc嗎?或者你知道更好的搜索方法?
Hope this picture shows what I mean, the actual case is last one. others are for explanations我可以運行GA來優化小波變換嗎?

在此先感謝

回答

0

你說你不知道的錯誤,直到運行小波變換後,但是這很好。您只需爲GA生成的每個人運行小波變換。那些錯誤較低的人被認爲是更合適的,並以更大的可能性存活下來。這可能非常緩慢,但至少在概念上,這是主意。

讓我們定義一個染色體數據類型,其中包含一對編碼值,一個用於頻率,另一個用於阻尼參數。不要太擔心他們現在的編碼方式,如果你願意的話,假設它是兩個雙打數組。重要的是你有辦法從染色體中獲得數值。現在,我只是通過名稱來引用它們,但是可以用二進制來表示它們,例如雙精度數組等等。染色體類型的另一個成員是存儲其適應度的雙精度值。我們可以很明顯地產生隨機頻率和阻尼值,所以我們來創建一個說100個隨機染色體。我們不知道如何設置他們的健身,但沒關係。首先將它設置爲零。爲了設置真實的適應值,我們將不得不爲每個100個參數設置運行一次小波變換。

for Chromosome chr in population 
    chr.fitness = run_wavelet_transform(chr.frequency, chr.damping) 
end 

現在我們有100個可能的小波變換,每一個計算錯誤,儲存在我們的一套名爲​​。剩下的就是選擇適合人羣的成員,培育它們,並讓人口中的鉗工成員和後代能夠存活下一代。

while not done 
    offspring = new_population() 
    while count(offspring) < N 
     parent1, parent2 = select_parents(population) 
     child1, child2 = do_crossover(parent1, parent2) 
     mutate(child1) 
     mutate(child2) 
     child1.fitness = run_wavelet_transform(child1.frequency, child1.damping) 
     child2.fitness = run_wavelet_transform(child2.frequency, child2.damping) 
     offspring.add(child1) 
     offspring.add(child2) 
    end while 
    population = merge(population, offspring) 
end while 

還有一堆不同的方式做單個步驟一樣select_parentsdo_crossovermutatemerge這裏,但GA的基本結構保持幾乎相同。你只需要爲每一個新的後代運行一個全新的小波分解。

+0

感謝您的回答。 \t 我對GA和搜索方法不夠了解。我剛剛編輯了我的帖子,以確保我的問題清楚,請查看我的編輯,並幫助我實施GA或其他搜索方法。感謝負載。 – Electricman

+0

我認爲你朋友的想法應該沒問題。所有你需要的遺傳算法都是一種說法,一種解決方案比另一種解決方案更好,並且似乎最小化重建誤差對此很不錯。 GAs不是唯一的選擇 - 簡單的本地搜索方法可以有效,也可以進行模擬退火或禁忌搜索,但鏈接圖中的整體圖片對我來說看起來很合理。 – deong

+0

謝謝。你會解釋一下這些搜索方法嗎?或者介紹一些我可以學習的東西。 – Electricman