資源簡介
本程序為使用matlab編寫的EMD的實現程序,并且在程序中對提取包絡線的三次樣條函數進行了改進,利用本程序可以提高EMD的使用精度。本人多次使用本程序或在本程序的基礎上改進新算法,并發表學術論文。

代碼片段和文件信息
function?imf?=?emd(x)??????????????????????????%EMD的實現函數
%?Empiricial?Mode?Decomposition?(Hilbert-Huang?Transform)
%?imf?=?emd(x)
%?Func?:?findpeaks
x???=?transpose(x(:));
imf?=?[];
while?~ismonotonic(x)
???x1?=?x;
???sd?=?Inf;
???while?(sd?>?0.1)?|?~isimf(x1)
??????s1?=?getspline(x1);????????????????????????%s1是極大值包絡
??????s2?=?-getspline(-x1);??????????????????????%s2是極小值包絡
??????x2?=?x1-(s1+s2)/2;?????????????????????????%x2是原信號減去極大值包絡和極小值包絡之和的平均值之后的剩余部分
??????
??????sd?=?sum((x1-x2).^2)/sum(x1.^2);???????????%極大值與極小值包絡平均值的平方和與原信號的平方和之比小于0.1,則認為滿足IMF的第二個條件。
??????x1?=?x2;
???end
???
???imf{end+1}?=?x1;???????????????????????????????%x1是個向量
???x??????????=?x-x1;
end
imf{end+1}?=?x;
%?FUNCTIONS
function?u?=?ismonotonic(x)???????????????????????????????????????%判斷X是否是單一分量
u1?=?length(findpeaks(x))*length(findpeaks(-x));
if?u1?>?0?u?=?0;
else??????u?=?1;?end
function?u?=?isimf(x)?????????????????????????????????????????????%判斷X是否是IMF分量
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;?????????????????????????????????????????%極值點數與零點數相等或相差一個時,為IMF分量
else??????????????u?=?1;?end?????????????????????????????????????%findpeaks(x)得到極大值點,findpeaks(-x)得到極小值點
function?s?=?getspline(x)?????????????????????????????????????????%三次樣條插值得到極大值點的包絡
N?=?length(x);
p?=?findpeaks(x);
s?=?spline([0?p?N+1][0?x(p)?0]1:N);
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-03-30?10:35??EMD-Hermite\
?????文件????????1690??2011-02-28?16:17??EMD-Hermite\emd.m
?????文件????????1424??2011-03-01?09:37??EMD-Hermite\EMD_Hermite.m
?????文件????????3406??2011-03-01?16:07??EMD-Hermite\EMD_Hermite_tst.asv
?????文件????????3406??2011-03-10?15:20??EMD-Hermite\EMD_Hermite_tst.m
?????文件????????3865??2011-03-01?14:41??EMD-Hermite\EMD_Hermite_tst_1.m
?????文件????????3409??2011-03-01?16:13??EMD-Hermite\EMD_Spline_tst.m
?????文件?????????382??2011-03-01?11:29??EMD-Hermite\point.m
?????文件?????????652??2011-02-25?10:36??EMD-Hermite\subHermite.m
?????文件????????1240??2011-03-01?11:15??EMD-Hermite\subHermite_test.asv
?????文件????????1234??2011-03-01?11:22??EMD-Hermite\subHermite_test.m
?????文件?????????468??2011-02-28?15:05??EMD-Hermite\tst.m
?????文件???????66732??2011-03-01?16:07??EMD-Hermite\unti
評論
共有 條評論