資源簡介
經驗模態分解是2000年以來以傅立葉變換為基礎的線性和穩態頻譜分析的一個重大突破,它是依據信號自身的時間尺度特征對信號進行分解,無需預先設定任何基函數,這一點與建立在先驗性的諧波基函數和小波基函數上的傅立葉分解與小波分解方法有本質區別。EDM方法理論上可以應用于任何類型信號的分解,因而在處理非平穩及非線性數據上,具有非常明顯的優勢,具有很高的信噪比。

代碼片段和文件信息
function?imf?=?emd(x)
%?Empiricial?Mode?Decomposition?(Hilbert-Huang?Transform)
%?EMD分解或HHT變換
%?返回值為cell類型,依次為一次IMF、二次IMF、...、最后殘差
x???=?transpose(x(:));
imf?=?[];
while?~ismonotonic(x)
????x1?=?x;
????sd?=?Inf;
????while?(sd?>?0.1)?||?~isimf(x1)
????????s1?=?getspline(x1);?????????%?極大值點樣條曲線
????????s2?=?-getspline(-x1);???????%?極小值點樣條曲線
????????x2?=?x1-(s1+s2)/2;
???????
????????sd?=?sum((x1-x2).^2)/sum(x1.^2);
????????x1?=?x2;
????end
???
????imf{end+1}?=?x1;
????x??????????=?x-x1;
end
imf{end+1}?=?x;
%?是否單調
function?u?=?ismonotonic(x)
u1?=?length(findpeaks(x))*length(findpeaks(-x));
if?u1?>?0
????u?=?0;
else
????u?=?1;
end
%?是否IMF分量
function?u?=?isimf(x)
N??=?length(x);
u1?=?sum(x(1:N-1).*x(2:N)?0);?????????????????????%?過零點的個數
u2?=?length(findpeaks(x))+length(findpeaks(-x));????%?極值點的個數
if?abs(u1-u2)?>?1
????u?=?0;
else
????u?=?1;
end
%?據極大值點構造樣條曲線
function?s?=?getspline(x)
N?=?length(x);
p?=?findpeaks(x);
s?=?spline([0?p?N+1][0?x(p)?0]1:N);
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-11-21?19:51??EMD\
?????文件????????1081??2017-11-21?19:47??EMD\emd.m
?????文件?????????912??2017-11-21?19:50??EMD\findpeaks.m
?????文件?????????235??2017-11-21?19:48??EMD\HilbertAnalysis.m
?????文件????????1688??2017-11-21?19:49??EMD\plot_hht.m
?????文件????????1114??2017-11-21?19:51??EMD\test.m
- 上一篇:光纖激光器仿真
- 下一篇:比例導引理想彈道仿真Matlab代碼
評論
共有 條評論